#include <bits/stdc++.h>
using namespace std;
double g[110][110], x[110];
int n, m, ues[110];
pair<pair<int, int>, int> p[5010];
bool vis[110];
void read(int &x) {
  char ch = getchar();
  int mark = 1;
  for (; ch != '-' && (ch < '0' || ch > '9'); ch = getchar())
    ;
  if (ch == '-') mark = -1, ch = getchar();
  for (x = 0; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - 48;
  x *= mark;
}
double Abs(double x) {
  if (x < 0) return -x;
  return x;
}
int main() {
  read(n);
  read(m);
  g[1][1] = 1;
  g[n][n] = 1;
  g[n][n + 1] = 1;
  for (int i = 1; i <= m; i++) {
    read(p[i].first.first);
    read(p[i].first.second);
    read(p[i].second);
    g[p[i].first.first][p[i].first.first]++;
    g[p[i].first.first][p[i].first.second]--;
    g[p[i].first.second][p[i].first.second]++;
    g[p[i].first.second][p[i].first.first]--;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      if (Abs(g[i][j]) && !vis[j]) {
        vis[j] = 1;
        ues[i] = j;
        break;
      }
    for (int j = 1; j <= n; j++)
      if (ues[i] != j && Abs(g[j][i])) {
        double tmp = -g[j][i] / g[ues[i]][i];
        for (int k = 1; k <= n + 1; k++) g[j][k] += g[ues[i]][k] * tmp;
      }
  }
  for (int i = 1; i <= n; i++) x[i] = g[ues[i]][n + 1] / g[ues[i]][i];
  double Min = 1e20;
  for (int i = 1; i <= m; i++) {
    if (Abs(x[p[i].first.first] - x[p[i].first.second]) > 1e-6)
      Min = min(Min,
                p[i].second / Abs(x[p[i].first.first] - x[p[i].first.second]));
  }
  double ans = 0;
  for (int i = 1; i <= m; i++)
    if (p[i].first.first == 1)
      ans += Min * (x[p[i].first.second] - x[p[i].first.first]);
    else if (p[i].first.second == 1)
      ans -= Min * (x[p[i].first.second] - x[p[i].first.first]);
  printf("%.5lf\n", ans);
  if (Abs(ans) < 1e-6) memset(x, 0, sizeof(x));
  for (int i = 1; i <= m; i++)
    printf("%.5lf\n", Min * (x[p[i].first.second] - x[p[i].first.first]));
  return 0;
}
