#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include #include //#include #include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; typedef vector vi; typedef vector vll; typedef pair pii; struct Edge { int from; double p; Edge(){} Edge(int f, double p) : from(f), p(p) {} }; const int MAXM = 300; int A[MAXM], B[MAXM], C[MAXM]; vector es[22]; bool is[22]; int main() { int N, M; cin >> N >> M; for (int i = 0; i < M; i++) { cin >> A[i] >> B[i] >> C[i]; es[B[i]].emplace_back(A[i], C[i]/100.); } if (N == 1) { cout << 0 << endl; return 0; } double ans = 0; for (int s = 0; s < 1<<(N-2); s++) { memset(is, false, sizeof(is)); is[0] = is[N-1] = true; for (int i = 1; i < N-1; i++) if ((s>>(i-1))&1) is[i] = true; vector p(N, 1); p[0] = 0; for (int i = 0; i < N; i++) { for (Edge e : es[i]) if (is[e.from]) { p[i] *= 1-e.p; } } double prob = 1; for (int i = 0; i < N; i++) { if (is[i]) prob *= 1-p[i]; else prob *= p[i]; } ans += prob; } printf("%.15lf\n", ans); return 0; }