Problem Statement

In the headquarter building of ICPC (International Company of Plugs & Connectors), there are $M$ light bulbs and they are controlled by $N$ switches. Each light bulb can be turned on or off by exactly one switch. Each switch may control multiple light bulbs. When you operate a switch, all the light bulbs controlled by the switch change their states. You lost the table that recorded the correspondence between the switches and the light bulbs, and want to restore it.

You decided to restore the correspondence by the following procedure.

* At first, every switch is off and every light bulb is off.
* You operate some switches represented by $S_1$.
* You check the states of the light bulbs represented by $B_1$.
* You operate some switches represented by $S_2$.
* You check the states of the light bulbs represented by $B_2$.
* ...
* You operate some switches represented by $S_Q$.
* You check the states of the light bulbs represented by $B_Q$.



After you operate some switches and check the states of the light bulbs, the states of the switches and the light bulbs are kept for next operations.

Can you restore the correspondence between the switches and the light bulbs using the information about the switches you have operated and the states of the light bulbs you have checked?

Input

The input consists of multiple datasets. The number of dataset is no more than $50$ and the file size is no more than $10\mathrm{MB}$. Each dataset is formatted as follows.

> $N$ $M$ $Q$
> $S_1$ $B_1$
> :
> :
> $S_Q$ $B_Q$

The first line of each dataset contains three integers $N$ ($1 \le N \le 36$), $M$ ($1 \le M \le 1{,}000$), $Q$ ($0 \le Q \le 1{,}000$), which denote the number of switches, the number of light bulbs and the number of operations respectively. The following $Q$ lines describe the information about the switches you have operated and the states of the light bulbs you have checked. The $i$-th of them contains two strings $S_i$ and $B_i$ of lengths $N$ and $M$ respectively. Each $S_i$ denotes the set of the switches you have operated: $S_{ij}$ is either $0$ or $1$, which denotes the $j$-th switch is not operated or operated respectively. Each $B_i$ denotes the states of the light bulbs: $B_{ij}$ is either $0$ or $1$, which denotes the $j$-th light bulb is off or on respectively.

You can assume that there exists a correspondence between the switches and the light bulbs which is consistent with the given information.

The end of input is indicated by a line containing three zeros.

Output

For each dataset, output the correspondence between the switches and the light bulbs consisting of $M$ numbers written in base-$36$. In the base-$36$ system for this problem, the values $0$-$9$ and $10$-$35$ are represented by the characters '0'-'9' and 'A'-'Z' respectively. The $i$-th character of the correspondence means the number of the switch controlling the $i$-th light bulb. If you cannot determine which switch controls the $i$-th light bulb, output '?' as the $i$-th character instead of the number of a switch.

Sample Input


3 10 3
000 0000000000
110 0000001111
101 1111111100
2 2 0
1 1 0
2 1 1
01 1
11 11 10
10000000000 10000000000
11000000000 01000000000
01100000000 00100000000
00110000000 00010000000
00011000000 00001000000
00001100000 00000100000
00000110000 00000010000
00000011000 00000001000
00000001100 00000000100
00000000110 00000000010
0 0 0

Output for the Sample Input


2222221100
??
0
1
0123456789A





Example

Input

3 10 3
000 0000000000
110 0000001111
101 1111111100
2 2 0
1 1 0
2 1 1
01 1
11 11 10
10000000000 10000000000
11000000000 01000000000
01100000000 00100000000
00110000000 00010000000
00011000000 00001000000
00001100000 00000100000
00000110000 00000010000
00000011000 00000001000
00000001100 00000000100
00000000110 00000000010
0 0 0


Output

2222221100
??
0
1
0123456789A

#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <bitset>

