atcoder#ABC197F. [ABC197F] Construct a Palindrome

[ABC197F] Construct a Palindrome

配点 : 600600

問題文

NN 頂点 MM 辺の、単純とは限らない連結な無向グラフがあります。 辺 ii は頂点 AiA_i と頂点 BiB_i を結んでおり、文字 CiC_i が書かれています。 頂点 11 から頂点 NN へのパス (同じ辺や頂点を複数回通っても構わない) を 11 つ選び、通る辺に書かれている文字を順に並べて文字列を作ります。 この文字列が回文になることはあるかを判定し、あるならばそのような回文の長さとして考えられる最小値を求めてください。

制約

  • 2N10002 \le N \le 1000
  • 1M10001 \le M \le 1000
  • 1AiN1 \le A_i \le N
  • 1BiN1 \le B_i \le N
  • CiC_i は英小文字
  • 与えられるグラフは連結である

入力

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

NN MM

A1A_1 B1B_1 C1C_1

A2A_2 B2B_2 C2C_2

A3A_3 B3B_3 C3C_3

\hspace{25pt} \vdots

AMA_M BMB_M CMC_M

出力

作る文字列が回文になることがあるならば、そのような回文の長さの最小値を、ないならば -1 を出力せよ。

8 8
1 2 a
2 3 b
1 3 c
3 4 b
4 5 a
5 6 c
6 7 b
7 8 a
10

1,2,3,1,2,4,5,6,7,81, 2, 3, 1, 2, 4, 5, 6, 7, 8 の順に通ると、出来上がる文字列は abcabbacba となり、回文となります。 これより短い回文を作ることはできないので、答えは 1010 です。

4 5
1 1 a
1 2 a
2 3 a
3 4 b
4 4 a
5

2,3,4,5,52, 3, 4, 5, 5 の順に通ると aabaa という文字列を作ることができ、これは回文です。 同じ辺や頂点を複数回通っても構わないことに注意してください。

3 4
1 1 a
1 2 a
2 3 b
3 3 b
-1

出来上がる文字列が回文となることはありません。