The Smart Beaver from ABBYY began to develop a new educational game for children. The rules of the game are fairly simple and are described below.

The playing field is a sequence of n non-negative integers ai numbered from 1 to n. The goal of the game is to make numbers a1, a2, ..., ak (i.e. some prefix of the sequence) equal to zero for some fixed k (k < n), and this should be done in the smallest possible number of moves.

One move is choosing an integer i (1 ≤ i ≤ n) such that ai > 0 and an integer t (t ≥ 0) such that i + 2t ≤ n. After the values of i and t have been selected, the value of ai is decreased by 1, and the value of ai + 2t is increased by 1. For example, let n = 4 and a = (1, 0, 1, 2), then it is possible to make move i = 3, t = 0 and get a = (1, 0, 0, 3) or to make move i = 1, t = 1 and get a = (0, 0, 2, 2) (the only possible other move is i = 1, t = 0).

You are given n and the initial sequence ai. The task is to calculate the minimum number of moves needed to make the first k elements of the original sequence equal to zero for each possible k (1 ≤ k < n).

Input

The first input line contains a single integer n. The second line contains n integers ai (0 ≤ ai ≤ 104), separated by single spaces.

The input limitations for getting 20 points are: 

  * 1 ≤ n ≤ 300



The input limitations for getting 50 points are: 

  * 1 ≤ n ≤ 2000



The input limitations for getting 100 points are: 

  * 1 ≤ n ≤ 105

Output

Print exactly n - 1 lines: the k-th output line must contain the minimum number of moves needed to make the first k elements of the original sequence ai equal to zero.

Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams, or the %I64d specifier.

Examples

Input

4
1 0 1 2


Output

1
1
3


Input

8
1 2 3 4 5 6 7 8


Output

1
3
6
10
16
24
40
#include <bits/stdc++.h>
using namespace std;
template <typename T>
T debug(string s, T x, string d) {
  int16_t p;
  while ((p = s.find("dbg(")) != string::npos) {
    s.erase(p, 4);
    int16_t l = 1;
    do {
      p++;
      if (s[p] == '(') l++;
      if (s[p] == ')') l--;
    } while (l != 0 || s[p] != ')');
    s.erase(p, 1);
  }
  cout << s << " = " << x << d;
  return x;
}
inline int64_t max2(int64_t a, int64_t b) { return a > b ? a : b; }
inline int64_t max3(int64_t a, int64_t b, int64_t c) {
  return a > b ? a > c ? a : c : b > c ? b : c;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int32_t n;
  cin >> n;
  vector<int32_t> a(n);
  for (auto i = a.begin(); i != a.end(); i++) cin >> *i;
  int32_t t = 1;
  while (n > 2 * t) t *= 2;
  int64_t ans = 0;
  for (auto i = 0; i <= n - 2; i++) {
    ans += a[i];
    cout << (ans) << '\n';
    if (i + t == n) t /= 2;
    a[i + t] += a[i];
  }
  cerr << clock() * 1000 / CLOCKS_PER_SEC << " ms\n";
}
