摆烂合唱
题目信息
时间限制: 1s
空间限制: 256M
输入文件: binary.in
输出文件: binary.out
题目描述
二进制合唱是二进制中学每年迎新晚会的必备项目,二进制合唱由 n n n 位同学和一个合唱队形组成,每位同学只需会唱 0 或 1 两个声调,合唱队形由 n − 1 n-1 n − 1 个确定的符号组成,每个符号是 a n d , o r , x o r and, or, xor an d , or , x or 中的一个,每次合唱的最终声调是由每位同学的声调通过合唱队形,即 n − 1 n-1 n − 1 个符号运算得出的。
时过境迁,二进制中学的新同学们越来越聪明,但是越来越喜欢在集体活动中摆烂,因此二进制合唱逐渐演变成每位同学计算 f f f 函数的一个活动。f f f 函数的定义如下:对于第 i i i 位同学,f ( i ) f(i) f ( i ) 表示当除了 i i i 同学以外所有同学唱出的声调确定时, i i i 同学唱出的声调为 0 和 1 两种状态下,合唱的最终声调不同的概率。
例如,由两位同学组成的合唱 x o r y x\ or\ y x or y ,有 f ( x ) = 1 2 f(x)=\frac{1}{2} f ( x ) = 2 1 ,因为当 y = 0 y=0 y = 0 时,x x x 的两种声调会导致最终声调不相等;但当 y = 1 y=1 y = 1 时,x x x 无论唱出什么声调,都无法影响到合唱最终声调的值(最终声调始终为 1)。所以 x x x 取 0 和取 1 两种状态导致合唱最终声调的值不相等的概率为 1 2 \frac{1}{2} 2 1 。
再例如 x x o r y x\ xor\ y x x or y ,有 f ( x ) = 1 f(x)=1 f ( x ) = 1 ,因为无论 y y y 的取值如何,x x x 的取值不同时,x x o r y x\ xor y x x or y 的值总是不同的。
每位同学都想知道自己的 f ( i ) f(i) f ( i ) 的值,结果对 998244353 取模。大家想在合唱摆烂而争相计算自己的 f f f 函数,这何尝不是新版本的集体活动呢?
合唱队形由表达式 E x p r Expr E x p r 组合而成:
E x p r Expr E x p r 可以是一个单独的变量(一位同学唱出的声调);
否则,E x p r Expr E x p r 将表示成 ( E x p r 1 o p E x p r 2 ) (Expr1\ op\ Expr2) ( E x p r 1 o p E x p r 2 ) ,其中 E x p r 1 Expr1 E x p r 1 和 E x p r 2 Expr2 E x p r 2 分别是表达式,o p op o p 是一种运算符,输入保证不会省略任何括号(包括整个表达式外的括号)。
输入格式
第一行一个整数 n n n ,表示参与二进制合唱的同学数
第二行一个字符串 s s s ,表示给定的合唱队形,格式见题目描述。
在 s s s 中,不存在空格,用 & 表示 and,用 | 表示 or,用 ^ 表示 xor,用 x \mathrm{x} x 表示一个同学,保证 s s s 中恰有 n − 1 n-1 n − 1 个符号和 n n n 个同学,每个符号都有对应的括号限定运算的先后关系(即共有 n − 1 n-1 n − 1 对括号);
输出格式
共 n n n 行,第 i i i 行一个整数 f ( i ) f(i) f ( i ) ,代表给定的合唱队形中从左到右第 i i i 个同学的 f f f 值对 998244353 取模的结果。
样例
样例输入 1
样例输出 1
文本 复制
249561089
249561089
748683265
748683265
样例解释 1
输出的四个数分别为 3 4 , 3 4 , 1 4 , 1 4 \frac{3}{4}, \frac{3}{4}, \frac{1}{4}, \frac{1}{4} 4 3 , 4 3 , 4 1 , 4 1 。
数据范围与提示
对于 100 % 100 \% 100% 的数据:1 ≤ n ≤ 10 5 1 \leq n \leq 10^5 1 ≤ n ≤ 1 0 5 ,s s s 是合法的二进制表达式,遵从题目描述和输入格式中的所有规定。
Subtask 1 (5 pts): n ≤ 1 n \leq 1 n ≤ 1 ;
Subtask 2 (25 pts): n ≤ 16 n \leq 16 n ≤ 16 ;
Subtask 3 (30 pts): n ≤ 10 3 n \leq 10^3 n ≤ 1 0 3 ;
Subtask 4 (40 pts): 无特殊限制。