#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
struct edge {
int next,to;
double w;
} edges[100005];
int n,m,s,endd;
int cnt,head[10005],vis[10005];
double dis[10005];
void addEdge(int u,int v,double w) {
edges[++cnt].to=v;
edges[cnt].w=w;
edges[cnt].next=head[u];
head[u]=cnt;
}
void dij(int start) {
priority_queue<pair<double,int>,vector<pair<double,int> >,greater<pair<double,int> > >que;
memset(dis,-0x3f,sizeof(dis));
dis[start]=1;
que.push(make_pair(1,start));
while(!que.empty()) {
int now=que.top().second;
que.pop();
if(vis[now])
continue;
vis[now]=1;
for(int i=head[now]; i!=0; i=edges[i].next) {
int to=edges[i].to;
if(dis[to]<dis[now]*edges[i].w) {
dis[to]=dis[now]*edges[i].w;
que.push(make_pair(dis[to],to));
}
}
}
}
int main() {
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1; i<=m; i++) {
int x,y;
double z;
cin>>x>>y>>z;
addEdge(x,y,(double)(1-z/100));
addEdge(y,x,(double)(1-z/100));
}
cin>>s>>endd;
dij(s);
printf("%.8lf",100/dis[endd]);
return 0;
}