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;
inline long long getlong() {
  long long x;
  scanf("%lld", &x);
  return x;
}
const unsigned int BIT_ARRAY_SIZE = 200005;
long long BIT_ARRAY[BIT_ARRAY_SIZE];
int l = BIT_ARRAY_SIZE;
void BIT_update(int i, long long val) {
  while (i <= l) {
    BIT_ARRAY[i] += val;
    i = i + (i & (-i));
  }
}
void BIT_range_update(int i, int j, long long val) {
  if (j < i) return;
  BIT_update(i, val);
  BIT_update(j + 1, -val);
}
void BIT_point_update(int i, long long val) { BIT_range_update(i, i, val); }
long long BIT_query(int i) {
  long long s = 0;
  while (i > 0) {
    s += BIT_ARRAY[i];
    i = i - (i & (-i));
  }
  return s;
}
int BIT_search(int i, long long val) {
  int s = i, e = l;
  while (s < e) {
    int mid = (s + e) / 2;
    int v = BIT_query(mid);
    if (v <= val)
      s = mid + 1;
    else
      e = mid;
  }
  return s - 1;
}
int main() {
  long long n;
  n = getlong();
  vector<long long> a(n), t(n);
  for (auto& x : a) x = getlong();
  for (auto& x : t) x = getlong();
  vector<pair<long long, long long> > pubs(n);
  for (int i = 0; i < n; i++) pubs[i] = pair<long long, long long>(a[i], -t[i]);
  sort(pubs.begin(), pubs.end());
  for (auto& p : pubs) p.second = -p.second;
  l = n + 1;
  for (int i = 0; i < n; i++) BIT_point_update(i + 1, pubs[i].first);
  BIT_point_update(l, 1e9 + 1);
  long long ts = 0, ans = 0, lc = 0;
  set<pair<long long, long long> > tvals;
  for (int i = 1; i <= n; i++) {
    long long val = BIT_query(i);
    long long lastposval = BIT_search(i, val);
    while (lc < lastposval) {
      lc++;
      ts += pubs[lc - 1].second;
      tvals.insert(pair<long long, long long>(-pubs[lc - 1].second, lc));
    }
    int pos = (*tvals.begin()).second;
    tvals.erase(tvals.begin());
    BIT_range_update(i + 1, lastposval, 1);
    ts -= pubs[pos - 1].second;
    ans += ts;
  }
  printf("%lld\n", ans);
}
