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

using namespace std ;
struct Igeny{
   int a , b , az ;
};

bool rend_rel ( const Igeny x , const Igeny y) {
   return x.b<y.b || x.b==y.b && x.a<y.a;
}
int Ki[maxM];

int Keres(int a, int b){
   int hol=a;
   while(hol<=b && Ki[hol]>0) hol++;
   return hol>b ? 0 : hol;
}
int main () {
   int n,m,a,b,hova;
//beolvasás
   cin>>m>>n;
   Igeny E[m];
   for (int x=1; x<=m; x++) Ki[x]=0;
   for (int i=0; i<n; i++){
      cin>>E[i].a>>E[i].b;
      E[i].az=i+1;
   }
//rendez
   sort(E, E+n, rend_rel);
   int mego=0;
   for(int i=0;i<n;i++){
      hova=Keres(E[i].a,E[i].b);//van szabad hely a-b között?
      if(hova>0){
         Ki[hova]=E[i].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;
}
