Processing math: 100%
编程题
                ### 问题描述

现在给定你一个长度为 n 的字符串 a,这个字符串由 0,1 构成。

假设存在一个由 truefalse 构造出的长度为 n+1 的序列 S,我们定义序列 S 相邻两个元素之间有一个空槽,现在序列 S 一共有 n 个空槽。

我们将字符串 a 每一项按顺序从左到右依次填入到序列 S 的空槽中,此时我们定义 a[i]=0S 相邻的两个元素做与运算,a[i]=1 为相邻的两个元素做异或运算。

接下来我们将序列 S 从左到右依次执行位运算,例如 a=10,S=[true,false,true],则该运算最终定义为 truefalse&true=true

注意:计算机默认优先级为 &>>|,而我们在这里的定义为依次运算,所以你无需考虑运算符优先级,只需从左往右依次计算即可。

最后询问你,在 a 字符串每一项插入到 S 序列后使得运算结果为 trueS 序列由多少种不同构造方法,输出结果对 998244353 取模。

定义 true=1,false=0

与运算: 1&1=1,1&0=0,0&0=0

异或运算: 11=0,10=1,00=0

输入格式

第一行输入一个整数 n 表示字符串 a 长度。

第二行输入长度为 n01 串。

输出格式

输出 S 有多少种不同的构造方式,对 998244353 取模。

样例输入

2
01

样例输出

4

说明

[true,false,true],[true,true,false],[false,true,true],[false,false,true] 都是符合构造条件的 S 序列。

评测数据规模

1n105

查看答案
赣ICP备20007335号-2