#include <bits/stdc++.h>
using namespace std;
const int inf = (int)(1e9 + 17);
const int mod = (int)(1e9 + 7);
int n, k;
string s;
int diff[501][501];
int dp[501][501];
string res = "";
void develop(int i, int j) {
  int tt = (j - i + 1);
  tt /= 2;
  for (int kk = 0; kk < tt; kk++) {
    if (s[i + kk] != s[j - kk]) s[i + kk] = s[j - kk];
  }
}
int recurse(int idx, int tot) {
  if (idx == n) {
    if (tot <= k) return 0;
    return inf;
  }
  int &ans = dp[idx][tot];
  if (ans != -1) return ans;
  ans = inf;
  for (int i = idx; i < n; i++) {
    ans = min(diff[idx][i] + recurse(i + 1, tot + 1), ans);
  }
  return ans;
}
void trace(int idx, int tot) {
  if (idx == n) return;
  int ans = recurse(idx, tot);
  for (int i = idx; i < n; i++) {
    if (ans == diff[idx][i] + recurse(i + 1, tot + 1)) {
      develop(idx, i);
      for (int it = idx; it <= i; it++) {
        res += s[it];
      }
      res += '+';
      trace(i + 1, tot + 1);
      return;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> s >> k;
  n = (int)s.length();
  memset(diff, 0, sizeof diff);
  memset(dp, -1, sizeof dp);
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int tt = (j - i + 1);
      tt /= 2;
      int ct = 0;
      for (int kk = 0; kk < tt; kk++) {
        if (s[i + kk] != s[j - kk]) ct++;
      }
      diff[i][j] = ct;
    }
  }
  int ans = recurse(0, 0);
  cout << ans << "\n";
  res = "";
  trace(0, 0);
  for (int i = 0; i < (int)res.length() - 1; i++) {
    cout << res[i];
  }
  return 0;
}
