#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,k,x,y,sol,L[10010],R[10010],ok;
vector<int> A[10010];
bitset<10010> f;
int cuplaj(int nod){
if(f[nod])
return 0;
f[nod]=1;
for(int i=0;i<A[nod].size();i++){
int c=A[nod][i];
if(R[c]==0){
L[nod]=c;
R[c]=nod;
sol++;
return 1;
}
}
for(int i=0;i<A[nod].size();i++){
int c=A[nod][i];
if(cuplaj(R[c])){
L[nod]=c;
R[c]=nod;
return 1;
}
}
return 0;
}
int main(){
fin>>n>>m>>k;
for(int i=1;i<=k;i++){
fin>>x>>y;
A[x].push_back(y);
}
do{
ok=0;
f.reset();
for(int i=1;i<=n;i++)
if(L[i]==0)
ok|=cuplaj(i);
}while(ok==1);
fout<<sol<<"\n";
for(int i=1;i<=n;i++)
if(L[i])
fout<<i<<" "<<L[i]<<"\n";
return 0;
}