#include <cstdio>#include <cstring>using namespace std;double dp[10010][150];int no[10010];double p[150][150];double max(double a,double b){ if (a<b) return b; return a;}int main(){ int M,n; while(scanf("%d",&M)!=EOF) { n=M*(M-1)*(M-2)/6; for (int i=0;i<n;i++){ for (int j=0;j<n;j++) { scanf("%lf",&p[i][j]); } } memset(dp,0,sizeof dp); int m; scanf("%d",&m); for (int i=1;i<=m;i++) scanf("%d",&no[i]); for (int i=0;i<=n;i++) dp[0][i]=1; for (int i=1;i<=m;i++) { for (int j=0;j<n;j++) { dp[i][j]=max(dp[i][j],dp[i-1][j]*p[j][no[i]]); dp[i][no[i]]=max(dp[i][no[i]],dp[i-1][j]*p[j][no[i]]); } } double ans=0; for (int i=0;i<n;i++) { ans=max(ans,dp[m][i]); } printf("%.7fn",ans); } return 0;}