#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
long long ans[N];
int n, m, cnt, ch[4], w[N], op[N], pre[N], dep[N];
bool fl;
int ft[N];
vector<int> v[N];
inline int read() {
  int num = 0;
  char g = getchar();
  while (g < 48 || 57 < g) g = getchar();
  while (47 < g && g < 58)
    num = (num << 1) + (num << 3) + g - 48, g = getchar();
  return num;
}
namespace sub1 {
void main() {
  for (int i = 1; i <= n; i++)
    if (w[i] >= 4) {
      ans[i] = 2, ans[v[i][0]] = 1, ans[v[i][1]] = 1, ans[v[i][2]] = 1,
      ans[v[i][3]] = 1, fl = 1;
      break;
    }
}
}  // namespace sub1
namespace sub2 {
void dfs(int u, int fa) {
  ft[u] = cnt;
  for (int i = 0; i < w[u]; i++) {
    int x = v[u][i];
    if (x == fa || fl) continue;
    if (ft[x])
      fl = 1;
    else
      pre[x] = u, dfs(x, u);
  }
}
void main() {
  for (int i = 1; i <= n; i++)
    if (!ft[i]) {
      cnt++, dfs(i, 0);
      if (fl) {
        for (int x = 1; x <= n; x++)
          if (ft[x] == cnt) ans[x] = 1;
        return;
      }
    }
}
}  // namespace sub2
namespace sub3 {
void bfs(int u) {
  ft[u] = 1;
  for (int i = 0; i < w[u]; i++) {
    int x = v[u][i];
    if (ft[x]) continue;
    pre[x] = u, bfs(x);
  }
}
void main() {
  int a = 0, b = 0;
  for (int i = 1; i <= n; i++)
    if (w[i] == 3) {
      if (op[ft[i]]) a = op[ft[i]], b = i;
      op[ft[i]] = i;
    }
  if (!a || !b) return;
  for (int i = 1; i <= n; i++) ft[i] = 0;
  pre[a] = 0, bfs(a);
  ans[v[a][0]] = ans[v[b][0]] = ans[v[a][1]] = ans[v[b][1]] = ans[v[a][2]] =
      ans[v[b][2]] = 1;
  while (b > 0) ans[b] = 2, b = pre[b];
  fl = 1;
}
}  // namespace sub3
namespace sub4 {
void bfs(int u) {
  ft[u] = 1;
  int fc = 0;
  for (int i = 0; i < w[u]; i++) {
    int x = v[u][i];
    if (ft[x]) continue;
    fc = 1, pre[x] = u, dep[x] = dep[u] + 1, bfs(x);
  }
  if (!fc) {
    for (int i = 0; i <= 2; i++)
      if (!ch[i]) {
        ch[i] = u;
        break;
      }
  }
}
void main() {
  for (int i = 1; i <= n; i++) ft[i] = 0;
  for (int i = 1; i <= n; i++)
    if (w[i] == 3) {
      memset(ch, 0, sizeof(ch)), dep[i] = 1, pre[i] = 0, bfs(i);
      long long a = dep[ch[0]], b = dep[ch[1]], c = dep[ch[2]];
      if (a * b + b * c + a * c > a * b * c) continue;
      while ((a - 1) * b + b * c + (a - 1) * c <= (a - 1) * b * c)
        ch[0] = pre[ch[0]], a--;
      while (a * (b - 1) + (b - 1) * c + a * c <= a * (b - 1) * c)
        ch[1] = pre[ch[1]], b--;
      while (a * b + b * (c - 1) + a * (c - 1) <= a * b * (c - 1))
        ch[2] = pre[ch[2]], c--;
      ans[i] = a * b * c, ans[ch[0]] = b * c, ans[ch[1]] = a * c,
      ans[ch[2]] = a * b;
      for (int i = 0; i <= 2; i++) {
        int x = ch[i];
        long long c = ans[x], q = ans[x];
        while (x) ans[x] = q, q += c, x = pre[x];
      }
      fl = 1;
      break;
    }
}
}  // namespace sub4
int main() {
  int t = read();
  while (t--) {
    n = read(), m = read(), fl = 0;
    int u, t;
    for (int i = 1; i <= n; i++)
      w[i] = 0, ans[i] = 0, ft[i] = 0, pre[i] = 0, v[i].resize(0);
    for (int i = 1; i <= m; i++)
      u = read(), t = read(), w[u]++, w[t]++, v[u].push_back(t),
      v[t].push_back(u);
    if (!fl) sub1::main();
    if (!fl) sub2::main();
    if (!fl) sub3::main();
    if (!fl) sub4::main();
    if (!fl)
      puts("NO");
    else {
      puts("YES");
      for (int i = 1; i <= n; i++) printf("%lld ", ans[i]);
      puts("");
    }
  }
  return 0;
}
