#include #include #include #include #include #include #define rep(i, a, b) for (int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define bw(x) bit_width(unsigned(x)) #define no() { cout << "no\n"; return 0; } using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; vector> adj(n); rep(i, 0, m) { int a, b; cin >> a >> b; --a, --b; adj[a].emplace_back(b); adj[b].emplace_back(a); } int d = bw(n) - 1; if (!(n == (1 << d) && ranges::all_of(adj, [d](auto& v) { return v.size() == d; }))) no() vector assigned(n, false); assigned[0] = true; vector p(n, -1); p[0] = 0; for (queue bfs({0}); !bfs.empty(); bfs.pop()) { int u = bfs.front(); auto unassigned = ranges::filter_view(adj[u], [&](int v) { return p[v] == -1; }); vector q(all(unassigned)); rep(j, 0, d) { if (assigned[p[u] | (1 << j)]) continue; if (q.empty()) no() int v = q.back(); q.pop_back(); p[v] = p[u] | (1 << j); assigned[p[v]] = true; bfs.push(v); } } rep(u, 0, n) for (auto v : adj[u]) if (popcount(unsigned(p[u] ^ p[v])) != 1) no() cout << "yes\n"; }