#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
struct sd {
int a, b;
bool operator < (const sd &c) const {
if (a < c.a) return true;
if (a == c.a && b < c.b) return true;
return false;
}
} p;
int n, m, pt = 0;
int x[1005];
vector<int>mp[1005];
set <sd> kk;
void dfs(int v) {
for (int i = mp[v].size() - 1; i >= 0; i--)
if (x[mp[v][i]] > 0) {
pt++;
x[mp[v][i]] = -1;
dfs(mp[v][i]);
}
}
int main() {
while (1) {
bool flag = false;
scanf("%d", &n);
if (n == 0) break;
scanf("%d", &m);
for (int i = 1; i <= n; i++) mp[i].clear();
memset(x, 0, sizeof(x));
kk.clear();
for (int a, b, t, i = 1; i <= m; i++) {
scanf("%d%d", &a, &b);
if (a == b) continue;
if (a > b) t = a, a = b, b = t;
p.a = a, p.b = b;
if (kk.count(p)) continue;
kk.insert(p);
x[a]++;
x[b]++;
mp[a].push_back(b);
mp[b].push_back(a);
}
for (int i = 1; i <= n; i++)
if (x[i] == 0 || x[i] % 2 == 1) {
flag = true;
break;
}
if (flag) {
printf("0\n");
continue;
}
x[1] = -1;
pt = 1;
dfs(1);
if (pt == n) printf("1\n");
else printf("0\n");
}
return 0;
}