P1007
#include <bits/stdc++.h>
const int N = 500010, M = N << 1;
int t, n, m;
int deg[N];
bool pass[M];
int head[N], nxt[M << 1], to[M << 1], idx;
int cur[N];
int stk[M], top;
void add(int u, int v) {
nxt[idx] = head[u];
to[idx] = v;
head[u] = idx;
++ idx;
return;
}
void dfsearch(int x) {
for ( ; cur[x] != -1; cur[x] = nxt[cur[x]]) {
if (pass[cur[x] >> 1]) {
continue;
}
pass[cur[x] >> 1] = true;
dfsearch(to[cur[x]]);
if (cur[x] == -1) {
break;
}
}
++ top, stk[top] = x;
return;
}
int main(void) {
scanf("%d", &t);
while (t --) {
scanf("%d%d", &n, &m);
idx = 0;
for (int i = 1; i <= n; ++ i) {
head[i] = -1;
deg[i] = 0;
}
for (int i = 0; i < m; ++ i) {
pass[i] = false;
}
int inpu, inpv;
for (int i = 1; i <= m; ++ i) {
scanf("%d%d", &inpu, &inpv);
add(inpu, inpv);
add(inpv, inpu);
++ deg[inpu], ++ deg[inpv];
}
int oddcnt = 0, oddpt1 = -1, oddpt2 = -1;
for (int i = 1; i <= n; ++ i) {
if (deg[i] & 1) {
++ oddcnt;
if (oddpt1 == -1) {
oddpt1 = i;
} else if (oddpt2 == -1) {
oddpt2 = i;
}
}
}
if (oddcnt != 0 && oddcnt != 2) {
puts("No");
} else {
for (int i = 1; i <= n; ++ i) {
cur[i] = head[i];
}
if (oddpt1 != -1) {
dfsearch(oddpt1);
} else {
for (int i = 1; i <= n; ++ i) {
if (deg[i]) {
dfsearch(i);
break;
}
}
}
if (top != m + 1) {
puts("No");
} else {
puts("Yes");
printf("%d\n", m + 1);
for (int i = top; i >= 1; -- i) {
printf("%d ", stk[i]);
}
puts("");
}
top = 0;
}
}
return 0;
}