#include using namespace std; const int nmax=1e5+42,base=131,mod=987654323; int n; char inp[nmax]; int done[nmax],on[nmax]; long long hsh[nmax],pwr[nmax]; pair outp[nmax]; int ask_hsh(int l,int r) { long long LHS=hsh[r]; long long RHS=hsh[l-1]*pwr[r-l+1]%mod; return (LHS-RHS+mod)%mod; } bool same(int l,int r,int lq,int rq) { if(r>n||rq>n)return 0; if(done[r]!=done[l-1]||done[rq]!=done[lq-1])return 0; if(ask_hsh(l,r)!=ask_hsh(lq,rq))return 0; return 1; } int SZ(int num) { int ret=0; while(num) { num=num/10; ret++; } return ret; } bool letter(char c) { return 'a'<=c&&c<='z'; } bool by_hand(int i,int j,int d) { if(letter(inp[i])==0&&inp[i]!='[')return 0; if(letter(inp[j-1])==0&&inp[j-1]!=']')return 0; while(i+d=cnt_comma&&cnt_comma>=cnt_close); else return 0; } return cnt_open==cnt_comma&&cnt_comma==cnt_close; } void go(int d) { for(int i=1;i<=n;i++) done[i]=done[i-1]+1-on[i]; for(int i=1;i<=n;i++) { int j=i+d; while(same(i,i+d-1,j,j+d-1))j=j+d; int dist_now=j-i; int compressed=1+d+1+SZ(dist_now/d)+1; //if(d==14)cout< "<compressed) if(by_hand(i,j,d)) { outp[i]={d,dist_now/d}; for(int p=i;pflag)return 0; n=0; while(valid(given[n]))n++; for(int i=1;i<=n;i++)inp[i]=given[i-1]; for(int i=1;i<=n;i++)outp[i]={1,1}; pwr[0]=1; for(int i=1;i<=n;i++)pwr[i]=1LL*base*pwr[i-1]%mod; for(int i=1;i<=n;i++)hsh[i]=(1LL*hsh[i-1]*base+inp[i])%mod; for(int i=1;i<=n;i++)on[i]=1; for(int d=1;d<=n&&1.0*(clock()-T)/CLOCKS_PER_SECpointer; //cout<<"ok? "< where={}; /* cout<<"given now"< there={}; int j=i; int cnt=0; while(j+d-1<=n) { if(wrong[j+d-1]!=wrong[j-1])j++; else { if(same(i,i+d-1,j,j+d-1)) { there.push_back(j); cnt++; j=j+d; } else j++; } } int diff=(d-1)*cnt-(d+3); //cout<<"cnt= "< skip={}; for(auto w:where) skip.insert(w-1); printf("#="); for(auto w:save)printf("%c",w); printf("."); for(int i=0;i