#include <iostream>
#include <stdio.h>
#include<cmath>
using namespace std;
int m, n, max_q; // длина и ширина таблицы, максимальное количество чисел в строке
int element(int i) // формула для i-того элемента последовательности
{
i++;
return i*i+4*(i*i-i);
}
int length_of_element(int el) // длина i-того элемента
{
if( el==0|| el==1 )
return 1;
return ceil(log10(el));
}
int max_quantity() // максимальное количество чисел в строке
{
int max_q=0;
int length=0;
for(int j=0; true; j++)
{
int elem = element(j);
int length_el = length_of_element(elem);
if(length + length_el <= n) // проверяем, "поместится" ли в строку очередное число
{
length += length_el;
max_q++;
if(length == n)
return max_q;
}
else // если число не "влезает", добавляем "+"
{
max_q++;
return max_q;
}
if(length+1 <= n) // если число "поместилось", но осталось место еще для одного символа, тоже добавляем "+"
{
length += 1;
if(length == n)
return max_q;
}
}
return max_q; // такая ситуация невозможна
}
int line(int i) // печать i-той строки
{
int length=0;
for(int jj=i; true; jj++)
{
int j = jj % max_q; // формула циклического сдвига чисел в строке
int elem = element(j); // число которое мы будем выводить
int length_el = length_of_element(elem); // длина числа
if(length + length_el <= n) // если полученная нами длина все еще меньше заданного количества столбцов, мы выводим число
{
length += length_el;
cout << elem;
if(length == n)
{
cout << endl;
return length;
}
}
else // если длина получается больше, мы "отрезаем" от числа нужное количество символов
{
int excess = length+length_el-n;
for(int z = 0; z < excess; ++z) elem /= 10;
cout << elem << endl;
return length;
}
if(length + 1 <= n) // проверяем, нужно ли выводить "+"
{
length += 1; cout << "+";
if(length == n)
{
cout << endl;
return length;
}
}
}
return 0;
}
int main()
{
cin >> m >> n; // параметры таблицы
max_q = max_quantity(); // вычисляем максимально возможное количество чисел в строке
for(int i=0; i<m; i++) line(i); // вывод таблицы
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGU8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBtLCBuLCBtYXhfcTsgLy8g0LTQu9C40L3QsCDQuCDRiNC40YDQuNC90LAg0YLQsNCx0LvQuNGG0YssINC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRh9C40YHQtdC7INCyINGB0YLRgNC+0LrQtQoKaW50IGVsZW1lbnQoaW50IGkpIC8vINGE0L7RgNC80YPQu9CwINC00LvRjyBpLdGC0L7Qs9C+INGN0LvQtdC80LXQvdGC0LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4CnsKIGkrKzsKIHJldHVybiBpKmkrNCooaSppLWkpOyAKfQppbnQgbGVuZ3RoX29mX2VsZW1lbnQoaW50IGVsKSAvLyDQtNC70LjQvdCwIGkt0YLQvtCz0L4g0Y3Qu9C10LzQtdC90YLQsAp7CiBpZiggZWw9PTB8fCBlbD09MSApIAogICByZXR1cm4gMTsKIHJldHVybiBjZWlsKGxvZzEwKGVsKSk7Cn0KCmludCBtYXhfcXVhbnRpdHkoKSAvLyDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YfQuNGB0LXQuyDQsiDRgdGC0YDQvtC60LUKewogaW50IG1heF9xPTA7CiBpbnQgbGVuZ3RoPTA7CiBmb3IoaW50IGo9MDsgdHJ1ZTsgaisrKSAKICB7CgkgaW50IGVsZW0gPSBlbGVtZW50KGopOwoJIGludCAgbGVuZ3RoX2VsID0gbGVuZ3RoX29mX2VsZW1lbnQoZWxlbSk7CgkgaWYobGVuZ3RoICsgbGVuZ3RoX2VsIDw9IG4pIC8vINC/0YDQvtCy0LXRgNGP0LXQvCwgItC/0L7QvNC10YHRgtC40YLRgdGPIiDQu9C4INCyINGB0YLRgNC+0LrRgyDQvtGH0LXRgNC10LTQvdC+0LUg0YfQuNGB0LvQviAKICAgIHsKICAgICAgbGVuZ3RoICs9IGxlbmd0aF9lbDsKICAgICAgbWF4X3ErKzsKICAgICAgaWYobGVuZ3RoID09IG4pCiAgICAgICAgcmV0dXJuIG1heF9xOwogICAgfQoJIGVsc2UgLy8g0LXRgdC70Lgg0YfQuNGB0LvQviDQvdC1ICLQstC70LXQt9Cw0LXRgiIsINC00L7QsdCw0LLQu9GP0LXQvCAiKyIKCXsKCSAgbWF4X3ErKzsKCSAgcmV0dXJuIG1heF9xOwoJfQogICBpZihsZW5ndGgrMSA8PSBuKSAvLyDQtdGB0LvQuCDRh9C40YHQu9C+ICLQv9C+0LzQtdGB0YLQuNC70L7RgdGMIiwg0L3QviDQvtGB0YLQsNC70L7RgdGMINC80LXRgdGC0L4g0LXRidC1INC00LvRjyDQvtC00L3QvtCz0L4g0YHQuNC80LLQvtC70LAsINGC0L7QttC1INC00L7QsdCw0LLQu9GP0LXQvCAiKyIKICAgIHsKICAgICBsZW5ndGggKz0gMTsKICAgICBpZihsZW5ndGggPT0gbikKICAgICAgcmV0dXJuIG1heF9xOwogICAgfQogIH0KIHJldHVybiBtYXhfcTsgLy8g0YLQsNC60LDRjyDRgdC40YLRg9Cw0YbQuNGPINC90LXQstC+0LfQvNC+0LbQvdCwCn0KCmludCBsaW5lKGludCBpKSAvLyDQv9C10YfQsNGC0YwgaS3RgtC+0Lkg0YHRgtGA0L7QutC4CnsKIGludCBsZW5ndGg9MDsKIGZvcihpbnQgamo9aTsgdHJ1ZTsgamorKykKICAgIHsKICAgICBpbnQgaiA9IGpqICUgbWF4X3E7IC8vINGE0L7RgNC80YPQu9CwINGG0LjQutC70LjRh9C10YHQutC+0LPQviDRgdC00LLQuNCz0LAg0YfQuNGB0LXQuyDQsiDRgdGC0YDQvtC60LUKICAgICBpbnQgIGVsZW0gPSBlbGVtZW50KGopOyAvLyDRh9C40YHQu9C+INC60L7RgtC+0YDQvtC1INC80Ysg0LHRg9C00LXQvCDQstGL0LLQvtC00LjRgtGMCiAgICAgaW50ICBsZW5ndGhfZWwgPSBsZW5ndGhfb2ZfZWxlbWVudChlbGVtKTsgLy8g0LTQu9C40L3QsCDRh9C40YHQu9CwCiAgICAgaWYobGVuZ3RoICsgbGVuZ3RoX2VsIDw9IG4pIC8vINC10YHQu9C4INC/0L7Qu9GD0YfQtdC90L3QsNGPINC90LDQvNC4INC00LvQuNC90LAg0LLRgdC1INC10YnQtSDQvNC10L3RjNGI0LUg0LfQsNC00LDQvdC90L7Qs9C+INC60L7Qu9C40YfQtdGB0YLQstCwINGB0YLQvtC70LHRhtC+0LIsINC80Ysg0LLRi9Cy0L7QtNC40Lwg0YfQuNGB0LvQviAKICAgICAgICB7CiAgICAgICAgIGxlbmd0aCArPSBsZW5ndGhfZWw7CiAgICAgICAgIGNvdXQgPDwgZWxlbTsKICAgICAgICAgaWYobGVuZ3RoID09IG4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgZWxzZSAvLyDQtdGB0LvQuCDQtNC70LjQvdCwINC/0L7Qu9GD0YfQsNC10YLRgdGPINCx0L7Qu9GM0YjQtSwg0LzRiyAi0L7RgtGA0LXQt9Cw0LXQvCIg0L7RgiDRh9C40YHQu9CwINC90YPQttC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC40LzQstC+0LvQvtCyCiAgICAgICAgewogICAgICAgICBpbnQgZXhjZXNzID0gbGVuZ3RoK2xlbmd0aF9lbC1uOwogICAgICAgICBmb3IoaW50IHogPSAwOyB6IDwgZXhjZXNzOyArK3opIGVsZW0gLz0gMTA7CiAgICAgICAgIGNvdXQgPDwgZWxlbSA8PCBlbmRsOwogICAgICAgICByZXR1cm4gbGVuZ3RoOwogICAgICAgIH0KCiAgICAgaWYobGVuZ3RoICsgMSA8PSBuKSAvLyDQv9GA0L7QstC10YDRj9C10LwsINC90YPQttC90L4g0LvQuCDQstGL0LLQvtC00LjRgtGMICIrIgogICAgICB7CiAgICAgICAgbGVuZ3RoICs9IDE7IGNvdXQgPDwgIisiOwogICAgICAgIGlmKGxlbmd0aCA9PSBuKQogICAgICAgIHsKICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAgIHJldHVybiBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICB9CnJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKIGNpbiA+PiBtID4+IG47IC8vINC/0LDRgNCw0LzQtdGC0YDRiyDRgtCw0LHQu9C40YbRiwogbWF4X3EgPSBtYXhfcXVhbnRpdHkoKTsgLy8g0LLRi9GH0LjRgdC70Y/QtdC8INC80LDQutGB0LjQvNCw0LvRjNC90L4g0LLQvtC30LzQvtC20L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGH0LjRgdC10Lsg0LIg0YHRgtGA0L7QutC1CiBmb3IoaW50IGk9MDsgaTxtOyBpKyspIGxpbmUoaSk7IC8vINCy0YvQstC+0LQg0YLQsNCx0LvQuNGG0YsKIHJldHVybiAwOwp9Cg==