#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn = 1e5+5; char Ma[maxn]; int Mp[maxn]; void Manacher(char s[], int len) { int l = 0; Ma[l++] = 's'; Ma[l++] = '#'; for(int i = 0; i < len; ++i) { Ma[l++] = s[i]; Ma[l++] = '#'; } Ma[l] = 0; int mx = 0, id = 0; for(int i = 0; i < l; ++i) { Mp[i] = mx>i?min(Mp[2*id-i], mx-i):1; while(Ma[i+Mp[i]] == Ma[i-Mp[i]]) Mp[i]++; if(i+Mp[i] > mx) { mx = i+Mp[i]; id = i; } } } char s[maxn]; int l[maxn], r[maxn]; int main() { //freopen("out", "w", stdout); //freopen("in", "r", stdin); int cases; scanf("%d", &cases); while(cases--) { scanf("%s", s); int len = strlen(s); Manacher(s, len); memset(l, 0, sizeof(l)); memset(r, 0, sizeof(r)); for(int i = 2; i < 2*(len+1); ++i) { int node_id = i/2; int temp = (Mp[i]-1)/2; if(i&1) { if(node_id+1-temp == 1) { l[node_id+temp] = 1; } if(node_id+temp == len) { r[node_id+1-temp] = 1; } } else { if(node_id-temp == 1) { l[node_id+temp] = 1; } if(node_id+temp == len) { r[node_id-temp] = 1; } } } int ok = 0; for(int i = 2; i < 2*(len+1); ++i) { int node_id = i/2; int temp = (Mp[i]-1)/2; if(i&1) { if(!temp) continue; int l_n = node_id+1-temp, r_n = node_id+temp; while(l_n < r_n) { if(l_n-1>=1 && r_n+1 <= len && l[l_n-1] && r[r_n+1]) { ok = 1; break; } l_n++; r_n--; } } else { int l_n = node_id-temp, r_n = node_id+temp; while(l_n <= r_n) { if(l_n-1>=1 && r_n+1 <= len && l[l_n-1]&&r[r_n+1]) { ok = 1; break; } l_n++; r_n--; } } if(ok) break; } if(ok) puts("Yes"); else puts("No"); } return 0; }