atcoder#ABC261G. [ABC261G] Replace

[ABC261G] Replace

题目描述

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

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

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

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

输入格式

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

S S T T K K C1 C_1 A1 A_1 C2 C_2 A2 A_2 \vdots CK C_K AK A_K

输出格式

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

题目大意

先给定两个字符串 SSTT,并给定 nn 种操作,第 ii 个操作可以把 SS 中的字符 cic_i 替换成字符串 sis_i。你的目标就是使用若干次操作,使得 SS 变成 TT.

所有涉及字母均为小写字母。

数据范围

  • 1S,T501\leqslant|S|,|T|\leqslant 50
  • 1n501\leqslant n\leqslant50
  • 1si501\leqslant|s_i|\leqslant50
ab
cbca
3
a b
b ca
a efg
4
a
aaaaa
2
a aa
a aaa
2
a
z
1
a abc
-1

提示

制約

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

Sample Explanation 1

高橋君は S= S= ab から始めて、次のように 4 4 回操作を行う事で、 T= T= cbca を作ることができます。 - ab1 1 文字目 a を選んで b に置き換える ( 1 1 番目の操作) 。文字列は bb となる。 - bb2 2 文字目 b を選んで ca に置き換える ( 2 2 番目の操作) 。文字列は bca となる。 - bca1 1 文字目 b を選んで ca に置き換える ( 2 2 番目の操作) 。文字列は caca となる。 - caca2 2 文字目 a を選んで b に置き換える ( 1 1 番目の操作) 。文字列は cbca となる。 各操作においてコストが 1 1 かかるため、必要なコストは 4 4 となり、このときが最小です。

Sample Explanation 2

a \to aaa \to aaaaa とした時、必要なコストは 2 2 となり、 このときが最小です。

Sample Explanation 3

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