#include <bits/stdc++.h>
using namespace std;
int N, M, x[5005], y[5005], w[5005];
double F[105], A[105][105];
void GTXY() {
  for (int i = 1, j; i <= N; i++) {
    for (j = i; j <= N && !A[j][i]; j++)
      ;
    if (j > N) continue;
    if (j ^ i)
      for (int k = i; k <= N + 1; k++) swap(A[i][k], A[j][k]);
    for (int j = i + 1; j <= N; j++) {
      double t = A[j][i] / A[i][i];
      for (int k = i; k <= N + 1; k++) A[j][k] -= t * A[i][k];
    }
  }
  for (int i = N; i; i--) {
    for (int j = i + 1; j <= N; j++) A[i][N + 1] -= F[j] * A[i][j];
    if (A[i][i]) F[i] = A[i][N + 1] / A[i][i];
  }
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; i++) {
    scanf("%d%d%d", &x[i], &y[i], &w[i]);
    if (x[i] != 1 && x[i] != N) A[x[i]][y[i]]--, A[x[i]][x[i]]++;
    if (y[i] != 1 && y[i] != N) A[y[i]][x[i]]--, A[y[i]][y[i]]++;
  }
  A[1][1] = A[N][N] = A[N][N + 1] = 1;
  GTXY();
  double Min = 1e16, Ans = 0;
  for (int i = 1; i <= M; i++) {
    double t = F[y[i]] - F[x[i]];
    Min = min(Min, abs(w[i] / t));
  }
  if (Min > 10000000.0) Min = 0;
  for (int i = 1; i <= M; i++)
    if (x[i] == 1 || y[i] == 1) Ans += F[y[i] * x[i]] * Min;
  printf("%.7lf\n", Ans);
  for (int i = 1; i <= M; i++) printf("%.7lf\n", (F[y[i]] - F[x[i]]) * Min);
}
