# Реализуйте класс Matrix. Он должен содержать:
# Конструктор от списка списков. Гарантируется, что списки состоят из чисел, не пусты и все имеют одинаковый #размер. Конструктор должен копировать содержимое списка списков, т.е. при изменении списков, от которых была #сконструирована матрица, содержимое матрицы изменяться не должно.
# Метод __str__ переводящий матрицу в строку. При этом элементы внутри одной строки должны быть разделены знаками # табуляции, а строки — переносами строк. При этом после каждой строки не должно быть символа табуляции и в конце # не должно быть переноса строки.
# Метод size без аргументов, возвращающий кортеж вида (число строк, число столбцов)
# Примеры:
# Тест 1
# Входные данные:
# Task 1 check 1
# m = Matrix([[1, 0], [0, 1]])
# print(m)
# m = Matrix([[2, 0, 0], [0, 1, 10000]])
# print(m)
# m = Matrix([[-10, 20, 50, 2443], [-5235, 12, 4324, 4234]])
# print(m)
# Вывод программы:
#1 0
#0 1
#2 0 0
#0 1 10000
#-10 20 50 2443
#-5235 12 4324 4234
# Нагуглил такой код но он проходит 40/100
from sys import stdin
class Matrix( object ) :
def __init__ ( self , matrix) :
self .matrix = matrix
def __str__ ( self ) :
return '\n ' .join ( [ '' .join ( [ '%d\t ' % i for i in row] )
for row in self .matrix ] )
@ property
def size( self ) :
rows = len ( self .matrix )
cols = 0
for row in self .matrix :
if len ( row) > cols:
cols = len ( row)
return ( rows, cols)
exec ( stdin.read ( ) )
IyDQoNC10LDQu9C40LfRg9C50YLQtSDQutC70LDRgdGBIE1hdHJpeC4g0J7QvSDQtNC+0LvQttC10L0g0YHQvtC00LXRgNC20LDRgtGMOgoKIyDQmtC+0L3RgdGC0YDRg9C60YLQvtGAINC+0YIg0YHQv9C40YHQutCwINGB0L/QuNGB0LrQvtCyLiDQk9Cw0YDQsNC90YLQuNGA0YPQtdGC0YHRjywg0YfRgtC+INGB0L/QuNGB0LrQuCDRgdC+0YHRgtC+0Y/RgiDQuNC3INGH0LjRgdC10LssINC90LUg0L/Rg9GB0YLRiyDQuCDQstGB0LUg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0YvQuSAj0YDQsNC30LzQtdGALiDQmtC+0L3RgdGC0YDRg9C60YLQvtGAINC00L7Qu9C20LXQvSDQutC+0L/QuNGA0L7QstCw0YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSDRgdC/0LjRgdC60LAg0YHQv9C40YHQutC+0LIsINGCLtC1LiDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INGB0L/QuNGB0LrQvtCyLCDQvtGCINC60L7RgtC+0YDRi9GFINCx0YvQu9CwICPRgdC60L7QvdGB0YLRgNGD0LjRgNC+0LLQsNC90LAg0LzQsNGC0YDQuNGG0LAsINGB0L7QtNC10YDQttC40LzQvtC1INC80LDRgtGA0LjRhtGLINC40LfQvNC10L3Rj9GC0YzRgdGPINC90LUg0LTQvtC70LbQvdC+LgoKCiMg0JzQtdGC0L7QtCBfX3N0cl9fINC/0LXRgNC10LLQvtC00Y/RidC40Lkg0LzQsNGC0YDQuNGG0YMg0LIg0YHRgtGA0L7QutGDLiDQn9GA0Lgg0Y3RgtC+0Lwg0Y3Qu9C10LzQtdC90YLRiyDQstC90YPRgtGA0Lgg0L7QtNC90L7QuSDRgdGC0YDQvtC60Lgg0LTQvtC70LbQvdGLINCx0YvRgtGMINGA0LDQt9C00LXQu9C10L3RiyDQt9C90LDQutCw0LzQuCAjINGC0LDQsdGD0LvRj9GG0LjQuCwg0LAg0YHRgtGA0L7QutC4IOKAlCDQv9C10YDQtdC90L7RgdCw0LzQuCDRgdGC0YDQvtC6LiDQn9GA0Lgg0Y3RgtC+0Lwg0L/QvtGB0LvQtSDQutCw0LbQtNC+0Lkg0YHRgtGA0L7QutC4INC90LUg0LTQvtC70LbQvdC+INCx0YvRgtGMINGB0LjQvNCy0L7Qu9CwINGC0LDQsdGD0LvRj9GG0LjQuCDQuCDQsiDQutC+0L3RhtC1ICMg0L3QtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L/QtdGA0LXQvdC+0YHQsCDRgdGC0YDQvtC60LguCiMg0JzQtdGC0L7QtCBzaXplINCx0LXQtyDQsNGA0LPRg9C80LXQvdGC0L7Qsiwg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC60L7RgNGC0LXQtiDQstC40LTQsCAo0YfQuNGB0LvQviDRgdGC0YDQvtC6LCDRh9C40YHQu9C+INGB0YLQvtC70LHRhtC+0LIpCgoKIyDQn9GA0LjQvNC10YDRizoKIyDQotC10YHRgiAxCiMg0JLRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1OgojIFRhc2sgMSBjaGVjayAxCiMgbSA9IE1hdHJpeChbWzEsIDBdLCBbMCwgMV1dKQojIHByaW50KG0pCiMgbSA9IE1hdHJpeChbWzIsIDAsIDBdLCBbMCwgMSwgMTAwMDBdXSkKIyBwcmludChtKQojIG0gPSBNYXRyaXgoW1stMTAsIDIwLCA1MCwgMjQ0M10sIFstNTIzNSwgMTIsIDQzMjQsIDQyMzRdXSkKIyBwcmludChtKQoKCiMg0JLRi9Cy0L7QtCDQv9GA0L7Qs9GA0LDQvNC80Ys6CiMxCTAKIzAJMQojMgkwCTAKIzAJMQkxMDAwMAojLTEwCTIwCTUwCTI0NDMKIy01MjM1CTEyCTQzMjQJNDIzNAoKIyDQndCw0LPRg9Cz0LvQuNC7INGC0LDQutC+0Lkg0LrQvtC0INC90L4g0L7QvSDQv9GA0L7RhdC+0LTQuNGCIDQwLzEwMApmcm9tIHN5cyBpbXBvcnQgc3RkaW4KCgpjbGFzcyBNYXRyaXgob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXRyaXgpOgogICAgICAgIHNlbGYubWF0cml4ID0gbWF0cml4CgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuICdcbicuam9pbihbJycuam9pbihbJyVkXHQnICUgaSBmb3IgaSBpbiByb3ddKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gc2VsZi5tYXRyaXhdKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHNpemUoc2VsZik6CiAgICAgICAgcm93cyA9IGxlbihzZWxmLm1hdHJpeCkKICAgICAgICBjb2xzID0gMAogICAgICAgIGZvciByb3cgaW4gc2VsZi5tYXRyaXg6CiAgICAgICAgICAgIGlmIGxlbihyb3cpID4gY29sczoKICAgICAgICAgICAgICAgIGNvbHMgPSBsZW4ocm93KQoKICAgICAgICByZXR1cm4gKHJvd3MsIGNvbHMpCgoKZXhlYyhzdGRpbi5yZWFkKCkp