#include <bits/stdc++.h>
using namespace std;
const int maxn = 105, maxm = 5005;
const double eps = 1e-9;
int N, M, m, X[maxm], Y[maxm], Z[maxm];
double f[maxn][maxn], p[maxn];
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; i++) {
    scanf("%d%d%d", &X[i], &Y[i], &Z[i]);
    if (X[i] > 1 && X[i] < N) f[X[i]][X[i]]++, f[X[i]][Y[i]]--;
    if (Y[i] > 1 && Y[i] < N) f[Y[i]][Y[i]]++, f[Y[i]][X[i]]--;
  }
  f[1][N + 1] = 1, f[1][1] = 1;
  f[N][N + 1] = 0, f[N][N] = 1;
  for (int i = 1; i <= N; i++) {
    if (abs(f[i][i]) < eps)
      for (int j = i + 1; j <= N; j++)
        if (abs(f[j][i]) > eps) {
          for (int k = i; k <= N + 1; k++) f[i][k] += f[j][k];
          break;
        }
    for (int j = i + 1; j <= N; j++)
      if (abs(f[j][i]) > eps) {
        double r(f[j][i] / f[i][i]);
        for (int k = i; k <= N + 1; k++) f[j][k] -= f[i][k] * r;
      }
  }
  for (int i = N; i; i--)
    if (abs(f[i][i]) > eps) {
      p[i] = f[i][N + 1];
      for (int j = i + 1; j <= N; j++) p[i] -= f[i][j] * p[j];
      p[i] /= f[i][i];
    }
  double rate(1.0 / 0), ans(0);
  for (int i = 1; i <= M; i++) rate = min(rate, Z[i] / abs(p[X[i]] - p[Y[i]]));
  for (int i = 1; i <= M; i++) {
    if (X[i] == 1) ans += p[1] - p[Y[i]];
    if (Y[i] == 1) ans += p[1] - p[X[i]];
  }
  printf("%.7f\n", isfinite(rate) ? ans * rate : 0);
  for (int i = 1; i <= M; i++)
    printf("%.7f\n", isfinite(rate) ? (p[X[i]] - p[Y[i]]) * rate : 0);
  return 0;
}
