#include using namespace std; int main() { int n, w; cin >> n >> w; vector a(n); for (string &s: a) cin >> s; vector dp(n+1), go(n+1); auto solve = [&](int h) { for (int i = n-1; i >= 0; i--) { int m = 0; dp[i] = INT_MAX; for (int j = i; j < min(i+h,n); j++) { m = max(m, int(size(a[j]))+1); if (m+dp[j+1] < dp[i]) { dp[i] = m+dp[j+1], go[i] = j+1; } } } return dp[0] <= w+1; }; int h = 0; for (int k = n; k > 0; k /= 2) { while (!solve(h+k)) h += k; } solve(++h); vector b(h, string(w,' ')); vector c; int k = 0; for (int i = 0; i < n; i = go[i]) { int m = 0; for (int j = i; j < go[i]; j++) { m = max(m, int(size(a[j]))+1); copy(begin(a[j]), end(a[j]), begin(b[j-i])+k); } k += m; c.push_back(m-1); } cout << h << " " << size(c) << endl; for (int k: c) cout << k << " "; cout << endl; for (string s: b) cout << s << endl; }