#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
int u[5005], v[5005], c[5005];
double x[105], a[105][105];
void pp() {
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    for (int(j) = 1; (j) <= (int)(n + 1); (j)++) cout << a[i][j] << " ";
    cout << endl;
  }
}
void dd() {
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    int j = -1;
    for (int k = i; k <= n; k++) {
      if (abs(a[k][i]) > 1e-9) {
        j = k;
        break;
      }
    }
    if (j == -1) continue;
    if (i != j)
      for (int k = i; k <= n + 1; k++) swap(a[i][k], a[j][k]);
    for (int k = i + 1; k <= n; k++) {
      double x = a[i][i], y = a[k][i];
      if (abs(y) < 1e-9) continue;
      for (int p = i; p <= n + 1; p++) {
        a[k][p] = a[i][p] - x / y * a[k][p];
      }
    }
  }
  for (int i = n; i >= 1; i--) {
    double tmp = 0;
    for (int j = i + 1; j <= n; j++) {
      tmp += a[i][j] * x[j];
    }
    tmp = a[i][n + 1] - tmp;
    if (abs(a[i][i]) > 1e-9)
      x[i] = tmp / a[i][i];
    else {
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int(i) = 0; (i) < (int)(m); (i)++) {
    scanf("%d%d%d", u + i, v + i, c + i);
    a[u[i]][v[i]]--;
    a[u[i]][u[i]]++;
    a[v[i]][u[i]]--;
    a[v[i]][v[i]]++;
  }
  a[1][n + 1] = 1;
  a[n][n + 1] = 2;
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    a[1][i] = i == 1 ? 1 : 0;
    a[n][i] = i == n ? 1 : 0;
  }
  dd();
  double tmp = 1e9, ans = 0;
  for (int(i) = 0; (i) < (int)(m); (i)++) {
    tmp = min(tmp, c[i] / fabs(x[u[i]] - x[v[i]]));
  }
  for (int(i) = 1; (i) <= (int)(n); (i)++) x[i] *= tmp;
  for (int(i) = 0; (i) < (int)(m); (i)++) {
    if (u[i] == 1 || v[i] == 1) {
      ans += fabs(x[u[i]] - x[v[i]]);
    }
  }
  printf("%.10lf\n", ans);
  for (int(i) = 0; (i) < (int)(m); (i)++)
    printf("%.10lf\n", -x[u[i]] + x[v[i]]);
  return 0;
}
