#joi2019yof. [joi2019_yo_f]座席 (Seats)

[joi2019_yo_f]座席 (Seats)

問題文

2XXX 年,世界の国は直線状に並んでいた.NN 個の国があり,1,2,...,N1, 2, ..., N の番号が付けられている.i=1,2,...,N1i = 1, 2, ..., N - 1 に対し,国 ii と国 i+1i + 1 が互いに隣国である.

この年の国際情報オリンピックでは,国 ii からは AiA_i 人の選手が参加する.国際情報オリンピックの技術委員のあなたは,競技での座席表を作成する担当である.競技会場が細長いため,一列に並んだ A1+A2+...+ANA_1 + A_2 + ... + A_N 個の座席に選手たちを割り当てることになった.不正防止のため,同じ国の選手や隣国の選手を隣り合う席に割り当ててはならない.

選手たちを座席に割り当てる方法は何通りあるだろうか.この数は非常に大きくなる可能性があるので,それを 1000710007 で割った余りを求めたい.

制約

  • 1N1001 ≦ N ≦ 100
  • 1Ai41 ≦ A_i ≦ 4 (1iN1 ≦ i ≦ N)

入力

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

NN A1A_1 A2A_2 ...... ANA_N

出力

選手たちを座席に割り当てる方法の数を 1000710007 で割った余りを 11 行で出力せよ.

小課題

  1. (66 点) N5N ≦ 5Ai2A_i ≦ 2 (1iN1 ≦ i ≦ N)
  2. (1414 点) N10N ≦ 10Ai3A_i ≦ 3 (1iN1 ≦ i ≦ N)
  3. (8080 点) 追加の制約はない.

入力例 1

4
2 1 1 1

出力例 1

4

11 から参加する 22 人の選手を 1111',国 22 から参加する 11 人の選手を 22,国 33 から参加する 11 人の選手を 33,国 44 から参加する 11 人の選手を 44 で表すことにすると,選手たちを座席に割り当てる方法としては,以下の 44 通りの並べ方が考えられる:

  • 11, 33, 11', 44, 22
  • 11', 33, 11, 44, 22
  • 22, 44, 11, 33, 11'
  • 22, 44, 11', 33, 11

入力例 2

5
1 2 3 2 1

出力例 2

0

この入力例では,条件を満たす座席表は存在しない.


入力例 3

6
1 2 3 3 2 1

出力例 3

4754

この入力例では,選手たちを座席に割り当てる方法は 2476824768 通りあるため,それを 1000710007 で割った余りである 47544754 を出力する.