#include #include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() char strnum_to_char(string str) { return (char)((stoi(str) - 1) + 'a'); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, k; cin >> n >> k; string t; cin >> t; if (n == 1) { cout << strnum_to_char(t) << endl; return 0; } if (n == 2) { string ans = ""; if (k == 1) { ans += strnum_to_char(t.substr(0, 1)); ans += strnum_to_char(t.substr(1, 1)); } else ans += strnum_to_char(t.substr(0, 2)); cout << ans << endl; return 0; } vector> patterns(n, vector(2, 0)); for (ll i = n - 1; i >= 0; i--) { if (i == n - 1) { if (t[i] != '0') patterns[i][0] = 1; continue; } char c = t[i]; if (c != '0') { patterns[i][0] = patterns[i + 1][0] + patterns[i + 1][1]; } if (c == '1' || (c == '2' && t[i + 1] <= '6')) { if (i + 2 < n) patterns[i][1] = patterns[i + 2][0] + patterns[i + 2][1]; else patterns[i][1] = 1; } patterns[i][0] = min(patterns[i][0], ll_max / 10); patterns[i][1] = min(patterns[i][1], ll_max / 10); } string ans = ""; ll rest = k; rest--; for (ll i = 0; i < n;) { if (rest >= patterns[i][0]) { rest -= patterns[i][0]; ans += strnum_to_char(t.substr(i, 2)); i += 2; } else { ans += strnum_to_char(t.substr(i, 1)); i += 1; } } cout << ans << endl; return 0; }