import Data.List
import Data.Function
main = fmap lines getContents >>= \[predmeti,birki] -> let
(predmeti',birki') = unzip $ head $ soljushen sgruppirovaniePredmeti birki
sgruppirovaniePredmeti = groupBy ((==) `on` sort) $ sortBy (compare `on` sort) $ words predmeti
in mapM_ (putStrLn . unwords) [predmeti',birki']
soljushen _ [] = [[]]
soljushen gruppi birki = [(birka,predmet):solushn |
(levo,(predmet:gruppa):pravo) <- zip (inits gruppi) (tails gruppi),
let birka = zipWith const birki predmet,
sort predmet == sort birka,
solushn <- soljushen (levo++gruppa:pravo) (birki\\birka)]
aW1wb3J0IERhdGEuTGlzdAppbXBvcnQgRGF0YS5GdW5jdGlvbgoKbWFpbiA9IGZtYXAgbGluZXMgZ2V0Q29udGVudHMgPj49IFxbcHJlZG1ldGksYmlya2ldIC0+IGxldAoJKHByZWRtZXRpJyxiaXJraScpID0gdW56aXAgJCBoZWFkICQgc29sanVzaGVuIHNncnVwcGlyb3ZhbmllUHJlZG1ldGkgYmlya2kKCXNncnVwcGlyb3ZhbmllUHJlZG1ldGkgPSBncm91cEJ5ICgoPT0pIGBvbmAgc29ydCkgJCBzb3J0QnkgKGNvbXBhcmUgYG9uYCBzb3J0KSAkIHdvcmRzIHByZWRtZXRpCglpbiBtYXBNXyAocHV0U3RyTG4gLiB1bndvcmRzKSBbcHJlZG1ldGknLGJpcmtpJ10KCQpzb2xqdXNoZW4gXyBbXSA9IFtbXV0Kc29sanVzaGVuIGdydXBwaSBiaXJraSA9IFsoYmlya2EscHJlZG1ldCk6c29sdXNobiB8IAoJKGxldm8sKHByZWRtZXQ6Z3J1cHBhKTpwcmF2bykgPC0gemlwIChpbml0cyBncnVwcGkpICh0YWlscyBncnVwcGkpLAoJbGV0IGJpcmthID0gemlwV2l0aCBjb25zdCBiaXJraSBwcmVkbWV0LAoJc29ydCBwcmVkbWV0ID09IHNvcnQgYmlya2EsCglzb2x1c2huIDwtIHNvbGp1c2hlbiAobGV2bysrZ3J1cHBhOnByYXZvKSAoYmlya2lcXGJpcmthKV0=