#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> adj[100005];
vector<int> gr[2];
int col[100005];
void go(int u, int c) {
  if (col[u] != -1) return;
  col[u] = c;
  gr[c].push_back(u);
  for (int v : adj[u]) go(v, 1 - c);
}
int ans[100005];
int cnt = 1;
void print() {
  for (int i = 0; i < gr[0].size(); i++) {
    if (ans[gr[0][i]]) {
      gr[0].erase(gr[0].begin() + i);
      i--;
    }
  }
  for (int i = 0; i < gr[1].size(); i++) {
    if (ans[gr[1][i]]) {
      gr[1].erase(gr[1].begin() + i);
      i--;
    }
  }
  for (int i = 0; i < gr[0].size(); i += 3) {
    ans[gr[0][i]] = ans[gr[0][i + 1]] = ans[gr[0][i + 2]] = cnt;
    cnt++;
  }
  for (int i = 0; i < gr[1].size(); i += 3) {
    ans[gr[1][i]] = ans[gr[1][i + 1]] = ans[gr[1][i + 2]] = cnt;
    cnt++;
  }
  printf("YES\n");
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
}
int main() {
  srand(time(NULL));
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) sort(adj[i].begin(), adj[i].end());
  memset(col, -1, sizeof col);
  int cc = 0;
  for (int i = 1; i <= n; i++) {
    if (col[i] != -1) continue;
    go(i, cc);
    cc = 1 - cc;
  }
  sort(gr[0].begin(), gr[0].end());
  sort(gr[1].begin(), gr[1].end());
  if (gr[0].size() % 3) {
    if (gr[0].size() % 3 == 2) gr[0].swap(gr[1]);
    for (int u : gr[0]) {
      if (adj[u].size() + 2 <= gr[1].size()) {
        int koyta = 0;
        for (int v : gr[1]) {
          if (find(adj[u].begin(), adj[u].end(), v) == adj[u].end()) {
            ans[v] = cnt;
            koyta++;
          }
          if (koyta == 2) break;
        }
        ans[u] = cnt;
        cnt++;
        break;
      }
    }
    if (cnt == 1) {
      swap(gr[0], gr[1]);
      for (int u : gr[0]) {
        if (adj[u].size() + 2 <= gr[1].size()) {
          int koyta = 0;
          for (int v : gr[1]) {
            if (find(adj[u].begin(), adj[u].end(), v) == adj[u].end()) {
              ans[v] = cnt;
              koyta++;
            }
            if (koyta == 2) break;
          }
          ans[u] = cnt;
          cnt++;
          if (cnt == 3) break;
        }
      }
      if (cnt != 3) {
        printf("NO\n");
        return 0;
      }
    }
  }
  print();
  return 0;
}
