/*
#include <stdio.h>
int f(int n)
{
if(n==0) return ;
}
int main()
{
int i;
scanf("%d", &n);
}
*/
//Dynamic Programming
//memoization
//계산했던 결과를 저장을 해서, 중복으로 계산하지 않게 프로그래밍 하는 것
/* 2601
#include <stdio.h>
int memo[201]={};
int f(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1||n==2){
return memo[n]=1;
}
return memo[n]=f(n-1)+f(n-2);
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", f(n));
return 0;
}
*/
/*
#include <stdio.h>
double memo[10001]={};
int f(int n)
{
if(n<0) return 0;
if(memo[n]!=0) return memo[n];
else{
memo[n]=f(n)
}
}
int main()
{
int i, n;
double arr[10001]={1}, max=-1;
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%lf", &arr[i]);
}
for(i=0;i<n;i++){
if(memo[i]>memo[i]*memo[i+1]){
break;
max=memo[i];
}
else {
max*=memo[i];
}
}
printf("\n%.3lf", max);
}
*/
/*
#include <stdio.h>
double memo[10001]={};
int f(int n)
{
if(n<0) return 0;
if(memo[n]!=0) return memo[n];
else{
memo[n]=f(n);
return memo[n];
}
}
int main()
{
int i, n;
double sum[10001]={1}, max=-1;
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%lf", &memo[i]);
}
printf("\n%.3lf", max);
}
*/
/*
#include <stdio.h>
int memo[100000][100000]={};
int f(int a, int b)
{
if(memo[a][b]!=0) return memo[a][b];
return memo[a][b]=f(a, b)
}
int main()
{
int arr[100000]={};
int i, n, a, b, max=0;
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%d", &arr[i]);
}
f(a, b);
printf("%d", max);
}
*/
#include <stdio.h>
int main()
{
int arr[100000]={}, memo[100000]={};
int i, n, max=-1;
scanf("%d", &n);
arr[0]=1;
for(i=0;i<n;i++){
scanf("%d", &arr[i]);
}
for(i=0;i<n;i++){
if(memo[i]<1) memo[i]=1;
else memo[i]=memo[i+1];
memo[i]+=arr[i];
if(max<memo[i]) max=memo[i];
printf("%d\n", memo[i]);
}
printf("\n%d", max);
}