#include <bits/stdc++.h>
using namespace std;
mt19937_64 mt_rnd_64(chrono::steady_clock::now().time_since_epoch().count());
long long rnd(long long l, long long r) {
  return (mt_rnd_64() % (r - l + 1)) + l;
}
using ll = long long;
using ld = long double;
using ull = unsigned long long;
const double PI = acos(-1.0);
const ll mod = 1e9 + 7;
const ll INF = 1e17;
ll n;
unordered_map<ll, ll> q;
void add(ll pos, ll val, vector<ll> &t) {
  while (pos < n) {
    t[pos] += val;
    pos = (pos | (pos + 1));
  }
}
ll sum(ll pos, vector<ll> &t) {
  ll ans = 0;
  while (pos >= 0) {
    ans += t[pos];
    pos = (pos & (pos + 1)) - 1;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(10) << fixed;
  cin >> n;
  vector<pair<ll, ll> > x(n);
  for (ll i = 0; i < n; ++i) {
    cin >> x[i].first;
    x[i].second = i;
  }
  vector<ll> v(n);
  set<ll> SET;
  for (ll i = 0; i < n; ++i) {
    cin >> v[i];
    SET.insert(v[i]);
  }
  ll c = 0;
  for (ll i : SET) {
    q[i] = c;
    ++c;
  }
  vector<ll> t(n * 2, 0), t1(n * 2, 0);
  sort(begin(x), end(x));
  ll ans = 0;
  for (ll i = 0; i < n; ++i) {
    ans += sum(q[v[x[i].second]], t) * x[i].first - sum(q[v[x[i].second]], t1);
    add(q[v[x[i].second]], 1, t);
    add(q[v[x[i].second]], x[i].first, t1);
  }
  cout << ans << endl;
  return 0;
}

### Prompt

Develop a solution in cpp 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;
mt19937_64 mt_rnd_64(chrono::steady_clock::now().time_since_epoch().count());
long long rnd(long long l, long long r) {
  return (mt_rnd_64() % (r - l + 1)) + l;
}
using ll = long long;
using ld = long double;
using ull = unsigned long long;
const double PI = acos(-1.0);
const ll mod = 1e9 + 7;
const ll INF = 1e17;
ll n;
unordered_map<ll, ll> q;
void add(ll pos, ll val, vector<ll> &t) {
  while (pos < n) {
    t[pos] += val;
    pos = (pos | (pos + 1));
  }
}
ll sum(ll pos, vector<ll> &t) {
  ll ans = 0;
  while (pos >= 0) {
    ans += t[pos];
    pos = (pos & (pos + 1)) - 1;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(10) << fixed;
  cin >> n;
  vector<pair<ll, ll> > x(n);
  for (ll i = 0; i < n; ++i) {
    cin >> x[i].first;
    x[i].second = i;
  }
  vector<ll> v(n);
  set<ll> SET;
  for (ll i = 0; i < n; ++i) {
    cin >> v[i];
    SET.insert(v[i]);
  }
  ll c = 0;
  for (ll i : SET) {
    q[i] = c;
    ++c;
  }
  vector<ll> t(n * 2, 0), t1(n * 2, 0);
  sort(begin(x), end(x));
  ll ans = 0;
  for (ll i = 0; i < n; ++i) {
    ans += sum(q[v[x[i].second]], t) * x[i].first - sum(q[v[x[i].second]], t1);
    add(q[v[x[i].second]], 1, t);
    add(q[v[x[i].second]], x[i].first, t1);
  }
  cout << ans << endl;
  return 0;
}

```