```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
}
```