#include#include #define MAXN 1005using namespace std;int link[MAXN],vis[MAXN],head[MAXN];struct edge{ int v,next;}G[MAXN<<1];int ans[MAXN];int N,M,tot=0;inline void add(int u,int v){ G[++tot].v=v;G[tot].next=head[u];head[u]=tot;} inline bool Hungarian(int u){ for(register int i=head[u];i;i=G[i].next){ int v = G[i].v;if(vis[v]==1)continue; vis[v]=1; if(link[v]==0||Hungarian(link[v])){ link[v]=u; ans[u]=v; return true; } } return false;}int main(){ scanf("%d%d",&N,&M); int v; for(register int i=1;i<=M;++i){ scanf("%d",&v); add(i,v+1); scanf("%d",&v); add(i,v+1); } int count = 0; for(register int i=1;i<=N;++i){ memset(vis,0,sizeof(vis)); if(Hungarian(i))count++; else break; } printf("%d\n",count); for(register int i=1;i<=count;++i){ printf("%d\n",ans[i]-1); } return 0;}