#include #include #include #include #include #include #include using std::cin; using std::cout; const char endl = '\n'; const int N = 1e5 + 5, M = 2e5 + 5; int n, m, q, s[N], d[M]; std::mt19937 rng(std::random_device{}()); std::vector> g[N]; bool vis[N]; template class liner_base : private std::vector { public: liner_base() : std::vector(std::numeric_limits::digits + 1, 0) {} bool insert(T w) { for (int i = std::numeric_limits::digits; i >= 0; --i) { if (!(w >> i)) continue; if (!this->at(i)) { this->at(i) = w; return true; } w ^= this->at(i); } return false; } T query_min(T w) { for (int i = std::numeric_limits::digits; i >= 0; --i) { if (!((w >> i) & 1)) continue; w ^= this->at(i); } return w; } }; void dfs(int u, int f) { vis[u] = true; for (auto e : g[u]) { int v = e.first, id = e.second; if (!vis[v]) { dfs(v, u); s[u] ^= s[v]; d[id] ^= s[v]; } else if (v != f && !d[id]) { d[id] = rng(); s[u] ^= d[id]; s[v] ^= d[id]; } } } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 1, u, v; i <= m; i++) { cin >> u >> v; g[u].emplace_back(v, i); g[v].emplace_back(u, i); } dfs(1, 1); cin >> q; while (q--) { int c; liner_base lb; bool ans = true; cin >> c; for (int i = 1, x; i <= c; i++) { cin >> x; ans &= lb.insert(d[x]); } cout << (ans ? "Connected" : "Disconnected") << endl; } return 0; }