#include #include #include #include #include #define REP(i,a,b) for(i=a;i= 0) return dp[n][d][f]; mx = 9; if(!(f&2)) mx = num[d]; rep(i,mx+1){ af = 0; if(i!=num[d]) af |= 2; if((f&1) || edge[n][i]==9999){ res += doit(0, d-1, f|af|1); continue; } res += doit(edge[n][i], d-1, f|af); } return dp[n][d][f] = res; } ll solve(ll x){ int i, j, k; num_len = 0; while(x) num[num_len++] = x%10, x/=10; rep(i,node) rep(j, num_len) rep(k, 4) dp[i][j][k] = -1; return doit(0, num_len-1, 0); } int main(){ int i, j, k, m, N; ll L, R, K, A, B, C, D; char fav[100][20]; int fav_len[100]; int cnv[100][20], rev_a[2000], rev_b[2000]; char now[100]; int now_len, a, b, sa, sb, na, nb; assert( scanf("%lld%lld%lld%d",&L,&R,&K,&N)==4 ); assert(1LL<=L&&L<=R&&R<=1000000000000000000LL); assert(1LL<=K&&K<=R-L+1); assert(1<=N&&N<=62); rep(i,N){ assert( scanf("%s",fav[i])==1 ); fav_len[i] = strlen(fav[i]); assert(1<=fav_len[i] && fav_len[i]<=18 && fav[i][0]!='0'); rep(j,fav_len[i]) assert('0'<=fav[i][j] && fav[i][j]<='9'); rep(j,fav_len[i]) fav[i][j]-='0'; } for(;;){ int fg = 0; rep(i,N) rep(j,N) if(!fg && i != j && fav_len[i] >= fav_len[j]){ rep(k,fav_len[i]-fav_len[j]+1){ if(is_same(fav[i]+k, fav[j], fav_len[j])){ N--; fg++; REP(k,i,N){ fav_len[k] = fav_len[k+1]; rep(m,fav_len[k]) fav[k][m] = fav[k+1][m]; } break; } } } if(!fg) break; } /* rep(i,N){ printf("%d ",i,fav[i]); rep(j,fav_len[i]) putchar('0'+fav[i][j]); puts(""); }*/ rep(i,N) rep(j,fav_len[i]+1) cnv[i][j] = -1; node = 0; cnv[0][0] = node; rev_a[node] = 0; rev_b[node] = 0; node++; rep(k, node){ a = rev_a[k]; b = rev_b[k]; rep(i,b) now[i] = fav[a][i]; rep(m,10){ now_len = b; now[now_len++] = m; sa = -1; for(nb=now_len;nb;nb--) if(sa==-1) rep(na,N) if(sa==-1){ if(fav_len[na] < nb) continue; if(is_same(now+now_len-nb, fav[na], nb)){ sa = na; sb = nb; } } if(sa==-1) sa=sb=0; if(sb==fav_len[sa]){ edge[k][m] = 9999; continue; } if(cnv[sa][sb]==-1){ cnv[sa][sb] = node; rev_a[node] = sa; rev_b[node] = sb; node++; } edge[k][m] = cnv[sa][sb]; } } K += solve(L-1); D = solve(R); if(D < K){ puts("no such number"); return 0; } A = L; B = R; while(A