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: Wrong Answer)

using System;
using System.Collections.Generic;

class AIZU0022
    {
        public static void Main(){
            int N,anew,sMin,sMax,xMin,xMax,nextMax,prevMin, result;
            int[] asum;
            List<int> compost = new List<int>();
            while (true) {
                anew=0; sMin=0; sMax=0; xMin=0; xMax=0;
                N=int.Parse(Console.ReadLine());
                if (N==0) break;
                asum=new int[N];
                for (int i = 0; i<N; i++) {
                    anew=int.Parse(Console.ReadLine());
                    if (i!=0) asum[i]=asum[i-1]+anew;
                    else asum[i]=anew;
                    if (asum[i]<sMin) { sMin=asum[i]; xMin=i; }   //Small Peak
                    if (asum[i]>sMax) { sMax=asum[i]; xMax=i; }   //Large Peak
                }

                if (xMax>xMin) result=sMax-sMin;    //straightway, model v^
                else {              //, model ^v
                    nextMax=sMin; prevMin=sMax;
                    for (int i = 0; i<xMax; i++)    //PrevMin
                        if (asum[i]<prevMin) prevMin=asum[i];
                    for (int i = xMin; i<N; i++)    //NextMax
                        if (asum[i]>nextMax) nextMax=asum[i];
                    result=Math.Max(sMax-prevMin,nextMax-sMin);
                }
                compost.Add(result);
            }
            foreach (int r in compost) Console.WriteLine(r);
        }
    }