#P12291. [蓝桥杯 2024 国 Java A] 粉刷匠小蓝

[蓝桥杯 2024 国 Java A] 粉刷匠小蓝

题目描述

小蓝是一名勤劳的粉刷匠,今天他收到了一份来自蓝桥学院的委托,需要为学院的 nn 面墙进行粉刷。这 nn 面墙从左到右依次排列,编号从 11nn。起初,所有墙的颜色均为白色。

学院希望小蓝能将其中一部分墙刷成蓝色,以营造一种冷色调的艺术氛围。为此,学院给小蓝提供了一个长度为 nn 的数组 {a1,a2,,an}\{a_1, a_2, \cdots, a_n\},来指定每面墙的颜色要求。具体地,如果 ai=0a_i = 0,则第 ii 面墙保持白色;如果 ai=1a_i = 1,则小蓝需要将第 ii 面墙刷成蓝色。

小蓝每次只能刷一面墙,他会将一面墙完整的刷完后再刷另一面墙。为了确保整体墙面的视觉效果,学院还提一个小小的要求:在粉刷过程中,如果要将第 ii 面墙刷成蓝色,那么它右侧(第 i+1i + 1 面墙 \simnn 面墙)蓝色的墙的个数必须是偶数(包括 00 个)。

现在,请你计算小蓝共有多少种刷墙顺序可以满足学院的要求?由于答案可能很大,因此你只需要给出答案对 109+710^9 + 7 取模后的结果即可。

在本题中,不同的刷墙方法只与小蓝刷墙的顺序有关。例如,先刷第 11 面墙再刷第 22 面墙,与先刷第 22 面墙再刷第 11 面墙,被视为两种不同的方法。

输入格式

输入的第一行包含一个正整数 nn,表示墙的数量。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n,相邻整数之间使用一个空格分隔,按编号从 11nn 的顺序依次表示每面墙的颜色要求。

输出格式

输出一行包含一个整数,表示满足要求的刷墙顺序数量对 109+710^9 + 7 取模后的结果。

4
1 1 1 1
4
2
0 0
1

提示

样例说明

在样例 11 中,有 44 面墙,且都需要刷为蓝色。总共有以下 44 种粉刷顺序可以满足学院的要求:

  1. [1,2,3,4][1,2,3,4]:先刷第 11 面,再刷第 22 面,然后刷第 33 面,最后刷第 44 面。
  2. [1,3,4,2][1,3,4,2]:先刷第 11 面,再刷第 33 面,然后刷第 44 面,最后刷第 22 面。
  3. [2,3,1,4][2,3,1,4]:先刷第 22 面,再刷第 33 面,然后刷第 11 面,最后刷第 44 面。
  4. [3,4,1,2][3,4,1,2]:先刷第 33 面,再刷第 44 面,然后刷第 11 面,最后刷第 22 面。

在样例 2 中,有 22 面墙,且都要保持白色。只有 11 种刷墙方法可以满足学院的要求,即不刷任何一面墙壁。

评测用例规模与约定

  • 对于 20%20\% 的评测用例,1n131 \leq n \leq 13ai=1a_i = 1
  • 对于所有评测用例,1n2×1051 \leq n \leq 2 \times 10^50ai10 \leq a_i \leq 1