#include <bits/stdc++.h>
using namespace std;
struct pint {
  int x;
  long long y;
  bool operator<(const pint& aa) const {
    return y == aa.y ? x < aa.x : y < aa.y;
  }
  bool operator>(const pint& aa) const {
    return y == aa.y ? x > aa.x : y > aa.y;
  }
};
int n, m;
long long in[100001];
set<pint> S;
struct edge {
  int x, y;
  long long z;
};
vector<edge> ans;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int p, q, r, i = 1; i <= m; i++) {
    cin >> p >> q >> r;
    in[p] -= r;
    in[q] += r;
  }
  for (int i = 1; i <= n; i++) S.insert({i, in[i]});
  while (!S.empty() && S.begin()->y != 0) {
    pint p = *S.begin();
    pint q = *S.rbegin();
    S.erase(p);
    S.erase(q);
    long long e = min(-p.y, q.y);
    ans.push_back({p.x, q.x, e});
    p.y += e;
    q.y -= e;
    if (p.y) S.insert(p);
    if (q.y) S.insert(q);
  }
  cout << ans.size();
  for (auto p : ans) cout << '\n' << p.x << ' ' << p.y << ' ' << p.z;
}
