#include <bits/stdc++.h>
using namespace std;
const int maxn = 2;
int root, L;
int End[5500000];
int nxt[5500000][3];
char ans[5500000];
int p = 0;
int newnode() {
  for (int i = 0; i < maxn; i++) nxt[L][i] = -1;
  End[L++] = 0;
  return L - 1;
}
void init() {
  L = 0;
  root = newnode();
}
int idx(char x) { return x - 'a'; }
char s[5500];
char buf[5500];
int dp[5500][5500];
int k;
void dfs(int u) {
  if (k <= 0) return;
  k -= End[u];
  if (k <= 0) {
    ans[p] = '\0';
    cout << ans << endl;
    return;
  }
  for (int i = 0; i < 2; i++) {
    int v = nxt[u][i];
    if (v == -1)
      continue;
    else {
      ans[p++] = 'a' + i;
      dfs(v);
      p--;
    }
  }
}
int main() {
  init();
  scanf("%s%d", &s, &k);
  int len = strlen(s);
  for (int i = len - 1; i >= 0; i--)
    for (int j = i; j < len; j++) {
      if (j - i <= 4 && s[i] == s[j])
        dp[i][j] = 1;
      else if (dp[i + 2][j - 2] && i + 2 <= j - 2 && s[i] == s[j])
        dp[i][j] = 1;
    }
  for (int i = 0; i < len; i++) {
    int now = root;
    int st = i;
    for (int j = i; j < len; j++) {
      if (dp[i][j]) {
        for (; st <= j; st++) {
          if (nxt[now][idx(s[st])] == -1) nxt[now][idx(s[st])] = newnode();
          now = nxt[now][idx(s[st])];
        }
        End[now]++;
      }
    }
  }
  dfs(root);
  return 0;
}
