n=int(input()) s="("+input()+")" a=[0]+list(map(int,input().split())) p=[0]*(n+1) g=0 q=[] for c in s: if c=="(": if len(q)>0: p[g]=q[-1] q+=[g] g+=1 else: q.pop() def root(x): p=x l=[p] while r[p]!=p: p=r[p] l+=[p] for p in l: r[p]=l[-1] return r[x] def union(x,y): rx=root(x) ry=root(y) if rx==ry: return if rx>ry: rx,ry=ry,rx r[ry]=rx return A=sum(a) from heapq import heappush,heappop r=list(range(n+1)) v=[] rc0=0 rc1=1 v+=[(-(rc0/(rc0+rc1)),0,rc0,rc1,0)] q=[] for i in range(1,n+1): c0=a[i] c1=1 heappush(q,(-(c0/(c0+c1)),i,c0,c1,0)) v+=[(-(c0/(c0+c1)),i,c0,c1,0)] while len(q)>0: a,i,c0,c1,f=heappop(q) if root(i)!=i: continue if (a,i,c0,c1,f)!=v[i]: continue _,pi,pc0,pc1,pf=v[root(p[i])] ni=pi nc0=pc0+c0 nc1=pc1+c1 nf=pf+f+pc1*c0 na=-(nc0/(nc0+nc1)) v[pi]=(na,ni,nc0,nc1,nf) union(i,pi) if pi>0: heappush(q,(na,ni,nc0,nc1,nf)) print(v[0][-1])