VK news recommendation system daily selects interesting publications of one of n disjoint categories for each user. Each publication belongs to exactly one category. For each category i batch algorithm selects a_i publications.

The latest A/B test suggests that users are reading recommended publications more actively if each category has a different number of publications within daily recommendations. The targeted algorithm can find a single interesting publication of i-th category within t_i seconds. 

What is the minimum total time necessary to add publications to the result of batch algorithm execution, so all categories have a different number of publications? You can't remove publications recommended by the batch algorithm.

Input

The first line of input consists of single integer n — the number of news categories (1 ≤ n ≤ 200 000).

The second line of input consists of n integers a_i — the number of publications of i-th category selected by the batch algorithm (1 ≤ a_i ≤ 10^9).

The third line of input consists of n integers t_i — time it takes for targeted algorithm to find one new publication of category i (1 ≤ t_i ≤ 10^5).

Output

Print one integer — the minimal required time for the targeted algorithm to get rid of categories with the same size.

Examples

Input


5
3 7 9 7 8
5 2 5 7 5


Output


6


Input


5
1 2 3 4 5
1 1 1 1 1


Output


0

Note

In the first example, it is possible to find three publications of the second type, which will take 6 seconds.

In the second example, all news categories contain a different number of publications.
import java.io.*;
import java.util.*;
import java.text.*;
public final class isc
{
    static class FastReader 
    { 

        BufferedReader br; 
        StringTokenizer st; 

        public FastReader()
        { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 


        String next() 
        { 
            while (st == null || !st.hasMoreElements()) 
            { 
                try
                { 
                    st = new StringTokenizer(br.readLine()); 
                } 
                catch (IOException  e) 
                { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 

        int nextInt() 
        { 
            return Integer.parseInt(next()); 
        } 

        long nextLong() 
        { 
            return Long.parseLong(next()); 
        } 

        double nextDouble() 
        { 
            return Double.parseDouble(next()); 
        } 

        String nextLine() 
        { 
            String str = ""; 
            try
            { 
                str = br.readLine(); 
            } 
            catch (IOException e) 
            { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    }
    static HashSet<Integer> hs = new HashSet<>();
    static HashMap<Integer, Integer> hm = new HashMap<>();
    public static void main(String[] args)
    {
        FastReader sc = new FastReader();
        int n = sc.nextInt();
        int arr[] = new int[n];
        myp cost[] = new myp[n];
        for(int i=0; i<n; i++)
            arr[i] = sc.nextInt();
        for(int i=0; i<n; i++)
            cost[i] = new myp(sc.nextInt(), i);
        Arrays.sort(cost);
        // for(int i=0; i<n; i++)
        //     System.out.print(cost[i]+" ");
        // System.out.println();
        long ans = 0;
        for(int i=0; i<n; i++)
        {
            int curr = getnext(arr[cost[i].idx]);
            ans += 1l*(curr-arr[cost[i].idx])*cost[i].x;
            hs.add(curr);
            hm.put(curr, curr+1);
        }
        System.out.println(ans);
    }
    static int getnext(int i)
    {
        if(!hs.contains(i))
            return i;
        if(hs.contains(hm.get(i)))
            hm.put(i, getnext(hm.get(i)));
        return hm.get(i);
    }
}
class myp implements Comparable<myp>
{
    int x;
    int idx;
    myp(int x, int idx)
    {
        this.x = x;
        this.idx = idx;
    }
    public String toString()
    {
        return "["+x+","+idx+"]";
    }
    @Override
    public int hashCode()
    {
        return (31*x)+idx;
    }
    @Override
    public boolean equals(Object a)
    {
        myp b = (myp)a;
        return (b.x==x && b.idx==idx);
    }
    @Override
    public int compareTo(myp b)
    {
        return b.x-x;
    }
}