#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
//#define int long long
using namespace std;
vector<int>g[110],f(110),s(110),d(110);
bool v[110];
int find(int x){
if(x!=f[x])
return find(f[x]);
return f[x];
}
//dfs不对,要求最短距离,不能回头,要有d数组记录
int bfs(int st,int ed){
queue<int>q;
q.push(st);
v[st]=1;
int t;
while(q.size()) {
t=q.front();
q.pop();
for(int i=0;i<g[t].size();i++){
int x=g[t][i];
if(v[x]||x==t||x==ed) continue;
v[x]=1;
d[x]=d[t]+1;
q.push(x);
}
}
d[ed]=d[t]+1;
return d[ed];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
int l,r;
int n,m;
int a,b;
cin>>n>>m;
for(int i=1;i<=n;i++){
g[i].clear();
v[i]=0,s[i]=0,f[i]=i,d[i]=0;
}
for(int i=0;i<m;i++){
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
int fa=find(a);
int fb=find(b);
if(fa==fb) s[fb]++,l=a,r=b;
else{
s[fb]+=s[fa];
f[fa]=fb;
}
}
int ans=0;
for(int i=1;i<=n;i++){
if(find(i)==i&&s[i]==1) ans++;
}
if(ans!=1){
cout<<"No "<<ans<<endl;
}else{
cout<<"Yes "<<bfs(l,r)+1<<endl;
}
}
return 0;
}
睿抗编程技能赛2024某题。