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: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace P0022_MaximumSumSequence
{
    class Program
    {

        static void Main(string[] args)
        {
            int cntLine;

            List<List<int>> lines = new List<List<int>>();

            do
            {
                cntLine = int.Parse( Console.ReadLine());
                
                List<int> line = new List<int>();

                for (int i = 1; i <= cntLine; i++) 
                {
                    line.Add(int.Parse(Console.ReadLine()));
                }

                lines.Add(line);

            }
            while (cntLine != 0);
            

            foreach (List<int> line in lines)
            {

                if (line.Count == 0) 
                {
                    break;
                }

                List<int> newline = new List<int>();

                int sum1 = 0;

                int? ib = null;

                foreach (int i in line)
                {

                    if ((ib >= 0 && i < 0) || (ib < 0 && i >= 0))
                    {
                        newline.Add(sum1);
                        sum1 = i;
                    }
                    else
                    {
                        if (i < 0)
                        {
                            if (sum1 != 0)
                            {
                                newline.Add(sum1);
                            }
                            sum1 = i;
                        }
                        else
                        {
                            sum1 += i;
                        }

                    }

                    ib = i;
                }
                newline.Add(sum1);

                int Max = -100000;

                int lineLength = newline.Count;

                for (int i = 0; i < lineLength; i++) 
                {
                    int sum = 0;

                    for (int j = i; j < lineLength; j++)
                    {
                        sum += newline[j];

                        if (sum >= Max) 
                        {
                            Max = sum;
                        }
                    }

                }

                Console.WriteLine(Max);

            }

        }


    }

}