#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return b / gcd(a, b) * a; }
const int N = 1e3 + 2;
char dp[5000][5000];
string x;
int n, k;
char calc(int i, int j) {
  if (j < i) return 1;
  if (dp[i][j] != -1) return dp[i][j];
  return dp[i][j] = (x[i] == x[j] && calc(i + 2, j - 2));
}
vector<pair<int, int> > v;
vector<int> e;
vector<int> cnt;
void add(int st) {
  int cur = 0;
  for (int j = st; j < n; ++j) {
    int a;
    if (x[j] == 'a')
      a = v[cur].first;
    else
      a = v[cur].second;
    if (a == -1) {
      if (x[j] == 'a')
        v[cur].first = v.size();
      else
        v[cur].second = v.size();
      v.push_back(make_pair(-1, -1));
      e.push_back(0);
      cnt.push_back(0);
    }
    if (x[j] == 'a')
      cur = v[cur].first;
    else
      cur = v[cur].second;
    if (calc(st, j)) e[cur]++;
  }
}
int build(int cur) {
  if (cur == -1) return 0;
  int s = build(v[cur].first);
  s += build(v[cur].second);
  return cnt[cur] = s + e[cur];
}
string sol;
void find(int src, int k) {
  if (e[src] >= k) {
    cout << sol << endl;
    exit(0);
  }
  k -= e[src];
  if (v[src].first != -1) {
    if (cnt[v[src].first] < k)
      k -= cnt[v[src].first];
    else {
      sol += "a";
      find(v[src].first, k);
    }
  }
  sol += "b";
  find(v[src].second, k);
}
int main() {
  cin >> x >> k;
  n = x.size();
  memset(dp, -1, sizeof(dp));
  v.push_back(make_pair(-1, -1));
  e.push_back(0);
  cnt.push_back(0);
  for (int i = 0; i < n; ++i) add(i);
  build(0);
  find(0, k);
}