using namespace std;
#define bitmax 1000
/*
	不明なスイッチ
	ICPC(国際ソケット・コネクタ会社)本社ビルの中には、M個の電球があり、
	それらはN個のスイッチによって制御されている。各電球はただ一つのスイッチによって
	点灯させたり消滅させたりできる。各スイッチは複数の電球を操作できることもある。
	あるスイッチを操作するとき、そのスイッチによって制御されている全ての電球の状態が変化する。
	あなたはスイッチと電球の対応を記録してある表をなくしてしまい、それを復元したいと思っていた。

	以下の手順によって電球とスイッチの対応関係を復元することに決めた。

	・最初に全てのスイッチがオフになっており、全ての電球が消灯している
	・S1によってあらわされるいくつかのスイッチを操作する
	・B1によってあらわされる電球の状態を確認する
	・S2によってあらわされるいくつかのスイッチを操作する
	・B2によってあらわされる電球の状態を確認する
	・...
	・SQによってあらわされるいくつかのスイッチを操作する
	・BQによってあらわされる電球の状態を確認する

	いくつかのスイッチを操作して電球の状態を確認したあとは、
	スイッチと電球の状態は次の操作までそのままにしておく。

	操作を行ったスイッチと確認を行った電球に関する情報を用いて、
	スイッチと電球の対応関係を復元することができるだろうか？

	入力
	入力は複数のデータセットからなる。データセットの個数は50以下であり、
	ファイルサイズは10MB以下である。各データセットは以下の形式に従う。

	各データセットの一行目には3個の整数N,M,Qが含まれ
	( 1 <= N <= 36 ), ( 1 <= M <= 1000 ), ( 0 <= Q <= 1000 )
	、それぞれスイッチの個数、
	電球の個数、操作の回数を表す。それ以降のQ行は操作を行ったスイッチと
	状態の確認を行った電球に関する情報をあらわす。そのi番目には
	二つのデータS_iとB_iが含まれ、長さはそれぞれNとMである。
	各S_iは操作を行ったスイッチの集まりを表す。S_ijは0または1のいずれかであり、
	それぞれj番目のスイッチが操作されなかったこと、操作されたことを示す。
	各B_iは電球の状態を示す。B_ijは0または1のいずれかであり、それぞれj番目の電球が
	消灯しているか点灯しているかを表す。

	与えられる情報には、スイッチと電球の対応関係に矛盾が無いことを仮定してよい。

	入力の終わりは3つの0によってあらわされる。

	出力
	各データセットについて、スイッチと電球の対応関係を、
	M個の数字からなるbase-36形式で出力せよ。この問題におけるbase-36形式において、
	0-9と10-35の値はそれぞれ'0'-'9','A'-'Z'の文字によって表現される。
	対応関係におけるi番目の文字は、i番目の電球を制御しているスイッチの番号を示す。
	i番目の電球を制御しているスイッチを決定できない場合には、スイッチの番号の代わりに
	'?'をi番目の文字として出力せよ。

*/

/*
	方針
	ビット演算を用いる
	各電球について、つながっている可能性のあるスイッチに対応するビットを立てる
	スイッチの状態を変えても電球の状態に変化がない場合に可能性が消える
	→　ある状態とその次の状態の排他的論理和を取る

*/
string revstr( string s ) {
	string ret;
	for(int i = s.length() - 1; i >= 0; i--) {
		ret += s[i];
	}
	return ret;
}

int main(void){
	//FILE* fp_in = freopen("data.txt", "r", stdin);

	vector< char > ans;
	for(int i = 0; i < 10; i++)
		ans.push_back( '0' + i );
	for(int i = 0; i < 26; i++)
		ans.push_back( 'A' + i );

	while(1) {
		int N, M, Q;
		vector< bitset< bitmax > > S;
		vector< bitset< bitmax > > B;
		vector< bitset< bitmax > > P;

		cin >> N >> M >> Q;
		if( N == 0 && M == 0 && Q == 0 ) break;

		for(int i = 0; i < M; i++) {
			bitset< bitmax > P_i;
			P_i.reset();
			for(int j = 0; j < N; j++)
				P_i.set(j);
			P.push_back( P_i );
		}

		//データ取得
		for(int i = 0; i < Q; i++) {
			string S_i, B_i;
			cin >> S_i >> B_i;
			bitset< bitmax > Si( S_i );
			bitset< bitmax > Bi( B_i );
			S.push_back( Si );
			B.push_back( Bi );
			if( i > 0 ) S[i] ^= S[i-1]; 	//現在点灯しているスイッチ
			for(int j = 0; j < M; j++) {
				if( B[i][j] ) {	//電球が点灯した場合
					P[j] &= S[i];
				} else {
					P[j] &= ~S[i];
				}
			}
		}

		string str;
		for(int i = 0; i < P.size(); i++) {
			if( P[i].count() == 1 ) {
				for(int j = 0; j < N; j++) {
					if( P[i][j] ) str += ans[N - 1 - j];
				}
			} else {
				str += '?';
			}
		}
		cout << revstr(str) << endl;
		
	}

    return 0;
}