#include <bits/stdc++.h>
using namespace std;
const double E = 1e-12;
void g1(vector<vector<double>>& A, vector<double>& B, vector<double>& x) {
int n = A.size();
for (int k = 0; k < n; ++k) {
int m = k;
for (int i = k + 1; i < n; ++i) {
if (fabs(A[i][k]) > fabs(A[m][k])) {
m = i;
}
}
if (m != k) {
swap(A[k], A[m]);
swap(B[k], B[m]);
}
if (fabs(A[k][k]) < E) {
continue;
}
for (int i = k + 1; i < n; ++i) {
double f = A[i][k] / A[k][k];
for (int j = k; j < n; ++j) {
A[i][j] -= f * A[k][j];
}
B[i] -= f * B[k];
}
}
x.assign(n, 0.0);
for (int i = n - 1; i >= 0; --i) {
double s = 0.0;
for (int j = i + 1; j < n; ++j) {
s += A[i][j] * x[j];
}
if (fabs(A[i][i]) > E) {
x[i] = (B[i] - s) / A[i][i];
} else {
x[i] = 0.0;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("resistor.in","r",stdin);
freopen("resistor.out","w",stdout);
int n, m;
cin >> n >> m;
vector<vector<double>> g(n + 1, vector<double>(n + 1, 0.0));
for (int i = 0; i < m; ++i) {
int u, v;
double r;
cin >> u >> v >> r;
double c = 1.0 / r;
g[u][v] += c;
g[v][u] += c;
}
if (n == 1) {
cout << "0.00" << endl;
return 0;
}
vector<double> t(n + 1, 0.0);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
t[i] += g[i][j];
}
}
int s = n - 1;
vector<vector<double>> A(s, vector<double>(s, 0.0));
vector<double> B(s, 0.0);
for (int i = 2; i <= n; ++i) {
int r = i - 2;
for (int j = 2; j <= n; ++j) {
int c = j - 2;
if (i == j) {
A[r][c] = t[i];
} else {
A[r][c] = -g[i][j];
}
}
if (i == n) {
B[r] = 1.0;
}
}
vector<double> x;
g1(A, B, x);
double a = 0.0;
if (s > 0) {
a = x[s - 1];
}
cout << fixed << setprecision(2) << a << endl;
return 0;
}