#include <bits/stdc++.h>
using namespace std;
int n, m;
int l[5005], r[5005], v[105][105], t[105][105];
double res[105], c[5005], f[105][105], cc[105][105];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b, x;
    scanf("%d%d%d", &a, &b, &x);
    l[i] = (--a);
    r[i] = (--b);
    c[i] = x;
    v[a][b] = (v[a][b] == 0) ? x : min(v[a][b], x);
    t[a][b]++;
    t[b][a]++;
  }
  int k = n - 2;
  for (int i = 1; i <= k; i++) {
    for (int j = 0; j < n; j++) {
      f[i][i] += t[j][i];
      f[i][j] -= t[j][i];
    }
    f[i][n - 1] = -f[i][0];
  }
  for (int i = 1; i <= k; i++) {
    int t = i;
    while (!f[t][i] && t <= k) t++;
    if (t > k) continue;
    for (int j = i; j <= k + 1; j++) swap(f[i][j], f[t][j]);
    for (int j = 1; j <= k; j++) {
      if (j != i) {
        double tt = f[j][i] / f[i][i];
        for (int x = 1; x <= k + 1; x++) f[j][x] -= tt * f[i][x];
      }
    }
  }
  for (int i = 1; i <= k; i++) {
    if (f[i][i] == 0) continue;
    double x = f[i][i];
    for (int j = 1; j <= k + 1; j++) f[i][j] /= x;
    res[i] = f[i][k + 1];
  }
  res[0] = 1;
  double mn = 1e9 + 7;
  for (int i = 0; i < m; i++) {
    double x = fabs(res[l[i]] - res[r[i]]);
    if (x < 1e-10) continue;
    mn = min(mn, c[i] / x);
  }
  double ans = 0;
  for (int i = 0; i < m; i++) cc[l[i]][r[i]] = mn * (res[l[i]] - res[r[i]]);
  for (int i = 0; i < m; i++) {
    if (l[i] == 0) ans += cc[l[i]][r[i]];
    if (r[i] == 0) ans -= cc[l[i]][r[i]];
  }
  printf("%.5lf\n", ans);
  for (int i = 0; i < m; i++) printf("%.5lf\n", cc[l[i]][r[i]]);
  return 0;
}
