#include <stdio.h>//最长回文子串-动态规划算法
#include <stdlib.h>
void longestPalindrome(char*,int);
int main () {
int len;
scanf("%d",&len);
char *str=(char*)malloc(len*sizeof(char));
scanf("%s",str);
longestPalindrome(str,len);
return 0;
}
void longestPalindrome(char *str, int len){
int i,j;
int maxLen=0;
int begin;
int **dp=(int**)malloc(len*sizeof(int*));
for(i=0;i<len;i++){
dp[i]=(int*)malloc(len*sizeof(int));
}
if(len<2){
return str;
}
for(int L=2;L<len;L++){
for(i=0;i<len;i++){
j=L+i-1;
if(j>=len)
break;
if(str[i]!=str[j]){
dp[i][j]=0;
}
else{
if(j-i<3){
dp[i][j]=1;
}
else{
dp[i][j]=dp[i+1][j-1];
}
}
if (dp[i][j]==1 && j-i+1>maxLen) {
maxLen = j - i + 1;
begin = i;
}
}
}
for(i=begin;i<=begin+maxLen-1;i++){
printf("%c",str[i]);
}
}