#include <iostream>
#include <cstring>
using namespace std;
const int LINE_CHARS_MAX = 20;
void wordInLine(int &isWordInLineParam, int iParam,
char lineParam[LINE_CHARS_MAX + 1],
char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
int wordLengthParam, int &lineWordsNoParam) {
isWordInLineParam = 1;
if (iParam == 1) {
strcat(lineParam, wordParam);
} else {
strcat(lineParam,"*");
++lineLengthParam;
strcat(lineParam, wordParam);
}
lineLengthParam += wordLengthParam;
++lineWordsNoParam;
}
void wordBuild(int &lineLastPosParam, int currentPosParam,
char lineBuilderParam[LINE_CHARS_MAX + 1], int &jParam,
char lineParam1[LINE_CHARS_MAX + 1]) {
for (int k = lineLastPosParam + 1; k < currentPosParam; ++k) {
lineBuilderParam[++jParam] = lineParam1[k];
lineLastPosParam = k + 1;
}
}
void spacesLeftBuild(int currentPosParam, int interspacesNoParam,
char lineBuilderParam[LINE_CHARS_MAX + 1],
int &jParam, int &spacesLeftNoParam) {
for (int k = currentPosParam; k < currentPosParam + interspacesNoParam; ++k) {
lineBuilderParam[++jParam] = '*';
}
if (spacesLeftNoParam > 0) {
lineBuilderParam[++jParam] = '*';
--spacesLeftNoParam;
}
}
void lastWordBuild(int lineLastPosParam, int lineLengthParam1,
char lineBuilderParam[LINE_CHARS_MAX + 1], int &jParam,
char lineParam1[LINE_CHARS_MAX + 1]) {
for (int k = lineLastPosParam + 1; k <= lineLengthParam1; ++k) {
lineBuilderParam[++jParam] = lineParam1[k];
}
}
void ShowCompletedLine(char lineParam1[LINE_CHARS_MAX + 1],
char lineBuilderParam[LINE_CHARS_MAX + 1]) {
strcpy(lineParam1, lineBuilderParam);
cout << lineParam1;
}
void firstWordInANewLine(int &isWordInLineParam1, int &lineNoParam1,
int &versLinesNoParam1,
char lineParam1[LINE_CHARS_MAX + 1],
char wordParam1[LINE_CHARS_MAX + 1],
int &lineWordsNoParam1, int &lineLengthParam1,
int &lineLastPosParam, int &iParam1,
int &wordsNoParam1) {
if (isWordInLineParam1 == 0) {
if (lineNoParam1 == versLinesNoParam1) {
cout << "\n";
lineNoParam1 = 0;
}
++lineNoParam1;
strcpy(lineParam1, wordParam1);
lineWordsNoParam1 = 1;
lineLengthParam1 = strlen(lineParam1);
lineLastPosParam = -1;
cout << "\n";
if (iParam1 == wordsNoParam1) {
cout << lineParam1;
}
}
}
void linesFinish(int &isWordInLineParam, int &iParam,
char lineParam[LINE_CHARS_MAX + 1],
char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
int &lineWordsNoParam, int &versColumnsNoParam,
int &lineNoParam, int &versLinesNoParam, int &wordsNoParam) {
int interspacesNo = 0, spacesLeftNo = 0;
if (lineWordsNoParam > 1) {
interspacesNo = (versColumnsNoParam - lineLengthParam +
lineWordsNoParam - 1) / (lineWordsNoParam - 1);
spacesLeftNo = (versColumnsNoParam - lineLengthParam +
lineWordsNoParam - 1) % (lineWordsNoParam - 1);
}
char *p = strchr(lineParam, '*') , lineBuilder[LINE_CHARS_MAX + 1];
int lineLastPos = -1, j = -1;
lineBuilder[0] = '\0';
while (p) {
int currentPos = p - lineParam;
wordBuild(lineLastPos, currentPos, lineBuilder, j, lineParam);
spacesLeftBuild(currentPos, interspacesNo, lineBuilder, j,
spacesLeftNo);
p = strchr(p + 1, '*');
}
lastWordBuild(lineLastPos, lineLengthParam, lineBuilder, j, lineParam);
ShowCompletedLine(lineParam, lineBuilder);
firstWordInANewLine(isWordInLineParam, lineNoParam, versLinesNoParam,
lineParam, wordParam, lineWordsNoParam, lineLengthParam,
lineLastPos, iParam, wordsNoParam);
}
int main() {
int wordsNo, versLinesNo, versColumnsNo;
cin >> wordsNo >> versLinesNo >> versColumnsNo;
char word[LINE_CHARS_MAX + 1];
char line[LINE_CHARS_MAX + 1];
line[0] = '\0';
int lineWordsNo = 0, lineNo = 1;
for (int i = 1; i <= wordsNo; ++i) {
cin >> word;
int wordLength = strlen(word), lineLength = strlen(line);
int isWordInLine = 0;
if (lineLength + wordLength < versColumnsNo) {
wordInLine(isWordInLine, i, line, word, lineLength, wordLength,
lineWordsNo);
}
if (i == wordsNo || (i < wordsNo && isWordInLine == 0)) {
linesFinish(isWordInLine, i, line, word, lineLength, lineWordsNo,
versColumnsNo, lineNo, versLinesNo, wordsNo);
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBMSU5FX0NIQVJTX01BWCA9IDIwOwoKdm9pZCB3b3JkSW5MaW5lKGludCAmaXNXb3JkSW5MaW5lUGFyYW0sIGludCBpUGFyYW0sIAogICAgICAgICAgICAgICAgY2hhciBsaW5lUGFyYW1bTElORV9DSEFSU19NQVggKyAxXSwgCiAgICAgICAgICAgICAgICBjaGFyIHdvcmRQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCBpbnQgJmxpbmVMZW5ndGhQYXJhbSwgCiAgICAgICAgICAgICAgICBpbnQgd29yZExlbmd0aFBhcmFtLCBpbnQgJmxpbmVXb3Jkc05vUGFyYW0pIHsKICAgIGlzV29yZEluTGluZVBhcmFtID0gMTsKICAgIGlmIChpUGFyYW0gPT0gMSkgewogICAgICAgIHN0cmNhdChsaW5lUGFyYW0sIHdvcmRQYXJhbSk7CiAgICB9IGVsc2UgewogICAgICAgIHN0cmNhdChsaW5lUGFyYW0sIioiKTsKICAgICAgICArK2xpbmVMZW5ndGhQYXJhbTsKICAgICAgICBzdHJjYXQobGluZVBhcmFtLCB3b3JkUGFyYW0pOwogICAgfQogICAgbGluZUxlbmd0aFBhcmFtICs9IHdvcmRMZW5ndGhQYXJhbTsKICAgICsrbGluZVdvcmRzTm9QYXJhbTsKfQoKdm9pZCB3b3JkQnVpbGQoaW50ICZsaW5lTGFzdFBvc1BhcmFtLCBpbnQgY3VycmVudFBvc1BhcmFtLCAKICAgIGNoYXIgbGluZUJ1aWxkZXJQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCBpbnQgJmpQYXJhbSwgCiAgICBjaGFyIGxpbmVQYXJhbTFbTElORV9DSEFSU19NQVggKyAxXSkgewogICAgZm9yIChpbnQgayA9IGxpbmVMYXN0UG9zUGFyYW0gKyAxOyBrIDwgY3VycmVudFBvc1BhcmFtOyArK2spIHsKICAgICAgICBsaW5lQnVpbGRlclBhcmFtWysralBhcmFtXSA9IGxpbmVQYXJhbTFba107CiAgICAgICAgbGluZUxhc3RQb3NQYXJhbSA9IGsgKyAxOwogICAgfQp9Cgp2b2lkIHNwYWNlc0xlZnRCdWlsZChpbnQgY3VycmVudFBvc1BhcmFtLCBpbnQgaW50ZXJzcGFjZXNOb1BhcmFtLCAKICAgICAgICAgICAgICAgICAgICBjaGFyIGxpbmVCdWlsZGVyUGFyYW1bTElORV9DSEFSU19NQVggKyAxXSwgCiAgICAgICAgICAgICAgICAgICAgaW50ICZqUGFyYW0sIGludCAmc3BhY2VzTGVmdE5vUGFyYW0pIHsKICAgIGZvciAoaW50IGsgPSBjdXJyZW50UG9zUGFyYW07IGsgPCBjdXJyZW50UG9zUGFyYW0gKyBpbnRlcnNwYWNlc05vUGFyYW07ICsraykgewogICAgICAgIGxpbmVCdWlsZGVyUGFyYW1bKytqUGFyYW1dID0gJyonOwogICAgfQogICAgaWYgKHNwYWNlc0xlZnROb1BhcmFtID4gMCkgewogICAgICAgIGxpbmVCdWlsZGVyUGFyYW1bKytqUGFyYW1dID0gJyonOwogICAgICAgIC0tc3BhY2VzTGVmdE5vUGFyYW07CiAgICB9Cn0KCnZvaWQgbGFzdFdvcmRCdWlsZChpbnQgbGluZUxhc3RQb3NQYXJhbSwgaW50IGxpbmVMZW5ndGhQYXJhbTEsIAogICAgICAgICAgICAgICAgICBjaGFyIGxpbmVCdWlsZGVyUGFyYW1bTElORV9DSEFSU19NQVggKyAxXSwgaW50ICZqUGFyYW0sIAogICAgICAgICAgICAgICAgICBjaGFyIGxpbmVQYXJhbTFbTElORV9DSEFSU19NQVggKyAxXSkgewogICAgZm9yIChpbnQgayA9IGxpbmVMYXN0UG9zUGFyYW0gKyAxOyBrIDw9IGxpbmVMZW5ndGhQYXJhbTE7ICsraykgewogICAgICAgIGxpbmVCdWlsZGVyUGFyYW1bKytqUGFyYW1dID0gbGluZVBhcmFtMVtrXTsKICAgIH0KfQoKdm9pZCBTaG93Q29tcGxldGVkTGluZShjaGFyIGxpbmVQYXJhbTFbTElORV9DSEFSU19NQVggKyAxXSwgCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIGxpbmVCdWlsZGVyUGFyYW1bTElORV9DSEFSU19NQVggKyAxXSkgewogICAgc3RyY3B5KGxpbmVQYXJhbTEsIGxpbmVCdWlsZGVyUGFyYW0pOwogICAgY291dCA8PCBsaW5lUGFyYW0xOwp9Cgp2b2lkIGZpcnN0V29yZEluQU5ld0xpbmUoaW50ICZpc1dvcmRJbkxpbmVQYXJhbTEsIGludCAmbGluZU5vUGFyYW0xLCAKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZ2ZXJzTGluZXNOb1BhcmFtMSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbGluZVBhcmFtMVtMSU5FX0NIQVJTX01BWCArIDFdLCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB3b3JkUGFyYW0xW0xJTkVfQ0hBUlNfTUFYICsgMV0sIAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmxpbmVXb3Jkc05vUGFyYW0xLCBpbnQgJmxpbmVMZW5ndGhQYXJhbTEsIAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmxpbmVMYXN0UG9zUGFyYW0sIGludCAmaVBhcmFtMSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAmd29yZHNOb1BhcmFtMSkgewogICAgaWYgKGlzV29yZEluTGluZVBhcmFtMSA9PSAwKSB7CiAgICAgICAgaWYgKGxpbmVOb1BhcmFtMSA9PSB2ZXJzTGluZXNOb1BhcmFtMSkgewogICAgICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICAgICAgICAgIGxpbmVOb1BhcmFtMSA9IDA7CiAgICAgICAgfQogICAgICAgICsrbGluZU5vUGFyYW0xOwogICAgICAgIHN0cmNweShsaW5lUGFyYW0xLCB3b3JkUGFyYW0xKTsKICAgICAgICBsaW5lV29yZHNOb1BhcmFtMSA9IDE7CiAgICAgICAgbGluZUxlbmd0aFBhcmFtMSA9IHN0cmxlbihsaW5lUGFyYW0xKTsKICAgICAgICBsaW5lTGFzdFBvc1BhcmFtID0gLTE7CiAgICAgICAgY291dCA8PCAiXG4iOwogICAgICAgIGlmIChpUGFyYW0xID09IHdvcmRzTm9QYXJhbTEpIHsKICAgICAgICAgICAgY291dCA8PCBsaW5lUGFyYW0xOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBsaW5lc0ZpbmlzaChpbnQgJmlzV29yZEluTGluZVBhcmFtLCBpbnQgJmlQYXJhbSwgCiAgICAgICAgICAgICAgICBjaGFyIGxpbmVQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCAKICAgICAgICAgICAgICAgIGNoYXIgd29yZFBhcmFtW0xJTkVfQ0hBUlNfTUFYICsgMV0sIGludCAmbGluZUxlbmd0aFBhcmFtLCAKICAgICAgICAgICAgICAgIGludCAmbGluZVdvcmRzTm9QYXJhbSwgaW50ICZ2ZXJzQ29sdW1uc05vUGFyYW0sIAogICAgICAgICAgICAgICAgaW50ICZsaW5lTm9QYXJhbSwgaW50ICZ2ZXJzTGluZXNOb1BhcmFtLCBpbnQgJndvcmRzTm9QYXJhbSkgewogICAgaW50IGludGVyc3BhY2VzTm8gPSAwLCBzcGFjZXNMZWZ0Tm8gPSAwOwogICAgaWYgKGxpbmVXb3Jkc05vUGFyYW0gPiAxKSB7CiAgICAgICAgaW50ZXJzcGFjZXNObyA9ICh2ZXJzQ29sdW1uc05vUGFyYW0gLSBsaW5lTGVuZ3RoUGFyYW0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdvcmRzTm9QYXJhbSAtIDEpIC8gKGxpbmVXb3Jkc05vUGFyYW0gLSAxKTsKICAgICAgICBzcGFjZXNMZWZ0Tm8gPSAodmVyc0NvbHVtbnNOb1BhcmFtIC0gbGluZUxlbmd0aFBhcmFtICsgCiAgICAgICAgICAgICAgICAgICAgICAgbGluZVdvcmRzTm9QYXJhbSAtIDEpICUgKGxpbmVXb3Jkc05vUGFyYW0gLSAxKTsKICAgIH0KICAgIGNoYXIgKnAgPSBzdHJjaHIobGluZVBhcmFtLCAnKicpICwgbGluZUJ1aWxkZXJbTElORV9DSEFSU19NQVggKyAxXTsKICAgIGludCBsaW5lTGFzdFBvcyA9IC0xLCBqID0gLTE7CiAgICBsaW5lQnVpbGRlclswXSA9ICdcMCc7CiAgICB3aGlsZSAocCkgewogICAgICAgIGludCBjdXJyZW50UG9zID0gcCAtIGxpbmVQYXJhbTsKICAgICAgICB3b3JkQnVpbGQobGluZUxhc3RQb3MsIGN1cnJlbnRQb3MsIGxpbmVCdWlsZGVyLCBqLCBsaW5lUGFyYW0pOwogICAgICAgIHNwYWNlc0xlZnRCdWlsZChjdXJyZW50UG9zLCBpbnRlcnNwYWNlc05vLCBsaW5lQnVpbGRlciwgaiwgCiAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzTGVmdE5vKTsKICAgICAgICBwID0gc3RyY2hyKHAgKyAxLCAnKicpOwogICAgfQogICAgbGFzdFdvcmRCdWlsZChsaW5lTGFzdFBvcywgbGluZUxlbmd0aFBhcmFtLCBsaW5lQnVpbGRlciwgaiwgbGluZVBhcmFtKTsKICAgIFNob3dDb21wbGV0ZWRMaW5lKGxpbmVQYXJhbSwgbGluZUJ1aWxkZXIpOwogICAgZmlyc3RXb3JkSW5BTmV3TGluZShpc1dvcmRJbkxpbmVQYXJhbSwgbGluZU5vUGFyYW0sIHZlcnNMaW5lc05vUGFyYW0sIAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lUGFyYW0sIHdvcmRQYXJhbSwgbGluZVdvcmRzTm9QYXJhbSwgbGluZUxlbmd0aFBhcmFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGluZUxhc3RQb3MsIGlQYXJhbSwgd29yZHNOb1BhcmFtKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgd29yZHNObywgdmVyc0xpbmVzTm8sIHZlcnNDb2x1bW5zTm87CiAgICBjaW4gPj4gd29yZHNObyA+PiB2ZXJzTGluZXNObyA+PiB2ZXJzQ29sdW1uc05vOwogICAgY2hhciB3b3JkW0xJTkVfQ0hBUlNfTUFYICsgMV07CiAgICBjaGFyIGxpbmVbTElORV9DSEFSU19NQVggKyAxXTsKICAgIGxpbmVbMF0gPSAnXDAnOwogICAgaW50IGxpbmVXb3Jkc05vID0gMCwgbGluZU5vID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHdvcmRzTm87ICsraSkgewogICAgICAgIGNpbiA+PiB3b3JkOwogICAgICAgIGludCB3b3JkTGVuZ3RoID0gc3RybGVuKHdvcmQpLCBsaW5lTGVuZ3RoID0gc3RybGVuKGxpbmUpOwogICAgICAgIGludCBpc1dvcmRJbkxpbmUgPSAwOwogICAgICAgIGlmIChsaW5lTGVuZ3RoICsgd29yZExlbmd0aCA8IHZlcnNDb2x1bW5zTm8pIHsKICAgICAgICAgICAgd29yZEluTGluZShpc1dvcmRJbkxpbmUsIGksIGxpbmUsIHdvcmQsIGxpbmVMZW5ndGgsIHdvcmRMZW5ndGgsIAogICAgICAgICAgICAgICAgICAgICAgIGxpbmVXb3Jkc05vKTsKICAgICAgICB9CiAgICAgICAgaWYgKGkgPT0gd29yZHNObyB8fCAoaSA8IHdvcmRzTm8gJiYgaXNXb3JkSW5MaW5lID09IDApKSB7CiAgICAgICAgICAgIGxpbmVzRmluaXNoKGlzV29yZEluTGluZSwgaSwgbGluZSwgd29yZCwgbGluZUxlbmd0aCwgbGluZVdvcmRzTm8sIAogICAgICAgICAgICAgICAgICAgICAgICB2ZXJzQ29sdW1uc05vLCBsaW5lTm8sIHZlcnNMaW5lc05vLCB3b3Jkc05vKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==