#include <bits/stdc++.h>
#define il inline
const int N=6005;

int n,m,s,tp,p[N],st[N]; bool o[N],c[N];
int to[N],nx[N],hd[N],it[N],du[N],d[N],sze=1;

il void add(int u,int v){to[++sze]=v,nx[sze]=hd[u],hd[u]=sze,du[v]++;}

il void dfs(int u){for (int i=it[u]; i; i=it[u]) if (it[u]=nx[i],!o[i>>1]&&!c[i>>1]) o[i>>1]=1,dfs(to[i]); st[++tp]=u;}

il bool ck(int u)
{
	int i,j,x=0; for (i=1; i<=n; i++) x+=d[i]&1; if (x>2) return 0;
	memset(o,0,m+1),tp=0,memcpy(it,hd,4*n+4),tp=0;
	if (!x)
	{
		dfs(u);
		for (i=1; i<=m; i++) if (!o[i]&&!c[i]) return 0;
		return 1;
	}
	if (d[u]&1^1) return 0;
	for (i=1; i<=n; i++) if (d[i]%2&&i!=u)
	{
		dfs(i);
		for (j=1; j<=m; j++) if (!o[j]&&!c[j]) return 0;
		return 1;
	}
	return 0;
}

il void print(int x,int y)
{
	int i; for (printf("%d\n",tp+(s?(y?s+s-1:s+s+1):0)),i=tp; i; i--) printf("%d ",st[i]);
	if (s){for (printf("-1 "),i=s; i; i--) if (p[i]!=y) printf("%d %d ",p[i],x);} exit(0);
}

int main()
{
	scanf("%d%d",&n,&m); int i,u,v;
	for (i=1; i<=m; i++) scanf("%d%d",&u,&v),add(u,v),add(v,u);
	
	for (u=1; u<=n; u++)
	{
		s=0,memcpy(d,du,4*n+4),memset(c,0,m+1);
		if (ck(u)) print(u,0);
		for (i=hd[u]; i; i=nx[i]) if (d[v=to[i]]&1)
			c[i>>1]=1,d[u]--,d[v]--,p[++s]=v;
		if (ck(u)) print(u,0);
		for (i=hd[u]; i; i=nx[i]) if (c[i>>1])
		{
			c[i>>1]=0,d[u]++,d[v=to[i]]++;
			if (ck(u)) print(u,v);
			c[i>>1]=1,d[u]--,d[v]--;
		}
	}
	puts("0");
	
	return 0;
}
					 	   	     	 	   	 				