JOI 夏季セミナーコンテスト 2020
コンテスト日時
2020/08/27 (Th) 21:00 - 22:30

D - よし、グラフだ!

Flavor
4
s
1024
MB
100

問題文

I 教授と T 教授は,グラフの問題が好きである.
今日は,以下の問題について考えてみることにした.

JOI 王国には,$1, 2, ... , N$ と番号付けられた $N$ 個の都市と,$M$ 本の道路がある.$i$ 本目の道路は番号 $A_i$ の都市と番号 $B_i$ の都市を双方向に繋いでおり,文字 $C_i$ が書かれている.

E869120 君は,都市 $1$ から都市 $N$ へ,道路のみを使って移動することにした.道路に書かれている文字を通った順番に全てメモしたとき,JOI 文字列になるように移動することはできるか.もしできる場合は, 作れる最短の JOI 文字列の長さはいくつか.

ただし,同じ都市を二度通ったり,同じ道路を二度通ったりする移動方法も許されるものとする.

ただし,JOI 文字列 とは,以下の条件をすべて満たす文字列のことを指す.JOI 文字列としては,例えば 'JOI', 'JJOOII', 'JJJOOOIII' などが挙げられる.

  • 文字列の長さ |S| が 3 の倍数である.
  • 最初の $|S|/3$ 文字が 'J',次の $|S|/3$ 文字が 'O',最後の $|S|/3$ 文字が 'I' である.

教授たちに代わって,上枠の問題を解け.

制約

  • $1 \leq T \leq 5$
  • $2 \leq N \leq 20000$
  • $1 \leq M \leq 20000$
  • $1 \leq A_i < B_i \leq N$
  • $(A_i, B_i) \neq (A_j, B_j)$
  • $C_i$ は 'J', 'O', 'I' のいずれかである.
  • どの都市からどの都市へも,いくつかの道路を通じて行き来することができる.
  • $C_i$ 以外の入力はすべて整数である.

この課題は,7 個の小課題から成る.

小課題 得点 内容 入力データ番号 $T$ の値
0 - サンプルテストケース #0 -
1 1 $N = 2$ #1 3
2 15 $M = N − 1$ $(A_i, B_i) = (i, i + 1) [1 \leq i \leq M]$ #2 5
3 7 $M = N − 1$.3 本以上の道路と直接繋がっている都市は存在しない. #3 5
4 5 $M = N − 1$ #4 5
5 25 $N \leq 35, M \leq 35$.JOI 文字列が作れる場合,長さ $36$ 以下の JOI 文字列が作れる. #5 5
6 16 $N ≤ 700, M ≤ 700$ #6 5
7 31 追加の制約はない. #7 5

入力

各入力データ について,以下の形式で入力が与えられる.

$T$
($1$ 個目のテストケースの情報)
($2$ 個目のテストケースの情報)
...
($T$ 個目のテストケースの情報)

各テストケース について,以下の形式で入力が与えられる.

  • 1 行目に,整数 $N, M$ が空白区切りで与えられる.
  • $1 + i (1 \leq i \leq N)$ 行目に,整数 $A_i, B_i, C_i$ が空白区切りで与えられる.

出力

$T$ 行に渡って出力せよ.
$i$ 行目には,$i$ 個目のテストケースにおける答えを,以下の通りに出力せよ.

メモした文字列を JOI 文字列にすることができない場合,$-1$ と出力せよ.
メモした文字列を JOI 文字列にすることができる場合,文字列の最短の長さを出力せよ.
入力例 1
3 4 3 1 2 J 2 3 O 3 4 I 4 4 1 2 J 1 3 O 2 4 I 3 4 I 6 5 1 4 J 2 4 J 2 5 J 3 5 O 3 6 I
出力例 1
3 -1 9
提出
C++23 (g++ 12.2.0)