# include <cstdio>
# include <cstring>
typedef unsigned long long ULL;
const int N = 1000010 , MOD = 1e9 + 7 ;
ULL h1[ N] , h2[ N] , p[ N] ;
char s[ N] ;
int get1 ( int l, int r)
{
return ( h1[ r] - h1[ l- 1 ] * p[ r- l+ 1 ] % MOD+ MOD) % MOD;
}
int get2 ( int l, int r)
{
return ( h2[ l] - h2[ r+ 1 ] * p[ r- l+ 1 ] % MOD+ MOD) % MOD;
}
bool check ( int l, int r, int len)
{
int hash_s1= ( h1[ len] - get1 ( l, r) * p[ len- r] % MOD+ get2 ( l, r) * p[ len- r] % MOD+ MOD) % MOD;
int hash_s2= ( h2[ 1 ] - get2 ( l, r) * p[ l- 1 ] % MOD+ get1 ( l, r) * p[ l- 1 ] % MOD+ MOD) % MOD;
return hash_s1== hash_s2;
}
int solve ( int len)
{
int pos= - 1 ;
for ( int i= 1 ; i<= len/ 2 ; i++ )
if ( s[ i] != s[ len- i+ 1 ] )
{
pos= i;
break ;
}
if ( pos== - 1 ) return 1 ;
p[ 0 ] = 1 ; h1[ 0 ] = h2[ len+ 1 ] = 0 ;
for ( int i= 1 , j= len; i<= len; i++ , j-- )
{
h1[ i] = ( h1[ i- 1 ] * 131 % MOD+ s[ i] - 'a' + 1 ) % MOD;
h2[ j] = ( h2[ j+ 1 ] * 131 % MOD+ s[ j] - 'a' + 1 ) % MOD;
p[ i] = p[ i- 1 ] * 131 % MOD;
}
for ( int i= pos; i<= len- pos+ 1 ; i++ )
if ( check ( pos, i, len) || check ( i, len- pos+ 1 , len) )
return 1 ;
return 0 ;
}
int main ( )
{
int T; scanf ( "%d" , & T) ;
while ( T-- )
{
scanf ( "%s" , s+ 1 ) ;
int len= strlen ( s+ 1 ) ;
if ( solve ( len) ) printf ( "Yes\n" ) ;
else printf ( "No\n" ) ;
}
return 0 ;
}