555, WA了一些点
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N=2e5+5,M=N<<1 ;
int hd[N],all=1,nxt[M],go[M] ;
void _add(int x,int y){ nxt[++all]=hd[x]; hd[x]=all; go[all]=y;}
int n,flg=0, S,T,vis[N],pre[N],ban;
void dfs(int x,int fa){
vis[x]=1;if(flg) return;
for(int i=hd[x];i;i=nxt[i]){
int y =go[i] ;
if(vis[y]&&y!=fa){
flg=1; S=x,T=y; ban=i; return ;
}
if(y!=fa) dfs(y,x) ;
}
}
void bfs(){
queue<int> q; memset(vis,0,sizeof vis) ;
q.push(S);
vis[S]=1;
while(q.size()){
int x= q.front(); q.pop();// cout<<x<<'\n';
for(int i=hd[x];i;i=nxt[i]){
int y =go[i] ;
if(vis[y]==0&& (i!=ban) && ( (i^1)!=ban)){
vis[y]=1; pre[y]=x;
q.push(y) ;
if(y==T) return ;
}
}
}
}
signed main(){
cin>>n;
for(int x,i=1;i<=n;i++) cin>>x,_add(i,x),_add(x,i);
for(int i=1;i<=n&&flg==0;i++) if(vis[i]==0) dfs(i,0);
// cout <<ban<<endl;
bfs();
vector<int>kk;
for(int i=T;;i=pre[i]) {
kk.push_back(i) ;
if(i==S) break;
}
cout <<kk.size()<<endl;for(auto x:kk) cout<<x<<' ';
}