小 Zhenya 教她的机器人 Murzik 如何计算编辑距离。众所周知,两个字符串 $s$ 和 $t$ 之间的编辑距离(或称 Levenshtein 距离)是将 $s$ 转换为 $t$ 所需的最少操作次数。这里的每一步操作必须是:从字符串中删除任意单个字符、在任意位置插入任意单个字符,或将任意单个字符更改为其他任意单个字符。例如,字符串 “sport” 和 “point” 之间的编辑距离是 3:我们可以删除字母 “s”,将 “r” 改为 “i”,并在其后插入 “n”。
Murzik 还很年轻,只有在数据是二进制(由 0 和 1 组成的字符串)时才能正常工作。不过,机器人的程序也可以包含其他字符。Zhenya 为 Murzik 准备了一个模块,通过练习帮助它理解这个概念。该模块以一个由 0 和 1 组成的字符串 $s$ 作为输入数据,以字符串 $p$ 作为程序。机器人将指针放在字符串 $s$ 的左边缘(第一个字符之前),并从左到右逐步运行程序。程序中的字符对应以下步骤:
- “.”:将指针向右移动一个字符。
- “x”:删除指针后的字符。
- “0”:在指针位置插入字符 “0”,并将指针置于其右侧。
- “1”:在指针位置插入字符 “1”,并将指针置于其右侧。
- “^”:将指针后的字符更改为相反字符,并将指针置于其右侧。
当删除一个字符时,字符串的剩余部分会靠拢,使得中间没有空位。当添加一个字符时,各部分会向两侧移动,为新字符腾出空间。如果指针右侧没有字符,则任何对指针右侧字符进行操作的程序指令都是无效的。
Zhenya 选择了两个长度均为 $n$ 的二进制字符串 $s$ 和 $t$,现在想要构造一个有效的程序,使得在字符串 $s$ 上运行该程序后,Murzik 能得到字符串 $t$,且指针位于字符串的最后一个字符之后。
除简单的指针移动外,所有步骤都是编辑距离定义中的操作。“.” 步骤不被视为操作。对于她的例子,Zhenya 想要构造任何操作次数严格小于 $n$ 的程序:不需要最小化操作次数。当然,对于短字符串,只要存在这样的程序,找到它很容易,但 Zhenya 开始思考:当字符串包含数十万个字符时,如何构造这样的程序?
解决 Zhenya 问题的通用版本。给定长度均为 $n$ 的二进制字符串 $s$ 和 $t$,找到任何能让 Murzik 将 $s$ 转换为 $t$ 且操作次数严格小于 $n$ 的程序,或者确定不存在这样的程序。请记住,程序运行结束后,指针必须位于字符串的最后一个字符之后。
输入格式
输入的第一行包含一个二进制字符串 $s$,第二行包含一个二进制字符串 $t$。保证 $s$ 和 $t$ 包含相同数量的字符 $n$ ($1 \le n \le 10^6$)。
输出格式
输出一行。如果没有合适的程序,该行必须包含单个字符 “-” (ASCII 码 45)。否则,输出任何合适的程序,由字符 “.x01^” (ASCII 码 46, 120, 48, 49, 94) 组成。操作次数必须严格小于 $n$,但不要求是最小可能的。程序运行结束后,指针必须位于字符串的最后一个字符之后。
样例
样例输入 1
0011010 1100100
样例输出 1
xx...^10.
样例输入 2
1 0
样例输出 2
-