local function add(bag, char) if bag[char] then bag[char] = bag[char] + 1 else bag[char] = 1 end end local function remove(bag, char) if bag[char] and bag[char] >= 1 then bag[char] = bag[char] - 1 end end local function bag(word) local b = {} for char in word:gmatch "." do add(b, char) end return b end local state_index = {} function state_index:process(str2) for c in str2:gmatch "." do for i, bag in ipairs(self.bags) do if bag[c] and bag[c] >= 1 then remove(bag, c) self.anagrams[i] = self.anagrams[i] .. c break end end end return self end function state_index:print() print(table.concat(self.anagrams, " ")) print(table.concat(self.words, " ")) end local function init(str1) local state = { words = {}, bags = {}, anagrams = {}, } setmetatable(state, {__index = state_index}) for word in str1:gmatch("%w+") do table.insert(state.words, word) table.insert(state.bags, bag(word)) table.insert(state.anagrams, "") end return state end init(io.read()):process(io.read()):print()