#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int INF = 1e9;
int n, m, k;
vector<int> adj[N];
int rightMatch[N], leftMatch[N];
int dist[N];
bool vis[N], flag[2*N];
// assume that leftSide is numbered [1..n], rightSide [1..m]
// leftMatch[i] -> i-th left matched with who on the rightSide
// rightMatch[i] -> opposite
void bfs() {
queue<int> q;
for (int i = 1; i <= n; i++)
if (leftMatch[i] == -1) {
dist[i] = 0;
q.push(i);
} else
dist[i] = INF;
while (!q.empty()) {
int cur = q.front();
q.pop();
for (int nex : adj[cur]) {
if (rightMatch[nex] != -1 && dist[rightMatch[nex]] == INF) {
dist[rightMatch[nex]] = dist[cur] + 1;
q.push(rightMatch[nex]);
}
}
}
}
int augment(int now) {
if (vis[now]) return 0;
vis[now] = 1;
for (int nex : adj[now]) {
if (rightMatch[nex] == -1 ||
(dist[rightMatch[nex]] == dist[now] + 1 && augment(rightMatch[nex]))) {
rightMatch[nex] = now;
leftMatch[now] = nex;
return 1;
}
}
return 0;
}
int hopcroftKarp() {
int ret = 0;
memset(leftMatch, -1, sizeof leftMatch);
memset(rightMatch, -1, sizeof rightMatch);
while (1) {
bfs();
memset(vis, 0, sizeof vis);
int add = 0;
for (int i = 1; i <= n; i++)
if (leftMatch[i] == -1) {
add += augment(i);
}
if (add == 0) {
break;
}
ret += add;
}
return ret;
}
void dfsMark(int now) {
if (now == -1 || flag[now]) return;
flag[now] = true;
for (int nex : adj[now]) {
if (rightMatch[nex] != now) {
flag[n+nex] = 1;
dfsMark(rightMatch[nex]);
}
}
}
vector<int> konigs() {
memset(flag, 0, sizeof flag);
for (int i = 1; i <= n; i++)
if (leftMatch[i] == -1) {
dfsMark(i);
}
// for (int i = 1 ; i <= n ; i++) {
// printf("left %d -> match %d %d\n", i, leftMatch[i], flag[i]);
// }
// for (int i = 1 ; i <= m ; i++) {
// printf("right %d -> match %d %d\n", i, rightMatch[i], flag[i]);
// }
vector<int> mvc, mis;
// leftSide
for (int i = 1; i <= n; i++) {
if (!flag[i])
mvc.push_back(i);
else
mis.push_back(i);
}
// rightSide
for (int i = 1; i <= m; i++) {
if (flag[n+i])
mvc.push_back(n+i);
else
mis.push_back(n+i);
}
// now do whatever you want with mvc or mis
return mvc;
}
bool init() {
if (scanf("%d %d %d", &n, &m, &k) != 3) {
return false;
}
if (n == 0 && m == 0 && k == 0) {
return false;
}
for (int i = 1 ; i <= n ; i++) adj[i].clear();
for (int i = 1 ; i <= k ; i++) {
int r, c;
scanf("%d %d", &r, &c);
adj[r].push_back(c);
}
return true;
}
void work() {
int ret = hopcroftKarp();
printf("%d", ret);
vector<int> mvc = konigs();
for (int x : mvc) {
if (x > n) printf(" c%d", x-n);
else printf(" r%d", x);
}
puts("");
}
int main() {
while (init()) {
work();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDEwMDU7CmNvbnN0IGludCBJTkYgPSAxZTk7CgppbnQgbiwgbSwgazsKdmVjdG9yPGludD4gYWRqW05dOwoKaW50IHJpZ2h0TWF0Y2hbTl0sIGxlZnRNYXRjaFtOXTsKaW50IGRpc3RbTl07CmJvb2wgdmlzW05dLCBmbGFnWzIqTl07CgovLyBhc3N1bWUgdGhhdCBsZWZ0U2lkZSBpcyBudW1iZXJlZCBbMS4ubl0sIHJpZ2h0U2lkZSBbMS4ubV0KLy8gbGVmdE1hdGNoW2ldIC0+IGktdGggbGVmdCBtYXRjaGVkIHdpdGggd2hvIG9uIHRoZSByaWdodFNpZGUKLy8gcmlnaHRNYXRjaFtpXSAtPiBvcHBvc2l0ZQp2b2lkIGJmcygpIHsKICBxdWV1ZTxpbnQ+IHE7CiAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgaWYgKGxlZnRNYXRjaFtpXSA9PSAtMSkgewogICAgICBkaXN0W2ldID0gMDsKICAgICAgcS5wdXNoKGkpOwogICAgfSBlbHNlCiAgICAgIGRpc3RbaV0gPSBJTkY7CgogIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICBpbnQgY3VyID0gcS5mcm9udCgpOwogICAgcS5wb3AoKTsKCiAgICBmb3IgKGludCBuZXggOiBhZGpbY3VyXSkgewogICAgICBpZiAocmlnaHRNYXRjaFtuZXhdICE9IC0xICYmIGRpc3RbcmlnaHRNYXRjaFtuZXhdXSA9PSBJTkYpIHsKICAgICAgICBkaXN0W3JpZ2h0TWF0Y2hbbmV4XV0gPSBkaXN0W2N1cl0gKyAxOwogICAgICAgIHEucHVzaChyaWdodE1hdGNoW25leF0pOwogICAgICB9CiAgICB9CiAgfQp9CgppbnQgYXVnbWVudChpbnQgbm93KSB7CiAgaWYgKHZpc1tub3ddKSByZXR1cm4gMDsKICB2aXNbbm93XSA9IDE7CgogIGZvciAoaW50IG5leCA6IGFkaltub3ddKSB7CiAgICBpZiAocmlnaHRNYXRjaFtuZXhdID09IC0xIHx8CiAgICAgICAgKGRpc3RbcmlnaHRNYXRjaFtuZXhdXSA9PSBkaXN0W25vd10gKyAxICYmIGF1Z21lbnQocmlnaHRNYXRjaFtuZXhdKSkpIHsKICAgICAgcmlnaHRNYXRjaFtuZXhdID0gbm93OwogICAgICBsZWZ0TWF0Y2hbbm93XSA9IG5leDsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgfQoKICByZXR1cm4gMDsKfQoKaW50IGhvcGNyb2Z0S2FycCgpIHsKICBpbnQgcmV0ID0gMDsKICBtZW1zZXQobGVmdE1hdGNoLCAtMSwgc2l6ZW9mIGxlZnRNYXRjaCk7CiAgbWVtc2V0KHJpZ2h0TWF0Y2gsIC0xLCBzaXplb2YgcmlnaHRNYXRjaCk7CgogIHdoaWxlICgxKSB7CiAgICBiZnMoKTsKICAgIG1lbXNldCh2aXMsIDAsIHNpemVvZiB2aXMpOwoKICAgIGludCBhZGQgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICBpZiAobGVmdE1hdGNoW2ldID09IC0xKSB7CiAgICAgICAgYWRkICs9IGF1Z21lbnQoaSk7CiAgICAgIH0KCiAgICBpZiAoYWRkID09IDApIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICByZXQgKz0gYWRkOwogIH0KCiAgcmV0dXJuIHJldDsKfQoKdm9pZCBkZnNNYXJrKGludCBub3cpIHsKICBpZiAobm93ID09IC0xIHx8IGZsYWdbbm93XSkgcmV0dXJuOwogIGZsYWdbbm93XSA9IHRydWU7CgogIGZvciAoaW50IG5leCA6IGFkaltub3ddKSB7CiAgICBpZiAocmlnaHRNYXRjaFtuZXhdICE9IG5vdykgewogICAgICBmbGFnW24rbmV4XSA9IDE7CiAgICAgIGRmc01hcmsocmlnaHRNYXRjaFtuZXhdKTsKICAgIH0KICB9Cn0KCnZlY3RvcjxpbnQ+IGtvbmlncygpIHsKICBtZW1zZXQoZmxhZywgMCwgc2l6ZW9mIGZsYWcpOwogIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIGlmIChsZWZ0TWF0Y2hbaV0gPT0gLTEpIHsKICAgICAgZGZzTWFyayhpKTsKICAgIH0KICAKICAvLyBmb3IgKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKykgewogIC8vICAgcHJpbnRmKCJsZWZ0ICVkIC0+IG1hdGNoICVkICVkXG4iLCBpLCBsZWZ0TWF0Y2hbaV0sIGZsYWdbaV0pOwogIC8vIH0KICAKICAvLyBmb3IgKGludCBpID0gMSA7IGkgPD0gbSA7IGkrKykgewogIC8vICAgcHJpbnRmKCJyaWdodCAlZCAtPiBtYXRjaCAlZCAlZFxuIiwgaSwgcmlnaHRNYXRjaFtpXSwgZmxhZ1tpXSk7CiAgLy8gfQoKICB2ZWN0b3I8aW50PiBtdmMsIG1pczsKICAvLyBsZWZ0U2lkZQogIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgaWYgKCFmbGFnW2ldKQogICAgICBtdmMucHVzaF9iYWNrKGkpOwogICAgZWxzZQogICAgICBtaXMucHVzaF9iYWNrKGkpOwogIH0KICAvLyByaWdodFNpZGUKICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgIGlmIChmbGFnW24raV0pCiAgICAgIG12Yy5wdXNoX2JhY2sobitpKTsKICAgIGVsc2UKICAgICAgbWlzLnB1c2hfYmFjayhuK2kpOwogIH0KCiAgLy8gbm93IGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggbXZjIG9yIG1pcwogIHJldHVybiBtdmM7Cn0KCmJvb2wgaW5pdCgpIHsKICBpZiAoc2NhbmYoIiVkICVkICVkIiwgJm4sICZtLCAmaykgIT0gMykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKG4gPT0gMCAmJiBtID09IDAgJiYgayA9PSAwKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmb3IgKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKykgYWRqW2ldLmNsZWFyKCk7CiAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IGsgOyBpKyspIHsKICAgIGludCByLCBjOwogICAgc2NhbmYoIiVkICVkIiwgJnIsICZjKTsKCiAgICBhZGpbcl0ucHVzaF9iYWNrKGMpOwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgd29yaygpIHsKICBpbnQgcmV0ID0gaG9wY3JvZnRLYXJwKCk7CiAgcHJpbnRmKCIlZCIsIHJldCk7CgogIHZlY3RvcjxpbnQ+IG12YyA9IGtvbmlncygpOwogIGZvciAoaW50IHggOiBtdmMpIHsKICAgIGlmICh4ID4gbikgcHJpbnRmKCIgYyVkIiwgeC1uKTsKICAgIGVsc2UgcHJpbnRmKCIgciVkIiwgeCk7CiAgfQogIHB1dHMoIiIpOwp9CgppbnQgbWFpbigpIHsKICB3aGlsZSAoaW5pdCgpKSB7CiAgICB3b3JrKCk7CiAgfQogIHJldHVybiAwOwp9