#include <iostream>
#include <cmath>
using namespace std;
// Возвращает длину числа a
int GetLength(int a) {
return (a==0?1:log10(a)+1);
}
// Возвращает левую часть числа a до n-той цифры включительно
int LeftPart(int a, int n) {
return a/pow(10, GetLength(a) - n);
}
// Возвращает правую часть числа a после n-той цифры
int RightPart(int a, int n) {
int p = pow(10, GetLength(a) - n);
return a%p;
}
int main() {
int n, m, i = 0, toPrint; // Столбцы, строки, счетчик очередного числа для возведения в квадрат, текущее значение для печати
bool haveRest = false; // Есть ли часть числа, "отрезанная" после переноса строки
cin >> n >> m;
int columnsLeft = n; // Присваиваем переменной для оставшихся свободных столбцов значения общего количества столбцов
while(m > 0) { // Пока есть свободные строки
if(columnsLeft==0) { // Если не осталось свободных столбцов
m--; // Уменьшаем на 1 количество свободных строк
if(m > 0) // Если свободные строки еще остались, переносим курсор на новую строку
cout << endl;
columnsLeft = n; // Восстанавливаем число оставшихся столбцов
haveRest = false; // "Отрезанной" части числа нет
} else {
i = (haveRest?i:++i); // Увеличиваем i на 1, только если нет "отрезанной" части
toPrint = (haveRest?toPrint:i*i); // Присваиваем toPrint значение очередного квадата, только если нет "отрезанной" части
if(GetLength(toPrint) <= columnsLeft) { // Если хватает свободных столбцов для печати числа в toPrint
cout << toPrint; // Печатаем значение toPrint
columnsLeft -= GetLength(toPrint); // Обновляем количество свободных столбцов
haveRest = false; // "Отрезанной" части числа нет
} else {
cout << LeftPart(toPrint, columnsLeft); // Печатаем левую часть числа в toPrint, чтобы заполнить все оставшиеся свободные столбцы
toPrint = RightPart(toPrint, columnsLeft); // Присваиваем toPrint значение его ненапечатанной части
m--; // Уменьшаем на 1 количество свободных строк
if(m > 0) // Если свободные строки еще остались, переносим курсор на новую строку
cout << endl;
columnsLeft = n; // Восстанавливаем число оставшихся столбцов
haveRest = true; // "Отрезанная" часть числа есть
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyDQktC+0LfQstGA0LDRidCw0LXRgiDQtNC70LjQvdGDINGH0LjRgdC70LAgYQppbnQgR2V0TGVuZ3RoKGludCBhKSB7CglyZXR1cm4gKGE9PTA/MTpsb2cxMChhKSsxKTsKfQoKLy8g0JLQvtC30LLRgNCw0YnQsNC10YIg0LvQtdCy0YPRjiDRh9Cw0YHRgtGMINGH0LjRgdC70LAgYSDQtNC+IG4t0YLQvtC5INGG0LjRhNGA0Ysg0LLQutC70Y7Rh9C40YLQtdC70YzQvdC+CmludCBMZWZ0UGFydChpbnQgYSwgaW50IG4pIHsKCXJldHVybiBhL3BvdygxMCwgR2V0TGVuZ3RoKGEpIC0gbik7Cn0KCi8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQsNCy0YPRjiDRh9Cw0YHRgtGMINGH0LjRgdC70LAgYSDQv9C+0YHQu9C1IG4t0YLQvtC5INGG0LjRhNGA0YsKaW50IFJpZ2h0UGFydChpbnQgYSwgaW50IG4pIHsKCWludCBwID0gcG93KDEwLCBHZXRMZW5ndGgoYSkgLSBuKTsKCXJldHVybiBhJXA7Cn0KCmludCBtYWluKCkgewoJaW50IG4sIG0sIGkgPSAwLCB0b1ByaW50OyAvLyDQodGC0L7Qu9Cx0YbRiywg0YHRgtGA0L7QutC4LCDRgdGH0LXRgtGH0LjQuiDQvtGH0LXRgNC10LTQvdC+0LPQviDRh9C40YHQu9CwINC00LvRjyDQstC+0LfQstC10LTQtdC90LjRjyDQsiDQutCy0LDQtNGA0LDRgiwg0YLQtdC60YPRidC10LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0L/QtdGH0LDRgtC4Cglib29sIGhhdmVSZXN0ID0gZmFsc2U7CS8vINCV0YHRgtGMINC70Lgg0YfQsNGB0YLRjCDRh9C40YHQu9CwLCAi0L7RgtGA0LXQt9Cw0L3QvdCw0Y8iINC/0L7RgdC70LUg0L/QtdGA0LXQvdC+0YHQsCDRgdGC0YDQvtC60LgKCWNpbiA+PiBuID4+IG07CglpbnQgY29sdW1uc0xlZnQgPSBuOwkvLyDQn9GA0LjRgdCy0LDQuNCy0LDQtdC8INC/0LXRgNC10LzQtdC90L3QvtC5INC00LvRjyDQvtGB0YLQsNCy0YjQuNGF0YHRjyDRgdCy0L7QsdC+0LTQvdGL0YUg0YHRgtC+0LvQsdGG0L7QsiDQt9C90LDRh9C10L3QuNGPINC+0LHRidC10LPQviDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgdGC0L7Qu9Cx0YbQvtCyCgl3aGlsZShtID4gMCkgewkvLyDQn9C+0LrQsCDQtdGB0YLRjCDRgdCy0L7QsdC+0LTQvdGL0LUg0YHRgtGA0L7QutC4CgkJaWYoY29sdW1uc0xlZnQ9PTApIHsJLy8g0JXRgdC70Lgg0L3QtSDQvtGB0YLQsNC70L7RgdGMINGB0LLQvtCx0L7QtNC90YvRhSDRgdGC0L7Qu9Cx0YbQvtCyCgkJCW0tLTsJLy8g0KPQvNC10L3RjNGI0LDQtdC8INC90LAgMSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdCy0L7QsdC+0LTQvdGL0YUg0YHRgtGA0L7QugoJCQlpZihtID4gMCkJLy8g0JXRgdC70Lgg0YHQstC+0LHQvtC00L3Ri9C1INGB0YLRgNC+0LrQuCDQtdGJ0LUg0L7RgdGC0LDQu9C40YHRjCwg0L/QtdGA0LXQvdC+0YHQuNC8INC60YPRgNGB0L7RgCDQvdCwINC90L7QstGD0Y4g0YHRgtGA0L7QutGDCgkJCQljb3V0IDw8IGVuZGw7CgkJCWNvbHVtbnNMZWZ0ID0gbjsJLy8g0JLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INGH0LjRgdC70L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0YHRgtC+0LvQsdGG0L7QsgoJCQloYXZlUmVzdCA9IGZhbHNlOwkvLyAi0J7RgtGA0LXQt9Cw0L3QvdC+0LkiINGH0LDRgdGC0Lgg0YfQuNGB0LvQsCDQvdC10YIKCQl9IGVsc2UgewoJCQlpID0gKGhhdmVSZXN0P2k6KytpKTsJLy8g0KPQstC10LvQuNGH0LjQstCw0LXQvCBpINC90LAgMSwg0YLQvtC70YzQutC+INC10YHQu9C4INC90LXRgiAi0L7RgtGA0LXQt9Cw0L3QvdC+0LkiINGH0LDRgdGC0LgKCQkJdG9QcmludCA9IChoYXZlUmVzdD90b1ByaW50OmkqaSk7IC8vINCf0YDQuNGB0LLQsNC40LLQsNC10LwgdG9QcmludCDQt9C90LDRh9C10L3QuNC1INC+0YfQtdGA0LXQtNC90L7Qs9C+INC60LLQsNC00LDRgtCwLCDRgtC+0LvRjNC60L4g0LXRgdC70Lgg0L3QtdGCICLQvtGC0YDQtdC30LDQvdC90L7QuSIg0YfQsNGB0YLQuAoJCQlpZihHZXRMZW5ndGgodG9QcmludCkgPD0gY29sdW1uc0xlZnQpIHsJLy8g0JXRgdC70Lgg0YXQstCw0YLQsNC10YIg0YHQstC+0LHQvtC00L3Ri9GFINGB0YLQvtC70LHRhtC+0LIg0LTQu9GPINC/0LXRh9Cw0YLQuCDRh9C40YHQu9CwINCyIHRvUHJpbnQKCQkJCWNvdXQgPDwgdG9QcmludDsJLy8g0J/QtdGH0LDRgtCw0LXQvCDQt9C90LDRh9C10L3QuNC1IHRvUHJpbnQKCQkJCWNvbHVtbnNMZWZ0IC09IEdldExlbmd0aCh0b1ByaW50KTsJLy8g0J7QsdC90L7QstC70Y/QtdC8INC60L7Qu9C40YfQtdGB0YLQstC+INGB0LLQvtCx0L7QtNC90YvRhSDRgdGC0L7Qu9Cx0YbQvtCyCgkJCQloYXZlUmVzdCA9IGZhbHNlOwkvLyAi0J7RgtGA0LXQt9Cw0L3QvdC+0LkiINGH0LDRgdGC0Lgg0YfQuNGB0LvQsCDQvdC10YIKCQkJfSBlbHNlIHsKCQkJCWNvdXQgPDwgTGVmdFBhcnQodG9QcmludCwgY29sdW1uc0xlZnQpOwkvLyDQn9C10YfQsNGC0LDQtdC8INC70LXQstGD0Y4g0YfQsNGB0YLRjCDRh9C40YHQu9CwINCyIHRvUHJpbnQsINGH0YLQvtCx0Ysg0LfQsNC/0L7Qu9C90LjRgtGMINCy0YHQtSDQvtGB0YLQsNCy0YjQuNC10YHRjyDRgdCy0L7QsdC+0LTQvdGL0LUg0YHRgtC+0LvQsdGG0YsKCQkJCXRvUHJpbnQgPSBSaWdodFBhcnQodG9QcmludCwgY29sdW1uc0xlZnQpOwkvLyDQn9GA0LjRgdCy0LDQuNCy0LDQtdC8IHRvUHJpbnQg0LfQvdCw0YfQtdC90LjQtSDQtdCz0L4g0L3QtdC90LDQv9C10YfQsNGC0LDQvdC90L7QuSDRh9Cw0YHRgtC4CgkJCQltLS07CS8vINCj0LzQtdC90YzRiNCw0LXQvCDQvdCwIDEg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHQstC+0LHQvtC00L3Ri9GFINGB0YLRgNC+0LoKCQkJCWlmKG0gPiAwKQkvLyDQldGB0LvQuCDRgdCy0L7QsdC+0LTQvdGL0LUg0YHRgtGA0L7QutC4INC10YnQtSDQvtGB0YLQsNC70LjRgdGMLCDQv9C10YDQtdC90L7RgdC40Lwg0LrRg9GA0YHQvtGAINC90LAg0L3QvtCy0YPRjiDRgdGC0YDQvtC60YMKCQkJCQljb3V0IDw8IGVuZGw7CgkJCQljb2x1bW5zTGVmdCA9IG47CS8vINCS0L7RgdGB0YLQsNC90LDQstC70LjQstCw0LXQvCDRh9C40YHQu9C+INC+0YHRgtCw0LLRiNC40YXRgdGPINGB0YLQvtC70LHRhtC+0LIKCQkJCWhhdmVSZXN0ID0gdHJ1ZTsJLy8gItCe0YLRgNC10LfQsNC90L3QsNGPIiDRh9Cw0YHRgtGMINGH0LjRgdC70LAg0LXRgdGC0YwKCQkJfQoJCX0KCX0KCXJldHVybiAwOwp9