void solve(){
int n,m;//n个节点,m条边
vector<vector<int>>gh(n+1);
for(int i=0;i<m;i++){
int u,v;cin>>u>>v;
gh[u].pb(v);
gh[v].pb(u);
}
vector<int>color(n+1);
auto dfs=[&](auto&&dfs,int u,int co)->bool{
color[u]=co;//进来先标记为预期co颜色
for(auto&v:gh[u]){
if(color[v]==color[u]) return false;
if(color[v]==0){//没被染色
if(!dfs(dfs,v,3-co)){//那么递归染色这个
return false;//如果返回了false 说明和父亲冲突了
}
}
}
return true;
};
int flag=1;
for(int i=1;i<=n;i++){
if(!color[i]){
if(!dfs(dfs,i,1)){//如果为false 那么dfs后存在奇数环
flag=0;
break;
}
}
}
if(flag){
YES;
}else{
NO;
}
return;
}