#include <bits/stdc++.h>
using namespace std;
inline int add(int _a, int _b) {
  if (_a < 0) {
    _a += 1000000007;
  }
  if (_b < 0) {
    _b += 1000000007;
  }
  if (_a + _b >= 1000000007) {
    return _a + _b - 1000000007;
  }
  return _a + _b;
}
inline int mul(int _a, int _b) {
  if (_a < 0) {
    _a += 1000000007;
  }
  if (_b < 0) {
    _b += 1000000007;
  }
  return ((long long int)((long long int)_a * (long long int)_b)) % 1000000007;
}
int n, m, color[3 * 100010];
vector<int> adj[3 * 100010];
queue<int> q;
void input() {
  int i, j;
  scanf("%d %d", &n, &m);
  for (i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    --u, --v;
    adj[u].push_back(v), adj[v].push_back(u);
  }
}
bool bad(int u) {
  int i, j, cnt, v;
  for (i = cnt = 0; i < adj[u].size(); i++) {
    v = adj[u][i];
    cnt += (color[u] == color[v]);
  }
  return (cnt > 1);
}
void solve() {
  int i, j;
  for (i = 0; i < n; i++) {
    if (bad(i)) {
      q.push(i);
    }
  }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    if (!bad(u)) {
      continue;
    }
    color[u] ^= 1;
    for (i = 0; i < adj[u].size(); i++) {
      int v = adj[u][i];
      if (bad(v)) {
        q.push(v);
      }
    }
  }
  for (i = 0; i < n; i++) {
    printf("%d", color[i]);
  }
  puts("");
}
int main() {
  input();
  solve();
}
