#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
vector<int> edges[N];
int color[N];
int degree[N];
int main() {
  ios::sync_with_stdio(false);
  int nverts;
  int nedges;
  cin >> nverts >> nedges;
  int a, b;
  for (int i = (int)0; i < (int)nedges; i++) {
    cin >> a >> b;
    a--, b--;
    edges[a].push_back(b);
    edges[b].push_back(a);
  }
  memset(color, 0, sizeof(color));
  for (int i = (int)0; i < (int)nverts; i++) degree[i] = edges[i].size();
  priority_queue<pair<int, int>, vector<pair<int, int> > > Q;
  for (int i = (int)0; i < (int)nverts; i++) {
    if (degree[i] > 1) Q.push(pair<int, int>(degree[i], i));
  }
  while (!Q.empty()) {
    int deg = Q.top().first;
    int node = Q.top().second;
    Q.pop();
    if (degree[node] != deg) continue;
    color[node] = !color[node];
    degree[node] = 0;
    for (__typeof(edges[node].begin()) nbr = edges[node].begin();
         nbr != edges[node].end(); nbr++) {
      degree[node] += color[*nbr] == color[node];
      degree[*nbr] = 0;
      for (__typeof(edges[*nbr].begin()) next = edges[*nbr].begin();
           next != edges[*nbr].end(); next++)
        degree[*nbr] += color[*next] == color[*nbr];
      if (degree[*nbr] > 1) Q.push(pair<int, int>(degree[*nbr], *nbr));
    }
  }
  for (int i = (int)0; i < (int)nverts; i++) cout << color[i];
  cout << "\n";
  return 0;
}
