#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;
}
