#include <bits/stdc++.h>
using namespace std;
using ll=long long;
vector<ll> g[100001];
vector<ll> c(100001);
pair<ll, ll> megero[100001];
vector<ll> penz(100001);
ll dfs(int x){
if (c[x]==0){
megero[x]={penz[x],-1};
return (penz[x]);
}
else{
ll ans=0;
for (int edge:g[x]){
ans+=dfs(edge);
}
megero[x]={penz[x],ans};
}
return (max(megero[x].first, megero[x].second));
}
vector<int> ans;
void dfskereso(int x){
for (int edge:g[x]){
if (megero[edge].first>megero[edge].second){
ans.push_back(edge);
}
else{
dfskereso(edge);
}
}
}
int main() {
int n;
cin>>n;
for (int i=1; i<=n;i++){
cin>>penz[i];
}
for (int i=2; i<=n;i++){
ll x;
cin>>x;
c[x]++;
g[x].push_back(i);
}
dfs(1);
cout<<max(megero[1].first, megero[1].second)<<endl;
if (megero[1].first<megero[1].second) dfskereso(1);
else{
ans={1};
}
sort(ans.begin(), ans.end());
cout<<ans.size()<<endl;
for (auto x: ans) cout<<x<<" ";
}