sub assemble{$#_?(sort{length$a<=>length$b}map{my$s=$_;my@l=grep$s ne$_,@_;map{my($t,$u)=($s,$_);my@m=grep$u ne$_,@l;chop$u while$t!~s/\Q$u\E$/$_/;assemble($t,@m)}@l}@_)[0]:pop}