#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
long long max(long long a, long long b) {
  if (a < b) return b;
  return a;
}
long long min(long long a, long long b) {
  if (a < b) return a;
  return b;
}
long long X[] = {-1, 1, 0, 0};
long long Y[] = {0, 0, -1, 1};
long long XX[] = {-1, 1, 0, 0, -1, 1, -1, 1};
long long YY[] = {0, 0, -1, 1, -1, 1, 1, -1};
long long HX[] = {1, -1, 2, -2, 1, -1, -2, 2};
long long HY[] = {2, -2, 1, -1, -2, 2, 1, -1};
long long fpow(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) {
      res = res * x % 1000000007;
    }
    x = x * x % 1000000007;
    n >>= 1;
  }
  return (res % 1000000007);
}
long long binomialCoeff(long long n, long long k) {
  long long C[n + 1][k + 1];
  long long i, j;
  for (i = 0; i <= n; i++) {
    for (j = 0; j <= min(i, k); j++) {
      if (j == 0 || j == i)
        C[i][j] = 1;
      else
        C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % 1000000007;
    }
  }
  return C[n][k];
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
void solve() {
  string s;
  cin >> s;
  int n;
  cin >> n;
  map<char, int> mx;
  for (char c : s) mx[c]++;
  if ((int)mx.size() > n) {
    cout << "-1"
         << "\n";
    return;
  }
  for (int it = 1;; it++) {
    int sum = 0;
    vector<pair<char, int>> list;
    for (auto p : mx) {
      int need_cnt = (p.second + it - 1) / it;
      sum += need_cnt;
      list.emplace_back(p.first, need_cnt);
    }
    if (sum > n) continue;
    string res;
    for (auto p : list) res += string(p.second, p.first);
    res += string(n - (int)res.length(), 'a');
    cout << it << "\n";
    cout << res << "\n";
    return;
  }
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
