#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, 1e8), len(n+1), pred(n+1); int r = 1; dp[0] = -1; for (; r <= n; r++) { for (int i = r; i <= n; i++) { len[i] = max(len[i], int(a[i-r].size())); int cur = dp[i-r] + len[i] + 1; if (cur < dp[i]) dp[i] = cur, pred[i] = i-r; } if (dp[n] <= W) break; } vector v = {n}; for (int i = n; i > 0; i = pred[i]) v.push_back(pred[i]); reverse(begin(v), end(v)); int c = int(v.size()) - 1; vector res(r, string(dp[n],' ')); cout << r << " " << c << endl; int y = 0; for (int k = 0; k < c; k++) { int ny = y; for (int i = v[k]; i < v[k+1]; i++) { ny = max(ny, y + int(a[i].size()) + 1); copy(begin(a[i]), end(a[i]), begin(res[i-v[k]]) + y); } cout << ny-y-1 << " \n"[k+1==c]; y = ny; } for (string s: res) cout << s << endl; }