#include<bits/stdc++.h>
using namespace std;
int l,r,n,m[2020],used[2020],cnt,p,head[4040];
struct node
{
int to,next;
}a[8080];
void AddEdge(int h,int t)
{
a[++p].to=t;
a[p].next=head[h];
head[h]=p;
}
bool find(int j)
{
for(int i=head[j];i;i=a[i].next)
{
int k=a[i].to;
if(!used[k])
{
used[k]=1;
if(!m[k]||find(m[k]))
{
m[k]=j;
return true;
}
}
}
return false;
}
void Maxmatch()
{
for(int i=1;i<=r;i++)
{
memset(used,0,sizeof(used));
if(find(i)) cnt++;
}
}
int main()
{
cin>>l>>r;
for(int i=1;i<=r;i++)
{
int o,t;
cin>>o>>t;
AddEdge(i,o);
AddEdge(i,t);
}
Maxmatch();
cout<<cnt<<endl;
for(int i=0;i<=l-1;i++)
{
if(m[i]) cout<<i<<endl;
}
return 0;
}