func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, col[100010], out[100010], sum[3], cn, id[100010];   vector<int> g[100010];   void dfs(int x) {     for (int i = 0, v; i < g[x].size(); i++) {       v = g[x][i];       if (col[v]) continue;       col[v] = 3 ^ col[x];       dfs(v);     }   }   void get() {     for (int i = 1, st = 3; i <= n; i++)       if (col[i] == 1 && !id[i]) {         if (st == 3) cn++, st = 0;         st++, id[i] = cn;       }     for (int i = 1, st = 3; i <= n; i++)       if (col[i] == 2 && !id[i]) {         if (st == 3) cn++, st = 0;         st++, id[i] = cn;       }     puts( YES );     for (int i = 1; i <= n; i++) printf( %d  , id[i]);   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 0, u, v; i < m; i++) {       scanf( %d%d , &u, &v);       g[u].push_back(v);       g[v].push_back(u);     }     for (int i = 1; i <= n; i++)       if (!col[i]) col[i] = 1, dfs(i);     for (int i = 1; i <= n; i++)       for (int j = 0; j < g[i].size(); j++)         if (col[i] ^ col[g[i][j]]) out[i]++;     for (int i = 1; i <= n; i++) sum[col[i]]++;     if (!(sum[1] % 3) && !(sum[2] % 3)) return get(), 0;     if (sum[1] % 3 > sum[2] % 3) {       swap(sum[1], sum[2]);       for (int i = 1; i <= n; i++) col[i] = 3 ^ col[i];     }     for (int i = 1; i <= n; i++)       if (col[i] == 1 && sum[2] - out[i] >= 2) {         id[i] = cn = 1;         for (int p = 0; p < g[i].size(); p++) col[g[i][p]] = 0;         for (int p = 1, st = 2; st && p <= n; p++)           if (col[p] == 2) st--, id[p] = 1;         for (int p = 0; p < g[i].size(); p++) col[g[i][p]] = 2;         return get(), 0;       }     if (sum[1] > 1) {       int xp = 0, yp = 0;       for (int i = 1; i <= n; i++)         if (col[i] == 2 && sum[1] - out[i] >= 2) {           if (!xp)             xp = i;           else             yp = i;         }       if (yp) {         id[xp] = cn = 1;         for (int p = 0; p < g[xp].size(); p++) col[g[xp][p]] = 0;         for (int p = 1, st = 2; st && p <= n; p++)           if (col[p] == 1) st--, id[p] = 1;         for (int p = 0; p < g[xp].size(); p++) col[g[xp][p]] = 1;         id[yp] = cn = 2;         for (int p = 0; p < g[yp].size(); p++) col[g[yp][p]] = 0;         for (int p = 1, st = 2; st && p <= n; p++)           if (col[p] == 1) st--, id[p] = 2;         for (int p = 0; p < g[yp].size(); p++) col[g[yp][p]] = 1;         return get(), 0;       }     }     return printf( NO ), 0;   }   