func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T, typename U>   inline void smin(T &a, U b) {     if (a > b) a = b;   }   template <typename T, typename U>   inline void smax(T &a, U b) {     if (a < b) a = b;   }   int val[501000], deg[501000];   vector<int> adj[501000];   int main() {     int n, m, u, v;     scanf( %d%d , &n, &m);     for (int i = 0; i < m; i++) {       scanf( %d%d , &u, &v);       adj[u].push_back(v);       adj[v].push_back(u);       deg[u]++, deg[v]++;     }     set<pair<int, int> > st;     for (int i = 1; i <= n; i++) {       if (adj[i].size() > 1) st.insert(pair<int, int>(adj[i].size(), i));     }     while (!st.empty()) {       pair<int, int> a = *st.begin();       if (a.first < 2) break;       st.erase(a);       val[a.second] ^= 1;       u = a.second;       deg[u] = 0;       for (int i = 0; i < adj[u].size(); i++) {         int v = adj[u][i];         if (val[v] == val[u]) {           if (deg[v] > 1) st.erase(pair<int, int>(deg[v], v));           deg[v]++;           if (deg[v] > 1) st.insert(pair<int, int>(deg[v], v));           deg[u]++;         } else {           if (deg[v] > 1) st.erase(pair<int, int>(deg[v], v));           deg[v]--;           if (deg[v] > 1) st.insert(pair<int, int>(deg[v], v));         }       }     }     for (int i = 1; i <= n; i++) printf( %d , val[i]);     return 0;   }   