#include <stdio.h>
#include <ctype.h>
using namespace std;
const int NMAX = 2001;
char cf[NMAX], sol[NMAX], dpcfmax[NMAX][NMAX];
int dplmax[NMAX][NMAX];
int i;
char mymax(char a, char b);
int read();
void cmpRpl(int lcur, int cfcur, int &lmax, char &cmax);
void initDP(int n, int &lmax, char &cfmax);
void solve(int lmax, char cfmax, int n);
void print(int lmax);
int main()
{
int n, lmax;
char cfmax;
n = read();
initDP(n, lmax, cfmax);
solve(lmax, cfmax, n);
print(lmax);
return 0;
}
char mymax(char a, char b)
{
if (a > b)
return a;
return b;
}
int read()
{
int len = 0;
char ch;
FILE *fin = fopen("elimin2.in", "r");
while (isdigit(ch = fgetc(fin)))
cf[len++] = ch;
fclose(fin);
return len;
}
void cmpRpl(int lcur, char cfcur, int &lmax, char &cfmax)
{
if (lcur > lmax)
{
lmax = lcur;
cfmax = cfcur;
}
else if (lcur == lmax && cfcur > cfmax)
cfmax = cfcur;
}
void initDP(int n, int &lmax, char &cfmax)
{
int j, l;
lmax = 1;
cfmax = '0';
for (i = 0; i < n - 1; i++)
{
dplmax[i][i] = 1;
dpcfmax[i][i] = cf[i];
if (lmax == 1)
cfmax = mymax(cfmax, cf[i]);
if (cf[i] == cf[i + 1])
{
dplmax[i][i + 1] = 2;
dpcfmax[i][i + 1] = cf[i];
if ((cf[i] > '0' && lmax == 1) || (lmax == 2 && cf[i] > cfmax))
{
lmax = 2;
cfmax = cf[i];
}
}
else
{
dplmax[i][i + 1] = 1;
dpcfmax[i][i + 1] = mymax(cf[i], cf[i + 1]);
}
}
dplmax[n - 1][n - 1] = 1;
dpcfmax[n - 1][n - 1] = cf[n - 1];
if (lmax == 1)
cfmax = mymax(cfmax, cf[i]);
for (l = 2; l < n; l++)
for (i = 0; i < n - l; i++)
{
j = i + l;
cmpRpl(dplmax[i + 1][j], dpcfmax[i + 1][j], dplmax[i][j], dpcfmax[i][j]);
cmpRpl(dplmax[i][j - 1], dpcfmax[i][j - 1], dplmax[i][j], dpcfmax[i][j]);
if (cf[i] == cf[j])
cmpRpl(dplmax[i + 1][j - 1] + 2, cf[i], dplmax[i][j], dpcfmax[i][j]);
if (dpcfmax[i][j] > '0')
{
if (dplmax[i][j] > lmax)
{
lmax = dplmax[i][j];
cfmax= dpcfmax[i][j];
}
else if (dplmax[i][j] == lmax)
cfmax = mymax(dpcfmax[i][j], cfmax);
}
}
}
void solve(int lmax, char cfmax, int n)
{
int st, dr, posSt, posDr;
posSt = 0, posDr = lmax - 1, st = 0, dr = n - 1;
while (posSt <= posDr)
{
while (cf[st++] != cfmax);
while (cf[dr--] != cfmax);
sol[posSt++] = sol[posDr--] = cfmax;
cfmax = dpcfmax[st][dr];
}
}
void print(int lmax)
{
FILE *fout = fopen("elimin2.out", "w");
for (int i = 0; i < lmax; i++)
fputc(sol[i], fout);
fclose(fout);
}