Problem:
おはじき取り

一郎君と次郎君の兄弟は家でよくおはじき取りをして遊びます。おはじき取りは、一カ所に積まれた複数のおはじきを二人が交互にとっていくゲームです。一度に1〜4個のおはじきを好きな数だけ順に取り、相手に最後の1個を取らせた方が勝ちになります。二人はいつも 32 個のおはじきを使い、兄である一郎君の番からゲームを始めます。

これまでに何度も戦っている二人ですが、次郎君は兄の一郎君にどうしても勝つことができません。それもそのはず、一郎君はこのゲームの必勝法を知っているからです。一郎君は、残りのおはじきの数を n とすると、必ず (n - 1) % 5 個のおはじきを取ります。ここで x % y は、x を y で割った余りを示します。

一方、次郎君は、残りのおはじきの数にかかわらず、ゲームのはじめに各回で取るおはじきの数を数列として決めてしまうのです。例えば、次郎君が決めた数列が{ 3, 1, 4, 2 } であるならば、彼の取るおはじきの数は順に 3 -> 1 -> 4 -> 2 -> 3 -> 1 -> 4 -> … となります（取ると決めた数が、おはじきの残りの数以上になった場合は、残りのおはじき全てを取ります）。

なんど負けてもやり方を変えようとしない頑固な次郎君の将来が心配になったお母さんは、次郎君がいかなる数列を選んだとしても一郎君には勝てないということを示すために、ゲームをシュミレートするプログラムを書くことにしました。

次郎君の考えた数列 a を入力とし、一郎君と次郎君が順次おはじきを取った後の残りのおはじきの個数を出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
a1 a2 ... an

１行目に次郎君の決めた数列の長さ n (1 ≤ n ≤ 25)、２行目に数列の i 番目の要素 ai (1 ≤ ai ≤ 4) が空白区切りで与えられます。入力はすべて整数で与えられます。

データセットの数は 100 を超えません。

Output

データセットごとに、ゲームの各回でのおはじきが取られた直後のおはじきの数（整数）を出力します。

Sample Input

4
3 1 4 2
3
4 3 2
0

Output for the Sample Input

31
28
26
25
21
17
16
14
11
8
6
5
1
0
31
27
26
23
21
19
16
12
11
8
6
4
1
0

Solution in C# (judge verdict: Accepted)

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

namespace _0164
{
    public class Program

    {
        public static void Main(string[] args)
        {

            while (true)
            {
                int n = RInt(); if (n == 0) break;
                int[] a = RIntAr();

                int ohajiki = 32;
                int turn = 0;
                while (ohajiki > 0)
                {
                    if (turn % 2 == 0)
                    {
                        //taro
                        ohajiki -= (ohajiki - 1) % 5;
                    }
                    else
                    {
                        //jiro
                        int subNum = a[((turn - 1) / 2) % n];
                        ohajiki -= subNum > ohajiki ? ohajiki : subNum;
                    }
                    Console.WriteLine(ohajiki);
                    turn++;
                }
            }

        }

        static string RSt() { return Console.ReadLine(); }
        static int RInt() { return int.Parse(Console.ReadLine().Trim()); }
        static long RLong() { return long.Parse(Console.ReadLine().Trim()); }
        static double RDouble() { return double.Parse(Console.ReadLine()); }
        static string[] RStAr(char sep = ' ') { return Console.ReadLine().Trim().Split(sep); }
        static int[] RIntAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => int.Parse(e)); }
        static long[] RLongAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => long.Parse(e)); }
        static double[] RDoubleAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => double.Parse(e)); }
        static string WAr<T>(IEnumerable<T> array, string sep = " ") { return string.Join(sep, array.Select(x => x.ToString()).ToArray()); }
    }

}