#include <bits/stdc++.h>
using namespace std;
long long dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
long long ddx[8] = {1, 1, 0, -1, -1, -1, 0, 1},
          ddy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
long long gcd(long long a, long long b) {
  if (!a) return b;
  return gcd(b % a, a);
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
unordered_map<char, long long> mp;
string s;
long long n;
bool fun(long long x) {
  long long cnt = 0;
  for (auto it : mp) {
    long long val = it.second;
    cnt += it.second / x;
    if (it.second % x != 0) {
      cnt++;
    }
  }
  if (cnt <= n)
    return true;
  else
    return false;
}
void test_case() {
  cin >> s;
  cin >> n;
  for (auto it : s) {
    mp[it]++;
  }
  if (mp.size() > n) {
    cout << -1 << "\n";
    return;
  }
  long long l, r;
  l = 1;
  r = 1000;
  long long ans = 1000;
  while (l <= r) {
    long long mid = l + (r - l) / 2;
    if (fun(mid)) {
      ans = min(ans, mid);
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  cout << ans << "\n";
  string st = "";
  for (auto it : mp) {
    long long val = it.second;
    long long cnt = 0;
    cnt = it.second / ans;
    if (it.second % ans != 0) {
      cnt++;
    }
    while (cnt--) {
      st += it.first;
    }
  }
  while (st.size() != n) {
    st += "a";
  }
  cout << st << "\n";
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(20);
  long long t = 1;
  while (t--) {
    test_case();
  }
}
