/*
* File: * 判断是否存在欧拉回路,存在欧拉回路的条件:所有顶点的度为偶数,并且图是联通的
* 判断顶点的度是否为偶数只要进行统计判断就行,判断图的联通可以用并查集,判断所
* 有的顶点是否在一棵树上。
* Author: chenjiang
*
* Created on 2010年5月7日, 下午1:21
*/
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define _max 1005
int p[_max], rank[_max];
int degree[_max];
void init_set(int n) {//并查集初始化
for (int i = 1; i <= n; i++) {
p[i] = i;
rank[i] = 0;
}
}
int getfather(int x) {//找x说属树的根节点
if (p[x] != x)p[x] = getfather(p[x]);
return p[x];
}
void Union(int a, int b) {//把a和b合并在一棵树上
a = getfather(a);
b = getfather(b);
if (p[a] == p[b])return;
if (rank[a] > rank[b]) {
p[b] = a;
rank[a] += rank[b];
} else {
p[a] = b;
rank[b] += rank[a];
}
}
/*
*
*/
int main(int argc, char** argv) {
int i, j, a, b, n, m;
while (cin >> n) {
if (n == 0)break;
cin >> m;
memset(degree, 0, sizeof (degree));//度初始化
init_set(n);
for (i = 1; i <= m; i++) {
cin >> a >> b;
Union(a, b);
degree[a]++;
degree[b]++;
}
bool flag = 0;
if (degree[1] % 2 != 0)flag = 1;
int root = getfather(1);
for (i = 2; i <= n; i++) {
int k = getfather(i);
if (k != root)
{
flag = 1;break;
}
if (degree[i] % 2 != 0)
{
flag = 1;break;
}
}
if (flag)cout << 0 << endl;
else cout << 1 << endl;
}
return (EXIT_SUCCESS);
}
/*
* File: hdu1878.cpp
* 用深搜判断连通性
* Author: chenjiang
*
* Created on 2010年5月7日, 下午1:52
*/
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define _max 1005
int degree[_max];
int mapmap[_max][_max];
bool visited[_max];
int n, m;
int num;
void dfs(int k) {
int i;
num++;
visited[k] = 1;
for (i = 1; i <= n; i++) {
if (mapmap[k][i] && !visited[i]) {
dfs(i);
}
}
}
/*
*
*/
int main(int argc, char** argv) {
int i, j, k, a, b;
while (cin >> n) {
if (n == 0)break;
cin >> m;
memset(degree, 0, sizeof (degree));
memset(mapmap, 0, sizeof (mapmap));
for (i = 1; i <= m; i++) {
cin >> a >> b;
mapmap[a][b] = mapmap[b][a] = 1;
degree[a]++;
degree[b]++;
}
bool flag = 1;
for (i = 1; i <= n; i++) {
if (degree[i] % 2 != 0) {
flag = 0;
break;
}
}
if (flag) {
memset(visited, 0, sizeof (visited));
num = 0;
dfs(1);
if (num == n)cout << 1 << endl;
else cout << 0 << endl;
} else {
cout << 0 << endl;
}
}
return (EXIT_SUCCESS);
}