Задача z9. Война матриц

Автор:Команда перемножения матриц (Василенко М. Поповиченко Р. Охрименко М.)   Ограничение времени:10 сек
Входной файл:Стандартный вход   Ограничение памяти:1024 Мб
Выходной файл:Стандартный выход  
Максимальный балл:1  

Условие

В качестве шифрования для передачи данных между штабами было принято использовать метод умножения матриц Штрассера. Берётся некоторая матрица B, известная всем штабам. Секретные данные записываются числами в некоторую матрицу A. Данные матрицы умножаются по методу Штрассера и записываются все M1, M2, ..., M7, используемые в методе Штрассера. Данные M передаются в другой штаб, где их уже расшифровывают. Однако в ходе операции врага часть данных может не дойти до базы.

Ваша задача — написать дешифратор, который по матрице B и неполным M должен найти матрицу A. Причём элемент матрицы A равен числу только в том случае, если он однозначно определяется M. В противном случае на его место выводится символ "_". Для создания M используется следующий код:

def split(A):
    n = A.shape[0]
    k = n // 2
    return A[:k, :k], A[:k, k:], A[k:, :k], A[k:, k:]


def strassen(A, B):
    if A.shape[0] == 1:
        return A * B

    A11, A12, A21, A22 = split(A)
    B11, B12, B21, B22 = split(B)

    M1 = strassen(A11 + A22, B11 + B22)
    M2 = strassen(A21 + A22, B11)
    M3 = strassen(A11, B12 - B22)
    M4 = strassen(A22, B21 - B11)
    M5 = strassen(A11 + A12, B22)
    M6 = strassen(A21 - A11, B11 + B12)
    M7 = strassen(A12 - A22, B21 + B22)

Формат входных данных

Первая строка содержит целое число t, где 2t — размер квадратных матриц A и B. Далее идут 2t строк, содержащие матрицу B. Затем идут 7t-1 строк, содержащие все значения M1, …, M7, где каждый элемент либо целое число, либо "_".

Формат выходных данных

Выведите матрицу A размером 2t × 2t.

Ограничения

1 <= t <= 5

0 <= bᵢⱼ <= 50

Примеры тестов

Стандартный вход Стандартный выход
1
1
49 48
15 7
_ 3430 _ -1428 308 _ -880
42 2
28 42
2
2
14 41 48 42
27 28 45 8
9 18 33 1
0 43 18 15
11340 4700 -65 -122 4687 -2314 -1496
5166 1596 806 793 3500 -495 110
408 450 1632 204 -371 -1176 40
750 -350 -1178 -968 840 140 228
5040 3630 -616 -915 1260 170 -693
-294 868 -141 0 576 2465 2052
-2100 420 819 0 -1450 1891 -304
34 19 10 21
13 17 36 44
31 38 31 25
27 17 26 44

0.026s 0.008s 13