1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
   | string s; ll n; ll pre[200010]; ll sum[200010][30]; ll now[30]; bool PRE(ll len){     return pre[len]==len; } bool ck(ll l,ll r) {     if(l==1 && r==n)         return 1;     ll l1,l2,r1,r2;     l1=1,r1=l-1;     l2=r+1,r2=n;     ll len=min(r1,n-l2+1);     if(!PRE(len))         return 0;     if(l+r==n+1)         return 1;     forl(i,0,25)         now[i]=sum[r][i]-sum[l-1][i];     if(l<=n/2 && r<=n/2)     {         if(r!=n/2 && pre[n/2]-pre[r]!=n/2-r)             return 0;         forl(i,0,25)             if(now[i]!=sum[n+1-l][i]-sum[n+1-r-1][i])                 return 0;         return 1;     }     else if(l>n/2 && r>n/2)     {         if(l!=n/2+1 && pre[n/2]-pre[n+1-l]!=n/2-(n+1-l))             return 0;         forl(i,0,25)             if(now[i]!=sum[n+1-l][i]-sum[n+1-r-1][i])                 return 0;         return 1;     }     else     {         if(n/2-l<r-n/2)         {                     forl(i,0,25)             {                 now[i]-=sum[n+1-(n+1-l)-1][i]-sum[n+1-r-1][i];                 if(now[i]<0)                     return 0;             }             
 
                                                                                                                                            forl(i,0,25)                 if(now[i]&1)                     return 0;             return 1;         }         else         {             forl(i,0,25)             {                 now[i]-=sum[n+1-l][i]-sum[n+1-(n+1-r)][i];                 if(now[i]<0)                     return 0;             }                                                                                                                          forl(i,0,25)                 if(now[i]&1)                     return 0;             return 1;         }     } } bool check(ll Mid) {     forl(i,1,n-Mid+1)         if(ck(i,i+Mid-1))                return 1;     return 0; } ll L,R;
 
 
 
  void _clear(){} void solve() {     _clear();     cin>>s;     n=s.size();     s=' '+s;     forl(i,1,n)     {         forl(j,0,25)             sum[i][j]=sum[i-1][j];         sum[i][s[i]-'a']++;     }     forl(i,1,n)         pre[i]=0;     forl(i,1,n/2)         pre[i]=(s[i]==s[n-i+1]);     forl(i,1,n/2)         pre[i]+=pre[i-1];     if(pre[n/2]==n/2)     {         cout<<0<<endl;         return ;     }             L=1,R=n;     while(L<R)     {         ll Mid=(L+R)/2;         if(check(Mid))             R=Mid;         else             L=Mid+1;     }     cout<<L<<endl; }
   |