#include <stdio.h>
char arr[10];
int main(void)
{
freopen("input.txt", "r", stdin);
int t = 0;
int tc = 0;
int n = 0;
scanf("%d\n", &t);
while (tc++ < t)
{
scanf("%d\n", &n);
for (int i = 0; i < n; i++)
{
scanf("%c\n", arr + i);
}
printf("#%d ", tc);
for (int f = 0, b = n - 1, nf, nb, k, j, dec; f <= b;) // front, back, new front, new back,
{
if (arr[f] < arr[b])
{
printf("%c", arr[f++]);
}
else if (arr[f] > arr[b])
{
printf("%c", arr[b--]);
}
else if (f == b)
{
printf("%c", arr[f]);
break;
}
else // 같은 글자 일 때,
{
/*
dec = 0;
for (k = 1; arr[f + k] == arr[b - k] && arr[f + k - 1] >= arr[f + k] && f + k <= b; k++)
{
if (arr[f + k - 1] > arr[f + k])
{
dec = 1;
}
}*/
nf = f + k;
nb = b - k;
if (nf <= nb)
{
if (arr[nf] > arr[f] && arr[nb] > arr[b]) // 이전것과 비교해서, 뒤에가 크다면, 먼저 작은 것부터 출력하고,
{
for (j = f; j < nf; j++) printf("%c", arr[j]);
for (j = b; j > nb; j--) printf("%c", arr[j]);
f = nf;
b = nb;
}
else if (arr[nf] > arr[nb]) // 일반 사례 한쪽 출력
{
for (j = b; j > nb; j--)
{
printf("%c", arr[j]);
}
b = nb;
}
else // 반대의 경우 양쪽 출력
{
for (j = f; j < nf; j++)
{
printf("%c", arr[j]);
}
f = nf;
}
}
else if (nf == nb && arr[f] < arr[nf]) // 가운데 하나 남았을 때,
{
for (j = f; j < nf; j++) printf("%c", arr[j]);
for (j = b; j > nb; j--) printf("%c", arr[j]);
printf("%c", arr[nf]);
}
else // 반대 일 때,
{
for (j - f; j <= b; j++) printf("%c", arr[j]);
break;
}
}
}
puts("");
}
}
댓글