#include <bits/stdc++.h>
using namespace std;
long long solve() {
  long long n, m;
  cin >> n >> m;
  set<pair<long long, long long>> s;
  map<long long, long long> m1;
  for (long long i = 0; i < m; ++i) {
    long long a, b, c;
    cin >> a >> b >> c;
    m1[a] -= c;
    m1[b] += c;
  }
  for (long long i = 1; i <= n; ++i) {
    if (m1[i]) {
      s.insert({m1[i], i});
    }
  }
  vector<pair<pair<long long, long long>, long long>> ans;
  while (!s.empty()) {
    auto it1 = s.begin();
    auto it2 = s.end();
    it2--;
    pair<long long, long long> p1 = *it1;
    pair<long long, long long> p2 = *it2;
    if (abs(p1.first) < abs(p2.first)) {
      ans.push_back({{p1.second, p2.second}, abs(p1.first)});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
      s.insert({p1.first + p2.first, p2.second});
    } else if (abs(p1.first) == abs(p2.first)) {
      ans.push_back({{p1.second, p2.second}, abs(p2.first)});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
    } else {
      ans.push_back({{p1.second, p2.second}, p2.first});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
      s.insert({p1.first + p2.first, p1.second});
    }
  }
  cout << (long long)ans.size() << "\n";
  for (auto i : ans) {
    cout << i.first.first << " " << i.first.second << " " << i.second << "\n";
  }
  return 0;
}
signed main() {
  ios::sync_with_stdio(0);
  long long t = 1;
  while (t--) solve();
  return 0;
}

### Prompt

Please create a solution in Cpp to the following problem:

There are n people in this world, conveniently numbered 1 through n. They are using burles to buy goods and services. Occasionally, a person might not have enough currency to buy what he wants or needs, so he borrows money from someone else, with the idea that he will repay the loan later with interest. Let d(a,b) denote the debt of a towards b, or 0 if there is no such debt.

Sometimes, this becomes very complex, as the person lending money can run into financial troubles before his debtor is able to repay his debt, and finds himself in the need of borrowing money. 

When this process runs for a long enough time, it might happen that there are so many debts that they can be consolidated. There are two ways this can be done:

  1. Let d(a,b) > 0 and d(c,d) > 0 such that a ≠ c or b ≠ d. We can decrease the d(a,b) and d(c,d) by z and increase d(c,b) and d(a,d) by z, where 0 < z ≤ min(d(a,b),d(c,d)). 
  2. Let d(a,a) > 0. We can set d(a,a) to 0. 



The total debt is defined as the sum of all debts:

$$$\Sigma_d = ∑_{a,b} d(a,b)$$$

Your goal is to use the above rules in any order any number of times, to make the total debt as small as possible. Note that you don't have to minimise the number of non-zero debts, only the total debt.

Input

The first line contains two space separated integers n (1 ≤ n ≤ 10^5) and m (0 ≤ m ≤ 3⋅ 10^5), representing the number of people and the number of debts, respectively.

m lines follow, each of which contains three space separated integers u_i, v_i (1 ≤ u_i, v_i ≤ n, u_i ≠ v_i), d_i (1 ≤ d_i ≤ 10^9), meaning that the person u_i borrowed d_i burles from person v_i.

Output

On the first line print an integer m' (0 ≤ m' ≤ 3⋅ 10^5), representing the number of debts after the consolidation. It can be shown that an answer always exists with this additional constraint.

After that print m' lines, i-th of which contains three space separated integers u_i, v_i, d_i, meaning that the person u_i owes the person v_i exactly d_i burles. The output must satisfy 1 ≤ u_i, v_i ≤ n, u_i ≠ v_i and 0 < d_i ≤ 10^{18}.

For each pair i ≠ j, it should hold that u_i ≠ u_j or v_i ≠ v_j. In other words, each pair of people can be included at most once in the output.

Examples

Input

3 2
1 2 10
2 3 5


Output

2
1 2 5
1 3 5


Input

3 3
1 2 10
2 3 15
3 1 10


Output

1
2 3 5


Input

4 2
1 2 12
3 4 8


Output

2
1 2 12
3 4 8


Input

3 4
2 3 1
2 3 2
2 3 4
2 3 8


Output

1
2 3 15

Note

In the first example the optimal sequence of operations can be the following:

  1. Perform an operation of the first type with a = 1, b = 2, c = 2, d = 3 and z = 5. The resulting debts are: d(1, 2) = 5, d(2, 2) = 5, d(1, 3) = 5, all other debts are 0; 
  2. Perform an operation of the second type with a = 2. The resulting debts are: d(1, 2) = 5, d(1, 3) = 5, all other debts are 0. 



In the second example the optimal sequence of operations can be the following:

  1. Perform an operation of the first type with a = 1, b = 2, c = 3, d = 1 and z = 10. The resulting debts are: d(3, 2) = 10, d(2, 3) = 15, d(1, 1) = 10, all other debts are 0; 
  2. Perform an operation of the first type with a = 2, b = 3, c = 3, d = 2 and z = 10. The resulting debts are: d(2, 2) = 10, d(3, 3) = 10, d(2, 3) = 5, d(1, 1) = 10, all other debts are 0; 
  3. Perform an operation of the second type with a = 2. The resulting debts are: d(3, 3) = 10, d(2, 3) = 5, d(1, 1) = 10, all other debts are 0; 
  4. Perform an operation of the second type with a = 3. The resulting debts are: d(2, 3) = 5, d(1, 1) = 10, all other debts are 0; 
  5. Perform an operation of the second type with a = 1. The resulting debts are: d(2, 3) = 5, all other debts are 0. 

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
long long solve() {
  long long n, m;
  cin >> n >> m;
  set<pair<long long, long long>> s;
  map<long long, long long> m1;
  for (long long i = 0; i < m; ++i) {
    long long a, b, c;
    cin >> a >> b >> c;
    m1[a] -= c;
    m1[b] += c;
  }
  for (long long i = 1; i <= n; ++i) {
    if (m1[i]) {
      s.insert({m1[i], i});
    }
  }
  vector<pair<pair<long long, long long>, long long>> ans;
  while (!s.empty()) {
    auto it1 = s.begin();
    auto it2 = s.end();
    it2--;
    pair<long long, long long> p1 = *it1;
    pair<long long, long long> p2 = *it2;
    if (abs(p1.first) < abs(p2.first)) {
      ans.push_back({{p1.second, p2.second}, abs(p1.first)});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
      s.insert({p1.first + p2.first, p2.second});
    } else if (abs(p1.first) == abs(p2.first)) {
      ans.push_back({{p1.second, p2.second}, abs(p2.first)});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
    } else {
      ans.push_back({{p1.second, p2.second}, p2.first});
      s.erase(s.find(p1));
      s.erase(s.find(p2));
      s.insert({p1.first + p2.first, p1.second});
    }
  }
  cout << (long long)ans.size() << "\n";
  for (auto i : ans) {
    cout << i.first.first << " " << i.first.second << " " << i.second << "\n";
  }
  return 0;
}
signed main() {
  ios::sync_with_stdio(0);
  long long t = 1;
  while (t--) solve();
  return 0;
}

```