#include <bits/stdc++.h>
using namespace std;
const int MAXN = 512;
const int INF = 0x7FFFFFFF;
const double eps = 1e-10;
const double pi = acos(-1.0);
string st;
int n, m;
int f[MAXN][MAXN], g[MAXN][MAXN], opt[MAXN][MAXN];
void init() {
  cin >> st;
  cin >> m;
}
string getPal(string st) {
  int i = 0, j = st.size() - 1;
  while (i < j) {
    st[i] = st[j];
    ++i;
    --j;
  }
  return st;
}
void print(int n, int m, int k) {
  if (k == 0) return;
  string ret = "";
  for (int i = m; i < n; i++) ret += st[i];
  print(m, opt[m][k - 1], k - 1);
  if (k > 1) cout << "+";
  cout << getPal(ret);
}
void solve() {
  n = st.size();
  memset(g, 60, sizeof(g));
  for (int i = 0; i < st.size(); i++) {
    g[i][i] = 0;
    if (i + 1 < st.size()) g[i][i + 1] = st[i] != st[i + 1];
  }
  for (int l = 1; l < n; l++)
    for (int i = 0; i + l < n; i++) {
      int j = i + l;
      g[i][j] = min(g[i][j], g[i + 1][j - 1] + (st[i] != st[j]));
    }
  if (g[0][n - 1] == 0) {
    cout << 0 << endl;
    cout << st << endl;
    return;
  }
  memset(f, 60, sizeof(f));
  f[0][0] = 0;
  for (int k = 1; k <= m; k++)
    for (int i = k; i <= n; i++)
      for (int j = i - 1; j >= 0; j--) {
        if (f[j][k - 1] + g[j][i - 1] < f[i][k]) {
          f[i][k] = f[j][k - 1] + g[j][i - 1];
          opt[i][k] = j;
        }
      }
  int ret = INF, pos;
  for (int i = 1; i <= m; i++)
    if (f[n][i] < ret) {
      pos = i;
      ret = f[n][i];
    }
  cout << ret << endl;
  print(n, opt[n][pos], pos);
  cout << endl;
}
int main() {
  init();
  solve();
  return 0;
}
