func_code_string: #include <bits/stdc++.h>   using namespace std;   bool debug = 0;   int n, m, k;   int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};   string direc =  RDLU ;   long long ln, lk, lm;   void etp(bool f = 0) {     puts(f ?  YES  :  NO );     exit(0);   }   void addmod(int &x, int y, int mod = 1000000007) {     assert(y >= 0);     x += y;     if (x >= mod) x -= mod;     assert(x >= 0 && x < mod);   }   void et() {     puts( -1 );     exit(0);   }   long long fastPow(long long x, long long y, int mod = 1000000007) {     long long ans = 1;     while (y > 0) {       if (y & 1) ans = (x * ans) % mod;       x = x * x % mod;       y >>= 1;     }     return ans;   }   long long gcd1(long long x, long long y) {     long long z = y;     while (x % y != 0) {       z = x % y;       x = y;       y = z;     }     return z;   }   char s[100005];   bool vis[30];   void fmain(int ID) {     scanf( %d%d , &n, &k);     scanf( %s , s + 1);     for (int(i) = 1; (i) <= (int)(n); (i)++) vis[s[i] -  a ] = 1;     if (n < k) {       for (int(i) = 1; (i) <= (int)(n); (i)++) printf( %c , s[i]);       for (int(j) = 0; (j) < (int)(26); (j)++)         if (vis[j]) {           for (int(cc) = 0; (cc) < (int)(k - n); (cc)++) printf( %c ,  a  + j);           break;         }       return;     }     for (int i = k; i; i--) {       for (int j = (s[i] -  a ) + 1; j < 26; j++)         if (vis[j]) {           for (int(z) = 1; (z) <= (int)(i - 1); (z)++) printf( %c , s[z]);           printf( %c ,  a  + j);           for (int(tar) = 0; (tar) < (int)(26); (tar)++)             if (vis[tar]) {               for (int z = i + 1; z <= k; z++) printf( %c ,  a  + tar);               return;             }           return;         }     }   }   int main() {     int t = 1;     for (int(i) = 1; (i) <= (int)(t); (i)++) {       fmain(i);     }     return 0;   }   