import collections
def filterSublist1(words):
longest = collections.defaultdict(str)
for word in words: # O(n)
for i in range(1, len(word)+1): # O(k)
for j in range(len(word) - i + 1): # O(k)
subword = word[j:j+i] # O(1)
if len(longest[subword]) < len(word): # O(1)
longest[subword] = word # O(1)
return list(set(longest.values())) # O(n)
# Total: O(nk²)
print filterSublist1(['a', 'abc', 'b', 'd', 'xy', 'xyz'])
print filterSublist1(['ab', 'bc', 'ac'])
print filterSublist1(['abb', 'ba'])
aW1wb3J0IGNvbGxlY3Rpb25zCmRlZiBmaWx0ZXJTdWJsaXN0MSh3b3Jkcyk6CiAgICBsb25nZXN0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Qoc3RyKQogICAgZm9yIHdvcmQgaW4gd29yZHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPKG4pCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHdvcmQpKzEpOiAgICAgICAgICAgICAgICAjIE8oaykKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UobGVuKHdvcmQpIC0gaSArIDEpOiAgICAgICAgICMgTyhrKQogICAgICAgICAgICAgICAgc3Vid29yZCA9IHdvcmRbajpqK2ldICAgICAgICAgICAgICAgICAgIyBPKDEpCiAgICAgICAgICAgICAgICBpZiBsZW4obG9uZ2VzdFtzdWJ3b3JkXSkgPCBsZW4od29yZCk6ICAjIE8oMSkKICAgICAgICAgICAgICAgICAgICBsb25nZXN0W3N1YndvcmRdID0gd29yZCAgICAgICAgICAgICMgTygxKQoKICAgIHJldHVybiBsaXN0KHNldChsb25nZXN0LnZhbHVlcygpKSkgICAgICAgICAgICAgICAgICMgTyhuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUb3RhbDogTyhua8KyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCnByaW50IGZpbHRlclN1Ymxpc3QxKFsnYScsICdhYmMnLCAnYicsICdkJywgJ3h5JywgJ3h5eiddKQpwcmludCBmaWx0ZXJTdWJsaXN0MShbJ2FiJywgJ2JjJywgJ2FjJ10pCnByaW50IGZpbHRlclN1Ymxpc3QxKFsnYWJiJywgJ2JhJ10p