#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define rep(i,a,b) for(auto i=(a); i<(b); ++i) #define REP(i,n) rep(i,0,n) #define all(v) (v).begin(), (v).end() #define rs resize #define DBG(x) cerr << __LINE__ << ": " << #x << " = " << (x) << endl const ld PI = acos(-1.0); template using min_queue = priority_queue, greater>; template int sz(const T &x) { return (int) x.size(); // copy the ampersand(&)! } // START OF ACTUAL PROGRAM, START READING HERE vvi adj; vi bfs(ll i) { vi Q{i}; vi d(adj.size(),-1); d[i] = 0; ll j = 0; while (j < Q.size()) { for (ll k : adj[Q[j]]) { if (d[k] >= 0) continue; d[k] = d[Q[j]]+1; Q.pb(k); } j++; } return d; } void run() { ll n, m; cin >> n >> m; ll k = 0; while ((1<> a >> b; adj[a-1].pb(b-1); adj[b-1].pb(a-1); } if (adj[0].size() != k) { cout << "no" << endl; return; } vi W(n, 0); vi d0 = bfs(0); for (ll i = 0; i < k; i++) { vi d = bfs(adj[0][i]); for (ll j = 0; j < n; j++) { if (d0[j] < 0 || d[j] < 0) { cout << "no" << endl; return; } if (d[j] < d0[j]) { W[j] += (1< S; for (ll w : W) { S.insert(w); } if (S.size() != n) { cout << "no" << endl; return; } for (ll i = 0; i < n; i++) { if (adj[i].size() != k) { cout << "no" << endl; return; } for (ll j : adj[i]) { if (!has_single_bit((unsigned int) (W[i]^W[j]))) { cout << "no" << endl; return; } } } cout << "yes" << endl; } signed main() { // DON'T MIX "scanf" and "cin"! ios_base::sync_with_stdio(false); cin.tie(NULL); cout << fixed << setprecision(20); run(); return 0; }