枚举 · 例16-迷你扫雷
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题转译自 [SCOI 2005] 扫雷MINE 。
\hspace{15pt}迷你版的扫雷运行规则与通常的扫雷类似,我们描述如下:
\hspace{23pt}\bullet\,迷你扫雷在一个 n2 列的棋盘上进行;
\hspace{23pt}\bullet\,雷只会存在于棋盘的第一列中,且一个格子中最多只存在一个雷;
\hspace{23pt}\bullet\,第二列的每一行都有一个数字,记第 i 行的数字为 a_i ,这表示第一列中第 i-1 行、第 i 行和第 i+1 行中雷的数目;特别的,如果目标格在棋盘外,视为没有雷。
\hspace{15pt}现在,对于给定的第二列的数字,你需要计算第一列中雷的合法摆放方案数。

输入描述:

\hspace{15pt}第一行输入一个整数 n \left(1 \leq n \leq 10^4\right) 代表棋盘行数。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \cdots, a_n \left(0 \leq a_i \leq 3\right) 代表第二列第 i 行的数字。

输出描述:

\hspace{15pt}在一行上输出一个整数,代表第一列中雷的摆放方案数。
示例1

输入

复制
2
1 1

输出

复制
2

说明

\hspace{15pt}在这个样例中,当且仅当第一列第一行存在一个雷、当且仅当第一列第二行存在一个雷都是合法的。
示例2

输入

复制
5
0 0 1 0 0

输出

复制
0

说明

\hspace{15pt}在这个样例中,不存在任何一种合法的摆放方案。