#include <cstdio>
#include <cstring>
FILE* in=fopen("cuplaj.in","r");
FILE* out=fopen("cuplaj.out","w");
int a,b,n;
const int Q=100007;
int lst[Q],val[Q],nxt[Q],nr;
void add(int x, int y)
{
val[++nr]=y;
nxt[nr]=lst[x];
lst[x]=nr;
}
bool viz[Q];
int next[Q],frm[Q];
bool adaos(int x)
{
if(viz[x]==1)
return 0;
viz[x]=1;
int p=lst[x];
while(p)
{
if(frm[val[p]]==0)
{
frm[val[p]]=x;
next[x]=val[p];
return 1;
}
p=nxt[p];
}
p=lst[x];
while(p)
{
if(adaos(frm[val[p]]))
{
frm[val[p]]=x;
next[x]=val[p];
return 1;
}
p=nxt[p];
}
return 0;
}
int main()
{
fscanf(in,"%d%d%d",&a,&b,&n);
int x,y;
for(int i=1; i<=n; i++)
{
fscanf(in,"%d %d",&x,&y);
add(x,y);
}
bool f=1;
while(f)
{
f=0;
memset(viz,0,sizeof viz);
for(int i=1; i<=a; i++)
{
if(!next[i])
{
if(adaos(i))
{
f=1;
}
}
}
}
nr=0;
for(int i=1; i<=a; i++)
{
if(next[i])
nr++;
}
fprintf(out,"%d\n",nr);
for(int i=1; i<=a; i++)
{
if(next[i])
{
fprintf(out,"%d %d\n",i,next[i]);
}
}
return 0;
}