#include <bits/stdc++.h>
using namespace std;
const int oo = 10000000;
using namespace std;
string str;
int m, mem[501][501], need[501][501];
int dp(int idx, int k) {
  if (idx == (int)str.size()) return 0;
  if (k <= 0) return oo;
  int& ret = mem[idx][k];
  if (ret != -1) return ret;
  ret = oo;
  for (int i = 0; i < (int)str.size() - idx; i++)
    ret = min(ret, need[idx][idx + i] + dp(idx + i + 1, k - 1));
  return ret;
}
void print(int i, int j) {
  if (i) cout << '+';
  cout << str.substr(i, (j - i + 2) >> 1);
  string s = str.substr(i, (j - i + 1) >> 1);
  reverse(s.begin(), s.end());
  cout << s;
}
void trace(int idx, int k) {
  if (idx == (int)str.size()) return;
  int& ans = mem[idx][k];
  for (int i = 0; i < (int)str.size() - idx; i++)
    if (ans == need[idx][idx + i] + dp(idx + i + 1, k - 1)) {
      print(idx, idx + i);
      return trace(idx + i + 1, k - 1);
    }
}
int main() {
  cin >> str >> m;
  memset(mem, -1, sizeof mem);
  for (int i = 0; i < (int)str.size(); i++) {
    int r = 0;
    for (int j = i, k = i; j >= 0 && k < (int)str.size(); j--, k++) {
      r += (str[j] != str[k]);
      need[j][k] = r;
    }
    r = 0;
    for (int j = i, k = i + 1; j >= 0 && k < (int)str.size(); j--, k++) {
      r += (str[j] != str[k]);
      need[j][k] = r;
    }
  }
  cout << dp(0, m) << endl;
  trace(0, m);
  return 0;
}
