#include <bits/stdc++.h>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<29;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-11;
const ll mod=1e9+7;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};

bool dfs(int v,int t,vi& a,vvi& g){
	a[v]=t;
	for(auto u:g[v]){
		if(a[u]==0){
			if(dfs(u,-t,a,g)) return 1;
		}
		if(a[u]==t) return 1;
	}
	return 0;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	while(1){
		int n,m;
		cin>>n>>m;
		if(n==0) break;
		vvi g(n);
		for(int i=0;i<m;i++){
			int u,v;
			cin>>u>>v;
			u--;v--;
			g[u].push_back(v);
			g[v].push_back(u);
		}
		vi a(n);
		if(dfs(0,1,a,g)){
			cout<<0<<endl;
			continue;
		}
		int x=0,y=0;
		for(int i=0;i<n;i++){
			if(a[i]>0) x++;
			else y++;
		}
		vi res;
		if(x%2==0) res.push_back(x/2);
		if(y%2==0&&x!=y) res.push_back(y/2);
		cout<<res.size()<<endl;
		sort(res.begin(),res.end());
		for(auto i:res) cout<<i<<endl;
	}
}
