#include <algorithm>
#include <iostream>
#include <vector>
#include <math.h>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <iomanip>
#include <numeric>
#include <tuple>
#include <bitset>
#include <complex>
#include <unistd.h>
#include <cassert>
#include <cctype>
#include <random>
#define _USE_MATH_DEFINES
#define _GLIBCXX_DEBUG
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> plglg;
typedef tuple<int, int, int> tiii;
typedef tuple<ll, ll, ll> tlglglg;
typedef complex<double> xy_t;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
double pi = 3.141592653589793;
ll mod = 1000000007;
int intmax = 2147483647;
int intmin = -2147483648;
ll llmax = 9223372036854775807;
ll llmin = -9223372036854775807;
int iinf = intmax / 8;
ll inf = llmax / 8;
double eps = 1e-11;

char moji(int i) {
    if (i <= 9) {
        return i + '0';
    } else {
        return (i - 10) + 'A';
    }
}

int main() {
    while (1) {
        int N, M, Q;
        cin >> N >> M >> Q;
        if (N == 0) {
            break;
        }
        bool bo[N][M];
        for (int i = 0; i < N; i++) {
            fill(bo[i], bo[i] + M, true);
        }
        bool swi[N];
        fill(swi, swi + N, false);
        for (int i = 0; i < Q; i++) {
            string s, b;
            cin >> s >> b;
            for (int j = 0; j < N; j++) {
                if (s[j] == '1') {
                    swi[j] = !swi[j];
                }
                char c = (swi[j]) ? '1' : '0';
                for (int k = 0; k < M; k++) {
                    if (b[k] != c) {
                        bo[j][k] = false;
                    }
                }
            }
        }
        string ans = "";
        for (int i = 0; i < M; i++) {
            int ok = 0;
            int num = 0;
            for (int j = 0; j < N; j++) {
                if (bo[j][i]) {
                    ok++;
                    num = j;
                }
            }
            if (ok == 1) {
                ans += moji(num);
            } else {
                ans += '?';
            }
        }
        cout << ans << endl;
    }
}

