#include <bits/stdc++.h>
using namespace std;
vector<int> v[100007];
vector<int> vv[100007];
int Dp[100007];
int a[100007];
int dfs(int pos, int type) {
  if (a[pos] && type) return 0;
  if (Dp[pos] != -1) return Dp[pos];
  int ans = 1;
  if (v[pos].size() && vv[v[pos][0]].size() < 2) ans = ans + dfs(v[pos][0], 1);
  return Dp[pos] = ans;
}
int dffs(int pos, int type) {
  if (a[pos] && type) return 0;
  if (v[pos].size() && vv[v[pos][0]].size() < 2) dffs(v[pos][0], 1);
  printf("%d ", pos);
  return 0;
}
int main() {
  int m;
  scanf("%d", &m);
  int i;
  for (i = 1; i <= m; i++) scanf("%d", a + i);
  memset(Dp, -1, sizeof(Dp));
  for (i = 1; i <= m; i++) {
    int tem;
    scanf("%d", &tem);
    if (tem) v[i].push_back(tem), vv[tem].push_back(i);
  }
  int ans = 0;
  int anss;
  int ansss = 1;
  for (i = 1; i <= m; i++)
    if (a[i]) {
      anss = dfs(i, 0);
      if (anss >= ans) {
        ans = anss;
        ansss = i;
      }
    }
  printf("%d\n", ans);
  dffs(ansss, 0);
  printf("\n");
  return 0;
}
