import Data.List
import Control.Monad

newtype Dice = Dice [Int] 

instance Show Dice where
  show (Dice s) = "(" ++ unwords (show <$> s) ++ ")"

instance Eq Dice where
  d1 == d2 = d1 `compare` d2 == EQ

instance Ord Dice where
  Dice d1 `compare` Dice d2 = (add $ compare <$> d1 <*> d2) `compare` 0
    where
      add = sum . map (\case {LT -> -1; EQ -> 0; GT -> 1})

dices n = Dice <$> (nub $ sort <$> replicateM n [1..n]) 

nonTrans dice = filter (\x -> last x < head x) . go
  where
    go 0 = []
    go 1 = sequence [dice]
    go n = do
      (a:as) <- go (n-1)
      b <- filter (< a) dice
      return (b:a:as)