#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
template <class T>
T sqr(T x) {
  return x * x;
}
template <class T>
T alex(T x) {
  return (x > 0) ? x : -x;
}
template <class T>
void read(T& x) {
  x = 0;
  T f = 1;
  char ch = getchar();
  while ((ch < 48 || ch > 57) && ch != 45) ch = getchar();
  if (ch == 45) f = -1, ch = getchar();
  while (ch >= 48 && ch <= 57) x = x * 10 + ch - 48, ch = getchar();
  x *= f;
}
int sign(double x) {
  if (fabs(x) <= 1e-9) return 0;
  if (x > 1e-9)
    return 1;
  else
    return -1;
}
int n, e;
double v[105][105];
double mat[105][105];
int x[5005], y[5005];
double w[5005];
void solve(int n) {
  for (int i = (1); i <= (n); i++) {
    if (sign(mat[i][i]) == 0) {
      int k = 0;
      for (int j = (i + 1); j <= (n); j++)
        if (sign(mat[j][i]) != 0) {
          k = j;
          break;
        }
      for (int j = (i); j <= (n + 1); j++) swap(mat[i][j], mat[k][j]);
    }
    if (sign(mat[i][i]) != 0) {
      double tmp = mat[i][i];
      for (int j = (i); j <= (n + 1); j++) mat[i][j] /= tmp;
      for (int j = (i + 1); j <= (n); j++) {
        double tmp = mat[j][i];
        for (int k = (i); k <= (n + 1); k++) mat[j][k] -= mat[i][k] * tmp;
      }
    }
  }
  for (int i = (n); i >= (1); i--)
    if (sign(mat[i][i]) != 0) {
      for (int j = (i + 1); j <= (n); j++)
        if (sign(mat[j][j]) != 0) {
          double tmp = mat[i][j];
          mat[i][j] = 0.0;
          mat[i][n + 1] -= tmp * mat[j][n + 1];
        }
      double tmp = mat[i][i];
      mat[i][i] /= tmp;
      mat[i][n + 1] /= tmp;
    }
}
int main() {
  read(n);
  read(e);
  memset(v, 127, sizeof(v));
  double inf = v[0][0];
  for (int i = (1); i <= (e); i++) {
    read(x[i]);
    read(y[i]);
    read(w[i]);
  }
  for (int i = (1); i <= (n); i++) {
    if (i == 1)
      mat[i][i] = 1.0, mat[i][n + 1] = 0.0;
    else if (i == n)
      mat[i][i] = 1.0, mat[i][n + 1] = 1.0;
    else {
      int d = 0;
      for (int j = (1); j <= (e); j++) {
        if (x[j] == i) mat[i][y[j]] += -1.0, d++;
        if (y[j] == i) mat[i][x[j]] += -1.0, d++;
      }
      mat[i][i] = (double)d;
    }
  }
  solve(n);
  double res = inf;
  for (int i = (1); i <= (e); i++)
    if (sign(mat[x[i]][x[i]]) * sign(mat[y[i]][y[i]]) != 0) {
      res = min(res, w[i] / fabs((mat[y[i]][n + 1] - mat[x[i]][n + 1])));
    }
  double ans = 0.0;
  for (int i = (1); i <= (e); i++)
    if (x[i] == 1 || y[i] == 1)
      ans += res * fabs(mat[y[i]][n + 1] - mat[x[i]][n + 1]);
  printf("%lf\n", ans);
  if (sign(ans) == 0) {
    for (int i = (1); i <= (e); i++) printf("0.0\n");
    return 0;
  }
  for (int i = (1); i <= (e); i++)
    if (sign(mat[x[i]][x[i]]) * sign(mat[y[i]][y[i]]) != 0) {
      printf("%lf\n", res * (mat[y[i]][n + 1] - mat[x[i]][n + 1]));
    } else
      printf("%lf\n", 0.0);
  return 0;
}
