#P16522. [Dapc2025]Calculation Obfuscation

[Dapc2025]Calculation Obfuscation

题目描述

原表达式的语法与多数编程语言相似;事实上,它本身是一个合法的 Python 表达式。

表达式满足以下规则:

  • 表达式由数字、变量和括号表达式组成,它们之间使用运算符 +* 连接;
  • 括号表达式由一对 () 包围;
  • 一个数字由一个或多个数字字符 09 组成;除数字 0 本身外,数字不能含有前导零;
  • 一个变量以英文字母开头,后面可以跟零个或多个英文字母或数字;
  • 运算符 * 的优先级高于运算符 +

例如,(abc+var0)*(12+0) 是一个合法表达式:变量 abcvar0 的和,乘以数字 120 的和。

Marijn 还记得,原表达式中没有任何多余的括号。例如:

  • a+(b+c) 不会出现,因为 + 满足结合律,这里的括号是多余的;
  • (a*b)+c 不会出现,因为 * 的优先级本来就高于 +,这里的括号也是多余的。

注意:并不要求删除任意一对括号后,表达式的实际计算结果一定发生变化;这里只讨论语法结构、运算优先级和结合律意义下的多余括号。

现在给定原表达式所有字符被打乱后得到的字符串。你需要判断这些字符能否重新排列成一个满足全部要求的表达式。如果可以,输出任意一个可行表达式。

重新排列后必须恰好使用输入字符串中的全部字符,并且每个字符的出现次数必须保持不变。

输入格式

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

第二行输入一个长度为 nn 的字符串 ss。字符串仅包含以下字符:

  • ()+*
  • 数字字符 09
  • 小写英文字母 az

输出格式

如果不存在符合要求的表达式,输出一行:

impossible

否则,先输出一行:

possible

再输出一行由输入字符重新排列得到的合法表达式。

如果有多个可行答案,输出任意一个即可。

本题采用 Special Judge。

数据范围

对于全部数据:

  • 1n3×1051\le n\le 3\times 10^5
  • s=n|s|=n

样例 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