#include <bits/stdc++.h>
struct Graph {
  int v[(300005 * 2)], pre[(300005 * 2)], ind[300005], n;
  void push_edge(int ui, int vi) {
    int id = ++n;
    pre[id] = ind[ui];
    ind[ui] = id;
    v[id] = vi;
  }
} G;
int N, M, K, conf[300005], deg[300005];
bool result[300005], inq[300005];
std::queue<int> Q;
int main() {
  int i, j;
  scanf("%d%d", &N, &M);
  K = 1;
  while (M--) {
    scanf("%d%d", &i, &j);
    G.push_edge(i, j);
    G.push_edge(j, i);
    conf[i]++, conf[j]++;
    deg[i]++, deg[j]++;
  }
  for (i = 1; i <= N; i++)
    if (conf[i] > K) {
      Q.push(i);
      inq[i] = true;
    }
  while (!Q.empty()) {
    i = Q.front();
    Q.pop();
    inq[i] = false;
    if (conf[i] <= K) continue;
    conf[i] = deg[i] - conf[i];
    result[i] ^= 1;
    for (int jid = G.ind[i]; jid; jid = G.pre[jid]) {
      j = G.v[jid];
      if (result[i] == result[j]) {
        conf[j]++;
        if (conf[j] > K && !inq[j]) {
          Q.push(j);
          inq[j] = true;
        }
      } else
        conf[j]--;
    }
  }
  for (i = 1; i <= N; i++) putchar(result[i] ? '1' : '0');
  putchar('\n');
}
