#YDSP2024SA. >-<

>-<

题目描述

对于变量的赋值语句,箭头是一种常用的表达方式。

给一个长度为 nn 的序列 aa,定义下面两种箭头语句:

  • auva_u\gets v:把 aua_u 赋值为 vv,语句的值为 vv
  • vauv\to a_u:把 aua_u 赋值为 vv,语句的值为 vv

进而可以定义嵌套的箭头语句,令 A,BA,B 分别是一个语句:

  • ABA\gets B:先计算 BB,并令答案为 qq。接下来计算 AA,并令答案为 apa_p,此时计算 AA 带来的副作用不会影响 qq 的值。最后执行语句 apqa_p\gets q,整体语句的值就是 apqa_p\gets q 的值。
  • ABA\to B:先计算 AA,并令答案为 pp。接下来计算 BB,并令答案为 aqa_q,此时计算 BB 带来的副作用不会影响 pp 的值。最后执行语句 paqp\to a_q,整体语句的值就是 paqp\to a_q 的值。

比如语句 (aiaj)(akal)(a_i\to a_j)\gets(a_k\to a_l) 会被解析为依次执行 akala_k\to a_laiaja_i\to a_jajala_j\gets a_l 三个语句。

现在给你一个长度为 nn 的箭头语句,第 ii 个操作数是 aia_i,你需要给它加括号规定优先级,问最终能得到多少种答案。

具体形式可以参考样例解释。

输入格式

第一行一个个正整数 nn

第二行 nn 个正整数,表示序列 aa

第三行 n1n-1 个正整数,保证每个数都是 0 或 1。第 ii 个正整数若为 0 则表示第 ii 个操作数和第 i+1i+1 个操作数之间有一个 \gets,否则有一个 \to

输出格式

一行一个正整数,表示最终能得到多少种答案。

样例组 #1

样例组下载:Download

输入样例 #1

5
1 2 3 2 1
0 1 1 0

输出样例 #1

2

样例解释

原始表达式:a1a2a3a4a5a_1\gets a_2\to a_3\to a_4\gets a_5

答案只可能是 1 或 2,下面分别给出一种可能的加括号方式:

  • ((a1a2)(a3a4))a5=1((a_1\gets a_2)\to (a_3\to a_4))\gets a_5=1
  • (a1a2)(a3(a4a5))=2(a_1\gets a_2)\to (a_3\to (a_4\gets a_5))=2

样例组 #2

见附加文件中 arrow2.in / arrow2.ans

样例组 #3

见附加文件中 arrow3.in / arrow3.ans

样例组 #4

见附加文件中 arrow4.in / arrow4.ans

样例组 #5

见附加文件中 arrow5.in / arrow5.ans

数据范围

各测试点分数等分。

  • 对于测试点 151\sim5,保证 n10n\le 10
  • 对于测试点 6106\sim10,保证所有箭头的方向都一样。
  • 对于测试点 111511\sim15,保证所有相邻的箭头的方向都不一样。
  • 对于测试点 162016\sim20,无特殊限制。

对于全部数据,2n5×1052\le n\le5\times10^51ai1091\le a_i\le 10^9