N = gets.to_i a = ?a.ord S = Array.new(N) { gets.chomp.each_char.map { |c| c.ord - a } } def good?(s) c = s[0] s.all? { |d| x = c <= d c = d x } end S.filter! { |s| good?(s) } S.map! { |s| [s[0], s[-1], s.size] } S.sort! ans = 0 A = Hash.new(0) S.each do |(f, l, s)| x = A[f] y = x + s (l ... 26).each do |i| A[i] = y if y > A[i] end end puts A.values.max || 0