#include #include #include #include #include using namespace std; int n; string s; bool dp1[2000005][2]; bool dp2[2000005][2]; int tc; bool f1() { dp1[n/2 + 1][0] = dp1[n/2 + 1][1] = true; for ( int idx = n/2; idx >= 0; idx-- ) { for ( int flag = 0; flag < 2; flag++ ) { bool ans = false; if ( !flag ) ans = (ans || dp1[idx + 1][1]); if ( n/2 + idx + 1 - flag < n ) ans = (ans || ((s[idx] == s[n/2 + idx + 1 - flag]) && dp1[idx + 1][flag])); dp1[idx][flag] = ans; } } return dp1[0][0]; } bool f2() { dp2[n/2 - 1][0] = dp2[n/2 - 1][1] = true; for ( int idx = n/2; idx < n; idx++ ) { for ( int flag = 0; flag < 2; flag++ ) { bool ans = false; if ( !flag ) ans = (ans || dp2[idx - 1][1]); if ( idx - n/2 - 1 + flag >= 0 ) ans = (ans || ((s[idx] == s[idx - n/2 - 1 + flag]) && dp2[idx - 1][flag])); dp2[idx][flag] = ans; } } return dp2[n-1][0]; } int main() { // freopen("inp1.txt", "r", stdin); // freopen("out1.txt", "w", stdout); int t; cin >> t; for ( tc = 1; tc <= t; tc++ ) { cin >> s; n = (int)s.size(); if ( n == 1 ) { puts("NO"); continue; } if ( n%2 == 0 ) { for ( int i = 0; i < n/2; i++ ) { if ( s[i] != s[n/2 + i] ) { puts("NO"); goto p1; } } puts("YES"); p1:{ } } else { for ( int i = 0; i < n/2; i++ ) { if ( s[i] != s[n/2 + i + 1] ) goto p2; } puts("YES"); continue; p2: { } if ( f1() ) puts("YES"); else { if ( f2() ) puts("YES"); else puts("NO"); } } } return 0; }