#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
vector <int> a[500008];
int b[500008];
int vis[500008];
bool findv(int t,int ji)
{
if(vis[t] == ji)
{
return false;
}
vis[t] = ji;
for(int i = 0;i < a[t].size();i++)
{
int u = a[t][i];
if(b[u] == 0)
{
b[u] = t;
return true;
}
else
{
if(findv(b[u],ji))
{
b[u] = t;
return true;
}
}
}
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int u,v;
scanf("%d %d",&u,&v);
while(u != -1&&v != -1)
{
a[u].push_back(v);
scanf("%d %d",&u,&v);
}
int cnt = 0;
for(int i = 1;i <= m;i++)
{
if(findv(i,i))
{
cnt++;
}
}
printf("%d\n",cnt);
for(int i = m+1;i <= n;i++)
{
if(b[i] != 0)
{
printf("%d %d\n",b[i],i);
}
}
return 0;
}