#include<bits/stdc++.h>
#define MAXN 100001
#define IO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define pi array<int,2>
using namespace std;
int n,m,A,B,a,b,stop;
bool us[MAXN];
vector<array<int,2> >tme[MAXN];
vector<int>ansa,ansb;
priority_queue< pi,vector<pi> >Av,Bv;
int main()
{
IO;
cin>>m>>n;
for(int i=0;i<n;i++)
{
cin>>a>>b;
tme[a].push_back({b,i});
}
A=2;B=2;
for(int i=0;i<tme[1].size();i++)
{
Av.push(tme[1][i]);
Bv.push(tme[1][i]);
}
while(!(stop==2))
{
if(A<B)
{
array<int,2> q;
if(Av.empty()==0) q=Av.top();
while(Av.empty()==0 && us[q[1]]==1)
{
Av.pop();
if(Av.empty()==0)q=Av.top();
}
if(Av.empty())
{
cout<<0<<endl;
return 0;
}
if(q[0]==m)stop++;
us[q[1]]=1;
Av.pop();
int nxt=q[0]+1;
ansa.push_back(q[1]);
for(;A<=m && A<=nxt;A++)
{
for(int i=0;i<tme[A].size();i++)
{
if(us[tme[A][i][1]]==0) Av.push(tme[A][i]);
}
}
}
else
{
array<int,2> q;
if(Bv.empty()==0)q=Bv.top();
while(Bv.empty()==0 && us[q[1]]==1)
{
Bv.pop();
if(Bv.empty()==0) q=Bv.top();
}
if(Bv.empty()==1)
{
cout<<0<<endl;
return 0;
}
Bv.pop();
if(q[0]==m)stop++;
int nxt=q[0]+1;
ansb.push_back(q[1]);
us[q[1]]=1;
for(;B<=m && B<=nxt;B++)
{
for(int i=0;i<tme[B].size();i++)
{
if(us[tme[B][i][1]]==0) Bv.push(tme[B][i]);
}
}
}
}
int ANS=ansa.size()+ansb.size();
cout<<ANS<<'\n';
for(int u:ansa)cout<<u+1<<" ";
for(int u:ansb)cout<<u+1<<" ";
return 0;
}