你有 $n$ 个栈 $r_1, r_2, \dots, r_n$。每个栈包含一些范围在 $1$ 到 $n$ 之间的正整数。
定义以下函数:
function init(pos):
stacks := an array that contains n stacks r[1], r[2], ..., r[n]
return get(stacks, pos)
function get(stacks, pos):
if stacks[pos] is empty:
return pos
else:
new_pos := the top element of stacks[pos]
pop the top element of stacks[pos]
return get(stacks, new_pos)你想知道 init(1), init(2), ..., init(n) 返回的值。
请注意,在这些调用期间,栈 $r_1, r_2, \dots, r_n$ 不会发生改变,因此对 init(1), init(2), ..., init(n) 的调用是相互独立的。
输入格式
输入的第一行包含一个整数 $n$ ($1 \le n \le 10^5$) —— 数组 $r$ 的长度。
接下来的 $n$ 行,每行包含多个整数。第一个整数 $k_i$ ($0 \le k_i \le 10^5$) 表示第 $i$ 个栈中的元素个数,接下来的 $k_i$ 个正整数 $c_{i,1}, c_{i,2}, \dots, c_{i,k_i}$ ($1 \le c_{i,j} \le n$) 表示第 $i$ 个栈中的元素。其中 $c_{i,1}$ 是栈底元素。
在每个测试点中,$\sum k_i \le 10^6$。
输出格式
你需要输出 $n$ 个值,其中第 $i$ 个值是 init(i) 返回的值。
样例
输入样例 1
3 3 1 2 2 3 3 1 2 3 1 2 1
输出样例 1
1 2 2
输入样例 2
5 5 1 2 4 3 4 6 1 2 5 3 3 4 6 1 1 4 4 4 2 9 3 1 4 2 3 5 5 1 2 4 4 4 1 3
输出样例 2
1 1 1 1 1
说明
在第一个样例中:
当调用
init(1)时,设置stacks := [[1,2,2],[3,1,2],[1,2,1]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1, 2], [3, 1, 2], [1, 2, 1]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 2,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2], [3, 1], [1, 2, 1]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 1,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2], [3], [1, 2, 1]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1], [3], [1, 2, 1]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 3,并弹出stacks[2]的栈顶元素,使得stacks变为[[1], [], [1, 2, 1]],然后调用get(stacks, 3)。stacks[3]非空,设置new_pos := 1,并弹出stacks[3]的栈顶元素,使得stacks变为[[1], [], [1, 2]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 1,并弹出stacks[1]的栈顶元素,使得stacks变为[[], [], [1, 2]],然后调用get(stacks, 1)。stacks[1]为空,返回1。
当调用
init(2)时,设置stacks := [[1,2,2],[3,1,2],[1,2,1]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 2,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2, 2], [3, 1], [1, 2, 1]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 1,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2, 2], [3], [1, 2, 1]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1, 2], [3], [1, 2, 1]],然后调用get(stacks, 2).stacks[2]非空,设置new_pos := 3,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2], [], [1, 2, 1]],然后调用get(stacks, 3)。stacks[3]非空,设置new_pos := 1,并弹出stacks[3]的栈顶元素,使得stacks变为[[1, 2], [], [1, 2]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1], [], [1, 2]],然后调用get(stacks, 2)。stacks[2]为空,返回2。
当调用
init(3)时,设置stacks := [[1,2,2],[3,1,2],[1,2,1]],然后调用get(stacks, 3)。stacks[3]非空,设置new_pos := 1,并弹出stacks[3]的栈顶元素,使得stacks变为[[1, 2, 2], [3, 1, 2], [1, 2]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1, 2], [3, 1, 2], [1, 2]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 2,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2], [3, 1], [1, 2]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 1,并弹出stacks[2]的栈顶元素,使得stacks变为[[1, 2], [3], [1, 2]],然后调用get(stacks, 1)。stacks[1]非空,设置new_pos := 2,并弹出stacks[1]的栈顶元素,使得stacks变为[[1], [3], [1, 2]],然后调用get(stacks, 2)。stacks[2]非空,设置new_pos := 3,并弹出stacks[2]的栈顶元素,使得stacks变为[[1], [], [1, 2]],然后调用get(stacks, 3)。stacks[3]非空,设置new_pos := 2,并弹出stacks[3]的栈顶元素,使得stacks变为[[1], [], [1]],然后调用get(stacks, 2)。stacks[2]为空,返回2。