続柄 〜 横へな 2013.1.11

問題

下図のような家系図(この家系図には女性しか書かれていない)がある。



上が祖先で下が子孫を示す。
例えば、5 から見ると 2 は「母」で、28 から見ると 10 は「おば」である。
そこで、 5->228->10 のような文字列を受け取り、続柄を出力するプログラムを書く。続柄は下表のような記号を使う。

記号 説明
me 本人。
mo 母。
da 娘。
si 姉妹。本人は姉妹ではないことに注意。
au おば。母の姉妹。
ni 姪。姉妹の娘。
co いとこ。おばの娘。
- 上記のいずれにも該当しない場合。はとこ、曾祖母など。

補足


実装ができた方は Qiitaの記事 のコメント欄からリンクを張っていただくと見つけやすくて助かります。

サンプルデータ

# 入力 期待
0 5->2 mo
1 28->10 au
2 1->1 me
3 40->40 me
4 27->27 me
5 7->2 mo
6 40->13 mo
7 9->3 mo
8 4->1 mo
9 1->3 da
10 12->35 da
11 3->8 da
12 6->19 da
13 38->40 si
14 9->8 si
15 4->2 si
16 15->16 si
17 40->12 au
18 10->4 au
19 21->5 au
20 8->2 au
21 3->5 ni
22 11->39 ni
23 2->13 ni
24 13->32 ni
25 14->22 co
26 40->34 co
27 5->8 co
28 12->10 co
29 1->27 -
30 8->1 -
31 12->22 -
32 2->40 -
33 32->31 -
34 13->14 -

C/C++/Java 用のテストデータ