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 JavaScript (judge verdict: Accepted)

function main() {
  var
  hands, pattern,
  swap,
  i = 0, j;
  for (;;) {
    if (input[i] == 0) break;
    
    
    hands = [];
    for (j = 0; j < 5; j++) {
      hands.push(Number(input[i++]));
    }
    
    pattern = hands.reduce(function (pat, h) {
      return (pat[h] = true, pat);
    }, {});
    
    keys = Object.keys(pattern).map(Number).sort(function (x, y) { return x - y; });
    
    if (keys.length === 2) {
      if (keys[1] - keys[0] == 2) {
        swap = keys[0];
        keys[0] = keys[1];
        keys[1] = swap;
      }
      hands.forEach(function (h) {
        console.log(keys.indexOf(h) + 1);
      });
    } else {
      hands.forEach(function () {
        console.log(3);
      });
    }
  }
}

var
input = '';

process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
  input += chunk;
});
process.stdin.on('end', function() {
  input = input.split('\n');
  main();
});