B - しりとり木
解説
/
実行時間制限: 1 sec / メモリ制限: 256 MB
問題文
半角英小文字からなる文字列がm個与えられる。
文字列1つにつき1つ、計m個の頂点からなる根付き木であって、
- 葉以外の頂点はちょうど2つの子を持つ
- 頂点iが頂点cの親のとき、 i 番目の文字列の最後の文字が c 番目の文字列の最初の文字に一致する
が成立するような木が存在するか判定せよ。
存在するときは構成せよ
13:35 問題文の誤字を修正
申し訳ありませんが、B問題のテストケースに間違いがあったため、テストケースを16:30より追加します。(16:10)
入力
入力は以下の形式で標準入力から与えられる。
N s_1 . . . s_N
- 一行目には文字列の数 N(1≦N≦10^4) が与えられる。
- 続く N 行には、文字列が与えられる。 i+1 (1≦i≦N) 行目にはi 番目の文字列が与えられる。
- それぞれの文字列の長さは1文字以上10文字以下である。
部分点
この問題に部分点は存在しない。
コンテストへの影響を鑑みて、従来のテストケースに99点、全てのテストケースに1点とします。(16:32)
出力
出力は標準出力に行い、末尾に改行を入れること。
条件を満たす木が存在しない場合、1行目に"NO"と出力する。
条件を満たす木が存在する場合、出力はN+1 行からなる。 1行目に"YES"と出力し、その後 i+1 (1≦i≦N) 行目にi番目の文字列の親の番号を出力する。もしi番目の文字列が根なら0を出力する。
入力例1
5 ab bc bd de df
出力例1
YES 0 1 1 3 3
入力例2
7 yokozuna takayuta namonaki reew semiexp snuke tozangezan
出力例2
NO
入力例3
1 i
出力例3
YES 0