#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int
pos(int s, int row, int col)
{
if (row > col) {
int tmp = row;
row = col;
col = tmp;
}
return (col - row + (s + s - row + 1) * row / 2);
}
void
print_matrix1(int a[], int n)
{
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << a[pos(n, i, j)] << " ";
}
cout << endl;
}
}
void
print_matrix2(int a[], int n)
{
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << a[n * i + j] << " ";
}
cout << endl;
}
}
int
main()
{
srand(time(NULL));
int count;
cin >> count;
int n = (sqrt(8 * count + 1) - 1) / 2;
int a[count], b[count], c[n * n];
for (int i = 0; i < count; ++i) {
a[i] = rand() % 41 - 20;
b[i] = rand() % 41 - 20;
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
int tmp = 0;
for (int k = 0; k < n; ++k) {
tmp += a[pos(n, i, k)] * b[pos(n, k, j)];
}
c[n * i + j] = tmp;
}
}
cout << "A:" << endl;
print_matrix1(a, n);
cout << "B:" << endl;
print_matrix1(b, n);
cout << "C:" << endl;
print_matrix2(c, n);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50CnBvcyhpbnQgcywgaW50IHJvdywgaW50IGNvbCkKewogICAgaWYgKHJvdyA+IGNvbCkgewogICAgICAgIGludCB0bXAgPSByb3c7CiAgICAgICAgcm93ID0gY29sOwogICAgICAgIGNvbCA9IHRtcDsKICAgIH0KICAgIHJldHVybiAoY29sIC0gcm93ICsgKHMgKyBzIC0gcm93ICsgMSkgKiByb3cgLyAyKTsKfQoKdm9pZApwcmludF9tYXRyaXgxKGludCBhW10sIGludCBuKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKSB7CiAgICAgICAgICAgIGNvdXQgPDwgYVtwb3MobiwgaSwgaildIDw8ICIgIjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQp9Cgp2b2lkCnByaW50X21hdHJpeDIoaW50IGFbXSwgaW50IG4pCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyArK2opIHsKICAgICAgICAgICAgY291dCA8PCBhW24gKiBpICsgal0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9Cn0KCmludAptYWluKCkKewogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBpbnQgY291bnQ7CiAgICBjaW4gPj4gY291bnQ7CiAgICBpbnQgbiA9IChzcXJ0KDggKiBjb3VudCArIDEpIC0gMSkgLyAyOwogICAgaW50IGFbY291bnRdLCBiW2NvdW50XSwgY1tuICogbl07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICBhW2ldID0gcmFuZCgpICUgNDEgLSAyMDsKICAgICAgICBiW2ldID0gcmFuZCgpICUgNDEgLSAyMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyArK2opIHsKICAgICAgICAgICAgaW50IHRtcCA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbjsgKytrKSB7CiAgICAgICAgICAgICAgICB0bXAgKz0gYVtwb3MobiwgaSwgayldICogYltwb3MobiwgaywgaildOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNbbiAqIGkgKyBqXSA9IHRtcDsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICJBOiIgPDwgZW5kbDsKICAgIHByaW50X21hdHJpeDEoYSwgbik7CiAgICBjb3V0IDw8ICJCOiIgPDwgZW5kbDsKICAgIHByaW50X21hdHJpeDEoYiwgbik7CiAgICBjb3V0IDw8ICJDOiIgPDwgZW5kbDsKICAgIHByaW50X21hdHJpeDIoYywgbik7Cn0=