#include<iostream>
#include<vector>
#include <iomanip>
#include<string>
#include<algorithm>
using namespace std;
vector<float> fuction1(vector<vector<float>> v1)
{
vector<float> sum;
float sum1 = 0;
//列向量归一化
for (int i = 0; i < v1[0].size(); i++)//列数
{
sum1 = 0;
for (int j = 0; j < v1.size(); j++)//行数
{
sum1 += v1[j][i];
}
sum.push_back(sum1);
}
for (int i = 0; i < v1[0].size(); i++)
for (int j = 0; j < v1.size(); j++)
v1[i][j] /= sum[j];
//求行和并归一化
vector<float> sum2;
float sum3 = 0;
for (int i = 0; i < v1[0].size(); i++)
{
sum3 = 0;
for (int j = 0; j < v1.size(); j++)
{
sum3 += v1[i][j];
}
sum2.push_back(sum3);
}
float sum4 = 0;
for (int i = 0; i < sum2.size(); i++)
sum4 += sum2[i];
for (int i = 0; i < sum2.size(); i++)
sum2[i] /= sum4;
return sum2;
}
int main()
{
int n, m;
cin >> n;
string haha;
vector<vector<float>> a(n, vector<float>(n)); //多维判断矩阵
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
cin >> haha;
auto x = find(haha.begin(), haha.end(), '/');
if (x == haha.end())
a[i][j] = stof(haha);
else
{
string left(haha.begin(), x);
string right(x + 1, haha.end());
a[i][j] = stof(left) / stof(right);
}
}
vector<float> b(fuction1(a));//特征向量
cin >> m;
vector<vector<float>> t(m, vector<float>(n));
for (int k = 0; k < n; k++)
{
vector<vector<float>> r(m, vector<float>(m));
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
{
cin >> haha;
auto x = find(haha.begin(), haha.end(), '/');
if (x == haha.end())
r[i][j] = stof(haha);
else
{
string left(haha.begin(), x);
string right(x + 1, haha.end());
r[i][j] = stof(left) / stof(right);
}
}
vector<float> b1(fuction1(r));
for (int p = 0; p < m; p++)
{
t[p][k] = b1[p];
}
}
//相乘 t 和 b,W2和W3相乘
vector<float> end;
float tsum = 0;
for (int i = 0; i < t.size(); i++)
{
tsum = 0;
for (int j = 0; j < t[0].size(); j++)
{
tsum += t[i][j] * b[j];
}
end.push_back(tsum);
}
for (auto e : end)
cout << fixed << showpoint << setprecision(4) << e << " ";
}