#include <iostream>
#include <vector>
#include <set>
#include <bitset>
#include <fstream>
using namespace std;
ifstream fin("be.txt");
vector<int> vc[100001];
int n;
int *ertekek;
int *megoldas;
set<int> valami;
//bitset<100001> lehetnek(false);
//set<int> lehetnek;
//int *t;
int megold(int nod)
{
int s=0;
for(auto it: vc[nod])
{
s=s+megold(it);
}
megoldas[nod]=max(s,ertekek[nod]);
return max(s,ertekek[nod]);
}
void eredmeny(int nod)
{
if(ertekek[nod]==megoldas[nod])
{
valami.insert(nod);
}
else
{
for(auto it: vc[nod])
{
eredmeny(it);
}
}
}
int main()
{
cin>>n;
ertekek=new int[n+1];
megoldas=new int[n+1];
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
// valami.insert(i);
ertekek[i]=x;
megoldas[i]=x;
}
for(int i=2;i<=n;i++)
{
cin>>x;
vc[x].emplace_back(i);
}
megold(1);
eredmeny(1);
// set<int> ered;
cout<<megoldas[1]<<endl;
// for(int i=1;i<=n;i++)
// {
// if(megoldas[i]==ertekek[i])
// {
// ered.insert(i);
// }
// }
cout<<valami.size()<<endl;
for(auto it:valami)
{
cout<<it<<" ";
}
return 0;
}