#include<bits/stdc++.h>
using namespace std;
void createTree(const vector<int> &arr, int pleft, int pright, int vleft, int vright, vector<int> &ans);
int main(void) {
vector<int> arr;
int n, t;
while(cin >> t) { arr.push_back(t); }
n = arr.size()/2;
vector<int> ans(n, 0);
createTree(arr, 0, n-1, n, 2*n-1, ans);
for(int i = 0; i < n; i++) {
if(i == 0) cout << ans[i];
else cout << " " << ans[i];
}
return 0;
}
void createTree(const vector<int> &arr, int pleft, int pright, int vleft, int vright, vector<int> &ans) {
if(pleft >= pright || vleft >= vright) return;
int leftNum = 0, sum = 0;
// 累加目前的中序遍历中所有的元素和,根节点要排除。
for(int i = vleft; i <= vright; i++) {
sum += arr[i];
// 排除根节点,并记录左子树的孩子节点个数
if(arr[i] == arr[pleft]) {
sum -= arr[i];
leftNum = i - vleft;
}
}
// 当前中序的节点求和赋值
ans[vleft + leftNum - ans.size()] = sum;
// 依次遍历左子树和右子树
createTree(arr, pleft+1, pleft+leftNum, vleft, vleft+leftNum-1, ans);
createTree(arr, pleft+leftNum+1, pright, vleft+leftNum+1, vright, ans);
}