#include <bits/stdc++.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4")
using namespace std;
const int inf = (int)2e9 + 99999, mod = (int)1e9 + 7;
const long long linf = (long long)2e18 + 99999;
int kob(int x, int y) { return ((long long)x * y) % mod; }
int aza(int x, int y) {
  x -= y;
  if (x < 0) return x + mod;
  return x;
}
int kos(int x, int y) {
  x += y;
  if (x >= mod) return x - mod;
  return x;
}
const int maxn = (int)1e5 + 777, maxn2 = (int)1e6 + 55;
char res[500][500];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  string s;
  cin >> s;
  int ansA = -1, ansB = -1;
  for (int a = 1; a <= 5; ++a) {
    for (int b = 1; b <= 20; ++b) {
      if (a * b >= (int)s.size()) {
        ansA = a, ansB = b;
        break;
      }
    }
    if (ansA != -1) break;
  }
  cout << ansA << ' ' << ansB << '\n';
  int m = ansA * ansB - (int)s.size();
  for (int i = 1; i <= (m % ansA); ++i)
    for (int j = 1; j <= m / ansA + 1; ++j) res[i][j] = '*';
  for (int i = (m % ansA) + 1; i <= ansA; ++i)
    for (int j = 1; j <= m / ansA; ++j) res[i][j] = '*';
  int id = 0;
  for (int i = 1; i <= ansA; ++i)
    for (int j = 1; j <= ansB; ++j)
      if (res[i][j] != '*') res[i][j] = s[id++];
  for (int i = 1; i <= ansA; ++i) {
    for (int j = 1; j <= ansB; ++j) cout << res[i][j];
    cout << '\n';
  }
  return 0;
}
