#include <bits/stdc++.h>
using namespace std;
int n, m, u[5005], v[5005], w[5005];
double A[105][105], x[105], ans;
inline void setIO(string a) {}
inline void fg() {
  puts("0.0");
  for (int i = (1); i <= (m); i++) printf("0.0\n");
  exit(0);
}
inline void gauss(int N) {
  for (int i = (1); i <= (N); i++) {
    for (int j = (i); j <= (N); j++)
      if (fabs(A[j][i]) > 1e-10) {
        for (int k = (i); k <= (N + 1); k++) swap(A[j][k], A[i][k]);
        break;
      }
    if (fabs(A[i][i]) < 1e-10) continue;
    for (int j = (n + 1); j >= (i); j--) A[i][j] /= A[i][i];
    for (int j = (1); j <= (N); j++)
      if (j ^ i) {
        double c = A[j][i] / A[i][i];
        for (int k = (1); k <= (N + 1); k++) A[j][k] -= A[i][k] * c;
      }
  }
  for (int i = (1); i <= (n); i++) x[i] = A[i][n + 1];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (1); i <= (m); i++) {
    scanf("%d%d%d", &u[i], &v[i], &w[i]);
    if (u[i] != 1 && u[i] != n) --A[u[i]][u[i]], ++A[u[i]][v[i]];
    if (v[i] != 1 && v[i] != n) --A[v[i]][v[i]], ++A[v[i]][u[i]];
  }
  A[n][n] = A[n][n + 1] = A[1][1] = 1;
  gauss(n);
  double c = 10000000000000000.;
  for (int i = (1); i <= (m); i++) {
    double Now = x[v[i]] - x[u[i]];
    c = min(c, fabs(w[i] / Now));
  }
  if (fabs(c) < 1e-6 || c > 1234298472982) c = 0;
  for (int i = (1); i <= (m); i++)
    if (u[i] == 1 || v[i] == 1) ans += x[u[i] * v[i]] * c;
  printf("%.12lf\n", ans);
  for (int i = (1); i <= (m); i++) printf("%.12lf\n", (x[v[i]] - x[u[i]]) * c);
  return 0;
}
