#include<stdio.h>
#include<stdlib.h>
int a[100010],b[100010],r[10001],*g[10001],i,j,k,v[10001],d[10001],s[10001],t[10001],n,m,e,l;
int B() {
int i,j,k,q[100010],p=0,u=0;
for(d[0]=100010,i=1;i<=n;i++)
if(!s[i])
d[i]=0,q[u++]=i;
else
d[i]=100010;
for(;p<u;)
if(j=q[p++])
for(k=0;k<r[j];k++)
if(d[t[g[j][k]]]==100010)
d[t[g[j][k]]]=d[j]+1,q[u++]=t[g[j][k]];
return d[0]!=100010;
}
int D(int i) {
if(i) {
for(int j=0;j<r[i];j++)
if(d[t[g[i][j]]]==d[i]+1&&D(t[g[i][j]])==1) {
t[g[i][j]]=i,s[i]=g[i][j];
return 1;
}
d[i]=100010;
return 0;
}
return 1;
}
int main() {
freopen("cuplaj.in","r",stdin),freopen("cuplaj.out","w",stdout),scanf("%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++)
scanf("%d%d",&a[i],&b[i]),r[a[i]]++;
for(j=1;j<=n;r[j++]=0)
g[j]=(int*)malloc(r[j]*sizeof(int));
for(k=1;k<=e;k++)
g[a[k]][r[a[k]]++]=b[k];
for(;B();)
for(j=1;j<=n;j++)
if(!s[j]&&D(j))
v[++l]=j;
printf("%d\n",l);
for(i=1;i<=l;i++)
printf("%d %d\n",t[s[v[i]]],s[v[i]]);
}