#include <bits/stdc++.h>
using namespace std;
bool visited[300000];
list<int> adj[100000];
int fraction[300000];
vector<int> ff[2];
int who[300000];
void go(int v, int f) {
  visited[v] = true;
  fraction[v] = f;
  for (__typeof((adj[v]).begin()) it = (adj[v]).begin(); it != (adj[v]).end();
       ++it)
    if (!visited[*it]) go(*it, 1 - f);
}
int start = 0;
void colorRest() {
  for (int i = 0; i < (ff[0].size()); ++i) {
    if (!who[ff[0][i]]) who[ff[0][i]] = (start++) / 3 + 1;
  }
  for (int i = 0; i < (ff[1].size()); ++i) {
    if (!who[ff[1][i]]) who[ff[1][i]] = (start++) / 3 + 1;
  }
}
void nn(int v) {
  who[v] = (start++) / 3 + 1;
  set<int> S;
  for (__typeof((adj[v]).begin()) it = (adj[v]).begin(); it != (adj[v]).end();
       ++it)
    S.insert(*it);
  for (__typeof((ff[1 - fraction[v]]).begin()) it =
           (ff[1 - fraction[v]]).begin();
       it != (ff[1 - fraction[v]]).end(); ++it) {
    if (S.find(*it) == S.end()) {
      who[*it] = (start++) / 3 + 1;
    }
    if (start % 3 == 0) return;
  }
}
bool solve() {
  if (ff[0].size() % 3 == 0) {
    colorRest();
    return true;
  }
  int zero = 0, one = 1;
  if (ff[0].size() % 3 == 2) swap(zero, one);
  for (int i = 0; i < (ff[zero].size()); ++i)
    if (adj[ff[zero][i]].size() + 1 < ff[one].size()) {
      nn(ff[zero][i]);
      colorRest();
      return true;
    }
  int q1 = 0;
  while ((q1 < ff[one].size()) &&
         (adj[ff[one][q1]].size() + 2 > ff[zero].size()))
    ++q1;
  int q2 = q1 + 1;
  while ((q2 < ff[one].size()) &&
         (adj[ff[one][q2]].size() + 2 > ff[zero].size()))
    ++q2;
  if (q2 >= ff[one].size()) return false;
  nn(ff[one][q1]);
  nn(ff[one][q2]);
  colorRest();
  return true;
}
int main() {
  int N, M;
  scanf("%d%d", &N, &M);
  for (int i = 0; i < (M); ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a, --b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  for (int i = 0; i < (N); ++i)
    if (!visited[i]) {
      go(i, 0);
    }
  for (int i = 0; i < (N); ++i) ff[fraction[i]].push_back(i);
  bool result = solve();
  if (!result)
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 0; i < (N); ++i) printf("%d ", who[i]);
    printf("\n");
  }
}
