シャンテン数計算

入力形式

1行目にテストケースの数Tが与えられる。
2行目からT+1行目までのT行、手牌が以下の形式で与えられる。
t_1 t_2 ... t_14
ただし、t_iは0以上33以下の整数で、0~8が1m~9m、9~17が1p~9p、18~27が1s~9s、28~33が東~中を表す。

出力形式

T行出力せよ。
i行目にi番目のテストケースの
通常シャンテン数 国士シャンテン数 七対子シャンテン数
をスペース区切りで出力せよ。
(性能測定をする場合は、全てのテストケースの3つのシャンテン数の和を出力せよ。オーバーフローしても良い)

参考になるかもしれないもの

ここhttp://mahjong.ara3.net/etc/shanten/index.htmアルゴリズムの詳しい解説がある。
あらさんとおそらくほぼ同じ実装をしていると思われるC++コードが以下。
https://gist.github.com/wistery-k/4723644
shanten.txtは以下。
https://gist.github.com/wistery-k/4723683/raw/77eb86d92576110d8f582ff85385e9d6e0d2bffc/shanten.txt

wistery_kがいくつかの高速化をしたC++コードが以下。一応のたたき台という事で。
https://gist.github.com/wistery-k/4723695/raw/573e7f62c9d4e597787a84c282396eddbe6da330/sample%20code%202
shanten2.txtは以下。
https://gist.github.com/wistery-k/4723724/raw/e314b7312b5132f2afd013838273f042554325f1/shanten2.txt

に色々役に立ちそうなことが書いてある。