#include <bits/stdc++.h>
using namespace std;
template <typename T>
int size(T &a) {
  return (int)a.size();
}
template <typename T>
T sqr(T a) {
  return a * a;
}
const int MAXN = int(3e5);
const int MAXE = MAXN * 2;
int head[MAXN], to[MAXE], nxt[MAXE];
int edge;
void ae(int u, int v) {
  to[edge] = v;
  nxt[edge] = head[u];
  head[u] = edge++;
}
void init() {
  edge = 0;
  memset((head), (255), sizeof(head));
}
int col[MAXN];
int getenemy(int u, int my) {
  int res = 0;
  for (int e = head[u]; e >= 0; e = nxt[e])
    if (col[to[e]] == my) ++res;
  return res;
}
int main() {
  int n, m;
  init();
  scanf("%d%d", &n, &m);
  for (int i = (0); i < (m); ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    --x;
    --y;
    ae(x, y);
    ae(y, x);
  }
  memset((col), (255), sizeof(col));
  for (int i = (0); i < (n); ++i) {
    int c = getenemy(i, 0);
    if (c <= 1)
      col[i] = 0;
    else
      col[i] = 1;
  }
  bool update;
  for (int iter = (0); iter < (50); ++iter) {
    if (iter == 50 - 2) update = false;
    for (int i = (0); i < (n); ++i) {
      if (col[i] == 1 - iter % 2) {
        int c = getenemy(i, 1 - iter % 2);
        if (c <= 1)
          col[i] = 1 - iter % 2;
        else {
          col[i] = iter % 2;
          update = true;
        }
      }
    }
  }
  if (update)
    cout << -1;
  else {
    for (int i = (0); i < (n); ++i) printf("%d", col[i]);
  }
  return 0;
}
