import bisect def main(): import sys input = sys.stdin.read data = input().split() n = int(data[0]) strings = [] idx = 1 for _ in range(n): s = data[idx] idx += 1 is_good = True for i in range(1, len(s)): if s[i] < s[i-1]: is_good = False break if is_good: head = s[0] tail = s[-1] strings.append((head, tail, len(s))) if not strings: print(0) return strings.sort(key=lambda x: x[1]) tails = [x[1] for x in strings] dp = [] max_dp = 0 overall_max = 0 for i in range(len(strings)): head, tail, length = strings[i] pos = bisect.bisect_right(tails, head, 0, i) k = pos - 1 current_max = 0 if k >= 0: if k < len(dp): current_max = dp[k] else: current_max = 0 current_dp = length if k >= 0: current_dp = max(current_dp, current_max + length) dp.append(current_dp) if i == 0: max_dp = current_dp else: max_dp = max(max_dp, current_dp) overall_max = max(overall_max, max_dp) print(overall_max) if __name__ == "__main__": main()