#include <iostream>
#include <vector>
#define int long long
using namespace std;
int n, x, ans, ob[100005], t[100005], des[100005];
bool vis[100005];
vector<int> path, anspath;
void dfs(int x, int dep)
{
if(dep > ans) ans = dep, anspath = path;
int now = des[x];
if(now != 0 && !vis[now] && t[now] == 1)
vis[now] = true, path.push_back(now), dfs(now, dep + 1), path.pop_back(), vis[now] = false;
return ;
}
signed main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> ob[i];
if(ob[i] == 1) vis[i] = true;
}
for(int i = 1; i <= n; i++)
cin >> x, t[x]++, des[i] = x;
for(int i = 1; i <= n; i++)
if(vis[i])
path.push_back(i), dfs(i, 1), path.pop_back();
cout << anspath.size() << endl;
for(int i = anspath.size() - 1; i >= 0; i--)
cout << anspath[i] << ' ';
cout << endl;
return 0;
}
TLE on #10