Hdu的Hotaru's problem
#include<bits/stdc++.h>
//#define int long long
#define PII pair<int,int>
#define endl "\n"
using namespace std;
const int N=2e6+5;
const int INF=0x3f3f3f3f;
const double EPS=1e-6;
const int MOD=19930726;
int n,d[N],t[N],ans,s[N],b[N],m;
void solve(){
cin>>m;
n=0;
ans=0;
for(int i=1;i<=m;i++)cin>>b[i];
for(int i=1;i<=m;i++){
s[++n]=-1;
d[n]=0;
s[++n]=b[i];
d[n]=0;
}
s[++n]=-1;
int l=0,r=-1;
for(int i=1;i<=n;i++){
int j=l+r-i;
if(i>r){
while(i-d[i]>=1&&i+d[i]<=n&&s[i-d[i]]==s[i+d[i]])d[i]++;
l=i-d[i]+1,r=i+d[i]-1;
}else if(j-l>=d[j])d[i]=d[j];
else{
d[i]=j-l+1;
while(i-d[i]>=1&&i+d[i]<=n&&s[i-d[i]]==s[i+d[i]])d[i]++;
l=i-d[i]+1,r=i+d[i]-1;
}
}
for(int i=1;i<=n;i++){
if(d[i]<=ans)continue;
int j=i+d[i]-1;
if(j>n)continue;
if(d[i]<=d[j])ans=max(ans,d[i]-1);
else{
int tmp=d[i];
while(tmp){
tmp--;
int j=i+tmp-1;
if(d[j]>=tmp){
ans=max(ans,tmp);
break;
}
}
}
}
cout<<ans/2*3<<endl;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T=1;
cin>>T;
for(int i=1;i<=T;i++){
cout<<"Case #"<<i<<": ";
solve();
}
return 0;
}