#include <bits/stdc++.h>
using namespace std;
typedef char* cstr;
const int oo = (~0u) >> 1;
const long long int ool = (~0ull) >> 1;
const double inf = 1e100;
const double eps = 1e-8;
const double pi = acos(-1.0);
template <typename type>
inline void cmax(type& a, const type& b) {
  if (a < b) a = b;
}
template <typename type>
inline void cmin(type& a, const type& b) {
  if (a > b) a = b;
}
int f[500 + 2][500 + 2];
int cost[500 + 2][500 + 2];
int pre[500 + 2][500 + 2];
int qt;
int q[500 + 2];
int main() {
  string s;
  int k;
  cin >> s >> k;
  for (int i = 0; i < ((int)(s).length()); i++)
    for (int j = i; j < ((int)(s).length()); j++) {
      for (int t = 0; i + t <= j - t; t++)
        if (s[i + t] != s[j - t]) cost[i][j]++;
    }
  for (int i = 0; i < ((int)(s).length()); i++) {
    pre[0][i] = -1;
    f[0][i] = oo;
  }
  for (int i = 1; i <= k; i++) {
    for (int j = 0; j < ((int)(s).length()); j++) {
      f[i][j] = cost[0][j];
      pre[i][j] = -1;
      for (int k = 0; k <= j; k++)
        if (f[i - 1][k] != oo && f[i - 1][k] + cost[k + 1][j] < f[i][j])
          f[i][j] = f[i - 1][k] + cost[k + 1][j], pre[i][j] = k;
    }
  }
  cout << f[k][s.length() - 1] << endl;
  int i = k, j = s.length() - 1;
  q[qt++] = s.length() - 1;
  while (i >= 0 && pre[i][j] != -1) {
    if (pre[i][j] != q[qt - 1]) q[qt++] = pre[i][j];
    j = pre[i][j];
    i--;
  }
  q[qt] = -1;
  for (int i = qt; i > 0; i--) {
    for (int j = q[i] + 1; j <= q[i - 1]; j++) {
      if (j - (q[i] + 1) <= q[i - 1] - j) s[q[i] + q[i - 1] + 1 - j] = s[j];
      cout << s[j];
    }
    cout << char(i == 1 ? '\n' : '+');
  }
  return 0;
}
