//欧拉回路判断条件:
//1.该图是否为连通图;
//2.该图所有点的度数都为偶数
#include <stdio.h>
#include <string.h>
int tu[1001][1001];
int visit[1001];
int du[1001];
int k=0;
void dfs(int frist,int step,int node)//起点,层数,结点
{
if(k)
return;
if(step>=node)
{
k=1;
return;
}
for(int i=1;i<=node;i++)
{
if(visit[i]==0&&tu[frist][i]==1)
{
visit[i]=1;
dfs(i,step+1,node);
visit[i]=0;
}
}
return;
}
int dushu(int node)
{
for(int i=1;i<=node;i++)
{
if(du[i]%2!=0)
return 0;
}
return 1;
}
int main()
{
int n,m,b1,b2;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b1,&b2);
tu[b1][b2]=tu[b2][b1]=1;
du[b1]++;
du[b2]++;
}
if(!dushu(n))
printf("0\n");
else
{
dfs(1,1,n);
printf("%d\n",k);
}
return 0;
}
//1.该图是否为连通图;
//2.该图所有点的度数都为偶数
#include <stdio.h>
#include <string.h>
int tu[1001][1001];
int visit[1001];
int du[1001];
int k=0;
void dfs(int frist,int step,int node)//起点,层数,结点
{
if(k)
return;
if(step>=node)
{
k=1;
return;
}
for(int i=1;i<=node;i++)
{
if(visit[i]==0&&tu[frist][i]==1)
{
visit[i]=1;
dfs(i,step+1,node);
visit[i]=0;
}
}
return;
}
int dushu(int node)
{
for(int i=1;i<=node;i++)
{
if(du[i]%2!=0)
return 0;
}
return 1;
}
int main()
{
int n,m,b1,b2;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b1,&b2);
tu[b1][b2]=tu[b2][b1]=1;
du[b1]++;
du[b2]++;
}
if(!dushu(n))
printf("0\n");
else
{
dfs(1,1,n);
printf("%d\n",k);
}
return 0;
}