#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,n) for(int i = 0;i<((int)(n));i++) #define reg(i,a,b) for(int i = ((int)(a));i<=((int)(b));i++) #define irep(i,n) for(int i = ((int)(n)-1);i>=0;i--) #define ireg(i,a,b) for(int i = ((int)(b));i>=((int)(a));i--) typedef long long ll; typedef pair mp; ll mod = 1e9+7; ll inf = 1e18; //AC //オイラー路 //グラフ問題にしては珍しく0-originであることに注意 //連結かどうかの判定も必須 struct UnionFind{ int n; vector r,p; UnionFind(){} UnionFind(int sz):n(sz),r(sz,1),p(sz,0){iota(p.begin(),p.end(),0);} int find(int x){ return (x==p[x]?x:p[x]=find(p[x])); } bool same(int x,int y){ return find(x)==find(y); } void unite(int x,int y){ x=find(x);y=find(y); if(x==y) return; if(r[x]>n>>m; UnionFind f(n); rep(i,m){ cin>>a>>b; deg[a]++; deg[b]++; f.unite(a,b); } rep(i,n){ // cout<0){ if(present==-1){ present=i;//代表点 }else{ if(!f.same(present,i))connect=false; } } if(deg[i]%2==1)odd++; } if(odd==0 || odd==2)can=true; if(can && connect){ cout<<"YES"<