void dfs1(int u, int fa) {
if (found) return;
stk[++top] = u, ins[u] = true;
for (auto j : g[u]) {
if (j == fa) continue;
if (ins[j]) {
int y;
do {
y = stk[top--];
c.push_back(y);
onc[y] = true;
} while (y != j);
found = true;
}
dfs1(j, u);
}
top--, ins[u] = false;
}
for (int i = 1; i <= n; i++) if (!vis[i]) {
int u = i;
while (!vis[u]) {
vis[u] = true;
u = p[u];
}
int v = u;
vector<int> cyc;
while (true) {
cyc.push_back(v);
oncyc[v] = true;
v = p[v];
if (v == u) break;
}
}