#include <iostream> #include <queue> #include <vector> using namespace std; const int N=1005; bool visited[N]={false}; int n,m,a,b,cont; vector<int> vec[N]; //vec[1]中存储与顶点1相邻的所有顶点 void Initial(){ cont=0; for(int i=0;i<=1000;i++) vec[i].clear(); for(int i=1;i<=1000;i++) visited[i]=false; } void BFS(int u){ queue<int> q; q.push(u); visited[u]=true; while(!q.empty()){ u=q.front(); q.pop(); //查找u结点的邻接结点 for(int i=0;i<vec[u].size();i++){ int v=vec[u][i]; if(visited[v]==false){ q.push(v); visited[v]=true; } } } } void BFSTraverse(){ for(int i=1;i<=n;i++){ if(visited[i]==false){ cont++; BFS(i); } } } int main() { while(cin>>n>>m){ if(n==0 && m==0) break; Initial(); for(int i=0;i<m;i++){ cin>>a>>b; vec[a].push_back(b); vec[b].push_back(a); } BFSTraverse(); if(cont==1) cout<<"YES\n"; else cout<<"NO\n"; } return 0; }