#include <bits/stdc++.h>
using namespace std;
char getc() {
  static char *S, *T, buf[65536];
  if (S == T) {
    T = (S = buf) + fread(buf, 1, 65536, stdin);
    if (S == T) return EOF;
  }
  return *S++;
}
int read() {
  static char ch;
  static int D;
  while (!isdigit(ch = getc()))
    ;
  for (D = ch - '0'; isdigit(ch = getc());) D = D * 10 + ch - '0';
  return D;
}
int n, m, u[5005], v[5005];
double w[5005], tmp = 1e9, ans;
double f[105], a[105][105];
int gauss(int n, int m) {
  static int sure[105], i, j, k, id;
  for (id = 1, i = 1; i <= m; i++, id++) {
    for (j = id; fabs(a[j][i]) < 1e-9 && j <= n; j++)
      ;
    if (j > n) {
      id--;
      continue;
    }
    sure[id] = i;
    if (j != id)
      for (k = i; k <= m + 1; k++) swap(a[id][k], a[j][k]);
    for (j = id + 1; j <= n; j++)
      if (fabs(a[j][i]) > 1e-9) {
        double tmp = a[j][i] / a[id][i];
        for (k = i; k <= m + 1; k++) a[j][k] -= a[id][k] * tmp;
      }
  }
  for (i = id - 1; i; i--) {
    for (int j = i + 1; j < id; j++) a[i][m + 1] -= a[i][sure[j]] * f[sure[j]];
    a[i][m + 1] /= a[i][sure[i]];
    f[sure[i]] = a[i][m + 1];
  }
  return 0;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%lf", &u[i], &v[i], &w[i]);
    a[u[i]][u[i]]++;
    a[u[i]][v[i]]--;
    a[v[i]][v[i]]++;
    a[v[i]][u[i]]--;
  }
  memset(a[1], 0, sizeof(a[1]));
  a[1][1] = 1;
  memset(a[n], 0, sizeof(a[n]));
  a[n][n] = 1;
  f[n] = a[n][n + 1] = 1;
  gauss(n, n);
  for (int i = 1; i <= m; i++) {
    tmp = min(tmp, w[i] / fabs(f[u[i]] - f[v[i]]));
    if (u[i] == 1) ans += f[v[i]] - f[u[i]];
    if (v[i] == 1) ans += f[u[i]] - f[v[i]];
  }
  printf("%lf\n", ans * tmp);
  for (int i = 1; i <= m; i++) printf("%lf\n", (f[v[i]] - f[u[i]]) * tmp);
}
