#include <bits/stdc++.h>
using namespace std;
const int oo = 1047483647, maxn = 110;
const double eps = 1e-6;
int n, i, j, k, m, q, fa[maxn];
double F[maxn][maxn], H[maxn];
struct node {
  int x, y, c;
} a[maxn * 50];
int Read() {
  char ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && (ch != '-'))
    ;
  bool neg = (ch == '-');
  if (ch == '-') ch = getchar();
  int v = 0;
  while (ch >= '0' && ch <= '9') v = v * 10 + ch - '0', ch = getchar();
  if (neg) v = -v;
  return v;
}
void work() {
  int i, j, k;
  for (i = 2; i <= n - 1; i++) {
    double Ma = 0;
    int Rec;
    for (j = i; j <= n; j++)
      if (fabs(F[j][i]) > Ma) {
        Ma = fabs(F[j][i]);
        Rec = j;
      }
    if (Ma < eps) continue;
    if (Rec != i)
      for (j = 0; j <= n; j++) swap(F[i][j], F[Rec][j]);
    for (j = 1; j <= n; j++)
      if (j != i)
        if (F[j][i]) {
          double t1 = F[j][i] / F[i][i];
          for (k = 0; k <= n; k++) F[j][k] = F[j][k] - t1 * F[i][k];
        }
  }
}
int get(int x) {
  if (!fa[x])
    return x;
  else
    return fa[x] = get(fa[x]);
}
int main() {
  n = Read();
  m = Read();
  for (i = 1; i <= m; i++) {
    a[i].x = Read();
    a[i].y = Read();
    a[i].c = Read();
    if (a[i].x != 1 && a[i].x != n) {
      F[a[i].x][a[i].x]++;
      F[a[i].x][a[i].y]--;
    }
    if (a[i].y != 1 && a[i].y != n) {
      F[a[i].y][a[i].y]++;
      F[a[i].y][a[i].x]--;
    }
    int x = get(a[i].x), y = get(a[i].y);
    if (x != y) fa[x] = y;
  }
  if (get(1) != get(n)) {
    for (i = 1; i <= m + 1; i++) printf("0\n");
    return 0;
  }
  work();
  H[1] = 0;
  H[n] = 1;
  for (i = 2; i <= n - 1; i++)
    if (F[i][i] > eps) H[i] = (-F[i][n] * H[n] - H[1] * F[i][1]) / F[i][i];
  double Ma = oo;
  for (i = 1; i <= m; i++) {
    double t = fabs(H[a[i].x] - H[a[i].y]);
    if (t > eps) Ma = min(Ma, a[i].c / t);
  }
  for (i = 1; i <= n; i++) H[i] *= Ma;
  double ans = 0;
  for (i = 1; i <= m; i++)
    if (a[i].x == 1 || a[i].y == 1) ans += fabs(H[a[i].x] - H[a[i].y]);
  printf("%.5f\n", ans);
  for (i = 1; i <= m; i++) {
    printf("%.5f\n", H[a[i].y] - H[a[i].x]);
  }
  return 0;
}
