#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, res[i]);     }     for (long long i = 1; i <= n; i++) cout << res[i];   }   