Mitya has a rooted tree with n vertices indexed from 1 to n, where the root has index 1. Each vertex v initially had an integer number a_v ≥ 0 written on it. For every vertex v Mitya has computed s_v: the sum of all values written on the vertices on the path from vertex v to the root, as well as h_v — the depth of vertex v, which denotes the number of vertices on the path from vertex v to the root. Clearly, s_1=a_1 and h_1=1.

Then Mitya erased all numbers a_v, and by accident he also erased all values s_v for vertices with even depth (vertices with even h_v). Your task is to restore the values a_v for every vertex, or determine that Mitya made a mistake. In case there are multiple ways to restore the values, you're required to find one which minimizes the total sum of values a_v for all vertices in the tree.

Input

The first line contains one integer n — the number of vertices in the tree (2 ≤ n ≤ 10^5). The following line contains integers p_2, p_3, ... p_n, where p_i stands for the parent of vertex with index i in the tree (1 ≤ p_i < i). The last line contains integer values s_1, s_2, ..., s_n (-1 ≤ s_v ≤ 10^9), where erased values are replaced by -1.

Output

Output one integer — the minimum total sum of all values a_v in the original tree, or -1 if such tree does not exist.

Examples

Input


5
1 1 1 1
1 -1 -1 -1 -1


Output


1


Input


5
1 2 3 1
1 -1 2 -1 -1


Output


2


Input


3
1 2
2 -1 1


Output


-1
from itertools import combinations
from sys import stdin
import math

def listIn():
    return list((map(int,stdin.readline().strip().split())))

def stringIn():
    return([x for x in stdin.readline().split()])
    
def intIn():
    return (int(stdin.readline()))

def ncr(n,k):
	res = 1
	c = [0]*(k+1)
	c[0]=1
	for i in range(1,n+1):
	    for j in range(min(i,k),0,-1):
	        c[j] = (c[j]+c[j-1])%MOD
	return c[k]


n=intIn()
p=listIn()
s=listIn()
p=[0]*2+p
s=[0]+s
if s.count(-1)==n-1:
    print(s[1])
else:
    tree={}
    par=[0]*(n+1)
    for i in range(2,n+1):
        if p[i] not in tree:
            tree[p[i]]=[i]
        else:
            tree[p[i]].append(i)
        par[i]=p[i]
    
    #print(tree)
    s2=s[:]
    for ver in tree:
        l=tree[ver] 
        if s[ver]==-1:
            count=0
            for child in l:
                if s[child]!=-1 and count==0:
                    s2[ver]=s[child]
                    count+=1
                else:
                    s2[ver]=min(s2[ver],s[child])
                
    
    total=s2[1]
    #print(s2)
    flag=False
    for i in range(2,n+1):
        if s2[i]!=-1:
            if s2[par[i]]==-1:
                s2[par[i]]=s2[par[par[i]]]
            val=s2[i]-s2[par[i]]
            if val<0:
                flag=True
                break
            else:
                total+=val
    if flag:
        print(-1)
    else:
        print(total)
        

        
        
        
    
            
    