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.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class A {

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n = sc.nextInt();
        int[] v = new int[n];
        for (int i = 0; i < n; i++) {
            v[i] = sc.nextInt();
        }
        int[] c = new int[n];
        for (int i = 0; i < n; i++) {
            c[i] = sc.nextInt();
        }

        Pair[] pairs = new Pair[n];
        for (int i = 0; i < n; i++) {
            pairs[i] = new Pair(v[i], c[i]);
        }

        Arrays.sort(pairs);

        HashSet<Integer> vis = new HashSet<>();
        TreeMap<Integer, Integer> intervals = new TreeMap<>();
        intervals.put(1, 2000000001);

        long ans = 0;
        for (int i = 0; i < n; i++) {
            if (vis.contains(pairs[i].val)) {
                int start = intervals.ceilingKey(pairs[i].val);
                int end = intervals.get(start);
                intervals.remove(start);
                if (start + 1 <= end)
                    intervals.put(start + 1, end);
                ans += 1l * pairs[i].cost * (start - pairs[i].val);
                vis.add(start);
            } else {
                int start = intervals.floorKey(pairs[i].val);
                int end = intervals.get(start);
                intervals.remove(start);
                if (pairs[i].val + 1 <= end)
                    intervals.put(pairs[i].val + 1, end);
                if (start <= pairs[i].val - 1)
                    intervals.put(start, pairs[i].val - 1);
                vis.add(pairs[i].val);
            }
        }
        out.println(ans);
        out.flush();
        out.close();
    }

    static class Pair implements Comparable<Pair>{
        int val, cost;
        Pair(int v, int c) {
            val = v; cost = c;
        }

        @Override
        public int compareTo(Pair o) {
            return cost != o.cost ? o.cost - cost : val - o.val;
        }
    }

    static class Scanner
    {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream system) {br = new BufferedReader(new InputStreamReader(system));}
        public Scanner(String file) throws Exception {br = new BufferedReader(new FileReader(file));}
        public String next() throws IOException
        {
            while (st == null || !st.hasMoreTokens()) st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }
        public String nextLine()throws IOException{return br.readLine();}
        public int nextInt() throws IOException {return Integer.parseInt(next());}
        public double nextDouble() throws IOException {return Double.parseDouble(next());}
        public char nextChar()throws IOException{return next().charAt(0);}
        public Long nextLong()throws IOException{return Long.parseLong(next());}
        public boolean ready() throws IOException{return br.ready();}
        public void waitForInput() throws InterruptedException {Thread.sleep(3000);}
    }
}
