Problem:
Score : 200 points

Problem Statement

You are given a string S of length N consisting of lowercase English letters.
We will cut this string at one position into two strings X and Y.
Here, we would like to maximize the number of different letters contained in both X and Y.
Find the largest possible number of different letters contained in both X and Y when we cut the string at the optimal position.

Constraints

2 \leq N \leq 100

|S| = N

S consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the largest possible number of different letters contained in both X and Y.

Sample Input 1

6
aabbca

Sample Output 1

2

If we cut the string between the third and fourth letters into X = aab and Y = bca, the letters contained in both X and Y are a and b.
There will never be three or more different letters contained in both X and Y, so the answer is 2.

Sample Input 2

10
aaaaaaaaaa

Sample Output 2

1

However we divide S, only a will be contained in both X and Y.

Sample Input 3

45
tgxgdqkyjzhyputjjtllptdfxocrylqfqjynmfbfucbir

Sample Output 3

9

Solution in Lua (5.3.2) (judge verdict: Accepted)

function qchong(s)
  local t={}
  for i=1,#s do
    t[i]=string.sub(s,i,i)
  end
  table.sort(t)
  local i=1
  while t[i] do
    if t[i]==t[i+1] then
      table.remove(t,i)
      i=i-1
    end
    i=i+1
  end
  return t
end
N=io.read()
S=io.read()
res={}
for i=1,#S-1 do
  a=string.sub(S,1,i)
  b=string.sub(S,i+1,#S)
  a=qchong(a)
  b=qchong(b)
  local count=0
  for i=1,#a do
    for j=1,#b do
      if a[i]==b[j] then
        count=count+1
      end
    end
  end
  res[i]=count
end
table.sort(res,function (a,b) return a>b end)
print(res[1])