#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void read_matrix_static(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols);
void print_matrix_static(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols);
int **allocate_matrix_dynamic1(int rows, int cols);
void read_matrix_dynamic1(int **matrix, int rows, int cols);
void print_matrix_dynamic1(int **matrix, int rows, int cols);
void free_matrix_dynamic1(int **matrix, int rows);
int *allocate_matrix_dynamic2(int rows, int cols);
void read_matrix_dynamic2(int *matrix, int rows, int cols);
void print_matrix_dynamic2(int *matrix, int rows, int cols);
void free_matrix_dynamic2(int *matrix);
int **allocate_matrix_dynamic3(int rows, int cols);
void read_matrix_dynamic3(int **matrix, int rows, int cols);
void print_matrix_dynamic3(int **matrix, int rows, int cols);
void free_matrix_dynamic3(int **matrix, int rows);
int main() {
int choice, rows, cols;
printf("Выберите метод выделения памяти:\n1. Статически\n2. Динамически (2D массив указателей)\n3. Динамически (1D массив)\n4. Динамически (массив указателей на строки)\n");
if (scanf("%d", &choice
) != 1 || choice
< 1 || choice
> 4) { return 1;
}
if (scanf("%d %d", &rows
, &cols
) != 2 || rows
< 1 || cols
< 1 || rows
> MAX_SIZE
|| cols
> MAX_SIZE
) { return 1;
}
switch (choice) {
case 1: {
int matrix[MAX_SIZE][MAX_SIZE];
read_matrix_static(matrix, rows, cols);
print_matrix_static(matrix, rows, cols);
break;
}
case 2: {
int **matrix = allocate_matrix_dynamic1(rows, cols);
if (matrix == NULL) {
return 1;
}
read_matrix_dynamic1(matrix, rows, cols);
print_matrix_dynamic1(matrix, rows, cols);
free_matrix_dynamic1(matrix, rows);
break;
}
case 3: {
int *matrix = allocate_matrix_dynamic2(rows, cols);
if (matrix == NULL) {
return 1;
}
read_matrix_dynamic2(matrix, rows, cols);
print_matrix_dynamic2(matrix, rows, cols);
free_matrix_dynamic2(matrix);
break;
}
case 4: {
int **matrix = allocate_matrix_dynamic3(rows, cols);
if (matrix == NULL) {
return 1;
}
read_matrix_dynamic3(matrix, rows, cols);
print_matrix_dynamic3(matrix, rows, cols);
free_matrix_dynamic3(matrix, rows);
break;
}
}
return 0;
}
void read_matrix_static(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (scanf("%d", &matrix
[i
][j
]) != 1) { }
}
}
}
void print_matrix_static(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (j < cols - 1) {
}
}
if (i < rows - 1) {
}
}
}
int **allocate_matrix_dynamic1(int rows, int cols) {
int **matrix
= malloc(rows
* sizeof(int*)); if (matrix == NULL) return NULL;
for (int i = 0; i < rows; i++) {
matrix
[i
] = malloc(cols
* sizeof(int)); if (matrix[i] == NULL) {
for (int j = 0; j < i; j++) {
}
return NULL;
}
}
return matrix;
}
void read_matrix_dynamic1(int **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (scanf("%d", &matrix
[i
][j
]) != 1) { }
}
}
}
void print_matrix_dynamic1(int **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (j < cols - 1) {
}
}
if (i < rows - 1) {
}
}
}
void free_matrix_dynamic1(int **matrix, int rows) {
for (int i = 0; i < rows; i++) {
}
}
int *allocate_matrix_dynamic2(int rows, int cols) {
return malloc(rows
* cols
* sizeof(int)); }
void read_matrix_dynamic2(int *matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (scanf("%d", &matrix
[i
* cols
+ j
]) != 1) { }
}
}
}
void print_matrix_dynamic2(int *matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d", matrix
[i
* cols
+ j
]); if (j < cols - 1) {
}
}
if (i < rows - 1) {
}
}
}
void free_matrix_dynamic2(int *matrix) {
}
int **allocate_matrix_dynamic3(int rows, int cols) {
int **matrix
= malloc(rows
* sizeof(int*)); if (matrix == NULL) return NULL;
for (int i = 0; i < rows; i++) {
matrix
[i
] = malloc(cols
* sizeof(int)); if (matrix[i] == NULL) {
for (int j = 0; j < i; j++) {
}
return NULL;
}
}
return matrix;
}
void read_matrix_dynamic3(int **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (scanf("%d", &matrix
[i
][j
]) != 1) { }
}
}
}
void print_matrix_dynamic3(int **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (j < cols - 1) {
}
}
if (i < rows - 1) {
}
}
}
void free_matrix_dynamic3(int **matrix, int rows) {
for (int i = 0; i < rows; i++) {
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTUFYX1NJWkUgMTAwCgp2b2lkIHJlYWRfbWF0cml4X3N0YXRpYyhpbnQgbWF0cml4W01BWF9TSVpFXVtNQVhfU0laRV0sIGludCByb3dzLCBpbnQgY29scyk7CnZvaWQgcHJpbnRfbWF0cml4X3N0YXRpYyhpbnQgbWF0cml4W01BWF9TSVpFXVtNQVhfU0laRV0sIGludCByb3dzLCBpbnQgY29scyk7CgppbnQgKiphbGxvY2F0ZV9tYXRyaXhfZHluYW1pYzEoaW50IHJvd3MsIGludCBjb2xzKTsKdm9pZCByZWFkX21hdHJpeF9keW5hbWljMShpbnQgKiptYXRyaXgsIGludCByb3dzLCBpbnQgY29scyk7CnZvaWQgcHJpbnRfbWF0cml4X2R5bmFtaWMxKGludCAqKm1hdHJpeCwgaW50IHJvd3MsIGludCBjb2xzKTsKdm9pZCBmcmVlX21hdHJpeF9keW5hbWljMShpbnQgKiptYXRyaXgsIGludCByb3dzKTsKCmludCAqYWxsb2NhdGVfbWF0cml4X2R5bmFtaWMyKGludCByb3dzLCBpbnQgY29scyk7CnZvaWQgcmVhZF9tYXRyaXhfZHluYW1pYzIoaW50ICptYXRyaXgsIGludCByb3dzLCBpbnQgY29scyk7CnZvaWQgcHJpbnRfbWF0cml4X2R5bmFtaWMyKGludCAqbWF0cml4LCBpbnQgcm93cywgaW50IGNvbHMpOwp2b2lkIGZyZWVfbWF0cml4X2R5bmFtaWMyKGludCAqbWF0cml4KTsKCmludCAqKmFsbG9jYXRlX21hdHJpeF9keW5hbWljMyhpbnQgcm93cywgaW50IGNvbHMpOwp2b2lkIHJlYWRfbWF0cml4X2R5bmFtaWMzKGludCAqKm1hdHJpeCwgaW50IHJvd3MsIGludCBjb2xzKTsKdm9pZCBwcmludF9tYXRyaXhfZHluYW1pYzMoaW50ICoqbWF0cml4LCBpbnQgcm93cywgaW50IGNvbHMpOwp2b2lkIGZyZWVfbWF0cml4X2R5bmFtaWMzKGludCAqKm1hdHJpeCwgaW50IHJvd3MpOwoKaW50IG1haW4oKSB7CiAgICBpbnQgY2hvaWNlLCByb3dzLCBjb2xzOwogICAgcHJpbnRmKCLQktGL0LHQtdGA0LjRgtC1INC80LXRgtC+0LQg0LLRi9C00LXQu9C10L3QuNGPINC/0LDQvNGP0YLQuDpcbjEuINCh0YLQsNGC0LjRh9C10YHQutC4XG4yLiDQlNC40L3QsNC80LjRh9C10YHQutC4ICgyRCDQvNCw0YHRgdC40LIg0YPQutCw0LfQsNGC0LXQu9C10LkpXG4zLiDQlNC40L3QsNC80LjRh9C10YHQutC4ICgxRCDQvNCw0YHRgdC40LIpXG40LiDQlNC40L3QsNC80LjRh9C10YHQutC4ICjQvNCw0YHRgdC40LIg0YPQutCw0LfQsNGC0LXQu9C10Lkg0L3QsCDRgdGC0YDQvtC60LgpXG4iKTsKCiAgICBpZiAoc2NhbmYoIiVkIiwgJmNob2ljZSkgIT0gMSB8fCBjaG9pY2UgPCAxIHx8IGNob2ljZSA+IDQpIHsKICAgICAgICBwcmludGYoIm4vYVxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgaWYgKHNjYW5mKCIlZCAlZCIsICZyb3dzLCAmY29scykgIT0gMiB8fCByb3dzIDwgMSB8fCBjb2xzIDwgMSB8fCByb3dzID4gTUFYX1NJWkUgfHwgY29scyA+IE1BWF9TSVpFKSB7CiAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHN3aXRjaCAoY2hvaWNlKSB7CiAgICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgIGludCBtYXRyaXhbTUFYX1NJWkVdW01BWF9TSVpFXTsKICAgICAgICAgICAgcmVhZF9tYXRyaXhfc3RhdGljKG1hdHJpeCwgcm93cywgY29scyk7CiAgICAgICAgICAgIHByaW50X21hdHJpeF9zdGF0aWMobWF0cml4LCByb3dzLCBjb2xzKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgMjogewogICAgICAgICAgICBpbnQgKiptYXRyaXggPSBhbGxvY2F0ZV9tYXRyaXhfZHluYW1pYzEocm93cywgY29scyk7CiAgICAgICAgICAgIGlmIChtYXRyaXggPT0gTlVMTCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVhZF9tYXRyaXhfZHluYW1pYzEobWF0cml4LCByb3dzLCBjb2xzKTsKICAgICAgICAgICAgcHJpbnRfbWF0cml4X2R5bmFtaWMxKG1hdHJpeCwgcm93cywgY29scyk7CiAgICAgICAgICAgIGZyZWVfbWF0cml4X2R5bmFtaWMxKG1hdHJpeCwgcm93cyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlIDM6IHsKICAgICAgICAgICAgaW50ICptYXRyaXggPSBhbGxvY2F0ZV9tYXRyaXhfZHluYW1pYzIocm93cywgY29scyk7CiAgICAgICAgICAgIGlmIChtYXRyaXggPT0gTlVMTCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVhZF9tYXRyaXhfZHluYW1pYzIobWF0cml4LCByb3dzLCBjb2xzKTsKICAgICAgICAgICAgcHJpbnRfbWF0cml4X2R5bmFtaWMyKG1hdHJpeCwgcm93cywgY29scyk7CiAgICAgICAgICAgIGZyZWVfbWF0cml4X2R5bmFtaWMyKG1hdHJpeCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlIDQ6IHsKICAgICAgICAgICAgaW50ICoqbWF0cml4ID0gYWxsb2NhdGVfbWF0cml4X2R5bmFtaWMzKHJvd3MsIGNvbHMpOwogICAgICAgICAgICBpZiAobWF0cml4ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgIHByaW50Zigibi9hXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYWRfbWF0cml4X2R5bmFtaWMzKG1hdHJpeCwgcm93cywgY29scyk7CiAgICAgICAgICAgIHByaW50X21hdHJpeF9keW5hbWljMyhtYXRyaXgsIHJvd3MsIGNvbHMpOwogICAgICAgICAgICBmcmVlX21hdHJpeF9keW5hbWljMyhtYXRyaXgsIHJvd3MpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgcmVhZF9tYXRyaXhfc3RhdGljKGludCBtYXRyaXhbTUFYX1NJWkVdW01BWF9TSVpFXSwgaW50IHJvd3MsIGludCBjb2xzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgaisrKSB7CiAgICAgICAgICAgIGlmIChzY2FuZigiJWQiLCAmbWF0cml4W2ldW2pdKSAhPSAxKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIm4vYVxuIik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHByaW50X21hdHJpeF9zdGF0aWMoaW50IG1hdHJpeFtNQVhfU0laRV1bTUFYX1NJWkVdLCBpbnQgcm93cywgaW50IGNvbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCIsIG1hdHJpeFtpXVtqXSk7CiAgICAgICAgICAgIGlmIChqIDwgY29scyAtIDEpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiICIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgcm93cyAtIDEpIHsKICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgIH0KICAgIH0KfQoKaW50ICoqYWxsb2NhdGVfbWF0cml4X2R5bmFtaWMxKGludCByb3dzLCBpbnQgY29scykgewogICAgaW50ICoqbWF0cml4ID0gbWFsbG9jKHJvd3MgKiBzaXplb2YoaW50KikpOwogICAgaWYgKG1hdHJpeCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIG1hdHJpeFtpXSA9IG1hbGxvYyhjb2xzICogc2l6ZW9mKGludCkpOwogICAgICAgIGlmIChtYXRyaXhbaV0gPT0gTlVMTCkgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgICAgICAgICAgZnJlZShtYXRyaXhbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZyZWUobWF0cml4KTsKICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG1hdHJpeDsKfQoKdm9pZCByZWFkX21hdHJpeF9keW5hbWljMShpbnQgKiptYXRyaXgsIGludCByb3dzLCBpbnQgY29scykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7IGorKykgewogICAgICAgICAgICBpZiAoc2NhbmYoIiVkIiwgJm1hdHJpeFtpXVtqXSkgIT0gMSkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludF9tYXRyaXhfZHluYW1pYzEoaW50ICoqbWF0cml4LCBpbnQgcm93cywgaW50IGNvbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCIsIG1hdHJpeFtpXVtqXSk7CiAgICAgICAgICAgIGlmIChqIDwgY29scyAtIDEpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiICIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgcm93cyAtIDEpIHsKICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBmcmVlX21hdHJpeF9keW5hbWljMShpbnQgKiptYXRyaXgsIGludCByb3dzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIGZyZWUobWF0cml4W2ldKTsKICAgIH0KICAgIGZyZWUobWF0cml4KTsKfQoKaW50ICphbGxvY2F0ZV9tYXRyaXhfZHluYW1pYzIoaW50IHJvd3MsIGludCBjb2xzKSB7CiAgICByZXR1cm4gbWFsbG9jKHJvd3MgKiBjb2xzICogc2l6ZW9mKGludCkpOwp9Cgp2b2lkIHJlYWRfbWF0cml4X2R5bmFtaWMyKGludCAqbWF0cml4LCBpbnQgcm93cywgaW50IGNvbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgaWYgKHNjYW5mKCIlZCIsICZtYXRyaXhbaSAqIGNvbHMgKyBqXSkgIT0gMSkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludF9tYXRyaXhfZHluYW1pYzIoaW50ICptYXRyaXgsIGludCByb3dzLCBpbnQgY29scykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7IGorKykgewogICAgICAgICAgICBwcmludGYoIiVkIiwgbWF0cml4W2kgKiBjb2xzICsgal0pOwogICAgICAgICAgICBpZiAoaiA8IGNvbHMgLSAxKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIiAiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaSA8IHJvd3MgLSAxKSB7CiAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgZnJlZV9tYXRyaXhfZHluYW1pYzIoaW50ICptYXRyaXgpIHsKICAgIGZyZWUobWF0cml4KTsKfQoKaW50ICoqYWxsb2NhdGVfbWF0cml4X2R5bmFtaWMzKGludCByb3dzLCBpbnQgY29scykgewogICAgaW50ICoqbWF0cml4ID0gbWFsbG9jKHJvd3MgKiBzaXplb2YoaW50KikpOwogICAgaWYgKG1hdHJpeCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIG1hdHJpeFtpXSA9IG1hbGxvYyhjb2xzICogc2l6ZW9mKGludCkpOwogICAgICAgIGlmIChtYXRyaXhbaV0gPT0gTlVMTCkgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgICAgICAgICAgZnJlZShtYXRyaXhbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZyZWUobWF0cml4KTsKICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG1hdHJpeDsKfQoKdm9pZCByZWFkX21hdHJpeF9keW5hbWljMyhpbnQgKiptYXRyaXgsIGludCByb3dzLCBpbnQgY29scykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHM7IGorKykgewogICAgICAgICAgICBpZiAoc2NhbmYoIiVkIiwgJm1hdHJpeFtpXVtqXSkgIT0gMSkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJuL2FcbiIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludF9tYXRyaXhfZHluYW1pYzMoaW50ICoqbWF0cml4LCBpbnQgcm93cywgaW50IGNvbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCIsIG1hdHJpeFtpXVtqXSk7CiAgICAgICAgICAgIGlmIChqIDwgY29scyAtIDEpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiICIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgcm93cyAtIDEpIHsKICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBmcmVlX21hdHJpeF9keW5hbWljMyhpbnQgKiptYXRyaXgsIGludCByb3dzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIGZyZWUobWF0cml4W2ldKTsKICAgIH0KICAgIGZyZWUobWF0cml4KTsKfQ==