#P16522. [Dapc2025]Calculation Obfuscation
[Dapc2025]Calculation Obfuscation
题目描述
原表达式的语法与多数编程语言相似;事实上,它本身是一个合法的 Python 表达式。
表达式满足以下规则:
- 表达式由数字、变量和括号表达式组成,它们之间使用运算符
+和*连接; - 括号表达式由一对
(和)包围; - 一个数字由一个或多个数字字符
0到9组成;除数字0本身外,数字不能含有前导零; - 一个变量以英文字母开头,后面可以跟零个或多个英文字母或数字;
- 运算符
*的优先级高于运算符+。
例如,(abc+var0)*(12+0) 是一个合法表达式:变量 abc 与 var0 的和,乘以数字 12 与 0 的和。
Marijn 还记得,原表达式中没有任何多余的括号。例如:
a+(b+c)不会出现,因为+满足结合律,这里的括号是多余的;(a*b)+c不会出现,因为*的优先级本来就高于+,这里的括号也是多余的。
注意:并不要求删除任意一对括号后,表达式的实际计算结果一定发生变化;这里只讨论语法结构、运算优先级和结合律意义下的多余括号。
现在给定原表达式所有字符被打乱后得到的字符串。你需要判断这些字符能否重新排列成一个满足全部要求的表达式。如果可以,输出任意一个可行表达式。
重新排列后必须恰好使用输入字符串中的全部字符,并且每个字符的出现次数必须保持不变。
输入格式
第一行输入一个整数 ,表示字符串长度。
第二行输入一个长度为 的字符串 。字符串仅包含以下字符:
(、)、+、*;- 数字字符
0到9; - 小写英文字母
a到z。
输出格式
如果不存在符合要求的表达式,输出一行:
impossible
否则,先输出一行:
possible
再输出一行由输入字符重新排列得到的合法表达式。
如果有多个可行答案,输出任意一个即可。
本题采用 Special Judge。
数据范围
对于全部数据:
- ;
- 。
样例 1
7
123test
possible
test321
样例 2
10
012var+*()
possible
(var2+0)*1
样例 3
7
(1+2)+3
impossible
样例 4
7
(000+*)
possible
(0+0)*0
样例 5
2
00
impossible
样例 6
9
((1+2))*3
impossible
样例 7
10
bilmseiops
possible
impossible