#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T t) {
  return t < 0 ? -t : t;
}
const long long modn = 1000000007;
inline long long mod(long long x) { return x % modn; }
const int MAXN = 212345;
int n, m, k;
long long s[MAXN];
int onxt[MAXN];
vector<int> nxt[MAXN];
long long dp[MAXN];
long long go(int u) {
  dp[u] = s[u];
  for (int nx : nxt[u]) {
    go(nx);
    if (dp[nx] > 0) dp[u] += dp[nx];
  }
  return dp[u];
}
void re(int u) {
  for (int nx : nxt[u]) {
    if (dp[nx] > 0) re(nx);
  }
  printf("%d ", u + 1);
  for (int nx : nxt[u]) {
    if (dp[nx] <= 0) re(nx);
  }
}
int main() {
  scanf("%d", &n);
  for (int a = 0; a < n; a++) {
    scanf("%lld", s + a);
  }
  for (int a = 0; a < n; a++) {
    scanf("%d", &onxt[a]);
    if (onxt[a] >= 0) {
      onxt[a]--;
      nxt[onxt[a]].push_back(a);
    }
  }
  for (int a = 0; a < n; a++) {
    if (onxt[a] == -1) {
      go(a);
    }
  }
  long long res = 0;
  for (int a = 0; a < n; a++) {
    res += dp[a];
  }
  printf("%lld\n", res);
  for (int a = 0; a < n; a++) {
    if (onxt[a] == -1) re(a);
  }
  puts("");
}
