#include <bits/stdc++.h>
using namespace std;
int getint() {
  int a;
  scanf("%d", &a);
  return a;
}
double getdouble() {
  double a;
  scanf("%lf", &a);
  return a;
}
char sbuf[100005];
string getstring() {
  scanf("%s", sbuf);
  return sbuf;
}
long long getlong() {
  long long a;
  scanf("%lld", &a);
  return a;
}
template <class T>
void out(T a, T b) {
  bool first = true;
  for (T i = a; i != b; ++i) {
    if (!first) printf(" ");
    first = false;
    cout << *i;
  }
  printf("\n");
}
template <class T>
void outl(T a, T b) {
  for (T i = a; i != b; ++i) {
    cout << *i << "\n";
  }
}
int n, m;
vector<int> a[26];
bool cond(pair<char, vector<int> > a, pair<char, vector<int> > b) {
  if (a.second.size() < b.second.size())
    return true;
  else
    return false;
}
int main() {
  string s = getstring();
  for (int i = 0; i < s.size(); i++) a[s[i] - 'a'].push_back(i);
  int k = getint();
  vector<pair<char, vector<int> > > v;
  for (int i = 0; i < 26; i++) {
    if (a[i].size() != 0) v.push_back(make_pair(i + 'a', a[i]));
  }
  if (k > s.size()) {
    printf("0");
    return 0;
  }
  sort((v).begin(), (v).end(), cond);
  while (k > 0) {
    if (v.empty())
      break;
    else if (k >= v[0].second.size()) {
      k -= v[0].second.size();
      v.erase(v.begin());
    } else if (k < v[0].second.size()) {
      for (int i = 0; i < k; i++) v[0].second.pop_back();
      k = 0;
    }
  }
  printf("%d\n", v.size());
  vector<bool> mark(s.size());
  for (int i = 0; i < v.size(); i++) {
    for (int j = 0; j < v[i].second.size(); j++) {
      mark[v[i].second[j]] = true;
    }
  }
  for (int i = 0; i < mark.size(); i++) {
    if (mark[i]) printf("%c", s[i]);
  }
  return 0;
}
