#include<iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int QwQ,qWq;
int a,b;
string s;
cin>>a>>b;
QwQ=a,qWq=b;
cin>>s;
//cout<<"Out:";
if(a%2==1&&b%2==1){cout<<"-1\n";continue;}
for(int i=0;i<s.length();i++){
if(s[i]=='0')a--;
else if(s[i]=='1')b--;
}
for(int i=0;i<s.length();i++){
if(s[i]=='1'&&s[s.length()-i-1]=='?'){s[s.length()-i-1]='1';b--;}
else if(s[i]=='0'&&s[s.length()-i-1]=='?'){s[s.length()-i-1]='0';a--;}
}
if(s.length()%2==1&&s[s.length()/2]=='?'&&a-1>=0){s[s.length()/2]='0';a--;}
else if(s.length()%2==1&&s[s.length()/2]=='?'&&b-1>=0){s[s.length()/2]='1';b--;}
//cout<<a<<" "<<b<<endl;
for(int i=0;i<s.length()/2&&a;i++){
if(s[i]=='?'&&s[s.length()-i-1]){s[i]='0';s[s.length()-i-1]='0';a-=2;}
}
for(int i=0;i<s.length()/2&&b;i++){
if(s[i]=='?'&&s[s.length()-i-1]){s[i]='1';s[s.length()-i-1]='1';b-=2;}
}
int x=0,y=0;
bool awa=1;
//cout<<s<<endl;
for(int i=0;i<s.length();i++){
if(s[i]=='1')y++;
if(s[i]=='0')x++;
if(s[i]=='?'){awa=0;break;}
if(s[i]!=s[s.length()-i-1]){awa=0;break;}
}
if(awa&&x==QwQ&&y==qWq)cout<<s<<endl;
else cout<<"-1"<<endl;
}
return 0;
}
第二个点WA QwQ,有Dalao可以给出Hack数据吗