← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type Interval struct {
	L, R int64
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)

	intervals := make([]Interval, 0, n)

	for i := 0; i < n; i++ {
		var s, d int64
		fmt.Fscan(in, &s, &d)

		start := s
		end := s + d - 1
		conflict := false
		for _, iv := range intervals {
			if max(start, iv.L) <= min(end, iv.R) {
				conflict = true
				break
			}
		}

		if !conflict {
			fmt.Fprintln(out, start, end)
			intervals = append(intervals, Interval{start, end})
		} else {
			sort.Slice(intervals, func(i, j int) bool {
				return intervals[i].L < intervals[j].L
			})

			bestStart := int64(-1)
			if 1+d-1 < intervals[0].L {
				bestStart = 1
			} else {
				found := false
				for j := 0; j < len(intervals)-1; j++ {
					if intervals[j].R+d < intervals[j+1].L {
						bestStart = intervals[j].R + 1
						found = true
						break
					}
				}
				if !found {
					bestStart = intervals[len(intervals)-1].R + 1
				}
			}
			fmt.Fprintln(out, bestStart, bestStart+d-1)
			intervals = append(intervals, Interval{bestStart, bestStart + d - 1})
		}
	}
}

func max(a, b int64) int64 {
	if a > b {
		return a
	}
	return b
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}
```