checker说Wrong Answer.wrong answer in 159-th test: Jury found answer, participant didn't.
#include<bits/stdc++.h>
#define int long long
#define N 500000
using namespace std;
int t,u1,n,m,top,cnt,cntu,s[N+5],d[N+5],fst[N+5],fa[N+5],dep[N+5],ans[N+5],pre[N+5];
bool vis[N+5];
vector<int>g[N+5];
queue<int>q;
void clear(){
cnt=cntu=u1=0;
while(!q.empty())q.pop();
for(int i=1;i<=n;i++)g[i].clear();
}
void clearv(){
for(int i=1;i<=n;i++)vis[i]=0;
}
void bfs(){
clearv();
vis[u1]=1;
pre[u1]=0;
q.push(u1);
int v1=0;
while(!q.empty()){
int u=q.front();
q.pop();
if(d[u]==1&&u!=u1){
v1=u;
break;
}
for(int v:g[u]){
if(!vis[v]){
vis[v]=1;
pre[v]=u;
q.push(v);
}
}
}
for(int i=v1;i;i=pre[i])ans[++cnt]=i;
}
void dfs1(int u,int f){
vis[u]=1;
fa[u]=f;
dep[u]=dep[f]+1;
for(int v:g[u])if(!vis[v]&&d[v]==2)dfs1(v,u);
}
void dfs2(int u){
vis[u]=1;
for(int v:g[u]){
if(!vis[v]){
if(d[v]==1)fst[++cntu]=u;
if(d[v]==2)dfs2(v);
}
}
}
void dfs3(int u,int f){
s[++top]=u;
if(u==fst[2])for(int i=1;i<=top;i++)ans[++cnt]=s[i];
for(int v:g[u])if(v!=f&&d[v]==2)dfs3(v,u);
top--;
}
bool check0(){
for(int i=1;i<=n;i++){
if(!d[i]){
ans[++cnt]=i;
return 1;
}
}
return 0;
}
bool check1(){
for(int i=1;i<=n;i++)if(d[i]==1)u1=i;
bfs();
return cnt;
}
bool check2(){
clearv();
for(int i=1;i<=n;i++)if(!vis[i]&&d[i]==2)dfs1(i,0);
int minc=n;
for(int i=1;i<=n;i++)
if(d[i]==2)
for(int j:g[i])
if(d[j]==2&&dep[i]-dep[j]>1)
minc=min(minc,dep[i]-dep[j]);
for(int i=1;i<=n;i++)
if(d[i]==2)
for(int j:g[i])
if(d[j]==2&&dep[i]-dep[j]==minc){
for(int k=i;k!=j;k=fa[k])ans[++cnt]=k;
ans[++cnt]=j;
}
return cnt;
}
bool check12(){
clearv();
int cnt2=0;
for(int i=1;i<=n;i++){
if(d[i]==2&&!vis[i]){
dfs2(i);
dfs3(fst[1],0);
cntu=0;
cnt2++;
if(cnt2==2)break;
}
}
ans[++cnt]=u1;
return cnt;
}
void print(){
if(cnt==n)cout<<"No";
else{
cout<<"Yes\n"<<n-cnt<<'\n';
clearv();
for(int i=1;i<=cnt;i++)vis[ans[i]]=1;
for(int i=1;i<=n;i++)if(!vis[i])cout<<i<<' ';
}
cout<<'\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n>>m;
clear();
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v),g[v].push_back(u);
}
for(int i=1;i<=n;i++)d[i]=g[i].size()%3;
if(check0()||check1()||check2()||check12())print();
}
}