#3)виконайте добуток двох квадратних матриць 3*3, врахуйте розмірність.
#Результати множення елементів занесіть до нової матриці та виведіть її на екран.


import numpy as np
#задаємо розмірність у першій матриці
n,m = int(input('Кількість рядків в першій матриці ')), int(input('Кількість стовпців в першій матриці '))
#задаємо розмірність у другій матриці
k,b = int(input('Кількість рядків в другій матриці ')), int(input('Кількість стовпців в другій матриці '))
#створюємо матрицю з першою розмірністю заповнену нулями
a = np.zeros((n,m), dtype=int)
# результуюча матриця при множенні буде мати розморність [n,b], тому стоврюємо таку матрицю і заповнюємо нулями
o = np.zeros((n,b), dtype = int)
# аналогічно створюємо матрицю з другою розмірністю заповнену нулями
z = np.zeros((k,b), dtype = int)
for i in range(n):
    for j in range(m):
# проходимось по рядкам і стовпцям і запомнюємо нашу матрицю числами(перша матриця)
        a[i,j] = int(input(f'A[{i},{j}]= '))
print(a)
for i in range(k):
    for j in range(b):
# проходимось по рядкам і стовпцям і запомнюємо нашу матрицю числами (друга матриця)
        z[i,j] = int(input(f'z[{j},{j}]= '))
print(b)
#перевіряємо чи в нас рівна розмірність
if m == k:
#проходимось по стовпям і рядкам двох матриць і в нову комірку пам'яті в новій матриці записуємо результат при множені рядка на стопчик
    for i in range(n):
        for j in range(m):
            for x in range(k):
                for j in range(b):
                    o[i][j] = a[0][i] * z[j][0] + a[1][i] * z[j][1] + a[2][i] * z[j][2]
#не знаю чому,але воно виводить меня одразу перемножену транспоновану матрицю. тому я її транспоную, щоб отримати вихідну(або транспонувати можна як в задачі 2, але так швидше)
    o = o.transpose()
# виводимо результат
    print(o)
#якщо розмірність не вірна, виходимо з програми
elif m != k:
    exit()
