atcoder#CODEFESTIVAL2017QUALCF. Three Gluttons

Three Gluttons

配点 : 18001800

問題文

33 人の男性 A, B, C が一緒に寿司を食べることになりました。 最初、NN 種類の寿司が 11 個ずつあります。 寿司には 11 から NN まで番号が振られています。 ただし、NN33 の倍数とします。

33 人はそれぞれ寿司に対して好き嫌いの順位付けを持っています。 A の順位付けは、11 から NN までの順列 (a1, ..., aN)(a_1,\ ...,\ a_N) で表されます。 各 ii (1iN1 \leq i \leq N) について、A が ii 番目に好きな寿司は寿司 aia_i です。 同様に、B および C の順位付けは、11 から NN までの順列 (b1, ..., bN)(b_1,\ ...,\ b_N) および (c1, ..., cN)(c_1,\ ...,\ c_N) で表されます。

寿司がすべて無くなるか、喧嘩が起こる (後述) まで、33 人は次の行動を繰り返します。

  • A, B, C はそれぞれ、残りの寿司のうち最も好きな寿司を見つける。 これらをそれぞれ寿司 xx, yy, zz とする。 xx, yy, zz がすべて相異なるならば、A, B, C はそれぞれ寿司 xx, yy, zz を食べる。 そうでないならば、33 人は殴り合いの喧嘩を始める。

A および B の順位付け (a1, ..., aN)(a_1,\ ...,\ a_N) および (b1, ..., bN)(b_1,\ ...,\ b_N) が与えられます。 C の順位付け (c1, ..., cN)(c_1,\ ...,\ c_N) のうち、33 人が喧嘩を始めることなく寿司をすべて食べ切れるようなものは、何通りあるでしょうか? 109+710^9+7 で割った余りを求めてください。

制約

  • 3N3993 \leq N \leq 399
  • NN33 の倍数である。
  • (a1, ..., aN)(a_1,\ ...,\ a_N) および (b1, ..., bN)(b_1,\ ...,\ b_N)11 から NN までの順列である。

入力

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

NN

a1a_1 ...... aNa_N

b1b_1 ...... bNb_N

出力

C の順位付け (c1, ..., cN)(c_1,\ ...,\ c_N) のうち、33 人が喧嘩を始めることなく寿司をすべて食べ切れるようなものは、何通りあるか? 109+710^9+7 で割った余りを出力せよ。

3
1 2 3
2 3 1
2

(c1, c2, c3)=(3, 1, 2), (3, 2, 1)(c_1,\ c_2,\ c_3) = (3,\ 1,\ 2),\ (3,\ 2,\ 1)22 通りです。 どちらの場合も、A, B, C はそれぞれ寿司 11, 22, 33 を食べ、寿司がすべて無くなります。

3
1 2 3
1 2 3
0

(c1, c2, c3)(c_1,\ c_2,\ c_3) がどのような順列であっても、A と B はともに寿司 11 を食べようとするので、喧嘩が起こります。

6
1 2 3 4 5 6
2 1 4 3 6 5
80

例えば $(c_1,\ c_2,\ c_3,\ c_4,\ c_5,\ c_6) = (5,\ 1,\ 2,\ 6,\ 3,\ 4)$ の場合、まず A, B, C はそれぞれ寿司 11, 22, 55 を食べ、次に A, B, C はそれぞれ寿司 33, 44, 66 を食べ、寿司がすべて無くなります。

6
1 2 3 4 5 6
6 5 4 3 2 1
160
9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
33600