编程题
### 问题描述
在密码学的世界中,有一个被称为回文公会的秘密社团。这个公会使用一种特殊的语言进行交流,其中每条信息都是一个回文。回文是一个单词、短语、数字或其他字符序列,它忽略空格、标点和大小写后,正向和反向读取都是相同的。
公会有一种独特的加密设备,被称为回文机。这台机器接受一个字符串作为输入,并输出可以重新排列成回文的最长可能子串。公会在发送信息之前使用这台机器进行加密。
回文机以一种非常特定的方式运行。它从左到右扫描输入字符串,并跟踪它遇到的字符。它维护每个字符的计数,并使用这些信息来确定可以重新排列成回文的最长子串。
然而,回文机有一个限制。它只能重新排列子串内的字符。它不能将子串外的字符移动到子串内,反之亦然。这意味着输出子串必须是输入字符串的连续段。
你的任务是模拟回文机的操作。给定一个输入字符串,你需要确定可以重新排列成回文的最长子串的长度。
### 输入描述
输入第一行包括一个整数 $n$ ,表示字符串的长度。
接着第二行由一个字符串 $s$ 组成 ( $1 \leq |s| \leq 10^5$ ),其中 $|s|$ 是字符串的长度。字符串由小写英文字母组成。
### 输出描述
输出一个整数,即可以重新排列成回文的最长子串的长度。
### 样例1输入
```
5
abcba
```
### 样例1输出
```
5
```
### 说明
在这个例子中,整个字符串就是一个回文,所以输出的是字符串的长度。
### 样例2输入
```
12
abacdfgdcaba
```
### 样例2输出
```
3
```
### 说明
在这个例子中,可以重新排列成回文的最长子串是 $aba$,所以输出的是这个子串的长度。