':type words: List[str]
:rtype: List[str]'

def findAllConcatenatedWordsInADict(self, words):

    lookup = set(words)
    result = []
    for word in words:
        dp = ([False] * (len(word) + 1))
        dp[0] = True
        for i in xrange(len(word)):
            if (not dp[i]):
                continue
            for j in xrange((i + 1), (len(word) + 1)):
                if (((j - i) < len(word)) and (word[i:j] in lookup)):
                    dp[j] = True
            if dp[len(word)]:
                result.append(word)
                break
    return result
