#include #include #include using std::vector; using std::queue; int bipartite(vector > &adj) { vector t(adj.size(), -1); queue q; q.push(0); t[0] = 0; int tag = 1; while (!q.empty()) { int v = q.front(); /* std::cout << " check : " << v << " tag " << tag << std::endl; */ q.pop(); tag = !t[v]; for (int i = 0; i < adj[v].size(); i++) { int w = adj[v][i]; /* std::cout << " " << w << " " << t[w] << std::endl; */ if (t[w] == -1) { q.push(w); t[w] = tag; } else if (t[w] != tag) { /* std::cout << " wrong " << w << " " << t[w] << std::endl; */ return 0; } } } return 1; } int main() { int n, m; std::cin >> n >> m; vector > adj(n, vector()); for (int i = 0; i < m; i++) { int x, y; std::cin >> x >> y; adj[x - 1].push_back(y - 1); adj[y - 1].push_back(x - 1); } std::cout << bipartite(adj) << '\n'; }