#include <cstdio>
#include <vector>
#include <cstring>
#define N 10005
using namespace std;
int n,m,p1[N],p2[N],e,nr;
bool viz[N];
vector <int> g[N];
void read()
{
int x,y;
freopen("cuplaj.in","r",stdin);
scanf("%d%d%d",&n,&m,&e);
while (e--)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
}
}
bool cuplaj(int k)
{
vector <int>::iterator it;
if (viz[k]) return 0;
viz[k]=1;
for (it=g[k].begin();it!=g[k].end();++it)
if (p2[*it]==0) {
p2[*it]=k;
p1[k]=*it;
return 1;
}
for (it=g[k].begin();it!=g[k].end();++it)
if (cuplaj(p2[*it])) {
p2[*it]=k;
p1[k]=*it;
return 1;
}
return 0;
}
void write()
{
int i;
freopen("cuplaj.out","w",stdout);
for (i=1;i<=n;++i)
if (p1[i]) ++nr;
printf("%d\n",nr);
for (i=1;i<=n;++i)
if (p1[i]) printf("%d %d\n",i,p1[i]);
}
int main()
{
int modif=1,i;
read();
while (modif)
{
modif=0;
memset(viz,0,sizeof(viz));
for (i=1;i<=n;++i)
if (!p1[i]) modif+=cuplaj(i);
}
write();
}