#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int ret = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    ret = (ret << 1) + (ret << 3) + ch - '0';
    ch = getchar();
  }
  return ret * f;
}
int t, n, m, tot, h[200005], e[200005], nxt[200005], d[200005], de[200005],
    p[200005], a[3][200005], ss[3];
bool vis[200005], bz;
void adde(int x, int y) {
  e[++tot] = y;
  nxt[tot] = h[x];
  h[x] = tot;
  de[y]++;
}
bool dfs(int x, int y, int z) {
  p[x]++;
  if (x == z) return 1;
  for (int i = h[x]; i; i = nxt[i])
    if (e[i] != y)
      if (dfs(e[i], x, z)) return 1;
  p[x]--;
  return 0;
}
void dfs2(int x, int y, int z) {
  a[z][++ss[z]] = x;
  for (int i = h[x]; i; i = nxt[i])
    if (e[i] != y) dfs2(e[i], x, z);
}
void work() {
  n = read();
  m = read();
  tot = 0;
  for (int i = 1; i <= n; i++) de[i] = h[i] = vis[i] = 0;
  for (int x, y; m--;) {
    x = read();
    y = read();
    adde(x, y);
    adde(y, x);
  }
  bz = 0;
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      d[tot = 1] = i;
      vis[i] = 1;
      for (int j = 1, k, x; j <= tot; j++) {
        x = d[j];
        for (k = h[x]; k; k = nxt[k]) {
          if (!vis[e[k]]) {
            vis[e[k]] = 1;
            d[++tot] = e[k];
          }
        }
      }
      int mx = 0, s = 0;
      for (int j = 1; j <= tot; j++) {
        mx = max(mx, de[d[j]]);
        s += de[d[j]];
      }
      s >>= 1;
      if (s >= tot) {
        bz = 1;
        for (int j = 1; j <= tot; j++) p[d[j]] = 1;
        continue;
      }
      if (mx > 3) {
        bz = 1;
        for (int j = 1; j <= tot; j++) p[d[j]] = (de[d[j]] > 3) ? 2 : 1;
        continue;
      }
      if (mx == 3) {
        int x, y;
        for (x = 1; x <= tot && de[d[x]] < 3; x++)
          ;
        for (y = x + 1; y <= tot && de[d[y]] < 3; y++)
          ;
        if (y <= tot) {
          bz = 1;
          for (int j = 1; j <= tot; j++) p[d[j]] = 1;
          dfs(d[x], 0, d[y]);
          continue;
        }
        ss[0] = ss[1] = ss[2] = 1;
        a[0][1] = a[1][1] = a[2][1] = d[x];
        for (int j = h[d[x]], k = 0; j; j = nxt[j], k++) dfs2(e[j], d[x], k);
        if ((1.0 / ss[0] + 1.0 / ss[1] + 1.0 / ss[2] <= 1)) {
          bz = 1;
          p[d[x]] = max(max(ss[0], ss[1]), ss[2]);
          for (int j = 0; j < 3; j++) {
            int r = p[d[x]] % ss[j], k, l, del = p[d[x]] / ss[j];
            if (r) {
              for (k = 1, l = p[d[x]]; k <= r; k++, l -= del) p[a[j][k]] = l;
              for (l--; k <= ss[j]; k++, l -= del) p[a[j][k]] = l;
            } else
              for (k = 1, l = p[d[x]]; k <= ss[j]; k++, l -= del)
                p[a[j][k]] = l;
          }
        } else
          for (int j = 1; j <= tot; j++) p[d[j]] = 0;
        continue;
      }
      for (int j = 1; j <= tot; j++) p[d[j]] = 0;
    }
  }
  if (!bz)
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 1; i <= n; i++) printf("%d ", p[i]);
    printf("\n");
  }
}
int main() {
  for (t = read(); t--; work())
    ;
  return 0;
}
