#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int nmax=10000;
vector <int> g[2*nmax+1];
int u[2*nmax+1];
int v[2*nmax+1];
bool pairup(int x){
if(u[x]==1){
return 0;
}else{
u[x]=1;
for(int i=0;i<int(g[x].size());i++){
int xn=g[x][i];
if(v[xn]==0){
v[xn]=x;
v[x]=xn;
return 1;
}else if(pairup(v[xn])==1){
v[xn]=x;
v[x]=xn;
return 1;
}
}
}
return 0;
}
int main(){
int n,n2,m;
fin>>n>>n2>>m;
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
g[x].push_back(n+y);
g[n+y].push_back(x);
}
bool ok=1;
int sol=0;
while(ok==1){
ok=0;
for(int i=1;i<=n+n2;i++){
u[i]=0;
}
for(int i=1;i<=n;i++){
if(v[i]==0){
if(pairup(i)==1){
ok=1;
sol++;
}
}
}
}
fout<<sol<<"\n";
for(int i=1;i<=n;i++){
if(v[i]!=0){
fout<<i<<" "<<v[i]-n<<"\n";
}
}
return 0;
}