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 C (GCC 5.4.1) (judge verdict: Accepted)

/*
公式チャンネルの解説を実装したものです
*/

#include<stdio.h>

int myJudge(char *sa, char *sb);

int main(void)
{
  char s[100+1]={0};
  char sa[100+1]={0};
  char sb[100+1]={0};
  int n=0;
  int ans=0;
  int i=0;
  int k=0;
  int j=0;
  int max=0;

  scanf("%d", &n);
  scanf("%s", s);

  //kは仕切りの位置を表していて
  //[i]と[i+1]の間にあるときk=iとしています
  for(k=0; k<=n-2; k++){
    
    i=0;
    j=0;

    //saに入れる
    while(i!=k+1){
      sa[i] = s[i];
      i++;
    }
    sa[i] = '\0';
    //sbに入れる
    while(i<=n-1){
      sb[j] = s[i];
      i++;
      j++;
    }
    sb[j] = '\0';

    ans = myJudge(sa, sb);
   
    if(ans > max){
      max = ans;
    }
    
    
  }
  printf("%d\n", max);

  return 0;
}

//aからzの文字を一つずつ、saとsbの両方に含まれるか判定する関数
int myJudge(char *sa, char *sb)
{
  char c;
  int cnt=0;
  int ans1=0,ans2=0;
  char *p;


  for(c='a'; c<='z'; c++){
    ans1=0,ans2=0;

    p=sa;
    while(*p != '\0'){
      if(*p == c){
	ans1 = 1;
	break;
      }
      ++p;
    }
    p=sb;
    while(*p != '\0'){
      if(*p == c){
	ans2 = 1;
	break;
      }
      ++p;
    }
    if(ans1==1 && ans2==1)
      cnt++;
  
  }

  return cnt;
}