atcoder#AGC018F. [AGC018F] Two Trees

[AGC018F] Two Trees

配点 : 17001700

問題文

NN 頂点からなる根付き木が 22 つあります。 どちらの木の頂点も、それぞれ 11 から NN の番号がついています。 11 つめの木の 頂点 ii の親は AiA_i です。 なお、頂点 ii が根のときは、Ai=1A_i=-1です。 22 つめの木の 頂点 ii の親は BiB_i です。 なお、頂点 ii が根のときは、Bi=1B_i=-1です。

すぬけ君は、長さ NN の整数列 X1X_1 , X2X_2 , ...... , XNX_N であって、次の条件を満たすものを求めたいです。

  • どちらの木のどの頂点についても、その頂点とその子孫の頂点の番号を a1a_1 , a2a_2 , ...... , aka_k としたとき、 abs(Xa1+Xa2+...+Xak)=1abs(X_{a_1} + X_{a_2} + ... + X_{a_k})=1 が成り立つ。

条件を満たす整数列を作ることができるか判定し、存在するならば 11 つ求めてください。

制約

  • 1N1051 \leq N \leq 10^5
  • 1AiN1 \leq A_i \leq N (頂点 ii11 つ目の木の根でないとき)
  • Ai=1A_i = -1 (頂点 ii11 つ目の木の根のとき)
  • 1BiN1 \leq B_i \leq N (頂点 ii22 つ目の木の根でないとき)
  • Bi=1B_i = -1 (頂点 ii22 つ目の木の根のとき)
  • 入力はvalidな根付き木である。

入力

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

NN

A1A_1 A2A_2 .... ANA_N

B1B_1 B2B_2 .... BNB_N

出力

条件を満たす整数列を作ることができない場合は、IMPOSSIBLE と出力せよ。 作ることができる場合は、まず 11 行目に、POSSIBLE と出力せよ。 続いて、22 行目には条件を満たす整数列 X1X_1 , X2X_2 , ...... , XNX_N を空白区切りで出力せよ。

5
3 3 4 -1 4
4 4 1 -1 1
POSSIBLE
1 -1 -1 3 -1

例えば、11 つ目の木の頂点 33 について見てみると、その頂点と子孫の頂点の番号は、3,1,23,1,2 となっています。 出力例のように整数列を設定すると、abs(X3+X1+X2)=abs((1)+(1)+(1))=abs(1)=1abs(X_3+X_1+X_2)=abs((-1)+(1)+(-1))=abs(-1)=1 となっており、問題ありません。 他の頂点についても同じように確かめると、確かに出力例の整数列は条件を満たしています。

6
-1 5 1 5 1 3
6 5 5 3 -1 3
IMPOSSIBLE

この例では、どうやっても条件を満たす整数列は作れません。 よって、この例の答えは IMPOSSIBLE になります。

8
2 7 1 2 2 1 -1 4
4 -1 4 7 4 4 2 4
POSSIBLE
1 2 -1 0 -1 1 0 -1