#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 233;
int ch[maxn];
int a[maxn], n, p[maxn];
long long ans[maxn], sum[maxn];
void add(int x, int v) {
  for (int i = x; i <= n; i += i & (-i)) ch[i] += v;
}
int query(int x) {
  int sum = 0;
  for (int i = x; i; i -= i & (-i)) sum += ch[i];
  return sum;
}
void add_sum(int x, int v) {
  for (int i = x; i <= n; i += i & (-i)) sum[i] += v;
}
long long query_sum(int x) {
  long long res = 0;
  for (int i = x; i; i -= i & (-i)) res += sum[i];
  return res;
}
int cal(int n, int x) {
  int t = query(x);
  return min(t, n - t);
}
int find(int k) {
  k--;
  int x = 0;
  for (int i = 20; i >= 0; i--)
    if (x + (1 << i) <= n && ch[x + (1 << i)] <= k) {
      x += 1 << i;
      k -= ch[x];
    }
  return x + 1;
}
inline long long ari(int n) { return 1ll * n * (n + 1) / 2; }
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), p[a[i]] = i;
  for (int i = 1; i <= n; i++) {
    int x = p[i];
    ans[i] = ans[i - 1] + (i - 1 - query(x));
    add(x, 1);
  }
  memset(ch, 0, sizeof(ch));
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    int x = p[i];
    add(x, 1);
    add_sum(x, x);
    sum += x;
    int k = (i + 1) / 2;
    long long c = find(k);
    long long tmp = query_sum(c);
    long long a = k * c - tmp - ari(k - 1);
    long long b = (sum - tmp) - (i - k) * c - ari(i - k);
    ans[i] += a + b;
  }
  for (int i = 1; i <= n; i++) printf("%I64d ", ans[i]);
  return 0;
}

### Prompt

In CPP, your task is to solve the following problem:

You are given a permutation p_1, p_2, …, p_n.

In one move you can swap two adjacent values.

You want to perform a minimum number of moves, such that in the end there will exist a subsegment 1,2,…, k, in other words in the end there should be an integer i, 1 ≤ i ≤ n-k+1 such that p_i = 1, p_{i+1} = 2, …, p_{i+k-1}=k.

Let f(k) be the minimum number of moves that you need to make a subsegment with values 1,2,…,k appear in the permutation.

You need to find f(1), f(2), …, f(n).

Input

The first line of input contains one integer n (1 ≤ n ≤ 200 000): the number of elements in the permutation.

The next line of input contains n integers p_1, p_2, …, p_n: given permutation (1 ≤ p_i ≤ n).

Output

Print n integers, the minimum number of moves that you need to make a subsegment with values 1,2,…,k appear in the permutation, for k=1, 2, …, n.

Examples

Input


5
5 4 3 2 1


Output


0 1 3 6 10 


Input


3
1 2 3


Output


0 0 0 

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 233;
int ch[maxn];
int a[maxn], n, p[maxn];
long long ans[maxn], sum[maxn];
void add(int x, int v) {
  for (int i = x; i <= n; i += i & (-i)) ch[i] += v;
}
int query(int x) {
  int sum = 0;
  for (int i = x; i; i -= i & (-i)) sum += ch[i];
  return sum;
}
void add_sum(int x, int v) {
  for (int i = x; i <= n; i += i & (-i)) sum[i] += v;
}
long long query_sum(int x) {
  long long res = 0;
  for (int i = x; i; i -= i & (-i)) res += sum[i];
  return res;
}
int cal(int n, int x) {
  int t = query(x);
  return min(t, n - t);
}
int find(int k) {
  k--;
  int x = 0;
  for (int i = 20; i >= 0; i--)
    if (x + (1 << i) <= n && ch[x + (1 << i)] <= k) {
      x += 1 << i;
      k -= ch[x];
    }
  return x + 1;
}
inline long long ari(int n) { return 1ll * n * (n + 1) / 2; }
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), p[a[i]] = i;
  for (int i = 1; i <= n; i++) {
    int x = p[i];
    ans[i] = ans[i - 1] + (i - 1 - query(x));
    add(x, 1);
  }
  memset(ch, 0, sizeof(ch));
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    int x = p[i];
    add(x, 1);
    add_sum(x, x);
    sum += x;
    int k = (i + 1) / 2;
    long long c = find(k);
    long long tmp = query_sum(c);
    long long a = k * c - tmp - ari(k - 1);
    long long b = (sum - tmp) - (i - k) * c - ari(i - k);
    ans[i] += a + b;
  }
  for (int i = 1; i <= n; i++) printf("%I64d ", ans[i]);
  return 0;
}

```