#include <stdio.h>
#include <math.h>
#define MAXN 100

int inverse(int k,double c[MAXN][MAXN],double b[MAXN][MAXN]) {
	int i,j,t,max;
	double a[MAXN][MAXN],buf;
	for(i=0;i<k;i++)
		for(j=0;j<k;j++) {
			a[i][j]=c[i][j];
			if (i==j)
				b[i][j]=1.0;
			else
				b[i][j]=0.0;
		}
	for(i=0;i<k;i++) {
		max=i;
		for(j=i+1;j<k;j++) 
			if (fabs(a[j][i])>fabs(a[max][i]))
				max=j;
		for(t=0;t<k;t++) {
			buf=a[i][t];
			a[i][t]=a[max][t];
			a[max][t]=buf;
			buf=b[i][t];
			b[i][t]=b[max][t];
			b[max][t]=buf;
		}
		if (fabs(a[i][i])<1e-10) return -1;
		buf=1.0/a[i][i];
		for(t=0;t<k;t++) {
			a[i][t]*=buf;
			b[i][t]*=buf;
		}
		for(j=i+1;j<k;j++) {
			buf=a[j][i];
			for(t=0;t<k;t++) {
				a[j][t]-=a[i][t]*buf;
				b[j][t]-=b[i][t]*buf;
			}
		}
	}
	for(i=k-1;i>=0;i--) {
		for(j=i-1;j>=0;j--) {
			buf=a[j][i];
			for(t=0;t<k;t++) {
				a[j][t]-=a[i][t]*buf;
				b[j][t]-=b[i][t]*buf;
			}
		}
	}
	return 0;
}

double a[MAXN][MAXN],b[MAXN][MAXN];

//#define DEBUG

#ifdef DEBUG
double c[MAXN][MAXN];
int t;
#endif

int main(void) {
	int res,i,j,k;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		for(j=0;j<k;j++)
			scanf("%lf",&a[i][j]);
	printf("%d\n",res=inverse(k,a,b));
	if (res==0) {
		for(i=0;i<k;i++) {
			for(j=0;j<k;j++)
				printf("%.10g ",b[i][j]);
			printf("\n");
		}
		#ifdef DEBUG
		for(i=0;i<k;i++)
			for(j=0;j<k;j++) {
				c[i][j]=0.0;
				for(t=0;t<k;t++) {
					c[i][j]+=a[i][t]*b[t][j];
				}
			}
			printf("\n");
			for(i=0;i<k;i++) {
				for(j=0;j<k;j++)
					printf("%.10f ",c[i][j]);
				printf("\n");
			}
		#endif
	
	}
  scanf("%d",&i);
	return 0;
}
