include[HTML_REMOVED]
using namespace std;
const int N=1000010;
int n;
int a[N],h[N],e[N],ne[N],idx,depth[N],depth2[N];
bool mark[N],mark2[N];
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs1(int u,int fa){
bool op=false;
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(j==fa) continue;
if(a[j]==-1){
mark[j]=true;
continue;
}
depth[j]=depth[u]+1;
if(a[j]==1) {
op=true;mark2[depth[j]]=true;
}
}
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(j==fa) continue;
if(a[j]==-1) continue;
if(a[j]==0&&(op||mark2[depth[j]])){
mark[j]=true;
continue;
}
if(a[j]==0&&!op&&!mark2[depth[j]]){
dfs1(j,u);
}
if(a[j]==1){
dfs1(j,u);
}
}
}
int dfs2(int u,int fa){
if(a[u]==1)depth2[u]=depth[u];
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(j==fa||mark[j]||(a[j]==0&&mark2[depth[j]])) continue;
depth2[u]=max(depth2[u],dfs2(j,u));
}
return depth2[u];
}
int main(){
scanf(“%d”,&n);
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++) scanf(“%d”,&a[i]);
for(int i=1;i[HTML_REMOVED]=depth2[i])) return 0;
while(depth[i]!=depth2[i]){
printf(“%d “,i);
int nex=N-1;
for(int j=h[i];~j;j=ne[j]){
int k=e[j];
if(mark[k]||depth[k]<depth[i]||(a[k]==0&&mark2[depth[k]])) continue;
if(depth2[k]==depth2[i])nex=min(nex,k);
}
i=nex;
if(nex==N-1) return 0;
}
printf(“%d “,i);
}