如果一个整数,其各个数位不包含 三元数异或(秋季每日一题 4)_#include

例如,三元数异或(秋季每日一题 4)_#include_02

给定一个可能很长的三元数 三元数异或(秋季每日一题 4)_数位_03,其首位数字(最左边那位)保证为 三元数异或(秋季每日一题 4)_#include_04,其他位数字为 三元数异或(秋季每日一题 4)_#include_05三元数异或(秋季每日一题 4)_贪心_06

我们规定,两个长度为 三元数异或(秋季每日一题 4)_数位_07 的三元数 三元数异或(秋季每日一题 4)_#include_08三元数异或(秋季每日一题 4)_数位_09 可以通过三元异或运算 三元数异或(秋季每日一题 4)_数位_10 得到另一个长度为 三元数异或(秋季每日一题 4)_数位_07 的三元数 三元数异或(秋季每日一题 4)_数据_12

三元数异或(秋季每日一题 4)_数据_13 分别表示 三元数异或(秋季每日一题 4)_#include_14 的第 三元数异或(秋季每日一题 4)_数据_15 位的数字,则 三元数异或(秋季每日一题 4)_数据_16

例如,三元数异或(秋季每日一题 4)_贪心_17

你的任务是对于每个给定的 三元数异或(秋季每日一题 4)_数位_03,求出可以满足 三元数异或(秋季每日一题 4)_数据_19,并且 三元数异或(秋季每日一题 4)_贪心_20 尽可能小的 三元数异或(秋季每日一题 4)_数位_21

注意,三元数异或(秋季每日一题 4)_数位_21 都必须是 三元数异或(秋季每日一题 4)_数位_07 位三元数,且不含前导 三元数异或(秋季每日一题 4)_#include_05

输入格式
第一行包含整数 三元数异或(秋季每日一题 4)_贪心_25,表示共有 三元数异或(秋季每日一题 4)_贪心_25

每组数据第一行包含整数 三元数异或(秋季每日一题 4)_数位_07,表示 三元数异或(秋季每日一题 4)_数位_03

第二行包含一个长度为 三元数异或(秋季每日一题 4)_数位_07,首位为 三元数异或(秋季每日一题 4)_#include_04 的三元数 三元数异或(秋季每日一题 4)_数位_03

输出格式
每组数据输出占两行,分别包含数 三元数异或(秋季每日一题 4)_#include_08 和数 三元数异或(秋季每日一题 4)_数位_09

如果答案不唯一,则输出任意合理答案均可。

数据范围
三元数异或(秋季每日一题 4)_#include_34
三元数异或(秋季每日一题 4)_#include_35
同一测试点所有 三元数异或(秋季每日一题 4)_数位_07 的和不超过 三元数异或(秋季每日一题 4)_#include_37

输入样例:

4
5
22222
5
21211
1
2
9
220222021

输出样例:

11111
11111
11000
10211
1
1
110111011
110111010

#include<iostream>
#include<cstring>

using namespace std;

const int N = 50010;

typedef long long LL;

int n;
char s[N], a[N], b[N];

int main(){

int t;

scanf("%d", &t);

while(t--){

scanf("%d%s", &n, s);

char c1, c2;
bool flag = false;
for(int i = 0; i < n; i++){

if(s[i] == '0'){

c1 = c2 = '0';

}else if(s[i] == '1'){

if(flag) c1 = '1', c2 = '0';
else flag = true, c1 = '0', c2 = '1';

}else{

if(i == 0 || !flag) c1 = c2 = '1';
else c1 = '2', c2 = '0';

}

a[i] = c1, b[i] = c2;
}
a[n] = '\0', b[n] = '\0';
puts(a), puts(b);
}

return 0;
}