#include <bits/stdc++.h>
using namespace std;
const int DIM = 10005;
int lef[DIM], rig[DIM];
vector<int> edg[DIM]; bitset<DIM> mrk;
int nr = 0;
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; ++nr;
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, v; cin >> n >> m >> v;
for (int i = 1; i <= v; ++i) {
int x, y; cin >> x >> y;
edg[x].push_back(y); }
bool ok; do {
mrk.reset(); ok = false;
for (int i = 1; i <= n; ++i) {
if (!lef[i] && match(i)) {
ok = true; } }
} while (ok);
cout << nr << "\n";
for (int i = 1; i <= n; ++i) {
if (lef[i]) {
cout << i << " " << lef[i] << "\n"; } }
return 0;
}