#include <bits/stdc++.h>
using namespace std;


double r(string s){
	if( s == "north" ) return 0;
	if( s == "west" ) return 90;
	int n = count(s.begin(),s.end(),'w') + count(s.begin(),s.end(),'n') - 1;
	if( s[0] == 'n' ){
		return r(s.substr(5)) - 90. / (1<<n);
	}else{
		return r(s.substr(4)) + 90. / (1<<n);
	}
}

char to(int x){
	if( x < 10 ) return x + '0';
	else return x + 'A' - 10;
}
int prob[1000][36];
int main(){
	int n,m,q;
	while(cin >> n >> m >> q && n){

		for(int i = 0 ; i < m ; i++)
			for(int j = 0 ; j < n ; j++)
				prob[i][j] = true;
		string prev = string(m,'0');
		for(int _ = 0 ; _ < q ; _++){
			string a,b;
			cin >> a >> b;
			string tmp = b;
			for(int i = 0 ; i < m ; i++){
				b[i] = (b[i]!=prev[i]?'1':'0');
			}
			for(int i = 0 ; i < a.size() ; i++){
				for(int j = 0 ; j < b.size() ; j++){
					if( a[i] != b[j] ){
						prob[j][i] = 0;
					}
				}
			}
			prev = tmp;
		}
		for(int i = 0 ; i < m ; i++){
			int c = count(prob[i],prob[i]+n,1);
			
			if( c == 1 ) cout << to(find(prob[i],prob[i]+n,1) - prob[i]);
			else cout << '?';
			
		}
		cout << endl;
	}
}