#include <stdio.h>
#include <string.h>
#include <vector>
#define fr(i,a,b) for(int i=a;i<=b;++i)
#define N 10000
using namespace std;
vector<int>o[N+1];
int l[N+1],r[N+1];
bool c[N+1];
void pr(int i,int j){
r[j]=i,l[i]=j;
}
bool p(int i){
if(c[i])return false;
c[i]=true;
int s=o[i].size()-1;
fr(j,0,s) if(!r[o[i][j]]){
pr(i,o[i][j]);
return true;
}
fr(j,0,s) if(p(r[o[i][j]])){
pr(i,o[i][j]);
return true;
}
return false;
}
int main(){
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,m,e,x,y;
scanf("%i%i%i",&n,&m,&e);
fr(i,1,e)scanf("%i%i",&x,&y),o[x].push_back(y);
bool u=true;
while(u){
memset(c,false,sizeof(c));
u=false;
fr(i,1,n)if(!l[i])u|=p(i);
}
int c=0;
fr(i,1,n)if(l[i])++c;
printf("%i\n",c);
fr(i,1,n)if(l[i])printf("%i %i\n",i,l[i]);
return 0;
}