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.text.*;
import java.math.*;
import java.util.*;

public class Main implements Runnable {


	public void solve() throws Exception {

		 
		int n=iread();
		int []a= new int[n+1];
		int []t= new int[n+1];
		HashMap<Integer,ArrayList<Integer>> map= new HashMap<Integer,ArrayList<Integer>>();
		for(int i=1;i<=n;i++){
			a[i]= iread();

		}

		for(int i=1;i<=n;i++){
			t[i]= iread();
			ArrayList<Integer>  list= map.get(a[i]);
			if(list==null){
				list= new ArrayList<Integer>();
				map.put(a[i], list);
			}
			list.add(t[i]);
		}

		Arrays.sort(a,1,n+1);



		long result=0;
		long sum=0;
		 PriorityQueue<Integer> st =  
	             new PriorityQueue<Integer>(Collections.reverseOrder()); 
		
		for(int i=1;i<=n;i++){
			int key=a[i];
			ArrayList<Integer> list= map.get(key);
			if(list==null || list.size()==0)
				continue;


			do{
				list= map.get(key);
				if(list!=null && list.size()>0){
					for(int k=0;k<list.size();k++){
						int x= list.get(k);
						sum+=x;
						st.add(x);
					}
				}
				if(sum==0)
					break;
				int max= st.poll();
				//System.out.println("max:"+max);
				sum= sum - max;
				result+=sum;
				map.put(key, null);
				key++;
			}while(sum>0);
		}

		System.out.println(result);


	}




	public void run() {
		try {
			in = new BufferedReader(new InputStreamReader(System.in));
			out = new BufferedWriter(new OutputStreamWriter(System.out));
			// in = new BufferedReader(new FileReader(filename+".in"));
			// out = new BufferedWriter(new FileWriter(filename+".out"));
			solve();
			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	public int iread() throws Exception {
		return Integer.parseInt(readword());
	}

	public double dread() throws Exception {
		return Double.parseDouble(readword());
	}

	public long lread() throws Exception {
		return Long.parseLong(readword());
	}

	BufferedReader in;

	BufferedWriter out;

	public String readword() throws IOException {
		StringBuilder b = new StringBuilder();
		int c;
		c = in.read();
		while (c >= 0 && c <= ' ')
			c = in.read();
		if (c < 0)
			return "";
		while (c > ' ') {
			b.append((char) c);
			c = in.read();
		}
		return b.toString();
	}

	public static void main(String[] args) {

		try {
			Locale.setDefault(Locale.US);
		} catch (Exception e) {

		}
		// new Thread(new Main()).start();
		new Thread(null, new Main(), "1", 1 << 25).start();
	}
}