#!/usr/bin/python3 class TrieNode: def __init__(self, letter, parent): self.parent = parent self.letter = letter self.subnodes = {} self.end_of_word = False class Trie: def __init__(self): self.root = TrieNode(None, None) def insert(self, word): node = self.root for letter in word: if letter not in node.subnodes: node.subnodes[letter] = TrieNode(letter, node) node = node.subnodes[letter] node.end_of_word = True def max_prefixes(self): best = (self.root, 0) stack = [best] while len(stack) > 0: (node, num_prefixes) = stack.pop() if node.end_of_word: num_prefixes += 1 if num_prefixes > best[1]: best = (node, num_prefixes) for letter, subnode in node.subnodes.items(): stack.append( (subnode, num_prefixes) ) word = [] node = best[0] while node.parent is not None: word.append(node.letter) node = node.parent word.reverse() return (''.join(word), best[1]) def prefixes_for(self, word): node = self.root p = 1 for letter in word: p += int(node.end_of_word) if letter in node.subnodes: node = node.subnodes[letter] else: return 0 return p if node.end_of_word else 0 n = int(input()) t = Trie() for _ in range(n): t.insert(input()) print(t.max_prefixes()[0])