题解:
找出无解的情况之后,4个或者3个分成一组就可以了。
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char a[N];
int res[N];
void solve()
{
int n; scanf("%d",&n);
scanf("%s",a+1);
if(n%4!=0&&n%4!=3){
puts("-1");
return;
}
int len=strlen(a+1);
if(n%4==0){
for(int i=1;i<=len;i+=4){
int flag=0;
for(int j=i,cnt=1;j<=i+1;j++,cnt++){
if(flag) {
res[j] = a[j] == '1' ? 4 : 2;
res[i + 4 - cnt] = a[i + 4 - cnt] == '1' ? 4 : 2;
// cout<<"----"<<i+4-j<<endl;
}else {
res[j] = a[j] == '1' ? 3 : 1;
res[i + 4 - cnt] = a[i + 4 - cnt] == '1' ? 3 : 1;
// cout<<"-----"<<i+4-j<<endl;
}
flag=!flag;
}
}
}else{
res[1]=a[1]=='1'?3:1;
res[3]=a[3]=='1'?4:2;
res[2]=a[2]=='1'?3:1;
for(int i=4;i<=len;i+=4){
int flag=0;
for(int j=i,cnt=1;j<=i+1;j++,cnt++){
if(flag) {
res[j] = a[j] == '1' ? 4 : 2;
res[i + 4 - cnt] = a[i + 4 - cnt] == '1' ? 4 : 2;
// cout<<"----"<<i+4-j<<endl;
}else {
res[j] = a[j] == '1' ? 3 : 1;
res[i + 4 - cnt] = a[i + 4 - cnt] == '1' ? 3 : 1;
// cout<<"-----"<<i+4-j<<endl;
}
flag=!flag;
}
}
}
for(int i=1;i<=len;i++) printf("%d",res[i]);
puts("");
}
signed main()
{
int t; scanf("%d",&t);
while(t--) solve();
}