#include<fstream.h>
#define N 10001
int a[10*N],b[10*N],w[N],*g[N],i,j,k,v[N],d[N],p1[N],p2[N],n,m;
long e,mg=0;
int bfs(int n,int *g[N],int w[N],int p1[N],int p2[N],int d[N])
{int i,j,k,q[10*N],p=0,u=0;
for(i=1;i<=n;i++)
if(!p1[i])
d[i]=0,q[u++]=i;
else
d[i]=10*N;
d[0]=10*N;
while(p!=u)
if((j=q[p++]))
{for(k=0;k<w[j];k++)
if(d[p2[g[j][k]]]==10*N)
d[p2[g[j][k]]]=d[j]+1,q[u++]=p2[g[j][k]];}
return (d[0]!=10*N);}
int dfs(int i,int p1[N],int p2[N],int *g[N],int w[N],int d[N])
{if(i)
{for(j=0;j<w[i];j++)
if(d[p2[g[i][j]]]==d[i]+1&&dfs(p2[g[i][j]],p1,p2,g,w,d)==1)
{p2[g[i][j]]=i,p1[i]=g[i][j];
return 1;}
d[i]=10*N;
return 0;}
return 1;}
int main()
{ifstream f("cuplaj.in");
ofstream h("cuplaj.out");
f>>n>>m>>e,p1[0]=0;
for(i=1;i<=e;i++)
f>>a[i]>>b[i],w[a[i]]++;
for(j=1;j<=n;w[j++]=0)
p1[j]=0,g[j]=(int*)malloc(w[j]*sizeof(int));
for(k=1;k<=e;k++)
g[a[k]][w[a[k]]++]=b[k];
for(k=0;k<=m;k++)
p2[k]=0;
while(bfs(n,g,w,p1,p2,d)==1)
{for(j=1;j<=n;j++)
if(!p1[j]&&dfs(j,p1,p2,g,w,d)==1)
v[++mg]=j;}
h<<mg<<"\n";
for(i=1;i<=mg;i++)
h<<p2[p1[v[i]]]<<" "<<p1[v[i]]<<"\n";
return 0;}