#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long tt, i, j, k, n, m, x, y, ans;
  tt = 1;
  while (tt--) {
    string s;
    cin >> s >> k;
    n = s.size();
    vector<vector<long long> > cnt(n + 3, vector<long long>(n + 3)),
        z(n + 3, vector<long long>(n + 3, 1000100100));
    vector<vector<pair<long long, long long> > > par(
        n + 3, vector<pair<long long, long long> >(n + 3, {-1, -1}));
    for (long long p = 1; p < n + 1; p++) {
      for (long long q = p; q < n + 1; q++) {
        long long l = p - 1, r = q - 1, cmt = 0;
        while (l < r) {
          if (s[l] != s[r]) cmt++;
          l++, r--;
        }
        cnt[p][q] = cmt;
      }
    }
    z[0][0] = 0;
    z[1][1] = 0;
    par[1][1] = {0, 0};
    for (long long p = 2; p < n + 1; p++) {
      for (long long q = 1; q < p + 1; q++) {
        for (long long len = 1; len <= p; len++) {
          if ((cnt[p - len + 1][p] + z[p - len][q - 1]) < z[p][q]) {
            z[p][q] = (cnt[p - len + 1][p] + z[p - len][q - 1]);
            par[p][q] = {p - len, q - 1};
          }
        }
      }
    }
    ans = 1;
    for (long long p = 1; p < k + 1; p++) {
      if (z[n][p] < z[n][ans]) ans = p;
    }
    pair<long long, long long> curr = {n, ans};
    string res = "";
    while (1) {
      auto prev = par[curr.first][curr.second];
      string temp = s.substr(prev.first, curr.first - prev.first);
      long long l = 0, r = temp.size() - 1;
      while (l < r) {
        if (temp[l] != temp[r]) temp[r] = temp[l];
        l++;
        r--;
      }
      res = "+" + res;
      res = temp + res;
      if (prev.first == 0) break;
      curr = prev;
    }
    res.pop_back();
    cout << z[n][ans] << "\n" << res;
  }
  return 0;
}
