#include <bits/stdc++.h>
using namespace std;
const int N = 5e2 + 5, inf = INT_MAX / 2;
short dp[N][N][N], cost[N][N];
string s;
short solve(short l, short r, short k) {
  if (r == s.size()) return cost[l][r - 1];
  if (k <= 0) return 501;
  if (dp[l][r][k] != -1) return dp[l][r][k];
  short o1 = solve(l, r + 1, k), o2 = solve(r + 1, r + 1, k - 1) + cost[l][r];
  return dp[l][r][k] = min(o1, o2);
}
vector<string> ans;
void build(short l, short r, short k) {
  if (r == s.size()) {
    ans.push_back(s.substr(l, r - l));
    return;
  }
  if (solve(l, r + 1, k) == dp[l][r][k])
    build(l, r + 1, k);
  else {
    ans.push_back(s.substr(l, r - l + 1));
    build(r + 1, r + 1, k - 1);
  }
}
void calc(int l, int r) {
  int ol = l, orgdn = r;
  while (r > l) {
    cost[ol][orgdn] += (s[l] != s[r]);
    r--;
    l++;
  }
}
void makePali(string &t) {
  int l = 0, r = t.size() - 1;
  while (r > l) t[l++] = t[r--];
}
int main() {
  int k;
  cin >> s >> k;
  memset(dp, -1, sizeof dp);
  for (int i = 0; i < s.size(); i++)
    for (int j = i + 1; j < s.size(); j++) calc(i, j);
  cout << solve(0, 0, k) << endl;
  build(0, 0, k);
  for (auto &it : ans) makePali(it);
  cout << ans[0];
  for (int i = 1; i < ans.size(); i++) cout << '+' << ans[i];
  return 0;
}
