#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
#define ld (long long double);
vector <vector <long double> > matrix;
void matrix_transpose(vector <vector <long double> >& mat) {
for (int i = 0; i < mat.size(); ++i) {
for (int j = 0; j < i; ++j) {
long double cur = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = cur;
}
}
}
vector <vector <long double> > matrix_mult(vector <vector <long double> >& x, vector <vector <long double> >& y) {
vector <vector <long double> > r(x.size(), vector <long double>(y[0].size()));
for (int i = 0; i < x.size(); i++) {
for (int j = 0; j < y[0].size(); j++) {
for (int k = 0; k < x.size(); k++) {
r[i][j] += x[i][k] * y[k][j];
}
}
}
return r;
}
long double dot_product(vector <long double>& x, vector <long double>& y) {
long double ret = 0.0;
for (int i = 0; i < x.size(); ++i) {
ret += x[i] * y[i];
}
return ret;
}
void matrix_subtr(vector <long double>& x, vector <long double>& y) {
for (int i = 0; i < x.size(); ++i) {
x[i] -= y[i];
}
}
vector <long double> matrix_mult_const(vector <long double> x, long double d) {
for (int i = 0; i < x.size(); ++i) {
x[i] *= d;
}
return x;
}
vector <long double> sqrt_dot_product(vector <long double>& x) {
x = matrix_mult_const(x, 1.0 / sqrt(dot_product(x, x)));
return x;
}
vector <vector <long double> > test(vector <vector <long double> >& x, vector <vector <long double> >& y) {
vector <vector <long double> > r(x.size(), vector <long double>(y[0].size()));
for (int i = 0; i < x.size(); i++) {
for (int j = 0; j < y[0].size(); j++) {
for (int k = 0; k < x.size(); k++) {
r[i][j] += x[i][k] * y[k][j];
}
}
}
return r;
}
int main() {
freopen("input.txt", "r", stdin);
int n;
cin >> n;
matrix.resize(n, vector <long double>(n));
vector <vector <long double> > b(n, vector <long double>(1));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> matrix[i][j];
}
cin >> b[i][0];
}
matrix_transpose(matrix);
vector <vector <long double> > e(n, vector <long double>(n));
for (int i = 0; i < n; ++i) {
e[i] = matrix[i];
for (int j = 0; j < i; ++j) {
matrix_subtr(e[i], matrix_mult_const(e[j], dot_product(e[j], matrix[i])));
}
e[i] = sqrt_dot_product(e[i]);
}
vector <vector <long double> > r(n, vector <long double>(n));
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
r[i][j] = dot_product(e[i], matrix[j]);
}
}
matrix_transpose(e);
cout << "Q" << endl;
cout << fixed << setprecision(6);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << e[i][j] << ' ';
}
cout << endl;
}
cout <<endl;
cout << "R" << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << r[i][j] << ' ';
}
cout << endl;
}
cout <<endl;
vector <long double> ans(n);
matrix_transpose(e);
b = matrix_mult(e, b);
for (int i = n - 1; i >= 0; --i) {
ans[i] = b[i][0];
for (int j = n - 1; j > i; --j) {
ans[i] -= r[i][j] * ans[j];
}
ans[i] /= r[i][i];
}
cout <<"X" <<endl;
for (int i = 0; i < n; ++i) {
cout <<"X" <<i + 1 <<" = " <<ans[i] <<endl;
}
return 0;
}