#include <bits/stdc++.h>
using namespace std;
const int N = 501;
string s;
int n, k;
vector<string> javab;
pair<int, string> change[N][N];
pair<int, int> res[N][N];
void changer(int left, int right) {
  change[left][right].second = "";
  int sum = (left + right);
  for (int i = left; i <= (sum / 2); i++) {
    if (s[i] != s[sum - i]) {
      change[left][right].second += s[sum - i];
      change[left][right].first++;
    } else {
      change[left][right].second += s[i];
    }
  }
  for (int i = sum / 2 + 1; i <= right; i++) {
    change[left][right].second += s[i];
  }
}
void resmaker() {
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= k; j++) {
      res[i][j] = make_pair((int)INFINITY, -1);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= k; j++) {
      if (i == 0) {
        res[0][j] = make_pair(0, 0);
      } else if (j == 1) {
        res[i][1] = make_pair(change[0][i].first, 0);
      } else {
        if (change[0][i].first < res[i][j].first) {
          res[i][j] = make_pair(change[0][i].first, 0);
        }
        for (int u = 1; u <= i; u++) {
          if (change[u][i].first + res[u - 1][j - 1].first < res[i][j].first) {
            res[i][j] =
                make_pair(change[u][i].first + res[u - 1][j - 1].first, u);
          }
        }
      }
    }
  }
}
void javabmaker(int right, int level) {
  if (level == 1) {
    javab.push_back(change[0][right].second);
  } else {
    int flag = res[right][level].second;
    javab.push_back(change[flag][right].second);
    if (flag > 0) javabmaker(flag - 1, level - 1);
  }
}
int main() {
  cin >> s >> k;
  n = s.size();
  for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
      changer(i, j);
    }
  }
  resmaker();
  javabmaker(n - 1, k);
  cout << res[n - 1][k].first << endl;
  for (int i = javab.size() - 1; i > 0; i--) {
    cout << javab[i] << '+';
  }
  cout << javab[0];
}
