lst_2d = [
    [2, 4, 'unicorn'],
    [False, 39],
    [None],
]

"""
Explanation: <h1>Содержание<span class="tocSkip"></span></h1>
<div class="toc"><ul class="toc-item"><li><span><a href="#Создание-двумерного-списка" data-toc-modified-id="Создание-двумерного-списка-1">Создание двумерного списка</a></span></li><li><span><a href="#Доступ-и-изменение-элементов" data-toc-modified-id="Доступ-и-изменение-элементов-2">Доступ и изменение элементов</a></span></li><li><span><a href="#Создание-матрицы-n-x-m" data-toc-modified-id="Создание-матрицы-n-x-m-3">Создание матрицы n x m</a></span></li><li><span><a href="#Ввод-матрицы" data-toc-modified-id="Ввод-матрицы-4">Ввод матрицы</a></span></li></ul></div>

Двумерные списки
Создание двумерного списка
Двумерный список — это список, внутри которого хранятся другие списки. Создается он очень просто:
End of explanation
"""


lst_3d = [
    [[1, 1, 2], [3, 5], [8, 13]],
    [[21, 34], [55]]
]

"""
Explanation: Похожим образом можно сделать трёхмерный список.
End of explanation
"""


matrix = [
    [0, 0, 1, 5],
    [1, 0, 2, 0],
    [0, 3, 1, 0],
]

"""
Explanation: Чаще всего используются двумерные списки с равным количеством элементов в каждой строке. Такой двумерный список можно называть матрицей.
End of explanation
"""


matrix = [
    [0, 0, 1, 5],
    [1, 0, 2, 0],
    [0, 3, 1, 0],
]

print(matrix[1][2])
matrix[0][1] = 9
for row in matrix:
    print(*row)

"""
Explanation: Доступ и изменение элементов
Изменить или получить элемент матрицы можно так:
End of explanation
"""


n, m  = 3, 4
matrix = [[0] * m] * n

"""
Explanation: Создание матрицы n x m
Теперь представим, что нам нужно заполнить матрицу c n строками и m столбцами нулями. Интуитивным выглядит такой способ:
End of explanation
"""


n, m = 3, 4
matrix = [[0] * m] * n

# Изменяем третий элемент во второй строке
matrix[1][2] = 1

for row in matrix:
    print(*row)

"""
Explanation: Но не все так просто...
End of explanation
"""


n, m = 3, 4
matrix = [[0] * m for i in range(n)]

matrix[1][2] = 1

for row in matrix:
    print(*row)

"""
Explanation: Изменилась не только вторая строка, но и все остальные. Так произошло, потому что после повторения списка каждая строка указывает на один и тот же массив.
Чтобы этого избежать, нужно использовать генератор списков
End of explanation
"""


n, m = map(int, input().split())
matrix = []
for i in range(n):
    matrix.append(list(map(int, input().split())))

"""
Explanation: Ввод матрицы
Обычно матрица задаётся в таком виде:
3 4
1 2 3 0
5 7 9 2
1 2 1 1
Превые два числа — количество строк и столбцов.
Считывать это можно так:
End of explanation
"""


n, m = map(int, input().split())
matrix = [list(map(int, input().split())) for i in range(n)]

"""
Explanation: Или более кратко с помощью генератора списка:
End of explanation
"""


