あ、>174ミスってた
> ある入力からできる抽象物は、例えばそれがABCDだった場合
ABCだった場合、でした。
> の4通りがまず考えられる。更に抽象化されたものとして 
3通りでした。

47氏が戦意喪失してそうな気がするので、多分最後のヒント。
・具体例と抽象物は1つクラスを作って、どちらもそのインスタンスとして表現した方がいい(と言うか配列じゃ表現しきれないと思う)
・具体例から抽象物へは再帰を使ったら十数行で生成できる
ABC→(-BC,A-C,-BC)
-BC→(--C,-B-)
A-C→(--C,A--)
-BC→(--C,-B-)
(但しA-Cからの--Cや-BCからの--C,-B-は既にあるので生成の必要はない)