#include <bits/stdc++.h>

using namespace std;

#define ll long long

//velika slova od A-Z
// na koliko nacina je moguce obrisati sva slova osim 26 tako da su ostala slova razlicita i poredjana redom?
// svaki duplikat mora da se obrise
// ne znam da li su u redu
// prvi clan je slovo
// drugi clan je broj pojavljivanja i mesta na kojima su ta pojavljivanja???
// za svako slovo imam broj njegovih pojavljivanja i pozicije na kojima se nalazi
// sada samo prolazim kroz svako slovo i ukoliko je broj pojavljivanja veci od 0
// rekurzivno zovem brojNacina sa podstringom 

bool uredjen(string s)
{
	ll n = s.size();
	char karakteri[n];
	for (ll i = 0; i < n; i++)
	{
		karakteri[i] = s[i];
	}
	sort(karakteri, karakteri + n);
	for (ll i = 0; i < n; i++)
	{
		if (karakteri[i] != s[i])
			return 0;
	}
	return 1;
}

ll brojNacina(string s, map<char, vector<ll>> pozicije)
{
	if (!uredjen(s) && s.size() <= 26) return 0;
	ll ret = 0;
	ll n = s.size();
	bool flag = true;
	for (ll i = 0; i < n; i++)
	{
		char c = s[i];
		ll bp = pozicije[c].size();
		if (bp > 1)
		{
			cout << c << " ima bp veci od 1: ";
			flag = false;
			//cout << pozicije[c].size() << "\n";
			int m = 0;
			for (ll j = 0; j < pozicije[c].size(); j++)
			{
				cout << "Unutar for ciklusa\n";
				ll index = pozicije[c][j];
				string novoS = s.substr(0,index);
				if (index != n) novoS += s.substr(index+1, n);
				pozicije[s[index]].erase(pozicije[s[index]].begin(), pozicije[s[index]].begin()+1);
				//cout << novoS << "\n";
				m = brojNacina(novoS, pozicije) + 1;
				cout << "M: " << m << "\n";
				//pozicije[c].push_back(index);
				// svaka pozicija za slovo koje se pojavljuje
				//ret += brojNacina(s.substr(0,j)+s.substr(j+1), frekvencije, pozicije);
				if (m > ret)
					ret = m;
			}
		}
	}
	return ret;
}

int main()
{
	ll n;
	cin >> n;
	string s;
	cin >> s;
	map<char,vector<ll>> pozicije;
	for (ll i = 0; i < n; i++)
	{
		char c = s[i];
		pozicije[c].push_back(i);
	}
	cout << brojNacina(s, pozicije);
	return 0;
}