atcoder#ABC261G. [ABC261G] Replace

[ABC261G] Replace

配点 : 600600

問題文

英小文字のみからなる 22 つの文字列 S,TS,T が与えられます。

高橋君は文字列 SS から始めて、 次の KK 種類の操作のうち 11 つを選んで行う事を 好きなだけ繰り返す事ができます。 ii 番目の操作は次の形で与えられます。

コストを 11 支払う。 その後、文字列中に文字 CiC_i が含まれるとき、そのうちの 11 つを選び、文字列 AiA_i に置き換える。 含まれないならば何も行わない。

文字列を TT と一致させるために必要な最小コストを求めてください。 ただし、TT と一致させることが不可能な場合は 1-1 を出力してください。

制約

  • 1ST501\leq |S|\leq |T|\leq 50
  • 1K501\leq K\leq 50
  • CiC_ia, b,\ldots, z のいずれか
  • 1Ai501\leq |A_i|\leq 50
  • S,T,AiS,T,A_i は英小文字のみからなる文字列
  • CiC_i を長さ 11 の文字列としてみた時、CiAiC_i\neq A_i
  • (Ci,Ai)(C_i,A_i) はすべて異なる。

入力

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

SS

TT

KK

C1C_1 A1A_1

C2C_2 A2A_2

\vdots

CKC_K AKA_K

出力

SSTT と一致させるために必要な最小コストを出力せよ。 ただし、TT と一致させることが不可能な場合は 1-1 を出力せよ。

ab
cbca
3
a b
b ca
a efg
4

高橋君は S=S=ab から始めて、次のように 44 回操作を行う事で、 T=T=cbca を作ることができます。

  • ab11 文字目 a を選んで b に置き換える ( 11 番目の操作) 。文字列は bb となる。
  • bb22 文字目 b を選んで ca に置き換える ( 22 番目の操作) 。文字列は bca となる。
  • bca11 文字目 b を選んで ca に置き換える ( 22 番目の操作) 。文字列は caca となる。
  • caca22 文字目 a を選んで b に置き換える ( 11 番目の操作) 。文字列は cbca となる。

各操作においてコストが 11 かかるため、必要なコストは 44 となり、このときが最小です。

a
aaaaa
2
a aa
a aaa
2

a\toaaa\toaaaaa とした時、必要なコストは 22 となり、 このときが最小です。

a
z
1
a abc
-1

どのように操作を行っても、S=S=a から T=T=z を作る事は出来ません。