#include <iostream>
#include <string>
using namespace std;
int t;
int main()
{
    cin >> t;
    for (int i = 0; i < t; ++i) {
        int a[2];
        cin >> a[0] >> a[1];
        string s;
        cin >> s;
        for (auto c : s) {
            if (c <= '1' && c >= '0')
                a[c - '0']--;
        }
        bool flag = true;
        for (int i = 0; i < s.size() - 1 - i; ++i) {
            if (s[i] == '?') {
                if (s[s.size() - 1 - i] != '?') {
                    a[s[s.size() - 1 - i] - '0']--;
                    s[i] = s[s.size() - 1 - i];
                }
            } else {
                if (s[s.size() - 1 - i] == '?') {
                    a[s[i] - '0']--;
                    s[s.size() - 1 - i] = s[i];
                } else {
                    if (s[i] != s[s.size() - 1 - i]) {
                        flag = false;
                        break;
                    }
                }
            }
        }
        if (s.size() % 2 && s[s.size() / 2] == '?') {
            if ((a[0] % 2) + (a[1] % 2) == 1) {
                if (a[0] % 2) {
                    a[0]--;
                    s[(s.size() - 1) / 2] = '0';
                } else {
                    a[1]--;
                    s[(s.size() - 1) / 2] = '1';
                }
            } else {
                flag = false;
            }
        }
        for (int i = 0; i < s.size() - 1 - i; ++i) {
            if (s[i] == '?') {
                int num = 2;
                if (a[0] >= num) {
                    a[0] -= num;
                    s[i] = s[s.size() - 1 - i] = '0';
                } else if (a[1] >= num) {
                    a[1] -= num;
                    s[i] = s[s.size() - 1 - i] = '1';
                } else {
                    flag = false;
                    break;
                }
            }
        }
        if (flag && a[0] == 0 && a[1] == 0) {
            cout << s << endl;
        } else {
            cout << -1 << endl;
        }
    }
}
