#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=3005;
struct edge{
	int to,next,cut;
}g[N<<1]; 
int head[N],cnt=1,d[N],deg[N],st[N],q[N],sum,top,n;
bool vis[N<<1];
void add(int u,int v){
	g[++cnt]=(edge){v,head[u],0};head[u]=cnt;
}
void dfs(int x){
	for(int i=head[x];i;i=g[i].next){
		if(vis[i]||g[i].cut) continue;
		vis[i]=vis[i^1]=1;
		dfs(g[i].to);
	}
	st[++top]=x;
}
bool check(int x){
	int t=0;
	for(int i=1;i<=n;i++) if(d[i]&1) t++;
	if(t>2) return false;
	if(t==0){
		memset(vis,0,sizeof(vis));top=0;
		dfs(x);
		for(int i=2;i<=cnt;i++) if(!vis[i]&&!g[i].cut) return false;
		return true;
	}
	if(t==2){
		memset(vis,0,sizeof(vis));top=0;
		if(d[x]%2==0) return false;
		for(int i=1;i<=n;i++){
			if((d[i]&1)&&i!=x){
				dfs(i);
				for(int j=2;j<=cnt;j++) if(!vis[j]&&!g[j].cut) return false;
		        return true;
			}
		}
	}
}
int main()
{
	int m,res=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
		d[x]++;d[y]++;
	} 
	for(int i=1;i<=n;i++) res+=(d[i]&1),deg[i]=d[i];
	if(res==0){
		dfs(1);
		printf("%d\n",top);
		for(int i=1;i<=top;i++) printf("%d ",st[i]);
		printf("\n");return 0;
	} 
	if(res==2){
		for(int i=1;i<=n;i++){
			if(d[i]&1){
				dfs(i);
				printf("%d\n",top);
				for(int j=1;j<=top;j++) printf("%d ",st[j]);
				printf("\n");return 0;
			}
		}
	}
	for(int i=1;i<=n;i++){
		top=sum=0;
		for(int j=head[i];j;j=g[j].next){
			int y=g[j].to;
			if(d[y]&1){
				d[i]--,d[y]--;g[j].cut=g[j^1].cut=1;
				q[++sum]=y;
			}
	    }
		if(check(i)){
			printf("%d\n",top+sum*2+1);
			for(int j=top;j>=1;j--) printf("%d ",st[j]);
			printf("-1 ");
			for(int j=1;j<=sum;j++) printf("%d %d ",q[j],i);
			printf("\n");return 0;
		} 
		for(int j=head[i];j;j=g[j].next){
			int y=g[j].to;
			if(g[j].cut){
				g[j].cut=g[j^1].cut=0,d[i]++,d[y]++;
				if(check(i)){
					printf("%d\n",top+(sum-1)*2+1);
			        for(int k=top;k>=1;k--) printf("%d ",st[k]);
			        printf("-1 ");
		 	        for(int k=1;k<=sum;k++) if(q[k]!=y) printf("%d %d ",q[k],i);
			        printf("\n");return 0;
				}
				g[j].cut=g[j^1].cut=1,d[i]--,d[y]--;
			}
		}
		for(int j=1;j<=n;j++) d[j]=deg[j];
		for(int j=head[i];j;j=g[j].next){
			g[j].cut=g[j^1].cut=0;
		}
	}
	printf("0\n");
 } 