# your code goes here
from sys import stdin, setrecursionlimit as srl
srl(int(1e6)+7)
ip=stdin.readline
n=int(ip())
a=list(map(int, ip().split()))
b=list(map(int, ip().split()))
adj=[[] for _ in range(n)]
for i in range(n):
if not b[i]==-1:
adj[i].append(b[i]-1)
visited=[0]*n
stk=[]
for x in range(n):
def topsort(v):
if visited[v]==2: return
visited[v]=1
for i in adj[v]:
topsort(i)
visited[v]=2
stk.append(v)
if not visited[x]: topsort(x)
laterstk=[]#later stack
extra=[0]*n
ans=0; soln=[]
while stk:
i=stk.pop()
if (a[i]+extra[i])<0: laterstk.append(i)
else:
ans+=a[i]+extra[i]
if len(adj[i])==1:
j=adj[i][0]
extra[j]+=extra[i]+a[i]
soln.append(i+1)
while laterstk:
i=laterstk.pop()
ans+=a[i]+extra[i]
soln.append(i+1)
print(ans)
print(*soln)
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmZyb20gc3lzIGltcG9ydCBzdGRpbiwgc2V0cmVjdXJzaW9ubGltaXQgYXMgc3JsCnNybChpbnQoMWU2KSs3KQppcD1zdGRpbi5yZWFkbGluZQpuPWludChpcCgpKQphPWxpc3QobWFwKGludCwgaXAoKS5zcGxpdCgpKSkKYj1saXN0KG1hcChpbnQsIGlwKCkuc3BsaXQoKSkpCmFkaj1bW10gZm9yIF8gaW4gcmFuZ2UobildCmZvciBpIGluIHJhbmdlKG4pOgoJaWYgbm90IGJbaV09PS0xOgoJCWFkaltpXS5hcHBlbmQoYltpXS0xKQoKdmlzaXRlZD1bMF0qbgpzdGs9W10KZm9yIHggaW4gcmFuZ2Uobik6CglkZWYgdG9wc29ydCh2KToKCQlpZiB2aXNpdGVkW3ZdPT0yOiByZXR1cm4KCQl2aXNpdGVkW3ZdPTEKCQlmb3IgaSBpbiBhZGpbdl06CgkJCXRvcHNvcnQoaSkKCQl2aXNpdGVkW3ZdPTIKCQlzdGsuYXBwZW5kKHYpCglpZiBub3QgdmlzaXRlZFt4XTogdG9wc29ydCh4KQoKbGF0ZXJzdGs9W10jbGF0ZXIgc3RhY2sKZXh0cmE9WzBdKm4KYW5zPTA7IHNvbG49W10KCndoaWxlIHN0azoKCWk9c3RrLnBvcCgpCglpZiAoYVtpXStleHRyYVtpXSk8MDogbGF0ZXJzdGsuYXBwZW5kKGkpCgllbHNlOgoJCWFucys9YVtpXStleHRyYVtpXQoJCWlmIGxlbihhZGpbaV0pPT0xOgoJCQlqPWFkaltpXVswXQoJCQlleHRyYVtqXSs9ZXh0cmFbaV0rYVtpXQoJCXNvbG4uYXBwZW5kKGkrMSkKCQkKd2hpbGUgbGF0ZXJzdGs6CglpPWxhdGVyc3RrLnBvcCgpCglhbnMrPWFbaV0rZXh0cmFbaV0KCXNvbG4uYXBwZW5kKGkrMSkKCQoKcHJpbnQoYW5zKQpwcmludCgqc29sbik=