Processing math: 100%

H: ジャンプパーティ

問題

とあるダンスホールで N 人の参加するダンスパーティーが行われる。 そのダンスホールは縦方向に H 個、横方向に W 個のグリッドに分けられており、 左上を (0,0)、上から r マス、左から c マス目のグリッドの座標を (r,c) と表す。 i 番目の参加者の初期位置は (Ri,Ci) であり、(i,j) のグリッドには (rij,cij) が書かれている。

各参加者は、無限に続く音楽に合わせて次のように同時に移動を行う。

それぞれのグリッドは狭く、2 人以上の参加者が同時に同じグリッドに移動すると衝突してしまう。ただし、空中で衝突することは無いとする。 これを聞いたあなたは、ジャンプ後に 2 人以上の参加者が衝突してしまわないかと心配になった。 そこで、衝突が起こる可能性があるか、あるならば何回目のジャンプの後に衝突が起こるかを求めることにした。

制約

入力形式

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

H W N
r00 c00  r0 W1 c0 W1

rH1 0 cH1 0  rH1 W1 cH1 W1
R0 C0

RN1 CN1

この問題では入力ファイルが非常に大きくなることがあることに注意せよ。 C++ ならこのページを参考にすると良いかもしれない。

出力

衝突が起こる場合は何回目のジャンプの後に起こるかを 1 行で出力せよ。 そうでない場合は -1 を出力せよ。 また、末尾に改行を出力せよ。

サンプル

サンプル入力 1

2 2 2
1 0 0 1
0 0 1 0
0 0
0 1

サンプル出力 1

-1

サンプル入力 2

2 2 2
1 0 0 1
0 0 1 0
0 0
1 1

サンプル出力 2

1