Получить матрицу 16 порядка из умножения двух матриц 4 порядка
Есть задание, как на фото:
Я смог перемножить матрицы, но мне не удается получить матрицу 1616 (чтобы и нули отображались). Алгоритм этого процесса (на примере матрицы 22) можно увидеть на скриншотах:

Я получаю матрицу в которой есть члены a11, a12 и тд. Как получить матрицу где есть и an, и нулевые члены?
Код:
extern crate rand;
use rand::Rng;
use std::mem;
fn main() {
let mut rng = thread_rng();
let mut A : [[i32; 4]; 4] = unsafe { mem::zeroed() };
let mut B : [[i32; 4]; 4] = unsafe { mem::zeroed() };
let mut E : [[i32; 4]; 4] = unsafe { mem::zeroed() };
let mut res : [[i32; 16]; 16] = Default::default();
print!("\nA=\n");
for i in 0..A.len() {
for j in 0..A.len() {
A[i][j] = rng.gen_range(1..5);
print!("{}\t", A[i][j]);
}
print!("\n");
}
print!("\nA^(-1)=\n");
for i in 0..B.len() {
for j in 0..B.len() {
B[i][j] = rng.gen_range(1..5);
print!("{}\t", B[i][j]);
}
print!("\n");
}
print!("\nE=\n");
for i in 0..E.len() {
for j in 0..E.len() {
if i == j {
E[i][j] = 1;
}
print!("{}\t", E[i][j]);
}
print!("\n");
}
print!("\nResult matrix=\n");
for row in 0..A.len() {
for col in 0..A.len() {
for inner in 0..A.len() {
res[row][col] += A[row][inner] * B[inner][col];
}
print!("{}\t", res[row][col]);
}
print!("\n");
}
}
