#include <bits/stdc++.h>
using namespace std;
const int maxn = 111111 * 3;
struct Edge {
  int t, next;
} edge[maxn << 1];
int head[maxn], tot;
int vis[maxn], cnt[maxn], mark[maxn];
void new_edge(int a, int b) {
  edge[tot].t = b;
  edge[tot].next = head[a];
  head[a] = tot++;
}
queue<int> q;
int main() {
  int n, m, i, j, k;
  scanf("%d%d", &n, &m);
  memset(head, -1, sizeof(head));
  while (m--) {
    int a, b;
    scanf("%d%d", &a, &b);
    new_edge(a, b);
    new_edge(b, a);
    cnt[a]++, cnt[b]++;
    if (cnt[a] >= 2) q.push(a), mark[a] = 1;
    if (cnt[b] >= 2) q.push(b), mark[b] = 1;
  }
  int step = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    mark[u] = 0;
    if (cnt[u] < 2) continue;
    vis[u] ^= 1;
    int add = 0;
    for (i = head[u]; i != -1; i = edge[i].next) {
      int e = edge[i].t;
      if (vis[e] == vis[u])
        cnt[e]++, add++;
      else
        cnt[e]--;
      if (cnt[e] >= 2 && !mark[e]) q.push(e), mark[e] = 1;
    }
    cnt[u] = add;
    if (add >= 2) q.push(u), mark[u] = 1;
    step++;
  }
  for (i = 1; i <= n; i++) printf("%d", vis[i]);
  puts("");
  return 0;
}
