# Path: pycryptics/utils/synonyms.py
# def cached_synonyms(x, length=None):
#     x = x.lower()
#     if x in SYNONYMS:
#         syns = [s for s in SYNONYMS[x] if (not length) or (len(s) <= length)]
#         return set(syns)
#     else:
#         return set([])
# 
# SYNONYMS = msgpack.load(f, use_list=False)
# 
# Path: pycryptics/utils/ngrams.py
# INITIAL_NGRAMS = msgpack.load(f, use_list=False)


from pycryptics.utils.synonyms import cached_synonyms, SYNONYMS
from pycryptics.utils.ngrams import INITIAL_NGRAMS

def split_words(ans, lengths):
    j = 0
    words = []
    stop = 0
    for l in lengths:
        stop = j + l
        if j >= len(ans):
            return words

# Path: pycryptics/utils/synonyms.py
# def cached_synonyms(x, length=None):
#     x = x.lower()
#     if x in SYNONYMS:
#         syns = [s for s in SYNONYMS[x] if (not length) or (len(s) <= length)]
#         return set(syns)
#     else:
#         return set([])
# 
# SYNONYMS = msgpack.load(f, use_list=False)
# 
# Path: pycryptics/utils/ngrams.py
# INITIAL_NGRAMS = msgpack.load(f, use_list=False)


# Path: pycryptics/utils/transforms.py
from pycryptics.utils.synonyms import cached_synonyms, SYNONYMS
from pycryptics.utils.ngrams import INITIAL_NGRAMS


def split_words(ans, lengths):
    j = 0
    words = []
    stop = 0
    for l in lengths:
        stop = j + l
        if j >= len(ans):
            return words

        elif stop >= len(ans):