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.
// practice with kaiboy
import java.io.*;
import java.util.*;

public class CF1315D extends PrintWriter {
	CF1315D() { super(System.out, true); }
	Scanner sc = new Scanner(System.in);
	public static void main(String[] $) {
		CF1315D o = new CF1315D(); o.main(); o.flush();
	}

	static class V implements Comparable<V> {
		int a, b;
		V(int a, int b) {
			this.a = a; this.b = b;
		}
		@Override
		public int compareTo(V v) {
			return b - v.b;
		}
	}
	void main() {
		int n = sc.nextInt();
		V[] vv = new V[n];
		for (int i = 0; i < n; i++) {
			int a = sc.nextInt();
			vv[i] = new V(a, 0);
		}
		for (int i = 0; i < n; i++)
			vv[i].b = sc.nextInt();
		Arrays.sort(vv);
		TreeSet<V> s = new TreeSet<>();
		s.add(new V(1, 2000000000));
		long ans = 0;
		for (int i = n - 1; i >= 0; i--) {
			V u = vv[i];
			int a = u.a, t = u.b; u.b = a;
			V v = s.ceiling(u);
			int l = v.a, r = v.b;
			s.remove(v);
			if (a <= l) {
				ans += (long) (l - a) * t;
				l++;
				if (l <= r)
					s.add(new V(l, r));
			} else if (a == r) {
				r--;
				if (l <= r)
					s.add(new V(l, r));
			} else {
				if (l < a)
					s.add(new V(l, a - 1));
				if (a < r)
					s.add(new V(a + 1, r));
			}
		}
		println(ans);
	}
}
