#include "bits/stdc++.h"
using namespace std;
using ll=long long;
using ull=unsigned long long;
#define speed ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define endl "\n"
#define int ll
#define ff first
#define ss second
#define pb push_back
#define all(v) v.begin(),v.end()
const int sz = 5e5 + 9;
const int oo = 1e18 + 7;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
int phi(int n){
int res=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)
n/=i;
res-=res/i;
}
}
if(n>1)
res-=res/n;
return res;
}
int binpow(int x, int y,int MOD){
if(!y) return 1;
int res = binpow(x, y / 2,MOD);
if(y % 2 == 1)
return (((res%MOD)*(res%MOD))%MOD)*(x%MOD)%MOD;
return ((res%MOD)*(res%MOD))%MOD;
}
int inv(int n){
return binpow(n,mod-2,mod);
}
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
// vector<int>prime;
// vector<bool>primes(sz, true);
// void sieve()
// {
// primes[0] = primes[1] = false;
// for(int i = 2; i * i < sz; i++){
// if(primes[i] == false)
// continue;
// for(int j = i * i; j < sz; j += i)
// primes[j] = false;
// }
// for(int i = 0; i < sz; i++){
// if(primes[i] == true)
// prime.push_back(i);
// }
// }
vector<int>e;
int get(int x)
{
if(e[x]<0)
return x;
return e[x]=get(e[x]);
}
bool sameset(int x,int y)
{
x=get(x);
y=get(y);
return (x==y);
}
bool uni(int x,int y)
{
x=get(x);
y=get(y);
if(x==y)
return false;
if(e[x]>e[y])
swap(x,y);
// e[x]+=e[y];
e[y]=x;
return true;
}
void solve(){
int n,m,q;
cin>>n>>m>>q;
e.resize(m+1,-1);
vector<int>ans(m+1,-1);
vector<pair<int,int>>que;
while(q--)
{
int a,b;
char c;
cin>>a>>c>>b;
if(c=='=')
que.pb({a,b});
else
{
e[b]=-22;
e[a]=-11;
}
}
for(auto [a,b] : que)
uni(a,b);
for(int i=1;i<=m;i++)
{
if(e[get(i)]==-1)
cout<<'?'<<endl;
else
{
if(e[get(i)]==-11)
cout<<'K'<<1<<endl;
else
cout<<'K'<<2<<endl;
}
}
}
signed main()
{
speed;
int tt=1;
// cin >> tt;
while(tt--)
{
solve();
}
return 0;
}