#include #include #include #include #include #define REP(i,a,b) for(i=a;i=10) mul[i]-=10, mul[i+1]++; if(mul[szm-1]>=10){ mul[szm-1]-=10; mul[szm] = 1; szm++; } hs = 0; rep(i,szm) hs = hs*1007 + mul[szm-1-i]; ullHashIncrease(hs); rep(i,sz) num[i] *= (4*n-2); for(i=sz-1;i>=0;i--){ if(i) num[i-1] += (num[i]%n) * 10; num[i] /= n; } rep(i,sz-1){ num[i+1] += num[i]/10; num[i] %= 10; } while(num[sz-1] >= 10){ num[sz] = num[sz-1] / 10; num[sz-1] %= 10; sz++; } } assert( scanf("%d",&T)==1 ); assert( 1<=T && T<=100 ); while(T--){ assert( scanf("%s",in)==1 ); n = strlen(in); assert( 1<=n && n<=1000 && in[0]!='0' ); rep(i,n) assert( '0'<=in[i] && in[i]<='9' ); hs = 0; rep(i,n) hs = hs * 1007 + (in[i] - '0'); if(ullHashGet(hs)) puts("YES"); else puts("NO"); } return 0; } /* brute force for small L int main(){ int i, j, k, a, b; char in[1200]; long long chk[100] = {}; rep(i,25){ rep(j,1<