Johnny 是联合密码存储(Joint Password Storage,简称 JPS)系统的开发者。以明文形式存储密码是一个糟糕的主意。JPS 将每个密码拆分为多个部分并分别存储。
密码是一个由数字和英文字母组成的字符串。所有拆分部分的按位异或(XOR)值必须等于原密码。为了不引人注意,Johnny 决定让每个部分看起来都像是一些普通的东西,比如算术等式。还有什么比像 “2+2=4” 这样的等式更普通的呢?
形式上,密码的一个有效拆分是指一组长度与原密码相同的正确算术等式,使得在每个位置上,这些等式中字符的 ASCII 码的按位异或值等于原密码对应位置字符的 ASCII 码。一个正确的算术等式是一个由以下文法描述的字符串,且等号两边的表达式计算出的数值相等。运算符优先级为标准优先级:任何类型的括号中的表达式优先级最高,乘法优先级高于加法和减法,相同优先级的运算符从左到右依次计算。
$$\langle\text{equality}\rangle ::= \langle\text{expression}\rangle \text{ '=' } \langle\text{expression}\rangle$$ $$\langle\text{expression}\rangle ::= \langle\text{term}\rangle \mid \langle\text{expression}\rangle \text{ '+' } \langle\text{term}\rangle \mid \langle\text{expression}\rangle \text{ '-' } \langle\text{term}\rangle$$ $$\langle\text{term}\rangle ::= \langle\text{multiplier}\rangle \mid \langle\text{term}\rangle \text{ '*' } \langle\text{multiplier}\rangle$$ $$\langle\text{multiplier}\rangle ::= \langle\text{number}\rangle \mid \text{ '(' } \langle\text{expression}\rangle \text{ ')' } \mid \text{ '[' } \langle\text{expression}\rangle \text{ ']' } \mid \text{ '{' } \langle\text{expression}\rangle \text{ '}' }$$ $$\langle\text{number}\rangle ::= \text{ '0' } \mid (\text{ '1' } \mid \dots \mid \text{ '9' }) (\text{ '0' } \mid \dots \mid \text{ '9' })^*$$
为了方便起见,下面提供了所有相关字符的 ASCII 码:
( |
) |
* |
+ |
- |
0-9 |
= |
A-Z |
[ |
] |
a-z |
{ |
} |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 41 | 42 | 43 | 45 | 48-57 | 61 | 65-90 | 91 | 93 | 97-122 | 123 | 125 |
您的任务是编写一个拆分模块,将密码转换为若干个正确的算术等式的按位异或。
输入格式
第一行包含一个整数 $P$ ($1 \le P \le 50$) —— 待拆分的密码数量。
接下来的 $P$ 行,每行包含一个字符串 —— 密码 $s$ ($10 \le |s| \le 50$)。密码可以包含数字、英文小写字母和英文大写字母。
输出格式
对于每个密码,如果不存在有效的拆分,输出一行单个单词 “NO”。
否则,第一行输出单个单词 “YES”。第二行输出一个整数 $k$ ($1 \le k \le 1000$) —— 拆分中等式的数量。接下来的 $k$ 行,每行输出一个等式。可以证明,如果存在解,则必然存在一个 $k$ 不超过 1000 的解。
样例
输入样例 1
3 1915090454 CanIAlwaysSplitIt 2020NorthwesternRussiaRegionalContestTaskJ
输出样例 1
YES
3
9+91*9=828
1+19+0=4*5
999=1008-9
NO
YES
7
420+[1*2*3*4*5*6]=140+[1*10*1*[20-5-5]*10]
10-1-{1}-{1}-{1}-{1}={1}+{1}+{1}+{{1}+{1}}
739=1+{3}*{2}*{9}*{9}-3+{2}*7*11*1+{100}+1
602211592866240={54321*67890}*9*{8*7*6*54}
51-188*1*0*600198090+5=[0]*(1039-25-4)+8*7
0*990-5127*11590*740*0*[3]*90=8*0*4885*2*8
3*0-0*818*39=0*(6+10*(64))*200*(93+6+8+19)