Problem:
Maximum Sum Sequence

Given a sequence of numbers a1, a2, a3, ..., an, find the maximum sum of a contiguous subsequence of those numbers. Note that, a subsequence of one element is also a contiquous subsequence.

Input

The input consists of multiple datasets. Each data set consists of:

n
a1
a2
.
.
an

You can assume that 1 ≤ n ≤ 5000 and -100000 ≤ ai ≤ 100000.

The input end with a line consisting of a single 0.

Output

For each dataset, print the maximum sum in a line.

Sample Input

7
-5
-1
6
4
9
-6
-7
13
1
2
3
2
-2
-1
1
2
3
2
1
-2
1
3
1000
-200
201
0

Output for the Sample Input

19
14
1001

Solution in C (judge verdict: Memory Limit Exceeded)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define mem(x,y)		(x*)malloc(sizeof(x)*(y))

int main(void)
{
	int n;
	while(scanf("%d",&n),n)
	{
		int i,j,k;
		int** table = mem(int*,n);
		for(i = 0;i < n;i++)
		{
			table[i] = mem(int,n);
			memset(table[i],0,sizeof(int)*n);
			scanf("%d",&table[i][i]);
		}
		for (i = 0; i < n; i += 1)
		{
			for(j = i;j < n;j++)
			{
				for(k = 0;k <= i;k++)
				{
					if(j != k)
						table[k][j] += table[i][i];
				}
			}
		}
		for (i = 0; i < n; i += 1)
		{
			for(j = i+1;j < n;j++)
			{
				printf("%5d",table[i][j]);
			}
			putchar('\n');
		}
		int max = 0;
		for(i = 0;i < n;i++)
		{
			if(table[i][i] < 0)
				continue;
			for (j = i+1; j < n; j += 1)
			{
				if(table[i][j] > max)
					max = table[i][j];
			}
		}
		printf("%d\n",max);
	}
	return 0;
}