n = int(input()) good_strings = [] for _ in range(n): s = input().strip() valid = True for i in range(1, len(s)): if s[i] < s[i-1]: valid = False break if valid: if len(s) == 0: continue # though per problem statement, S_i has length >=1 first = s[0] last = s[-1] good_strings.append((first, last, len(s))) # Initialize dp and max_dp dp = [0] * 26 max_dp = [0] * 26 for first, last, length in good_strings: f_idx = ord(first) - ord('a') l_idx = ord(last) - ord('a') current_max = max_dp[f_idx] candidate = current_max + length if candidate > dp[l_idx]: dp[l_idx] = candidate # Recompute max_dp current_max_dp = dp[0] max_dp[0] = current_max_dp for i in range(1, 26): current_max_dp = max(current_max_dp, dp[i]) max_dp[i] = current_max_dp print(max_dp[-1])