#include <bits/stdc++.h>   using namespace std;   long long C[20][20];   long long dp[20];   int cnt[16];   int k, t;   long long solve(int l) {     memset(dp, 0, sizeof(dp));     dp[0] = 1;     for (int j = 0; j < 16; j++) {       for (int i = l; i >= 0; i--) {         for (int k = 1; k <= min(l - i, t - cnt[j]); k++) {           dp[i + k] = (dp[i + k] + C[l - i][k] * dp[i]);         }       }     }     return dp[l];   }   int main() {     C[0][0] = 1;     for (int i = 1; i < 20; i++) {       C[i][0] = C[i][i] = 1;       for (int j = 1; j < i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];     }     scanf( %d%d , &k, &t);     for (int i = 1; i < 20; i++) {       long long ways = 0;       for (int j = 1; j < 16; j++) {         cnt[j]++;         ways += solve(i - 1);         cnt[j]--;       }       if (ways < k) {         k -= ways;       } else {         int l = i;         for (int i = 1; i <= l; i++) {           if (i == 1) {             for (int j = 1; j < 16; j++) {               cnt[j]++;               long long ways = solve(l - i);               if (ways < k) {                 k -= ways;                 cnt[j]--;               } else {                 if (j < 10)                   printf( %d , j);                 else                   printf( %c ,  a  + (j - 10));                 break;               }             }           } else {             for (int j = 0; j < 16; j++) {               if (cnt[j] == t) continue;               cnt[j]++;               long long ways = solve(l - i);               if (ways < k) {                 k -= ways;                 cnt[j]--;               } else {                 if (j < 10)                   printf( %d , j);                 else                   printf( %c ,  a  + (j - 10));                 break;               }             }           }         }         break;       }     }   }   