#include <bits/stdc++.h>
using namespace std;
const int N = 505;
const int INF = 0x3f3f3f3f;
int n;
int k;
char S[N];
int dp[N][N];
int f[N][N];
int reco[N][N];
char ANS[N];
vector<char> V;
vector<pair<int, int> > AA;
int STAVI[N];
inline void load() {
  scanf("%s", S + 1);
  n = strlen(S + 1);
  scanf("%d", &k);
}
void rek(int a, int b) {
  if (a == b) {
    ANS[a] = S[a];
    return;
  }
  if (a + 1 == b) {
    ANS[a] = ANS[b] = S[a];
    return;
  }
  ANS[a] = ANS[b] = S[a];
  rek(a + 1, b - 1);
}
inline void solve() {
  for (int i = 1; i <= n - 1; i++)
    if (S[i] != S[i + 1]) dp[i][i + 1] = 1;
  for (int i = 2; i < n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i + j > n) break;
      dp[j][i + j] = dp[j + 1][i + j - 1] + (S[j] != S[i + j]);
    }
  }
  memset(f, INF, sizeof(f));
  memset(reco, -1, sizeof(reco));
  f[0][0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= k; j++) {
      int &ret = f[i][j];
      for (int z = i; z >= 1; z--) {
        int ans = f[z - 1][j - 1] + dp[z][i];
        if (ans < ret) {
          ret = ans;
          reco[i][j] = z;
        }
      }
    }
  }
  int sol = (1 << 30);
  int who = -1;
  for (int i = 1; i <= k; i++) {
    int mom = f[n][i];
    if (mom < sol) {
      sol = mom;
      who = i;
    }
  }
  printf("%d\n", sol);
  int pos = n, how = who;
  while (pos != -1 && how != 0) {
    int dokle = reco[pos][how];
    AA.push_back(make_pair(dokle, pos));
    for (int i = pos; i >= dokle; i--) V.push_back(S[i]);
    pos = reco[pos][how] - 1;
    if (pos != 0) V.push_back('+');
    how--;
  }
  for (int i = 0; i < AA.size(); i++) {
    rek(AA[i].first, AA[i].second);
    STAVI[AA[i].second + 1] = 1;
  }
  for (int i = 1; i <= n; i++) {
    if (STAVI[i]) printf("+");
    printf("%c", ANS[i]);
  }
  printf("\n");
}
int main(void) {
  load();
  solve();
  return 0;
}
