すべての頂点から \(1\) 本ずつ辺が出ているので, どの頂点から始めてもサイクルにたどり着く.
サイクルの検出は,訪れた頂点を記録しておいて, すでに訪れた頂点に再び来たときにサイクルがあると分かる.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n;
cin >> n;
vll to(n);
// vll from(n);
rep(i,n){
ll a; cin >> a;
a--;
to[i] = a;
// from[a] = i;
}
vll used(n);
ll x = 0;
while(!used[x]){
used[x] = true;
x = to[x];
}
vll v;
used = vll(n);
while(!used[x]){
used[x] = true;
v.push_back(x);
x = to[x];
}
cout << v.size() << endl;
for(auto i:v) cout << i+1 << " ";
return 0;
}