ClearAll[Teacuppable] TeacuppableHelper[set_List] := Module[{f, s}, f = First[set]; s = StringRotateLeft[f, #] & /@ Range[Length[set]]; Sort[s] == Sort[set] ] Teacuppable[set_List] := Module[{ss, l}, l = StringLength[First[set]]; ss = Subsets[set, {l}]; Select[ss, TeacuppableHelper] ] s = Import["http://wiki.puzzlers.org/pub/wordlists/unixdict.txt", "String"]; s //= StringSplit[#, "\n"] &; s //= Select[StringLength /* GreaterThan[2]]; s //= Map[ToLowerCase]; s //= Map[{#, Sort[Characters[#]]} &]; s //= GatherBy[#, Last] &; s //= Select[Length /* GreaterEqualThan[2]]; s = s[[All, All, 1]]; s //= Select[StringLength[First[#]] <= Length[#] &]; Flatten[Teacuppable /@ s, 1]