void gauss(Matrix A, int n) {
int i, j, k, r;
for(i = 0; i < n; i++) {
r = i;
for(int j = i + 1; j < n; j++) {
if(fabs(A[j][i]) > fabs(A[r][i])) r = j;
}
if(r != i) for(j = 0; j <= n; j++) swap(A[r][j], A[i][j]);
for(int k = i+1; k <= n; k++) A[i][k] /= A[i][i];
A[i][i] = 1;
for(k = i+1; k < n; k++)
if(k!=i){
double f = A[k][i] / A[i][i];
for(j = i; j <= n; j++) A[k][j] -= f * A[i][j];
}
}
for(int i = n-1; i >=0; i--){
for(int j = i-1; j >= 0; j--){
double f = A[j][i]/A[i][i];
A[j][i] -= f*A[i][i];
A[j][n] -= f*A[i][n];
}
}
}
int i, j, k, r;
for(i = 0; i < n; i++) {
r = i;
for(int j = i + 1; j < n; j++) {
if(fabs(A[j][i]) > fabs(A[r][i])) r = j;
}
if(r != i) for(j = 0; j <= n; j++) swap(A[r][j], A[i][j]);
for(int k = i+1; k <= n; k++) A[i][k] /= A[i][i];
A[i][i] = 1;
for(k = i+1; k < n; k++)
if(k!=i){
double f = A[k][i] / A[i][i];
for(j = i; j <= n; j++) A[k][j] -= f * A[i][j];
}
}
for(int i = n-1; i >=0; i--){
for(int j = i-1; j >= 0; j--){
double f = A[j][i]/A[i][i];
A[j][i] -= f*A[i][i];
A[j][n] -= f*A[i][n];
}
}
}