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.
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const long long INF = 1e9;
const long double PI = acos((long double)-1);
const long double EPS = 1e-12;
inline bool isPrime(long long x) {
  if (x <= 1) return 0;
  if (x <= 3) return 1;
  if (!(x % 2) || !(x % 3)) return 0;
  long long s = sqrt(1.0 * x) + EPS;
  for (long long i = 5; i <= s; i += 6) {
    if (!(x % i) || !(x % (i + 2))) return 0;
  }
  return 1;
}
inline long long fpow(long long n, long long k, long long p = MOD) {
  long long r = 1;
  for (; k; k >>= 1) {
    if (k & 1) r = r * n % p;
    n = n * n % p;
  }
  return r;
}
inline int inv(int a, long long p = MOD) { return fpow(a, p - 2, p); }
inline void addmod(int& a, int val, int p = MOD) {
  if ((a = (a + val)) >= p) a -= p;
}
inline void submod(int& a, int val, int p = MOD) {
  if ((a = (a - val)) < 0) a += p;
}
inline long long gcd(long long a, long long b) {
  long long r;
  while (b) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
inline long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
inline void onbit(long long& a, int i) { a |= 1LL << i; }
inline void offbit(long long& a, int i) { onbit(a, i), a -= (1LL << i); }
const int N = 3e5 + 5;
long long n, m;
int a[N];
int t[N];
void solve() {
  cin >> n;
  map<long long, vector<long long>> mp;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < n; i++) {
    cin >> t[i];
    mp[a[i]].push_back(t[i]);
  }
  priority_queue<pair<long long, long long>> prique;
  long long res = 0;
  for (auto it : mp) {
    long long publication = it.first;
    long long start = it.first;
    for (long long x : it.second) prique.push({x, start});
    while (!prique.empty()) {
      res += prique.top().first * (publication - prique.top().second);
      publication++;
      prique.pop();
      if (mp.count(publication)) {
        for (long long x : mp[publication]) {
          prique.push({x, publication});
        }
        mp.erase(publication);
        start = publication;
      }
    }
  }
  cout << res << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(10);
  int query = 1;
  int start = 1000 * clock() / CLOCKS_PER_SEC;
  while (query--) solve();
  cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC - start
       << "ms\n";
}
