#include "bits/stdc++.h"
using namespace std;

class Edge
{
	public:
	int to;
	int cost;
	Edge(int t,int c)
	{
		to=t;
		cost=c;
	}
};

vector<Edge> g[1000];
int color[1000];

//cで塗る
//戻り値が0未満なら構成不可
int saiki(int now,int c)
{
	int ret=0;
	if(color[now]==-1)
	{
		color[now]=c;
		for(int i=0;i<g[now].size();i++)
		{
			Edge e=g[now][i];
			if(color[e.to]==c)
				ret--;
			else if(color[e.to]==-1)
				ret+=saiki(e.to,(c+1)&1);
		}
	}
	return ret;
}

int count(int num,int n)
{
	int ret=0;
	for(int i=0;i<n;i++)
	{
		if(color[i]==num)
			ret++;
	}
	return ret;
}

int main()
{
	while(1)
	{
		int n,m;
		cin>>n>>m;
		if(n==0)
			break;
		for(int i=0;i<1000;i++)
			g[i].clear();
		fill(color,color+1000,-1);
		for(int i=0;i<m;i++)
		{
			int x,y;
			cin>>x>>y;
			x--;y--;
			g[x].push_back(Edge(y,1));
			g[y].push_back(Edge(x,1));
		}
		int ans=saiki(0,0);
		int v[2]={9999,9999};
		if(ans<0)
			cout<<0<<endl;
		else{
			int tmp=count(0,n);
			//cerr<<tmp<<" "<<n-tmp<<endl;
			if(tmp>0 && (tmp%2==0))
				v[0]=tmp/2;
			tmp=n-tmp;
			if(tmp>0 && (tmp%2==0) && v[0]!=tmp/2)
				v[1]=tmp/2;
			sort(v,v+2);
			if(v[0]==9999)
				cout<<0<<endl;
			else if(v[1]==9999){
				cout<<1<<endl;
				cout<<v[0]<<endl;
			}else{
				cout<<2<<endl;
				cout<<v[0]<<endl;
				cout<<v[1]<<endl;
			}
		}
	}
}
