import java.util.*;
class Main{
static class Node{
int data;
Node left;
Node right;
Node(int data){
this.data = data;
left = right = null;
}
}
static Node root = null;
public static Node createTree(int[] arr,int lo, int hi)
{
if(lo>hi) return null;
if(lo == hi){
Node base = new Node(arr[lo]);
return base;
}
int mid = (lo+hi)/2;
Node nn = new Node(arr[mid]);
nn.left = createTree(arr,lo,mid-1);
nn.right = createTree(arr,mid+1,hi);
return nn;
}
public static Node replace(Node node,int Max){
if(node == null) return null;
node.right = replace(node.right,Max);
if(node.data > Max){
Max += node.data ;
}
if(Max > node.data){
node.data = node.data + Max;
Max = node.data;
}
node.left = replace(node.left,Max);
return node;
}
public static void preOrder(Node node){
if(node == null) return;
System.out.print(node.data+" ");
preOrder(node.left);
preOrder(node.right);
}
public static Scanner scn = new Scanner(System.in);
public static void main(String[] args){
int n = scn.nextInt();
int [] arr = new int [n];
for(int i = 0; i<n; i++)
arr[i]= scn.nextInt();
root = createTree(arr,0,arr.length-1);
root = replace(root,0);
preOrder(root);
}
}
