#include <fstream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <iostream>
#include <bitset>
using namespace std;
const int DIM = 10005;
bitset<DIM> mrk;
vector<int> edg[DIM];
int lef[DIM], rig[DIM];
bool match(int x) {
if (mrk[x])
return false;
mrk[x] = true;
for (int y : edg[x]) if (!rig[y]) {
lef[x] = y; rig[y] = x;
return true;
}
for (int y : edg[x]) if (match(rig[y])) {
lef[x] = y; rig[y] = x;
return true;
}
return false;
}
int main(void) {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n, m, k;
cin >> n >> m >> k;
for (int i = 1; i <= k; ++i) {
int x, y;
cin >> x >> y;
edg[x].push_back(y);
}
bool ok;
do {
ok = false; mrk.reset();
for (int i = 1; i <= n; ++i)
if (!lef[i] && match(i))
ok = true;
} while (ok);
int nr = 0;
for (int i = 1; i <= n; ++i) {
if (lef[i])
++nr;
}
cout << nr << "\n";
for (int i = 1; i <= n; ++i) {
if (lef[i])
cout << i << " " << lef[i] << "\n";
}
return 0;
}