#include <iostream>
using std::cout;
using std::endl;
void ShowRow(int value, int length_of_row) {
for (int i = 0; i < length_of_row; ++i) {
cout << value;
}
cout << endl;
}
int GetIncrement(int start_value, int end_value) {
int increment = 0;
if (start_value > end_value) {
increment = -1;
} else {
increment = 1;
}
return increment;
}
void ShowTriangle(int value, int start_lenght, int end_length) {
int increment = GetIncrement(start_lenght, end_length);
for (int i = start_lenght; i != end_length; i += increment) {
ShowRow(value, i);
}
ShowRow(value, end_length);
}
void ShowSnake(int start_value, int end_value, int start_lenght,
int end_length) {
int current_value = start_value;
const int increment = GetIncrement(start_value, end_value);
while (current_value <= end_value) {
ShowTriangle(current_value, start_lenght, end_length);
current_value += increment;
std::swap(start_lenght, end_length);
}
}
int main() { ShowSnake(1, 3, 3, 1); }
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmVuZGw7Cgp2b2lkIFNob3dSb3coaW50IHZhbHVlLCBpbnQgbGVuZ3RoX29mX3JvdykgewogIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoX29mX3JvdzsgKytpKSB7CiAgICBjb3V0IDw8IHZhbHVlOwogIH0KICBjb3V0IDw8IGVuZGw7Cn0KCmludCBHZXRJbmNyZW1lbnQoaW50IHN0YXJ0X3ZhbHVlLCBpbnQgZW5kX3ZhbHVlKSB7CiAgaW50IGluY3JlbWVudCA9IDA7CiAgaWYgKHN0YXJ0X3ZhbHVlID4gZW5kX3ZhbHVlKSB7CiAgICBpbmNyZW1lbnQgPSAtMTsKICB9IGVsc2UgewogICAgaW5jcmVtZW50ID0gMTsKICB9CiAgcmV0dXJuIGluY3JlbWVudDsKfQoKdm9pZCBTaG93VHJpYW5nbGUoaW50IHZhbHVlLCBpbnQgc3RhcnRfbGVuZ2h0LCBpbnQgZW5kX2xlbmd0aCkgewogIGludCBpbmNyZW1lbnQgPSBHZXRJbmNyZW1lbnQoc3RhcnRfbGVuZ2h0LCBlbmRfbGVuZ3RoKTsKICBmb3IgKGludCBpID0gc3RhcnRfbGVuZ2h0OyBpICE9IGVuZF9sZW5ndGg7IGkgKz0gaW5jcmVtZW50KSB7CiAgICBTaG93Um93KHZhbHVlLCBpKTsKICB9CiAgU2hvd1Jvdyh2YWx1ZSwgZW5kX2xlbmd0aCk7Cn0KCnZvaWQgU2hvd1NuYWtlKGludCBzdGFydF92YWx1ZSwgaW50IGVuZF92YWx1ZSwgaW50IHN0YXJ0X2xlbmdodCwKICAgICAgICAgICAgICAgaW50IGVuZF9sZW5ndGgpIHsKICBpbnQgY3VycmVudF92YWx1ZSA9IHN0YXJ0X3ZhbHVlOwogIGNvbnN0IGludCBpbmNyZW1lbnQgPSBHZXRJbmNyZW1lbnQoc3RhcnRfdmFsdWUsIGVuZF92YWx1ZSk7CiAgd2hpbGUgKGN1cnJlbnRfdmFsdWUgPD0gZW5kX3ZhbHVlKSB7CiAgICBTaG93VHJpYW5nbGUoY3VycmVudF92YWx1ZSwgc3RhcnRfbGVuZ2h0LCBlbmRfbGVuZ3RoKTsKICAgIGN1cnJlbnRfdmFsdWUgKz0gaW5jcmVtZW50OwogICAgc3RkOjpzd2FwKHN0YXJ0X2xlbmdodCwgZW5kX2xlbmd0aCk7CiAgfQp9CgppbnQgbWFpbigpIHsgU2hvd1NuYWtlKDEsIDMsIDMsIDEpOyB9Cg==