#include #include #include #include #include #include using namespace std; #define ll long long #define N 105000 struct Obj { int sign,len; ll val; }obj[N]; ll p[N],ha[N]; int tot; void init(char *s) { int len=strlen(s); tot=0; for(int i=0,nxt=0;ilen || ha[obj[i].len]!=obj[i].val) return false; cur+=obj[i].len; continue; } if(i==tot-1) { if(cur+obj[i].len>len+1) return false; if((len+1-(cur+obj[i].len))%2) return false; cur=len+1-obj[i].len; return ha[cur+obj[i].len-1]-ha[cur-1]*p[obj[i].len]==obj[i].val; } while(cur<=len+1&&cur+obj[i].len<=len+1) { if(ha[cur+obj[i].len-1]-ha[cur-1]*p[obj[i].len]==obj[i].val) break; cur+=2; } if(cur>len+1||cur+obj[i].len>len+1) return false; cur+=obj[i].len; } } --cur; return cur<=len&&(len-cur)%2==0; } char s[N]; int main () { p[0]=1; for(int i=1;i