#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
int add(int a, int b) {
  if ((a += b) >= P) a -= P;
  return a;
}
int sub(int a, int b) {
  if ((a -= b) < 0) a += P;
  return a;
}
int mul(int a, int b) { return 1ll * a * b % P; }
int kpow(int a, int b) {
  int r = 1;
  for (; b; b >>= 1, a = mul(a, a)) {
    if (b & 1) r = mul(r, a);
  }
  return r;
}
const int N = 2e5 + 7;
int n, m, u, v, vis[N], use[N], cnt, x, y;
vector<int> a[2], w[N];
set<int> g[N];
void dfs(int u, int d, int fa) {
  vis[u] = 1;
  a[d].push_back(u);
  for (auto v : g[u])
    if (!vis[v]) {
      dfs(v, d ^ 1, u);
    }
}
void solve() {
  int now = 0;
  for (auto v : a[0])
    if (!use[v]) {
      use[v] = cnt + 1;
      now++;
      if (now == 3) {
        now = 0;
        cnt++;
      }
    }
  for (auto v : a[1])
    if (!use[v]) {
      use[v] = cnt + 1;
      now++;
      if (now == 3) {
        now = 0;
        cnt++;
      }
    }
  cout << "YES"
       << "\n";
  for (int i = (1); i < (n + 1); i++) cout << use[i] << " ";
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> m;
  for (int i = (1); i < (m + 1); i++) {
    cin >> u >> v;
    g[u].insert(v);
    g[v].insert(u);
  }
  for (int i = (1); i < (n + 1); i++)
    if (!vis[i]) dfs(i, 0, -1);
  if ((int)a[0].size() % 3 == 0) {
    solve();
  } else {
    if ((int)a[0].size() % 3 == 2) swap(a[0], a[1]);
    m = (int)a[1].size();
    for (auto v : a[0])
      if ((int)g[v].size() < m - 1) {
        cnt++;
        int now = 0;
        use[v] = cnt;
        for (auto u : a[1])
          if (now < 2 && !g[v].count(u)) {
            now++;
            use[u] = cnt;
          }
        solve();
        return 0;
      }
    if ((int)a[0].size() == 1) {
      cout << "NO";
      return 0;
    }
    for (auto v : a[0])
      for (auto u : a[1]) {
        if (!g[v].count(u)) w[u].push_back(v);
      }
    for (auto u : a[1])
      if ((int)w[u].size() >= 2 && cnt < 2) {
        cnt++;
        x = w[u][0];
        y = w[u][1];
        use[x] = use[y] = use[u] = cnt;
      }
    if (cnt < 2) {
      cout << "NO";
      return 0;
    }
    solve();
  }
  return 0;
}
