#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
using namespace std;
int T;
int main()
{
scanf("%d",&T);
for (int i=1;i<=T;i++)
{
int a,b;
string s;
scanf("%d%d",&a,&b);
cin >> s;
int len=s.length();
if (len!=a+b)
{
printf("-1\n");
continue;
}
if (a%2==1 && b%2==1)
{
printf("-1\n");
continue;
}
int w=0,z=0;
for (int j=0;j<len;j++)
{
if (s[j]=='0') w++;
if (s[j]=='1') z++;
}
if (w>a || z>b)
{
printf("-1\n");
continue;
}
bool gt=false;
for (int j=0;j<len;j++)
{
if (s[j]=='0')
{
if (s[len-j-1]=='0' && j<len/2)
{
a-=2;
continue;
}
if (s[len-j-1]=='1')
{
gt=true;
break;
}
if (s[len-j-1]=='?')
{
if (a<=1)
{
gt=true;
break;
}
else
{
a-=2;
s[len-j-1]='0';
continue;
}
}
}
if (s[j]=='1')
{
if (s[len-j-1]=='1' && j<len/2)
{
b-=2;
continue;
}
if (s[len-j-1]=='0')
{
gt=true;
break;
}
if (s[len-j-1]=='?')
{
if (b<=1)
{
gt=true;
break;
}
else
{
b-=2;
s[len-j-1]='1';
continue;
}
}
}
}
if (gt==true)
{
printf("-1\n");
continue;
}
if (len%2==1)
{
if (s[len/2]=='0') a--;
if (s[len/2]=='1') b--;
if (s[len/2]=='?')
{
if (a%2==1)
{
s[len/2]='0';
a--;
}
else if (b%2==1)
{
s[len/2]='1';
b--;
}
else
{
printf("-1\n");
continue;
}
}
}
if (a%2==1 || b%2==1)
{
printf("-1\n");
continue;
}
for (int j=0;j<len;j++)
{
if (s[j]=='?')
{
if (a>1)
{
a-=2;
s[len-j-1]='0';
printf("0");
}
else
{
b-=2;
s[len-j-1]='1';
printf("1");
}
}
else printf("%c",s[j]);
}
printf("\n");
}
return 0;
}
第二个点5595WA了,大佬们给看一下