atcoder#ABC268D. [ABC268D] Unique Username

[ABC268D] Unique Username

配点 : 400400

問題文

高橋君はあるサービスで使うユーザー名を決めるのに困っています。彼を助けるプログラムを書いてください。

以下の条件をすべて満たす文字列 XX11 つ求めてください。

  • XX は次の手順で得られる文字列である。- NN 個の文字列 S1,S2,,SNS_1,S_2,\ldots,S_N を好きな順番で並べたものを S1,S2,,SNS_1', S_2', \ldots,S_N' とする。そして、S1S_1'、( 11 個以上の _ )、S2S_2'、( 11 個以上の _ )、\ldots、( 11 個以上の _ )、SNS_N' をこの順番で連結したものを XX とする。
  • NN 個の文字列 S1,S2,,SNS_1,S_2,\ldots,S_N を好きな順番で並べたものを S1,S2,,SNS_1', S_2', \ldots,S_N' とする。そして、S1S_1'、( 11 個以上の _ )、S2S_2'、( 11 個以上の _ )、\ldots、( 11 個以上の _ )、SNS_N' をこの順番で連結したものを XX とする。
  • XX の文字数は 33 以上 1616 以下である。
  • XXMM 個の文字列 T1,T2,,TMT_1,T_2,\ldots,T_M のいずれとも一致しない。

ただし、条件をすべて満たす文字列 XX が存在しない場合は代わりに -1 と出力してください。

制約

  • 1N81 \leq N \leq 8
  • 0M1050 \leq M \leq 10^5
  • N,MN,M は整数
  • 1Si161 \leq |S_i| \leq 16
  • N1+Si16N-1+\sum{|S_i|} \leq 16
  • iji \neq j ならば SiSjS_i \neq S_j
  • SiS_i は英小文字のみからなる文字列
  • 3Ti163 \leq |T_i| \leq 16
  • iji \neq j ならば TiTjT_i \neq T_j
  • TiT_i は英小文字と _ のみからなる文字列

入力

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

NN MM

S1S_1

S2S_2

\vdots

SNS_N

T1T_1

T2T_2

\vdots

TMT_M

出力

条件をすべて満たす文字列 XX11 つ出力せよ。ただし、条件をすべて満たす文字列 XX が存在しない場合は代わりに -1 を出力せよ。 答えが複数存在する場合、どれを出力しても良い。

1 1
chokudai
chokudai
-1

条件のうち 11 番目と 22 番目を満たす文字列は X=X= chokudai しかありませんが、これは T1T_1 と一致します。 このため、条件をすべて満たす文字列 XX が存在せず、-1 が正しい出力となります。

2 2
choku
dai
chokudai
choku_dai
dai_choku

この他に、choku__dai (chokudai の間の _22 つ) 等も条件をすべて満たします。

2 2
chokudai
atcoder
chokudai_atcoder
atcoder_chokudai
-1

chokudai__atcoderatcoder__chokudai (chokudaiatcoder の間の _22 つ)は文字数が 1717 なので 22 番目の条件を満たしません。

4 4
ab
cd
ef
gh
hoge
fuga
____
_ab_cd_ef_gh_
ab__ef___cd_gh

11 番目の条件で記述されている操作で得られないような文字列が TiT_i として与えられる場合があります。