#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 10;
int bit[MAX_N], n, pos[MAX_N], x;
long long ans = 0;
int lowbit(int x) { return x & (-x); }
int sum(int x) {
  int res = 0;
  while (x < MAX_N) {
    res += bit[x];
    x += lowbit(x);
  }
  return res;
}
void update(int x) {
  while (x) {
    bit[x] += 1;
    x -= lowbit(x);
  }
}
int get(int d) {
  int l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (sum(mid) >= d) {
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return r;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> x;
    pos[x] = i;
  }
  for (int i = 1; i <= n; i++) {
    int mid = (i + 1) / 2;
    if (i & 1) {
      update(pos[i]);
      int k = get(mid);
      int dis = abs(pos[i] - k) - abs(sum(pos[i]) - sum(k));
      if (pos[i] < k) {
        ans += -(sum(1) - sum(pos[i]));
      } else {
        ans += -sum(pos[i] + 1);
      }
      ans += dis + sum(pos[i] + 1);
    } else {
      int k = get(mid);
      int dis =
          abs(pos[i] - k) - abs(sum(pos[i]) + (pos[i] < k ? 1 : 0) - sum(k));
      if (pos[i] < k) {
        ans += -(sum(1) - sum(pos[i]));
      } else {
        ans += -sum(pos[i] + 1);
      }
      ans += dis + sum(pos[i] + 1);
      update(pos[i]);
    }
    printf("%I64d ", ans);
  }
  return 0;
}

### Prompt

Develop a solution in Cpp to the problem described below:

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 MAX_N = 2e5 + 10;
int bit[MAX_N], n, pos[MAX_N], x;
long long ans = 0;
int lowbit(int x) { return x & (-x); }
int sum(int x) {
  int res = 0;
  while (x < MAX_N) {
    res += bit[x];
    x += lowbit(x);
  }
  return res;
}
void update(int x) {
  while (x) {
    bit[x] += 1;
    x -= lowbit(x);
  }
}
int get(int d) {
  int l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (sum(mid) >= d) {
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return r;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> x;
    pos[x] = i;
  }
  for (int i = 1; i <= n; i++) {
    int mid = (i + 1) / 2;
    if (i & 1) {
      update(pos[i]);
      int k = get(mid);
      int dis = abs(pos[i] - k) - abs(sum(pos[i]) - sum(k));
      if (pos[i] < k) {
        ans += -(sum(1) - sum(pos[i]));
      } else {
        ans += -sum(pos[i] + 1);
      }
      ans += dis + sum(pos[i] + 1);
    } else {
      int k = get(mid);
      int dis =
          abs(pos[i] - k) - abs(sum(pos[i]) + (pos[i] < k ? 1 : 0) - sum(k));
      if (pos[i] < k) {
        ans += -(sum(1) - sum(pos[i]));
      } else {
        ans += -sum(pos[i] + 1);
      }
      ans += dis + sum(pos[i] + 1);
      update(pos[i]);
    }
    printf("%I64d ", ans);
  }
  return 0;
}

```