#include <bits/stdc++.h>
using namespace std;
struct case1 {
  int l, r;
} d[100001];
string a;
int tot;
void down(int x) {
  while (x * 2 <= tot) {
    int y = x * 2;
    if (y < tot && a.substr(d[y + 1].l, d[y + 1].r - d[y + 1].l + 1) <
                       a.substr(d[y].l, d[y].r - d[y].l + 1))
      y++;
    if (a.substr(d[y].l, d[y].r - d[y].l + 1) <
        a.substr(d[x].l, d[x].r - d[x].l + 1)) {
      case1 t = d[x];
      d[x] = d[y];
      d[y] = t;
      x = y;
    } else
      break;
  }
}
int main() {
  int l, k;
  cin >> a >> k;
  tot = l = a.size();
  for (int i = 0; i < l; i++) d[i + 1] = (case1){i, i};
  for (int i = l / 2; i; i--) down(i);
  for (int i = 1; tot && i < k; i++)
    if (d[1].r < l - 1) {
      d[1].r++;
      down(1);
    } else {
      d[1] = d[tot--];
      down(1);
    }
  if (tot)
    cout << a.substr(d[1].l, d[1].r - d[1].l + 1) << endl;
  else
    cout << "No such line." << endl;
  return 0;
}
