#include <bits/stdc++.h>
using namespace std;
inline long long in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string getStr() {
  char ch[1000000];
  scanf("%s", ch);
  return ch;
}
const long long MOD = 1e9 + 7;
const long long base = 29;
const long long MAX_N = 3e5 + 1;
inline long long divide(long long a, long long b) { return (a + b - 1) / b; }
vector<long long> g[MAX_N];
long long deg[MAX_N];
bool vis[MAX_N];
long long res[MAX_N];
inline void dfs(long long node, long long part) {
  if (vis[node] == true) return;
  res[node] = part;
  long long cnt = 0;
  for (long long i = 0; i < g[node].size(); i++) {
    long long u = g[node][i];
    if (res[node] == res[u]) cnt++;
  }
  if (cnt > 1) {
    res[node] ^= 1;
    dfs(node, res[node]);
    vis[node] = false;
    return;
  }
  vis[node] = true;
  for (long long pt = 0; pt < g[node].size(); pt++) {
    long long u = g[node][pt];
    if (res[u] == res[node]) {
      dfs(u, res[u]);
      vis[node] = 0;
      return;
    }
  }
  vis[node] = false;
}
int32_t main() {
  long long n = in(), m = in();
  for (long long i = 0; i < m; i++) {
    long long v = in(), u = in();
    deg[v]++, deg[u]++;
    g[v].push_back(u);
    g[u].push_back(v);
  }
  for (long long i = 1; i <= n; i++) res[i] = 1;
  for (long long i = 1; i <= n; i++) {
    dfs(i, 1);
  }
  for (long long i = 1; i <= n; i++) cout << res[i];
}
