Problem:
ブラックジャック

ブラックジャックはカジノで行われるカードゲームの一種で、1 〜 13 までの数が書かれたカードを使ってゲームが行われます。各カードの点数は次のように決まっています。

1 は 1 点あるいは 11 点

2 から 9 までは、書かれている数の通りの点数

10 から 13 までは、10 点

このゲームには親を含めた何人かの参加者がおり、それぞれが何枚かのカードの組を持っています。このカードの組のことを手と呼びます。手の点数はカードの点数の合計です。その計算は次のように行うものとします。

カードの点数の合計が 21 より大きくなるときは、手の点数を 0 点とする

カードの点数として、1 は 1 点と計算しても 11 点と計算してもよいが、手の点数が最大となる方を選ぶこととする

配られたカードの情報を入力とし、手の点数を出力するプログラムを作成してください。

Input

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

c1 c2 ... cn

１行に i 番目のカードに書かれている整数 ci (1 ≤ ci ≤ 13) が空白区切りで１行に与えられます。カードの数 n は 100 を超えません。

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

Output

データセットごとに手の点数を１行に出力します。

Sample Input

1
7 7 7
7 7 8
12 1
10 1 1
0

Output for the Sample Input

11
21
0
21
12

Solution in C# (judge verdict: Accepted)

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

namespace ConsoleApplication11 {
    class Program {
        static void Main(string[] args) {
            new Program().solve();
        }

        void solve() {
            while (true) {
                string input = Console.ReadLine();
                if (input == "0") {
                    return;
                }
                string[] splitInput = input.Split(' ');
                int[] numericInput = new int[splitInput.Length];
                for (int i = 0; i < splitInput.Length; i++) {
                    numericInput[i] = int.Parse(splitInput[i]);
                }
                Console.WriteLine(calcPoints(numericInput));
            }
        }

        int calcPoints(int[] hand) {
            int point = 0;
            int numAce = 0;
            for (int i = 0; i < hand.Length; i++) {
                if (hand[i] == 1) {
                    numAce++;
                    point += 11;
                }else if(hand[i] >= 10) {
                    point += 10;
                }else  point += hand[i];
            }

            while (numAce > 0 && point > 21) {
                point -= 10;
                numAce--;
            }
            if (point > 21) {
                return 0;
            } else return point;
        }
    }
}