#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
#include <limits>
using namespace std;
# define N 404
# define ma 200005
# define ll long long
int x1[N],y1[N],ti[N];
struct edge{
int to;
int next;
double w;
}e[ma];
int k=0,head[N],s,t,st,en,t1=0,sp=0;
double dis[N],ans;
struct node{
double dis;
int po;
bool operator<(const node& a)const{
return dis<a.dis;
}
bool operator>(const node& a)const{
return dis>a.dis;
}
};
priority_queue<node,vector<node>,greater<node> >q;
void add(int u,int v,double w)
{
k++;
e[k].to=v;
e[k].w=w;
e[k].next=head[u];
head[u]=k;
}
void dij(int k)
{
q.push(node{0,k});
bool vis[4*s]={0};
for(int i=0;i<=4*s-1;i++)
{
dis[i]=99999999;
}
dis[k]=0;
while(!q.empty())
{
int k1=q.top().po;
q.pop();
if(vis[k1])
continue;
vis[k1]=1;
for(int i=head[k1];i;i=e[i].next)
{
int z=e[i].to;
if(dis[z]>dis[k1]+e[i].w)
{
dis[z]=dis[k1]+e[i].w;
if(vis[z]==0)
{
q.push(node{dis[z],z});
}
}
}
}
}
int main()
{
int n;
cin>>n;
while(n)
{
n--;
k=-1;
t1=-1;
sp=-1;
ans=99999999;
memset(head,0,sizeof(head));
cin>>s>>t>>st>>en;
st--;
en--;
for(int i=1;i<=s;i++)
{
for(int j=1;j<=3;j++)
{
int x,y;
cin>>x>>y;
sp++;
x1[sp]=x;
y1[sp]=y;
}
int x,y;
double a1,a2,a3;
a1=((x1[sp]-x1[sp-1])*(x1[sp]-x1[sp-1])+(y1[sp]-y1[sp-1])*(y1[sp]-y1[sp-1]));
a2=((x1[sp]-x1[sp-2])*(x1[sp]-x1[sp-2])+(y1[sp]-y1[sp-2])*(y1[sp]-y1[sp-2]));
a3=((x1[sp-1]-x1[sp-2])*(x1[sp-1]-x1[sp-2])+(y1[sp-1]-y1[sp-2])*(y1[sp-1]-y1[sp-2]));
if(a1==(a2+a3))
{
x=x1[sp]+(x1[sp-1]-x1[sp-2]);
y=y1[sp]+(y1[sp-1]-y1[sp-2]);
}
else if(a2==(a1+a3))
{
x=x1[sp]+(x1[sp-2]-x1[sp-1]);
y=y1[sp]+(y1[sp-2]-y1[sp-1]);
}
else if(a3==(a1+a2))
{
x=x1[sp-1]+(x1[sp-2]-x1[sp]);
y=y1[sp-1]+(y1[sp-2]-y1[sp]);
}
sp++;
x1[sp]=x;
y1[sp]=y;
int tt;
t1++;
cin>>tt;
ti[t1]=tt;
}
for(int i=0;i<=4*s-1;i++)
{
for(int j=i+1;j<=4*s-1;j++)
{
double w=sqrt((x1[i]-x1[j])*(x1[i]-x1[j])+(y1[i]-y1[j])*(y1[i]-y1[j]));
if(i/4==j/4)
{
double w1=w;
w1=w1*ti[i/4];
add(i,j,w1);
add(j,i,w1);
}
else{
w=w*t;
add(i,j,w);
add(j,i,w);
}
}
}
double ans1,ans2,ans3,ans4;
dij(4*st);
ans1=min(dis[4*en],min(dis[4*en+1],min(dis[4*en+2],dis[4*en+3])));
dij(4*st+1);
ans2=min(dis[4*en],min(dis[4*en+1],min(dis[4*en+2],dis[4*en+3])));
dij(4*st+2);
ans3=min(dis[4*en],min(dis[4*en+1],min(dis[4*en+2],dis[4*en+3])));
dij(4*st+3);
ans4=min(dis[4*en],min(dis[4*en+1],min(dis[4*en+2],dis[4*en+3])));
ans=min(ans1,min(ans2,min(ans3,ans4)));
printf("%.1lf",ans);
cout<<endl;
}
return 0;
}