#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const double EPS = 1e-10;
inline double SQR(double x) { return x * x; }
inline long long SQR(long long x) { return x * x; }
inline int SQR(int x) { return x * x; }
inline double SQR3(double x) { return x * x * x; }
inline void DEBUG() { puts("jackie"); }
inline bool zero(double x) { return abs(x) < EPS; }
inline int inInt() {
  int x = 0, c;
  while ((unsigned int)((c = getchar()) - '0') >= 10) {
    if ('-' == c) return -inInt();
  }
  do {
    x = (x << 3) + (x << 1) + (c - '0');
  } while ((unsigned int)((c = getchar()) - '0') < 10);
  return x;
}
inline void outInt(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x >= 10) outInt(x / 10);
  putchar((x % 10) + '0');
}
const int MAXN = 600;
int cost[MAXN][MAXN];
char str[MAXN];
int dp[MAXN][MAXN];
int N, K;
const int nMax = 1000000;
int DP(int s, int k) {
  if (s >= N) return 0;
  if (k <= 0) return nMax;
  if (-1 != dp[s][k]) return dp[s][k];
  int ans = INF;
  for (int i = s + 1; i <= N; i++) {
    ans = min(ans, cost[s][i - 1] + DP(i, k - 1));
  }
  dp[s][k] = ans;
  return dp[s][k];
}
void print(int s, int t) {
  int x = s, y = t;
  while (x < y) {
    str[y] = str[x];
    x++, y--;
  }
  for (int i = s; i <= t; i++) putchar(str[i]);
}
int main() {
  scanf("%s", str);
  scanf("%d", &K);
  N = strlen(str);
  for (int i = 0; i < N; i++) {
    for (int j = i; j < N; j++) {
      int s = i, t = j;
      int a = 0;
      while (s < t) {
        if (str[s] != str[t]) a++;
        s++, t--;
      }
      cost[i][j] = a;
    }
  }
  memset(dp, -1, sizeof(dp));
  int ans = DP(0, K);
  printf("%d\n", ans);
  int idx = 0;
  int k = K;
  while (idx < N) {
    for (int j = idx + 1; j <= N; j++) {
      if (DP(idx, k) == cost[idx][j - 1] + DP(j, k - 1)) {
        print(idx, j - 1);
        if (j != N) putchar('+');
        idx = j;
        k--;
        break;
      }
    }
  }
  puts("");
  return 0;
}
