import Data.List main = fmap lines getContents >>= \[predmeti,birki] -> let (predmeti',birki') = unzip $ head $ soljushen (words predmeti) birki in mapM_ (putStrLn . unwords) [predmeti',birki'] soljushen [] [] = [[]] soljushen predmeti birki = [(birka,predmet):solushn | (levo,predmet:pravo) <- zip (inits predmeti) (tails predmeti), let birka = zipWith const birki predmet, sort predmet == sort birka, solushn <- soljushen (levo++pravo) (birki\\birka)]