座席 (Seats)

A_1+...+A_N명의 선수를 일렬로 배치하되 같은 나라나 이웃 나라 선수가 인접하지 않도록 배열하는 경우의 수를 10007로 나눈 나머지를 구한다.

어려움8동적 계획법조합론수학구현아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

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

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

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

입력

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

N
A_1 A_2 ... A_N

출력

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

제한

  • 1 ≦ N ≦ 100
  • 1 ≦ A_i ≦ 4 (1 ≦ i ≦ N)