func_code_string: #include <bits/stdc++.h>       using namespace std;   using ll=long long;   using pii=pair<int,int>;      int np[17][200000];   int pre[(1<<17)+1];      int main() {    int n,k;    cin >> n >> k;       string s;       cin >> s;    int l=0,r=n/k;       while (l<r) {           int m=(l+r+1)/2;           for (int j=0;j<k;j++) {               int cnt=0, nextpos=n+1;               for (int i=n-1;i>=0;i--) {                   if (s[i]== ?  || s[i]== a +j) cnt++;                   else cnt=0;                   if (cnt>=m) nextpos=i;                   np[j][i]=nextpos;               }           }           /*cerr << m << endl;           for (int j=0;j<k;j++) {               cerr << (char)( a +j) <<  :  ;               for (int i=0;i<n;i++) cerr << np[j][i] <<    ;               cerr << endl;           }*/           pre[0]=0;           for (int i=1;i<(1<<k);i++) {               pre[i]=n+1;               /*for (int j=0;j<k;j++) if (i&(1<<j)) {                   cerr << (char)( a +j) <<  , ;               }               cerr <<   t  << i << endl;*/               for (int j=0;j<k;j++) if (i&(1<<j)) {                   int x=(i&(~(1<<j)));                   //cerr << (char)( a +j) <<    << x <<     << pre[x] <<     << np[j][pre[x]] << endl;                   if (pre[x]<n) pre[i]=min(pre[i],np[j][pre[x]]+m);                   //cerr << (char)( a +j) <<     << pre[i] << endl;               }           }           /*for (int i=0;i<(1<<k);i++) {               for (int j=0;j<k;j++) if (i&(1<<j)) {                   cerr << (char)( a +j) <<  , ;               }               cerr <<   t  << pre[i] << endl;           }*/           if (pre[(1<<k)-1]<=n) l=m;           else r=m-1;       }       printf( %d n ,l);       return 0;   }