#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; double a[10010][150]; double dp[10010][150]; int b[10010]; int n; void solve(int cnt) { memset(dp,0,sizeof(dp)); for(int i=0;i<cnt;i++) dp[0][i]=1; for(int i=1;i<=n;i++) for(int j=0;j<cnt;j++) { dp[i][j]=max(dp[i][j],dp[i-1][j]*a[j][b[i]]); dp[i][b[i]]=max(dp[i][b[i]],dp[i-1][j]*a[j][b[i]]); } double cur=0; for(int i=0;i<cnt;i++) if(dp[n][i]>cur) cur=dp[n][i]; printf("%.6f ",cur); //for(int i=0;i<=n;i++) //{ // for(int j=0;j<cnt;j++) // cout<<dp[i][j]<<" "; // cout<<endl; //} } int main() { int m; while(cin>>m) { int cnt=1,cur=1; for(int i=4;i<=m;i++) cnt*=i; for(int i=1;i<=m-3;i++) cur*=i; cnt=cnt/cur; //cout<<cnt<<endl; for(int i=0;i<cnt;i++) for(int j=0;j<cnt;j++) cin>>a[i][j]; //int n; cin>>n; for(int i=1;i<=n;i++) cin>>b[i]; solve(cnt); } return 0; }