リストの内容比較

しばらくGroovyをいじっていなかったのでリハビリがてらid:fumokmm さんのお題を解くよ!

お題:リストの内容比較
http://d.hatena.ne.jp/fumokmm/20101023/1287835025

二つのリスト(左・右)の内容を比較し、片方にしかないものと両方に在るものを出力するプログラムを書いて下さい。

条件
・リストの入力方法、出力方法は自由とします。
・入力されるリストの内容は未ソートかつ重複がある可能性を考慮して下さい。
・出力されるリストは、左のリストにのみある内容、右のリストにのみある内容、両方のリストにある内容の三種類とします。
・出力されるリストは辞書順ソートかつ重複は除去した形式として下さい。

サンプル入力リスト:
[listL] aaa bbb ccc bbb eee hhhh
[listR] bbb ddd eee fff ggg iiiii

サンプル出力リスト:
[left only] aaa ccc hhhh
[right only] ddd fff ggg iiiii
[both] bbb eee

また、余裕のある方は以下のように左右の内容を並べて出力して下さい。

サンプル出力リスト(余裕のある方用):
aaa  |
bbb  | bbb
ccc  |
     | ddd
     | eee
     | fff
     | ggg
hhhh |
     | iiiii


fumokmmさんの解答とほぼ同じ感じになったのは嬉しい!

ただ、おまけの解答を出すのにかなり時間がかかってしまったのが残念。