AT_joi2019_yo_f 座席 (Seats)

Description

[problemUrl]: https://atcoder.jp/contests/joi2019yo/tasks/joi2019_yo_f 2XXX 年,世界の国は直線状に並んでいた.$ N $ 個の国があり,$ 1,\ 2,\ ...,\ N $ の番号が付けられている.$ i\ =\ 1,\ 2,\ ...,\ N\ -\ 1 $ に対し,国 $ i $ と国 $ i\ +\ 1 $ が互いに隣国である. この年の国際情報オリンピックでは,国 $ i $ からは $ A_i $ 人の選手が参加する.国際情報オリンピックの技術委員のあなたは,競技での座席表を作成する担当である.競技会場が細長いため,一列に並んだ $ A_1\ +\ A_2\ +\ ...\ +\ A_N $ 個の座席に選手たちを割り当てることになった.不正防止のため,同じ国の選手や隣国の選手を隣り合う席に割り当ててはならない. 選手たちを座席に割り当てる方法は何通りあるだろうか.この数は非常に大きくなる可能性があるので,それを $ 10007 $ で割った余りを求めたい.

Input Format

入力は以下の形式で標準入力から与えられる. > $ N $ $ A_1 $ $ A_2 $ $ ... $ $ A_N $

Output Format

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

Explanation/Hint

### 制約 - $ 1\ ≦\ N\ ≦\ 100 $ - $ 1\ ≦\ A_i\ ≦\ 4 $ ($ 1\ ≦\ i\ ≦\ N $) ### 小課題 1. ($ 6 $ 点) $ N\ ≦\ 5 $,$ A_i\ ≦\ 2 $ ($ 1\ ≦\ i\ ≦\ N $) 2. ($ 14 $ 点) $ N\ ≦\ 10 $,$ A_i\ ≦\ 3 $ ($ 1\ ≦\ i\ ≦\ N $) 3. ($ 80 $ 点) 追加の制約はない. ### Sample Explanation 1 国 $ 1 $ から参加する $ 2 $ 人の選手を $ 1 $ と $ 1' $,国 $ 2 $ から参加する $ 1 $ 人の選手を $ 2 $,国 $ 3 $ から参加する $ 1 $ 人の選手を $ 3 $,国 $ 4 $ から参加する $ 1 $ 人の選手を $ 4 $ で表すことにすると,選手たちを座席に割り当てる方法としては,以下の $ 4 $ 通りの並べ方が考えられる: - $ 1 $, $ 3 $, $ 1' $, $ 4 $, $ 2 $ - $ 1' $, $ 3 $, $ 1 $, $ 4 $, $ 2 $ - $ 2 $, $ 4 $, $ 1 $, $ 3 $, $ 1' $ - $ 2 $, $ 4 $, $ 1' $, $ 3 $, $ 1 $ ### Sample Explanation 2 この入力例では,条件を満たす座席表は存在しない. ### Sample Explanation 3 この入力例では,選手たちを座席に割り当てる方法は $ 24768 $ 通りあるため,それを $ 10007 $ で割った余りである $ 4754 $ を出力する.