#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
double adj[250][250],dis[250]; //dis[]记录从起点到该点扣完费后剩下的最大钱数
int n,a,b;
bool vis[1000];
void dijkstra()
{
int u;
for(int i=1;i<=n;++i) //循环次数为全部顶点数n
{
double MAX=-1.0;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&dis[j]>MAX)
{
u=j;
MAX=dis[j];
}
}
vis[u]=1;
if(u==b)
{
printf("%.2f\n",dis[b]);
break;
}
for(int j=1;j<=n;++j)
{
if(vis[j]==0&&dis[j]<dis[u]*(1-adj[u][j]))
{
dis[j]=dis[u]*(1-adj[u][j]);
}
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>adj[i][j];
memset(dis,0,sizeof(dis));
dis[a]=1;
memset(vis,0,sizeof(vis));
dijkstra();
}
return 0;
}