atcoder#ABC255F. [ABC255F] Pre-order and In-order

[ABC255F] Pre-order and In-order

配点 : 500500

問題文

1,2,,N1, 2, \ldots, N と番号づけられた NN 個の頂点を持つ二分木を考えます。 ここで、二分木とは各頂点が高々 22 個の子を持つ根付き木です。より具体的には、二分木の各頂点は高々 11 個の左の子と高々 11 個の右の子を持ちます。

頂点 11 を根とする二分木であって、下記の条件を満たすものが存在するかを判定し、存在する場合はその一例を示してください。

  • すべての頂点を深さ優先探索における行きがけ順

    (pre-order)で並べた列が (P1,P2,,PN)(P_1, P_2, \ldots, P_N) である。

  • すべての頂点を深さ優先探索における通りがけ順

    (in-order)で並べた列が (I1,I2,,IN)(I_1, I_2, \ldots, I_N) である。

制約

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • NN は整数
  • (P1,P2,,PN)(P_1, P_2, \ldots, P_N)(1,2,,N)(1, 2, \ldots, N) の順列
  • (I1,I2,,IN)(I_1, I_2, \ldots, I_N)(1,2,,N)(1, 2, \ldots, N) の順列

入力

入力は以下の形式で標準入力から与えられる。

NN

P1P_1 P2P_2 \ldots PNP_N

I1I_1 I2I_2 \ldots INI_N

出力

問題文中の条件を満たすような頂点 11 を根とする二分木が存在しない場合は 1-1 を出力せよ。 存在する場合は、条件を満たす二分木の一例を下記の形式にしたがって NN 行にわたって出力せよ。 すなわち、i=1,2,,Ni = 1, 2, \ldots, N について、ii 行目には頂点 ii の左の子の番号 LiL_i と右の子の番号 RiR_i を出力せよ。 ただし、左の子(または右の子)を持たない場合は LiL_i(または RiR_i )として 00 を出力せよ。 条件を満たすような頂点 11 を根とする二分木が複数存在する場合は、そのうちどれを出力しても正解となる。

L1L_1 R1R_1

L2L_2 R2R_2

\vdots

LNL_N RNR_N

6
1 3 5 6 4 2
3 5 1 4 6 2
3 6
0 0
0 5
0 0
0 0
4 2

次の画像に示す、頂点 11 を根とする二分木が問題文中の条件を満たします。

2
2 1
1 2
-1

問題文中の条件を満たすような頂点 11 を根とする二分木は存在しません。よって 1-1 を出力します。