#include <bits/stdc++.h>
using namespace std;
long long res = 0;
const int N = 2e5 + 10;
long long a[N];
vector<int> vec[N];
int in[N] = {0};
vector<int> ans;
stack<int> rest;
int main() {
  int n, x, now;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", a + i);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x == -1) continue;
    vec[i].push_back(x);
    in[x]++;
  }
  queue<int> q;
  for (int i = 1; i <= n; i++) {
    if (in[i] == 0) q.push(i);
  }
  while (!q.empty()) {
    now = q.front();
    q.pop();
    res += a[now];
    if (a[now] < 0) {
      rest.push(now);
      for (int j = 0; j < vec[now].size(); j++) {
        in[vec[now][j]]--;
        if (in[vec[now][j]] == 0) q.push(vec[now][j]);
      }
      continue;
    }
    ans.push_back(now);
    for (int i = 0; i < vec[now].size(); i++) {
      a[vec[now][i]] += a[now];
      in[vec[now][i]]--;
      if (in[vec[now][i]] == 0) q.push(vec[now][i]);
    }
  }
  while (!rest.empty()) {
    ans.push_back(rest.top());
    rest.pop();
  }
  printf("%lld\n", res);
  for (int i = 0; i < ans.size(); i++) {
    printf("%d%c", ans[i], i == (ans.size() - 1) ? '\n' : ' ');
  }
}
