#include<bits/stdc++.h>
#define N (int)(1e6+3)
using namespace std;
int n,m,ans,match[N];
bool vis[N];
vector<int>G[N];
bool connect(int x){
for(int i=0;i<G[x].size();++i){
int y=G[x][i];
if(!vis[y]){
vis[y]=1;
if(!match[y]||connect(match[y])){
match[y]=x;
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&m);
int u=0,v=0;
while(u>=0){
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
for(int i=1;i<=n;++i) if(connect(i)) ++ans;
printf("%d\n",ans);
for(int i=n+1;i<=m;++i) if(match[i]) printf("%d %d\n",match[i],i);
return 0;
}