#include <bits/stdc++.h>
using namespace std;
int dp[1000][1000], size, K;
string str;
int get_max[1000][1000], get_pos[1000][1000];
void go() {
  for (int k = 0; k < K; k++) {
    for (int len = k; len < size; len++) {
      if (k == 0) {
        get_max[len][k] = dp[0][len];
        get_pos[len][k] = 0;
      } else {
        int mini = 1000, x;
        for (int l = k - 1; l < len; l++) {
          int min = get_max[l][k - 1] + dp[l + 1][len];
          if (mini > min) {
            mini = min;
            x = l;
          }
        }
        get_max[len][k] = mini;
        get_pos[len][k] = x;
      }
    }
  }
}
int main() {
  cin >> str >> K;
  size = str.size();
  for (int j = 0; j < size; j++) {
    for (int i = j; i >= 0; i--) {
      if (i == j)
        dp[i][j] = 0;
      else if (str[i] == str[j])
        dp[i][j] = dp[i + 1][j - 1];
      else
        dp[i][j] = 1 + dp[i + 1][j - 1];
    }
  }
  go();
  int mini = 1000, i, p;
  for (int i = 0; i < K; i++) {
    if (mini > get_max[size - 1][i]) {
      mini = get_max[size - 1][i];
      p = i;
    }
  }
  K = p + 1;
  vector<pair<int, int> > pos;
  int pre = size - 1, val = size - 1;
  for (int i = K - 1; i >= 0; i--) {
    val = get_pos[val][i];
    int first = 0;
    if (i != 0) first = min(val + 1, pre);
    pos.push_back(make_pair(first, pre));
    pre = val;
  }
  reverse(pos.begin(), pos.end());
  vector<string> vecc;
  for (int i = 0; i < pos.size(); i++) {
    if (pos[i].first == pos[i].second) {
      string s = "";
      s += str[pos[i].first];
      vecc.push_back(s);
    } else {
      string s = "";
      for (int k = pos[i].first; k <= pos[i].second; k++) s += str[k];
      int len = s.size();
      for (int k = 0; k < len / 2; k++) {
        if ((char)s[k] != (char)s[len - 1 - k]) {
          s[len - 1 - k] = s[k];
        }
      }
      vecc.push_back(s);
    }
  }
  cout << get_max[size - 1][K - 1] << endl;
  cout << vecc[0];
  for (int i = 1; i < vecc.size(); i++) {
    cout << '+' << vecc[i];
  }
  return 0;
}
