#include <cstdio>
#include <utility>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <string>
#define REP(i,n) for(int i=0;i<n;i++)
typedef long long ll;
using namespace std;
typedef vector<ll> vl;
typedef pair<ll,ll> pll;
typedef vector<pll> vpll;
typedef vector<string> vs;

int main() 
{
	int n,m,q;
	while(cin>>n>>m>>q&&!(n==0&&m==0&&q==0))
	{
		int a[1001][37]={};//スイッチの述べ回数
		int b[1001][1001]={};//ランプの延べ回数
		
		char s[1001][37]={};
		char t[1001][1001]={};
		
		for(int i=0;i<q;i++)
		{
			cin>>s[i]>>t[i];
			for(int j=0;j<n;j++)
			{
				if(i==0&&s[i][j]=='0'){a[i][j]=0;}
				else if(i==0&&s[i][j]=='1'){a[i][j]=1;}
				else if(i!=0&&s[i][j]=='0'){a[i][j]=a[i-1][j];}
				else if(i!=0&&s[i][j]=='1'){a[i][j]=a[i-1][j]+1;}
			}
			
			for(int j=0;j<m;j++)
			{
				if(i==0&&t[i][j]=='0'){b[i][j]=0;}
				else if(i==0&&t[i][j]=='1'){b[i][j]=1;}
				else if(i!=0&&t[i][j]==t[i-1][j]){b[i][j]=b[i-1][j];}
				else if(i!=0&&t[i][j]!=t[i-1][j]){b[i][j]=b[i-1][j]+1;}
			}
		}
		
		for(int j=0;j<m;j++)
		{
			int count(0),ans;
			for(int k=0;k<n;k++)
			{
				if(b[q-1][j]==a[q-1][k])
				{
					bool flag=false;
					REP(l,q){if(b[l][j]!=a[l][k]){flag=true;break;}}
					if(!flag)
					{
						count++;
						ans=k;
					}
				}
				if(count>1){break;}
			}
			char x='A'+ans-10;
			if(count>1){cout<<'?';}
			else if(ans<10){cout<<ans;}
			else{cout<<x;}
		}
		cout<<endl;
	}
	return 0;
}