atcoder#ARC143E. [ARC143E] Reversi

[ARC143E] Reversi

配点 : 700700

問題文

NN 頂点からなる木があります. 各頂点には 11 から NN までの番号がついており, ii 番目の辺は頂点 AiA_i と頂点 BiB_i を結んでいます. また,各頂点にはリバーシの石が 11 つずつ置かれています. 各頂点に置かれている石の状態は文字列 SS によって与えられ, SSii 番目の文字が B のとき,頂点 ii に置かれている石の表は黒色, SSii 番目の文字が W のとき,頂点 ii に置かれている石の表は白色です.

以下の操作を NN 回行い,すべての頂点から石を取り除くことが可能かどうか判定してください. また可能ならば,列 P1,P2,,PNP_1,P_2,\ldots,P_N であって,頂点 P1,P2,,PNP_1,P_2,\ldots,P_N をこの順に選ぶことが可能なもののうち,辞書順で最小のものを求めてください.

  • 表が白色の石が置かれている頂点を 11 つ選び,その頂点から石を取り除く. そして,その頂点と隣接する頂点に置かれている石をすべて裏返す.
リバーシの石について
数列の辞書順とは?

相異なる数列 SS と数列 TT の大小を判定するアルゴリズムを以下に説明します.

以下では SSii 番目の要素を SiS_i のように表します.また, SSTT より辞書順で小さい場合は S<TS \lt T ,大きい場合は S>TS \gt T と表します.

  1. SSTT のうち長さが短い方の文字列の長さを LL とします.i=1,2,,Li=1,2,\dots,L に対して SiS_iTiT_i が一致するか調べます.
  2. SiTiS_i \neq T_i である ii が存在する場合,そのような ii のうち最小のものを jj とします.そして,SjS_jTjT_j を比較して, SjS_jTjT_j より(数として)小さい場合は S<TS \lt T ,大きい場合は S>TS \gt T と決定して,アルゴリズムを終了します.
  3. SiTiS_i \neq T_i である ii が存在しない場合, SSTT の長さを比較して,SSTT より短い場合は S<TS \lt T ,長い場合は S>TS \gt T と決定して,アルゴリズムを終了します.

制約

  • 1N2×1051 \leq N \leq 2\times 10^5
  • 1Ai,BiN1 \leq A_i, B_i \leq N
  • 与えられるグラフは木である.
  • SSBW の文字からなる長さ NN の文字列である.

入力

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

NN

A1A_1 B1B_1

\vdots

AN1A_{N-1} BN1B_{N-1}

SS

出力

目標が達成可能でない場合,-1 を出力せよ.可能である場合,以下の形式で答えを出力せよ.

P1P_1 P2P_2 \cdots PNP_N

4
1 2
2 3
3 4
WBWW
1 2 4 3
4
1 2
2 3
3 4
BBBB
-1

この場合,一度も操作を行うことができません.