#include using namespace std; #define ld long double #define F first #define S second #define Lnode 2*node+1 #define Rnode 2*node+2 #define MID (l+r>>1) #define el '\n' #define coutf(x) for(auto v:(x)) cout<>v; #define all(x) x.begin(),x.end() #define ll long long #define sz(x) (int)x.size() #define pi pair #define pii pair> #define vi vector using ull = unsigned long long; vectorlcp (const string& s) { int n=s.size(); vectorphi(n,0); for (int i=1,k=0;i0&&s[i]!=s[k])k=phi[k-1]; if (s[i]==s[k])k++; phi[i]=k; } return phi; } pi mancher(const string&s) { int c=0,r=0; string t="#"; for (auto it:s)t+=it,t+="#"; // for (auto it:t)cout<p(n,0); for (int i=0;i=0&&rightr)r=i+p[i],c=i; } int mxlen=0,mx=0; for (int i=1;imx) { if ((i-p[i])/2<=0||((i-p[i])/2)+p[i]>=s.size()) { mx=p[i]; mxlen=i; } } } int start=(mxlen-mx)/2; return {start,mx}; } void solve() { string s; cin>>s; string rev1=s; string ss=s; string rev=s; reverse(all(rev)); rev+="#"+s; reverse(all(rev1)); s+="#"+rev1; auto pref=lcp(rev); int ps=0; for (int i=rev.size()/2+1;iprefix.size()){ if (ans.size()>suffix.size())cout<suffix.size())cout<>tc; for (int i=1;i<=tc;i++){solve();} return 0; }