#include<cstdio>
#include<cstring>
#define  N  3100 
#define  NN  6100
using  namespace  std;
struct  node
{
	int  y,next;
	bool  bk=0;
}a[NN];int  len=1,last[N],du[N];
inline  void  ins(int  x,int  y){len++;a[len].y=y;a[len].next=last[x];last[x]=len;du[y]++;}
bool  v[N][N];//用来存两个点是否相邻
int  n,m;
int  jcnt;bool  ji[N];
int  ans[NN],tot;
void  dfs(int  x)
{
	for(int  k=last[x];k;k=a[k].next)
	{
		int  y=a[k].y;
		if(!a[k].bk  &&  !a[k^1].bk)
		{
			a[k].bk=1;
			dfs(y); 
		}
	}
	ans[++tot]=x;
}
int  siz;
bool  shi[N];
void  bfs(int  x)//用来辨别这个联通块的大小的 
{
	siz++;shi[x]=1;
	for(int  k=last[x];k;k=a[k].next)
	{
		if(!a[k].bk  &&  !a[k^1].bk  &&  !shi[a[k].y])bfs(a[k].y);
	}
}
int  sta[N],top;
void  huan(int  x)
{
	for(int  k=last[x];k;k=a[k].next)
	{
		int  y=a[k].y;
		if(a[k].bk==1)du[x]++,du[y]++,a[k].bk=0;
	}
	memset(shi,0,sizeof(shi));//每个点都没有被访问过 
	top=0;
}
bool  findans(int  x)//以ed将周围的奇数全部消掉，然后按顺序跑
{
	int  nn=n;
	for(int  k=last[x];k;k=a[k].next)
	{
		int  y=a[k].y;
		if(ji[y]==1)
		{
			a[k].bk=1,sta[++top]=y,du[y]--,du[x]--;
			if(!du[y])nn--;
		}
	}
	int  op=0;
	for(int  i=1;i<=n;i++)
	{
		if(du[i]&1)op++;
	}
	if(!(!op  ||  ((du[x]&1)  &&  op==2)))
	{
		huan(x);
		return  0;
	}
	//开始检验是否联通
	int  lim=0;
	if(!(nn==1  &&  du[x]==0))
	{
		siz=0;bfs(x);
		if(siz!=nn/*联通块都是一体的*/)
		{
			op=1;
			if(!(du[x]&1))
			{
				for(int  k=last[x];k;k=a[k].next)
				{
					if(du[a[k].y]  &&  !shi[a[k].y])
					{
						lim=a[k].y;
						a[k].bk=0;
						du[x]++;du[a[k].y]++;
						bfs(a[k].y);
						if(siz==nn/*联通块都是一体的*/)op=0;
						break;
					}
				}
			}
			if(op==1)
			{
				huan(x);
				return  0;
			}
		}
		dfs(x);
	}
	else  ans[++tot]=x;
	ans[++tot]=-1;
	for(int  i=1;i<=top;i++)
	{
		if(sta[i]==lim)continue;
		ans[++tot]=sta[i],ans[++tot]=x;
	}
	printf("%d\n",tot);
	for(int  i=1;i<=tot;i++)printf("%d ",ans[i]);
	printf("\n");
	return  1;
}
int  main()
{
	scanf("%d%d",&n,&m);
	for(int  i=1;i<=m;i++)
	{
		int  x,y;scanf("%d%d",&x,&y);
		ins(x,y);ins(y,x);
		v[x][y]=v[y][x]=1;
	}
	for(int  i=1;i<=n;i++)
	{
		if(du[i]&1)ji[i]=1,jcnt++;
	}
	for(int  i=1;i<=n;i++)
	{
		int  cnt=ji[i];
		for(int  k=last[i];k;k=a[k].next)
		{
			if(ji[a[k].y])cnt++;
		}
		if(jcnt-cnt<=1)//可以试一试 
		{
			if(findans(i)==1)return  0;
		}
	}
	printf("0\n");
	return  0;
}