import Data.Char
import Data.Map
-- return a tuple of words, punctuation
splitUp :: String -> ([String], [String])
splitUp s = (words s, dewords s)
where dewords s = filter (not . isAlpha) s
-- map: key is word, value is another map: key is second word, val is freq: 1/n
data FreqTable = Map String (Map String Int)
makeTable :: [String] -> FreqTable -> FreqTable
makeTable (wa:wb:ws) table = if (member wa table)
then if (member wb (table ! wa))
then let n = (table ! wa) ! wb
in insert wb (n+1) (table ! wa) ! wb
else insert wa 1 (table ! wa) ! wb
else insert wa (fromlist [(wb, 1)])
aW1wb3J0IERhdGEuQ2hhcgppbXBvcnQgRGF0YS5NYXAKCi0tIHJldHVybiBhIHR1cGxlIG9mIHdvcmRzLCBwdW5jdHVhdGlvbgpzcGxpdFVwIDo6IFN0cmluZyAtPiAoW1N0cmluZ10sIFtTdHJpbmddKQpzcGxpdFVwIHMgPSAod29yZHMgcywgZGV3b3JkcyBzKQoJd2hlcmUgZGV3b3JkcyBzID0gZmlsdGVyIChub3QgLiBpc0FscGhhKSBzCgotLSBtYXA6IGtleSBpcyB3b3JkLCB2YWx1ZSBpcyBhbm90aGVyIG1hcDoga2V5IGlzIHNlY29uZCB3b3JkLCB2YWwgaXMgZnJlcTogMS9uCmRhdGEgRnJlcVRhYmxlID0gTWFwIFN0cmluZyAoTWFwIFN0cmluZyBJbnQpCgptYWtlVGFibGUgOjogW1N0cmluZ10gLT4gRnJlcVRhYmxlIC0+IEZyZXFUYWJsZQptYWtlVGFibGUgKHdhOndiOndzKSB0YWJsZSA9IGlmIChtZW1iZXIgd2EgdGFibGUpIAoJCQkJdGhlbiBpZiAobWVtYmVyIHdiICh0YWJsZSAhIHdhKSkKCQkJCQl0aGVuIGxldCBuID0gKHRhYmxlICEgd2EpICEgd2IKCQkJCQkgICAgIGluIGluc2VydCB3YiAobisxKSAodGFibGUgISB3YSkgISB3YgoJCQkJICAgICAgICBlbHNlIGluc2VydCB3YSAxICh0YWJsZSAhIHdhKSAhIHdiCgkJCSAgICAgICAgZWxzZSBpbnNlcnQgd2EgKGZyb21saXN0IFsod2IsIDEpXSkKCQkJICAgICAgICA=