在最近提出的 Visual Python++ 编程语言中,一个语句块被表示为一个字符矩形,其左上角位于第 $r_1$ 行第 $c_1$ 列,右下角位于第 $r_2$ 行第 $c_2$ 列。所有满足 $r_1 \le r \le r_2$ 且 $c_1 \le c \le c_2$ 的位置 $(r, c)$ 处的字符都被视为属于该块。在这些位置中,满足 $r = r_1$ 或 $r = r_2$ 或 $c = c_1$ 或 $c = c_2$ 的位置被称为边界。
语句块可以嵌套(矩形包含在其他矩形中),嵌套层级不限。在一个语法正确的程序中,任意两个语句块要么是嵌套的(一个包含在另一个中),要么是不相交的(互不重叠)。在这两种情况下,它们的边界都不能重叠。
程序员不需要画出典型程序中包含的许多矩形——这太耗时了,Visual Python++ 也就没有机会成为下一门 ICPC 编程语言。因此,程序员只需要在矩形的左上角放置一个字符 r,在右下角放置一个字符 j。解析器会自动匹配相应的角,以获得程序的嵌套结构。
你们团队刚刚获得了一份为期五小时的合同,负责开发解析器的这一部分。
输入格式
输入的第一行包含一个整数 $n$ ($1 \le n \le 10^5$),表示角对的数量。接下来的 $n$ 行,每行包含两个整数 $r$ 和 $c$ ($1 \le r, c \le 10^9$),指定程序中存在一个位于第 $r$ 行第 $c$ 列的左上角。随后有 $n$ 行,以同样的方式指定右下角。所有角的位置都是不同的。
输出格式
输出 $n$ 行,每行包含一个整数。第 $i$ 行的数字 $j$ 表示第 $i$ 个左上角和第 $j$ 个右下角构成一个矩形。左上角和右下角分别按照它们在输入中出现的顺序从 $1$ 到 $n$ 进行编号。输出必须是 $1$ 到 $n$ 的一个排列,使得匹配结果形成正确嵌套的矩形。如果存在多个有效的匹配,则接受其中任何一个。如果不存在这样的匹配,则输出 syntax error。
样例
样例输入 1
2 4 7 9 8 14 17 19 18
样例输出 1
2 1
样例输入 2
2 4 7 14 17 9 8 19 18
样例输出 2
1 2
样例输入 3
2 4 8 9 7 14 18 19 17
样例输出 3
syntax error
样例输入 4
3 1 1 4 8 8 4 10 6 6 10 10 10
样例输出 4
syntax error