#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 3;
const int maxm = 1e6 + 3;
const int mod = 1e9 + 7;
const int oo = 1e9 + 5;
const long double pi = 3.141592653589793238462643383279502884;
void input() {
  if (fopen("abc"
            ".inp",
            "r")) {
    freopen(
        "abc"
        ".inp",
        "r", stdin);
    freopen(
        "abc"
        ".out",
        "w", stdout);
  }
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
int n;
pair<long long, long long> a[maxn], f[maxn];
vector<long long> v;
pair<long long, long long> operator+(const pair<long long, long long>& a,
                                     const pair<long long, long long>& b) {
  return {a.first + b.first, a.second + b.second};
}
void update(int p, int v) {
  for (int i = p; i <= n; i += i & -i)
    f[i] = f[i] + pair<long long, long long>(v, 1);
}
pair<long long, long long> get(int p) {
  pair<long long, long long> ans = {0, 0};
  for (int i = p; i > 0; i -= i & -i) ans = ans + f[i];
  return ans;
}
int main() {
  input();
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i].first;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i].second;
    v.push_back(a[i].second);
  }
  sort(a + 1, a + 1 + n);
  sort(v.begin(), v.end());
  v.resize(unique(v.begin(), v.end()) - v.begin());
  long long ans = 0;
  for (int i = 1; i <= n; ++i) {
    auto it = lower_bound(v.begin(), v.end(), a[i].second) - v.begin() + 1;
    pair<long long, long long> cur = get(it);
    ans += a[i].first * cur.second - cur.first;
    update(it, a[i].first);
  }
  cout << ans;
  return 0;
}

### Prompt

Please provide a Cpp coded solution to the problem described below:

There are n points on a coordinate axis OX. The i-th point is located at the integer point x_i and has a speed v_i. It is guaranteed that no two points occupy the same coordinate. All n points move with the constant speed, the coordinate of the i-th point at the moment t (t can be non-integer) is calculated as x_i + t ⋅ v_i.

Consider two points i and j. Let d(i, j) be the minimum possible distance between these two points over any possible moments of time (even non-integer). It means that if two points i and j coincide at some moment, the value d(i, j) will be 0.

Your task is to calculate the value ∑_{1 ≤ i < j ≤ n} d(i, j) (the sum of minimum distances over all pairs of points).

Input

The first line of the input contains one integer n (2 ≤ n ≤ 2 ⋅ 10^5) — the number of points.

The second line of the input contains n integers x_1, x_2, ..., x_n (1 ≤ x_i ≤ 10^8), where x_i is the initial coordinate of the i-th point. It is guaranteed that all x_i are distinct.

The third line of the input contains n integers v_1, v_2, ..., v_n (-10^8 ≤ v_i ≤ 10^8), where v_i is the speed of the i-th point.

Output

Print one integer — the value ∑_{1 ≤ i < j ≤ n} d(i, j) (the sum of minimum distances over all pairs of points).

Examples

Input


3
1 3 2
-100 2 3


Output


3


Input


5
2 1 4 3 5
2 2 2 3 4


Output


19


Input


2
2 1
-3 0


Output


0

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 3;
const int maxm = 1e6 + 3;
const int mod = 1e9 + 7;
const int oo = 1e9 + 5;
const long double pi = 3.141592653589793238462643383279502884;
void input() {
  if (fopen("abc"
            ".inp",
            "r")) {
    freopen(
        "abc"
        ".inp",
        "r", stdin);
    freopen(
        "abc"
        ".out",
        "w", stdout);
  }
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
int n;
pair<long long, long long> a[maxn], f[maxn];
vector<long long> v;
pair<long long, long long> operator+(const pair<long long, long long>& a,
                                     const pair<long long, long long>& b) {
  return {a.first + b.first, a.second + b.second};
}
void update(int p, int v) {
  for (int i = p; i <= n; i += i & -i)
    f[i] = f[i] + pair<long long, long long>(v, 1);
}
pair<long long, long long> get(int p) {
  pair<long long, long long> ans = {0, 0};
  for (int i = p; i > 0; i -= i & -i) ans = ans + f[i];
  return ans;
}
int main() {
  input();
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i].first;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i].second;
    v.push_back(a[i].second);
  }
  sort(a + 1, a + 1 + n);
  sort(v.begin(), v.end());
  v.resize(unique(v.begin(), v.end()) - v.begin());
  long long ans = 0;
  for (int i = 1; i <= n; ++i) {
    auto it = lower_bound(v.begin(), v.end(), a[i].second) - v.begin() + 1;
    pair<long long, long long> cur = get(it);
    ans += a[i].first * cur.second - cur.first;
    update(it, a[i].first);
  }
  cout << ans;
  return 0;
}

```