#include <bits/stdc++.h>
using namespace std;
void fio() {}
void pti() {
  double timeuse = clock() * 1000.0 / CLOCKS_PER_SEC;
  cerr << "Timeuse " << timeuse << "ms" << endl;
}
void end() { exit(0); }
namespace io {
const int SIZ = 55;
int que[SIZ], op, qr;
char ch;
template <class I>
inline void gi(I& w) {
  ch = getchar(), op = 1, w = 0;
  while (!isdigit(ch)) {
    if (ch == '-') op = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    w = w * 10 + ch - '0';
    ch = getchar();
  }
  w *= op;
}
template <typename T, typename... Args>
inline void gi(T& t, Args&... args) {
  gi(t);
  gi(args...);
}
template <class I>
inline void print(I w) {
  qr = 0;
  if (!w) putchar('0');
  if (w < 0) putchar('-'), w = -w;
  while (w) que[++qr] = w % 10 + '0', w /= 10;
  while (qr) putchar(que[qr--]);
}
}  // namespace io
using io::gi;
using io::print;
const int N = 2e5 + 5;
int n, num;
struct node {
  long long a, b;
};
node e[N];
long long c[N], t[N], sum[N];
map<long long, int> g;
int lowbit(int x) { return x & -x; }
void modify(int x, long long z) {
  while (x <= n) ++t[x], sum[x] += z, x += lowbit(x);
}
long long query_t(int x) {
  long long res = 0;
  while (x) res += t[x], x -= lowbit(x);
  return res;
}
long long query_sum(int x) {
  long long res = 0;
  while (x) res += sum[x], x -= lowbit(x);
  return res;
}
int main() {
  fio();
  gi(n);
  for (int i = 1; i <= n; ++i) gi(e[i].a);
  for (int i = 1; i <= n; ++i) gi(e[i].b), c[i] = e[i].b;
  sort(c + 1, c + n + 1);
  for (int i = 1; i <= n; ++i)
    if (!g[c[i]]) g[c[i]] = ++num;
  sort(e + 1, e + n + 1,
       [](node x, node y) { return x.a == y.a ? x.b < y.b : x.a < y.a; });
  long long ans = 0;
  for (int i = 1, j = 1; i <= n; ++i) {
    ans += e[i].a * query_t(g[e[i].b]) - query_sum(g[e[i].b]);
    while (j <= n && e[j].b == e[i].b && e[j].a == e[i].a)
      modify(g[e[j].b], e[j].a), ++j;
  }
  print(ans);
  end();
}

### Prompt

Construct a Cpp code solution to the problem outlined:

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;
void fio() {}
void pti() {
  double timeuse = clock() * 1000.0 / CLOCKS_PER_SEC;
  cerr << "Timeuse " << timeuse << "ms" << endl;
}
void end() { exit(0); }
namespace io {
const int SIZ = 55;
int que[SIZ], op, qr;
char ch;
template <class I>
inline void gi(I& w) {
  ch = getchar(), op = 1, w = 0;
  while (!isdigit(ch)) {
    if (ch == '-') op = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    w = w * 10 + ch - '0';
    ch = getchar();
  }
  w *= op;
}
template <typename T, typename... Args>
inline void gi(T& t, Args&... args) {
  gi(t);
  gi(args...);
}
template <class I>
inline void print(I w) {
  qr = 0;
  if (!w) putchar('0');
  if (w < 0) putchar('-'), w = -w;
  while (w) que[++qr] = w % 10 + '0', w /= 10;
  while (qr) putchar(que[qr--]);
}
}  // namespace io
using io::gi;
using io::print;
const int N = 2e5 + 5;
int n, num;
struct node {
  long long a, b;
};
node e[N];
long long c[N], t[N], sum[N];
map<long long, int> g;
int lowbit(int x) { return x & -x; }
void modify(int x, long long z) {
  while (x <= n) ++t[x], sum[x] += z, x += lowbit(x);
}
long long query_t(int x) {
  long long res = 0;
  while (x) res += t[x], x -= lowbit(x);
  return res;
}
long long query_sum(int x) {
  long long res = 0;
  while (x) res += sum[x], x -= lowbit(x);
  return res;
}
int main() {
  fio();
  gi(n);
  for (int i = 1; i <= n; ++i) gi(e[i].a);
  for (int i = 1; i <= n; ++i) gi(e[i].b), c[i] = e[i].b;
  sort(c + 1, c + n + 1);
  for (int i = 1; i <= n; ++i)
    if (!g[c[i]]) g[c[i]] = ++num;
  sort(e + 1, e + n + 1,
       [](node x, node y) { return x.a == y.a ? x.b < y.b : x.a < y.a; });
  long long ans = 0;
  for (int i = 1, j = 1; i <= n; ++i) {
    ans += e[i].a * query_t(g[e[i].b]) - query_sum(g[e[i].b]);
    while (j <= n && e[j].b == e[i].b && e[j].a == e[i].a)
      modify(g[e[j].b], e[j].a), ++j;
  }
  print(ans);
  end();
}

```