#include <bits/stdc++.h>
using namespace std;
#define int  long long 
#define endl '\n'
#define tez ios_base::sync_with_stdio(false);cin.tie(NULL);
#define PB push_back
#define FOR(n) for(int i=0;i<n;i++)

void solve()
{
	int a,b;
	string s;
	cin>>a>>b>>s;
	int n=s.size();

	for(int i=0;i<n;i++){
		if(s[i]!='?' && s[n-i-1]=='?'){
			s[n-i-1]=s[i];
		}
		else if(s[i]!='?' && s[n-1-i]!='?' && s[i]!=s[n-1-i]){
			cout<<"-1"<<endl;
			return ;
		}
	}
	int one=0,zero=0,ques=0;
	for(int i=0;i<n;i++){
		if(s[i]=='1'){
			one++;
		}
		else if(s[i]=='0'){
			zero++;
		}
		else{
			ques++;
		}
	}
	a-=zero;
	b-=one;
	if(a==0 && b==0){
		cout<<s<<endl;
		return ;
	}
	for(int i=0;i<n;i++){
		if(s[i]==s[n-1-i] && s[i]=='?'){
			if(a>0 && a>=b){
				s[i]='0';
				s[n-i-1]='0';
				if(i==n/2 && n%2){
					a--;
				}
				else{
					a-=2;
				}
			}
			else{
				if(b>0){
					s[i]='1';
					s[n-i-1]='1';
					if(i==n/2 && n%2){
						b--;
					}
					else{
						b-=2;
					}
				}
			}
		}
	}
	if(a!=0 || b!=0){
		cout<<"-1"<<endl;
		return ;
	}
	cout<<s<<endl;
}
signed main()
{
	int t;cin>>t;
	while(t--)
	{
		solve();
	}
}