#include <bits/stdc++.h>
using namespace std;
const int MAXn = 3 * 100 * 1000 + 5;
int n, m;
vector<int> adj[MAXn];
bool part[MAXn];
set<int> cand;
bool isCand[MAXn];
inline int countbad(int x) {
  int ret = 0;
  for (int i = 0; i < (int)(adj[x]).size(); i++)
    if (part[adj[x][i]] == part[x]) ret++;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  int t1, t2;
  for (int i = 0; i < m; i++) {
    cin >> t1 >> t2;
    t1--;
    t2--;
    adj[t1].push_back(t2);
    adj[t2].push_back(t1);
  }
  for (int i = 0; i < n; i++)
    if (countbad(i) > 1) {
      cand.insert(i);
      isCand[i] = true;
    }
  while (!cand.empty()) {
    int x = *cand.begin();
    cand.erase(cand.begin());
    isCand[x] = false;
    part[x] = !part[x];
    for (int i = 0; i < (int)(adj[x]).size(); i++)
      if (part[adj[x][i]] == part[x] and countbad(adj[x][i]) >= 2 and
          !isCand[adj[x][i]]) {
        cand.insert(adj[x][i]);
        isCand[adj[x][i]] = true;
      } else if (part[adj[x][i]] != part[x] and isCand[adj[x][i]] and
                 countbad(adj[x][i]) < 2) {
        isCand[adj[x][i]] = false;
        cand.erase(cand.find(adj[x][i]));
      }
  }
  for (int i = 0; i < n; i++)
    if (part[i])
      cout << '1';
    else
      cout << '0';
  cout << endl;
  return 0;
}
