#include<bits/stdc++.h>
using namespace std;
int n;
double A[50][50], B[50][50], E[50][50], det;
void print(double A[][50], int n)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
printf("%11.3f", A[i][j]);
printf("\n");
}
printf("\n ------------------ \n");
}
double matrice_triunghiulara(double A[][50], int n)
{
for(int i = 1; i <= n - 1; i++)
{
// verificarea daca nu se executa impartirea la 0
if (A[i][i] == 0)
{
// print(A,n);
int k = i;
for (int h = i + 1; h <= n; h++)
if (A[h][i]) { k = h; break;}
if (k != i)
for (int h = 1; h <= n; h++)
{
double x = A[i][h];
A[i][h] = -A[k][h];
A[k][h] = x;
}
else return 0;
}
double r = 0;
for (int j = i + 1; j <= n; j++)
{
r = - (A[j][i] / A[i][i]);
for (int h = 1; h <= n; h++)
A[j][h] = A[i][h] * r + A[j][h];
}
// print(A,n);
}
// dupa ce avem matricea triunghiulara, calculam determinantul
double produs = 1;
for (int i= 1; i <= n; i++) produs *=A[i][i];
return produs;
}
double co_al(int lin, int col)
{
double tmp[50][50];
int i, j;
for (i = 1; i < lin; i++)
for (j =1; j < col; j++) tmp[i][j] = E[i][j];
for (i = lin; i < n; i++)
for (j =1; j < col; j++) tmp[i][j] = E[i + 1][j];
for (i = 1; i < lin; i++)
for (j = col; j < n; j++) tmp[i][j] = E[i][j + 1];
for (i = lin; i < n; i++)
for (j = col; j < n; j++) tmp[i][j] = E[i + 1][j + 1];
// cout << lin <<" "<< col << endl;
// print(tmp, n-1);
// cout << "\n ----------------- \n";
if ((lin + col) % 2 == 0) return matrice_triunghiulara(tmp, n - 1);
else return -1 * matrice_triunghiulara(tmp, n - 1);
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
cin >> A[i][j];
E[i][j] = A[i][j];
}
// test citire
print(A, n);
// calculare determinant
det = matrice_triunghiulara(A, n);
// verificare existență A inversa
if (det != 0) cout << "Exsita matricea inversa" << endl;
else
{
cout << "Nu exista matricea inversa";
return 0;
}
// calcularea complementilor algebrici
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
B[j][i] = co_al(i, j) / det; ;
// afisarea matricei inverse
print(B, n);
}