#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; #define FOR(k,a,b) for(int k(a); k < (b); ++k) #define FORD(k,a,b) for(int k(b-1); k >= (a); --k) #define REP(k,a) for(int k=0; k < (a); ++k) #define ABS(a) ((a)>0?(a):-(a)) char X[22], Y[22], tmpc[22]; const LL MOD = 1e9+7; const int ALPHABETNUM = 'Z'-'A' + 1; int N,K,T; int calcState(char* c) { if(c[0]==0) return 0; int stX=0;//0 is equal X, 1 strictly less, 2 strictly greater int stY=0;// char Z = strlen(c); for(int i = 0; c[i]; ++i) { if(i == K) return 60; if(stX == 0) { if(c[i]>X[i]) stX = 2; else if (c[i]Y[i]) stY = 2; else if (c[i] strlen(X)) return 60; REP(i,len) tmpc[i]=X[i]; tmpc[len]=c; tmpc[len+1] = 0; return calcState(tmpc); } if(state < 40) // yet is equal with Y prefix len (and strictly larger than X) = state -20 { int len = state -20; if(len > strlen(Y)) return 60; REP(i,len) tmpc[i]=Y[i]; tmpc[len]=c; tmpc[len+1] = 0; return calcState(tmpc); } // this contain a surely hated word prefix with state - 40 len int len = state -40; if(len