#include <iostream>
#include <algorithm>
#define maxN 100000
#define maxM 100001

using namespace std ;
struct Igeny{
   int a , az ;
   Igeny(int x , int y) {a = x; az = y;}//konstruktor
};
int Ki[maxM];
int Fa[maxM];
int U[maxM];
int Holvan(int x){
   int Nx = x;
	while (Fa[Nx] > 0)
		Nx = Fa[Nx];
	int y = x;
	while (x != Nx){//úttömörítés
		y = Fa[x];
		Fa[x] = Nx;
		x = y;
	}
	return Nx;
}
int Unio(int Nx, int Ny){
	if (Nx == Ny)
		return Nx;
	if (Fa[Nx] > Fa[Ny]){
		int z = Nx;
		Nx = Ny;
		Ny = z;
	}
	Fa[Nx] += Fa[Ny];
	Fa[Ny] = Nx;
   return Nx;
}

int Keres(int a, int b){
   int Na=Holvan(a);
   int u=U[Na];
   if(u<=b){
      int Nx=Holvan(U[Na]+1);
      int ux=U[Nx];
      Nx=Unio(Na,Nx);
      U[Nx]=ux;
      return u;
   }else
      return 0;
}
int main () {
   int n,m,a,b,hova;
//beolvasás
   cin>>m>>n;
   vector<Igeny> E[m+1];
   for (int i=0; i<n; i++){
      cin>>a>>b;
      E[b].push_back(Igeny(a,i+1));
   }
   for (int x=1; x<=m+1; x++){
      Ki[x]=0;
      Fa[x]=-1;
      U[x]=x;
   }
   int mego=0;
   for(int b=1;b<=m;b++){
      for(Igeny e:E[b]){
         hova=Keres(e.a, b);//van szabad hely a-b között?
         if(hova>0){
            Ki[hova]=e.az;
            mego++;
         }
      }
   }
//kiíratás
   cout<<mego<<endl ;
   for (int x=1; x<=m; x++)
      if(Ki[x]>0)
         cout<<Ki[x]<<" "<<x<<endl;

   return 0;
}
