Problem:
じゃんけん

仲良し 5 人組でじゃんけんをすることになりました。じゃんけんとは、グー、チョキ、パーという 3つの手があり、グーとチョキの勝負ならグーが「勝ち」・チョキが「負け」、チョキとパーなら、チョキが「勝ち」・パーが「負け」、パーとグーならパーが「勝ち」・グーが「負け」というルールです。全員が同じ手、またはグー、チョキ、パー全てが出た場合は「あいこ」となります。

5 人のじゃんけんの手を入力とし、それぞれの人の勝敗を出力するプログラムを作成してください。じゃんけんの手は、グーは 1、チョキは 2、パーは 3 の数字で表します。勝敗は「勝ち」を 1、「負け」を 2、「あいこ」を 3 の数字で表し、入力順に従って出力します。

Input

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

h1
h2
h3
h4
h5

i 行目に i 人目の手 hi (1, 2 または 3) が与えられます。

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

Output

入力データセットごとに、5 人の勝敗を出力します。i 行目に i 人目の勝敗(1, 2 または 3) を出力してください。

Sample Input

1
2
3
2
1
1
2
2
2
1
0

Output for the Sample Input

3
3
3
3
3
1
2
2
2
1

Solution in C# (judge verdict: Accepted)

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

namespace AOJ.Volume2
{
    public class RockPaperScissors
    {
        public static int Main()
        {
            while (true)
            {
                // 5人の手を読み込む
                var hand = new List<int>();
                hand.Add(int.Parse(Console.ReadLine()));
                if (hand[0] == 0) { break; }

                hand.Add(int.Parse(Console.ReadLine()));
                hand.Add(int.Parse(Console.ReadLine()));
                hand.Add(int.Parse(Console.ReadLine()));
                hand.Add(int.Parse(Console.ReadLine()));

                // 全員同じ手、またはすべての手がある場合はあいこ
                var gp = hand.GroupBy(x => x).Select(y => new { Key = y.Key, Count = y.Count() });
                if (gp.Count() == 1 || gp.Count() == 3)
                {
                    for (int i = 0; i < 5; i++) { Console.WriteLine(3); }
                    continue;
                }

                // どの手が勝ちか判定
                int h1 = 0, h2 = 0;
                int cnt = 0;
                foreach (var h in gp)
                {
                    if (cnt == 0) { h1 = h.Key; }
                    else { h2 = h.Key; }
                    cnt++;
                }

                int win = 0;
                if (h1 == 1)
                {
                    if (h2 == 2) { win = h1; }
                    else { win = h2; }
                }
                else if (h1 == 2)
                {
                    if (h2 == 1) { win = h2; }
                    else { win = h1; }
                }
                else
                {
                    if (h2 == 1) { win = h1; }
                    else { win = h2; }
                }

                // 勝ち負けを出力
                foreach (var h in hand)
                {
                    if (h == win) { Console.WriteLine(1); }
                    else { Console.WriteLine(2); }
                }
            }
            return 0;
        }
    }
}