## Построение матрицы
def makeMatr(r):
matr=[]
n=len(r)
for i in range(n):
s=r[i]
rr=[]
v=s.split(",")
for a in v:
rr+=[int(a)]
matr+=[rr]
return matr
## Уникальные значения i-го столбца
def uCol(matr,i):
col={}
n=len(matr)
for j in range(n):
aji=matr[j][i]
col[aji]=1
res=[]
for q in col.keys():
res+=[q]
return sorted(res)
## Построить таблицу, соответствующую i-у столбцу
def resTabl(matr,i):
uc=uCol(matr,i)
n=len(matr)
res=[]
for j in range(n):
rr=[]
for a in uc:
if (a in matr[j]):
rr+=[1]
else:
rr+=[0]
res+=[rr]
return res
### Печать таблицы
def printTabl(tabl):
n=len(tabl)
for j in range(n):
rr=tabl[j]
m=len(rr)
for i in range(m):
print(tabl[j][i],end=' ')
print("")
cols="ms04,ms06,ms07,ms46,ms62,ms70,ms05,ms09,ms15"
row=[]
row+=["164,726,154,371,294,146,189,466,237"]
row+=["162,1570,154,244,231,155,190,700,235"]
row+=["198,2525,154,258,303,128,189,826,237"]
row+=["164,606,154,301,267,200,189,852,237"]
row+=["215,2889,134,279,204,119,206,718,235"]
row+=["145,1388,144,251,285,146,206,760,221"]
row+=["181,965,154,294,294,182,189,700,237"]
row+=["145,1088,144,266,330,155,206,790,237"]
row+=["145,786,144,293,285,155,206,592,221"]
row+=["179,1570,154,286,240,146,173,700,235"]
x=makeMatr(row)
n=len(x[0])
for icol in range(n):
tabl=resTabl(x,icol)
printTabl(tabl)
print("")
print("-------------------------------")
print("")
IyMg0J/QvtGB0YLRgNC+0LXQvdC40LUg0LzQsNGC0YDQuNGG0YsKCmRlZiBtYWtlTWF0cihyKToKICAgIG1hdHI9W10KICAgIG49bGVuKHIpCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICBzPXJbaV0KICAgICAgICBycj1bXQogICAgICAgIHY9cy5zcGxpdCgiLCIpCiAgICAgICAgZm9yIGEgaW4gdjoKICAgICAgICAgICAgcnIrPVtpbnQoYSldCiAgICAgICAgbWF0cis9W3JyXQogICAgcmV0dXJuIG1hdHIKCiMjINCj0L3QuNC60LDQu9GM0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8gaS3Qs9C+INGB0YLQvtC70LHRhtCwCgpkZWYgdUNvbChtYXRyLGkpOgogICAgY29sPXt9CiAgICBuPWxlbihtYXRyKQogICAgZm9yIGogaW4gcmFuZ2Uobik6CiAgICAgICAgYWppPW1hdHJbal1baV0KICAgICAgICBjb2xbYWppXT0xCiAgICByZXM9W10KICAgIGZvciBxIGluIGNvbC5rZXlzKCk6CiAgICAJcmVzKz1bcV0KICAgIHJldHVybiBzb3J0ZWQocmVzKQoKIyMg0J/QvtGB0YLRgNC+0LjRgtGMINGC0LDQsdC70LjRhtGDLCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4gaS3RgyDRgdGC0L7Qu9Cx0YbRgwoKZGVmIHJlc1RhYmwobWF0cixpKToKICAgIHVjPXVDb2wobWF0cixpKQogICAgbj1sZW4obWF0cikKICAgIHJlcz1bXQogICAgZm9yIGogaW4gcmFuZ2Uobik6CiAgICAgICAgcnI9W10KICAgICAgICBmb3IgYSBpbiB1YzoKICAgICAgICAgICAgaWYgKGEgaW4gbWF0cltqXSk6CiAgICAgICAgICAgICAgICBycis9WzFdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBycis9WzBdCiAgICAgICAgcmVzKz1bcnJdCiAgICByZXR1cm4gcmVzCgojIyMg0J/QtdGH0LDRgtGMINGC0LDQsdC70LjRhtGLCgpkZWYgcHJpbnRUYWJsKHRhYmwpOgogICAgbj1sZW4odGFibCkKICAgIGZvciBqIGluIHJhbmdlKG4pOgogICAgICAgIHJyPXRhYmxbal0KICAgICAgICBtPWxlbihycikKICAgICAgICBmb3IgaSBpbiByYW5nZShtKToKICAgICAgICAgICAgcHJpbnQodGFibFtqXVtpXSxlbmQ9JyAnKQogICAgICAgIHByaW50KCIiKQogICAgICAgCgpjb2xzPSJtczA0LG1zMDYsbXMwNyxtczQ2LG1zNjIsbXM3MCxtczA1LG1zMDksbXMxNSIKCnJvdz1bXQpyb3crPVsiMTY0LDcyNiwxNTQsMzcxLDI5NCwxNDYsMTg5LDQ2NiwyMzciXQpyb3crPVsiMTYyLDE1NzAsMTU0LDI0NCwyMzEsMTU1LDE5MCw3MDAsMjM1Il0Kcm93Kz1bIjE5OCwyNTI1LDE1NCwyNTgsMzAzLDEyOCwxODksODI2LDIzNyJdCnJvdys9WyIxNjQsNjA2LDE1NCwzMDEsMjY3LDIwMCwxODksODUyLDIzNyJdCnJvdys9WyIyMTUsMjg4OSwxMzQsMjc5LDIwNCwxMTksMjA2LDcxOCwyMzUiXQpyb3crPVsiMTQ1LDEzODgsMTQ0LDI1MSwyODUsMTQ2LDIwNiw3NjAsMjIxIl0Kcm93Kz1bIjE4MSw5NjUsMTU0LDI5NCwyOTQsMTgyLDE4OSw3MDAsMjM3Il0Kcm93Kz1bIjE0NSwxMDg4LDE0NCwyNjYsMzMwLDE1NSwyMDYsNzkwLDIzNyJdCnJvdys9WyIxNDUsNzg2LDE0NCwyOTMsMjg1LDE1NSwyMDYsNTkyLDIyMSJdCnJvdys9WyIxNzksMTU3MCwxNTQsMjg2LDI0MCwxNDYsMTczLDcwMCwyMzUiXQoKeD1tYWtlTWF0cihyb3cpCgpuPWxlbih4WzBdKQpmb3IgaWNvbCBpbiByYW5nZShuKToKICAgIHRhYmw9cmVzVGFibCh4LGljb2wpCiAgICBwcmludFRhYmwodGFibCkKICAgIHByaW50KCIiKQogICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogICAgcHJpbnQoIiIpCgoKCgogICAgCiAgICAKCgo=