package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
l := make([]int, n+1)
r := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &l[i], &r[i])
}
heads := []int{}
for i := 1; i <= n; i++ {
if l[i] == 0 {
heads = append(heads, i)
}
}
tails := make(map[int]int)
for _, h := range heads {
t := h
for r[t] != 0 {
t = r[t]
}
tails[h] = t
}
for i := 0; i+1 < len(heads); i++ {
a := heads[i]
b := heads[i+1]
ta := tails[a]
r[ta] = b
l[b] = ta
}
for i := 1; i <= n; i++ {
fmt.Fprintln(out, l[i], r[i])
}
}