#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define F first
#define S second
#define pii pair < int, int >
#define pb push_back
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
const int N = 3e5+10;
string s;
int n, m, v;
int uf[N];
int siz[N];
vector < pii > prevadj[N];
vector < pii > adj[N];
int vis[N];
int sol[N];
int dep[N];
int find( int i ) {
if(i == uf[i]) return i;
uf[i] = find(uf[i]);
return uf[i];
}
void merge( int a, int b ) {
a = find(a);
b = find(b);
if(a == b) return;
if(siz[a] < siz[b]) swap(a, b);
uf[b] = a;
siz[a] += siz[b];
return;
}
void reset_uf( void ) {
for(int i = 0; i < m; i++) {
uf[i] = i;
siz[i] = 1;
}
return;
}
pair < pii, int > input( void ) {
cin >> s;
pair < pii, int > out;
int temp = 0;
for(int i = 0; i < (int) s.size(); i++) {
if(s[i] >= '0' && s[i] <= '9') temp = temp*10 + s[i] - '0';
else {
out.F.F = temp;
temp = 0;
if(s[i] == '>') out.S = -1;
if(s[i] == '<') out.S = 1;
if(s[i] == '=') out.S = 0;
}
}
out.F.S = temp;
return out;
}
void dfs( int x, int v ) {
// cout << "X" << x << " " << v << "\n";
if(vis[x]) return;
vis[x] = 1;
dep[x] = 0;
pii sus;
for(int i = 0; i < (int) adj[x].size(); i++) {
sus = adj[x][i];
if(sus.S == v) {
// cout << x << " " << sus.F << "\n";
dfs(sus.F, v);
dep[x] = max(dep[x], dep[sus.F] + 1);
}
}
return;
}
void task( void ) {
cin >> n >> m >> v;
pair < pii, int > temp;
reset_uf();
for(int i = 0; i < v; i++) {
temp = input();
if(temp.S == 0) merge(--temp.F.F, --temp.F.S);
else {
prevadj[--temp.F.F].pb(mp(--temp.F.S, temp.S));
prevadj[temp.F.S].pb(mp(temp.F.F, -temp.S));
}
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < (int) prevadj[i].size(); j++) {
adj[find(i)].pb(mp(find(prevadj[i][j].F), prevadj[i][j].S));
}
}
for(int i = 0; i < m; i++) dfs(find(i), 1);
for(int i = 0; i < m; i++) {
vis[find(i)] = 0;
sol[find(i)] += dep[find(i)];
dep[find(i)] = 0;
}
for(int i = 0; i < m; i++) dfs(find(i), -1);
for(int i = 0; i < m; i++) {
if(i == find(i)) sol[find(i)] += dep[find(i)];
}
for(int i = 0; i < m; i++) {
if(sol[find(i)] == n - 1) cout << "K" << dep[find(i)] + 1 << "\n";
else cout << "?\n";
}
return;
}
int main( void ) {
FIO;
int tt = 1;
while(tt--) task();
return 0;
}