#include <bits/stdc++.h>
using namespace std;
struct comp {
  bool operator()(const int& lhs, const int& rhs) const { return lhs > rhs; }
};
struct comps {
  bool operator()(const string& lhs, const string& rhs) const {
    return lhs > rhs;
  }
};
bool f(pair<int, int> a, pair<int, int> b) { return a.first < b.first; }
int main() {
  char a[500];
  int d[501][501];
  int b[501][501];
  vector<int> v;
  vector<char> c[500];
  int k, n;
  scanf("%s", a);
  scanf("%d", &k);
  n = strlen(a);
  for (int i = 0; i < n; i++) {
    d[i][i] = 0;
    d[i][i + 1] = (a[i] == a[i + 1]) ? 0 : 1;
  }
  for (int i = n - 1; i >= 0; i--)
    for (int j = i + 2; j < n; j++)
      d[i][j] = (a[i] == a[j]) ? d[i + 1][j - 1] : d[i + 1][j - 1] + 1;
  for (int i = 0; i < n; i++) b[1][i] = d[0][i];
  for (int i = 0; i <= k; i++)
    for (int j = 0; j < i - 1; j++) b[i][j] = 100000;
  for (int kk = 2; kk <= k; kk++)
    for (int nn = 1; nn < n; nn++) {
      int min = 100000;
      for (int i = 1; i <= nn; i++)
        if (b[kk - 1][i - 1] + d[i][nn] < min) {
          min = b[kk - 1][i - 1] + d[i][nn];
        }
      b[kk][nn] = min;
    }
  int min = 100000;
  int mink;
  for (int i = 1; i <= k; i++)
    if (b[i][n - 1] < min) {
      min = b[i][n - 1];
      mink = i;
    }
  int end = n - 1;
  int minn = min;
  while (mink > 1) {
    for (int i = 0; i < end; i++) {
      if (b[mink - 1][i] + d[i + 1][end] == minn) {
        mink--;
        v.push_back(i);
        minn -= d[i + 1][end];
        end = i;
        break;
      }
    }
  }
  cout << min << endl;
  int r = 0;
  int x = 0;
  v.push_back(100000);
  sort(v.begin(), v.end());
  for (int i = 0; i < n; i++) {
    c[x].push_back(a[i]);
    if (i == v[r]) {
      r++;
      x++;
    }
  }
  for (int i = 0; i <= x; i++) {
    for (unsigned int j = 0; j < c[i].size() / 2; j++) cout << c[i][j];
    if (c[i].size() % 2 == 1) cout << c[i][c[i].size() / 2];
    for (int j = (c[i].size() / 2) - 1; j >= 0; j--) cout << c[i][j];
    if (i != x) cout << "+";
  }
  return 0;
}
