func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = 1e17;   const long long MOD = 1000000007;   const long long MAX = 4000001;   const long double eps = 1E-14;   long long max(long long a, long long b) {     if (a > b) {       return a;     }     return b;   }   long long min(long long a, long long b) {     if (a > b) {       return b;     }     return a;   }   long long gcd(long long a, long long b) {     if (b == 0) {       return a;     }     if (a < b) {       return gcd(b, a);     }     return gcd(b, a % b);   }   long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }   struct edge {     long long ind;     long long fr;     long long to;     long long d;   };   class mint {     long long x;       public:     mint(long long x = 0) : x((x % MOD + MOD) % MOD) {}     mint operator-() const { return mint(-x); }     mint& operator+=(const mint& a) {       if ((x += a.x) >= MOD) x -= MOD;       return *this;     }     mint& operator-=(const mint& a) {       if ((x += MOD - a.x) >= MOD) x -= MOD;       return *this;     }     mint& operator*=(const mint& a) {       (x *= a.x) %= MOD;       return *this;     }     mint operator+(const mint& a) const {       mint res(*this);       return res += a;     }     mint operator-(const mint& a) const {       mint res(*this);       return res -= a;     }     mint operator*(const mint& a) const {       mint res(*this);       return res *= a;     }     mint pow(long long t) const {       if (!t) return 1;       mint a = pow(t >> 1);       a *= a;       if (t & 1) a *= *this;       return a;     }     mint inv() const { return pow(MOD - 2); }     mint& operator/=(const mint& a) { return (*this) *= a.inv(); }     mint operator/(const mint& a) const {       mint res(*this);       return res /= a;     }     friend ostream& operator<<(ostream& os, const mint& m) {       os << m.x;       return os;     }   };   mint pw(mint a, long long b) {     if (b == 0) {       return 1;     }     mint ret = pw(a, b >> 1);     ret *= ret;     if (b & 1) {       ret *= a;     }     return ret;   }   int main() {     long long T;     cin >> T;     for (long long t = 1; t <= T; t++) {       long long N;       cin >> N;       vector<long long> a(N + 1);       for (long long i = 1; i <= N; i++) cin >> a[i];       long long S = 0;       for (long long i = 1; i <= N; i++) S += a[i];       if (S % N != 0) {         cout << -1 << endl;       } else {         S = S / N;         vector<pair<long long, long long>> rem;         for (long long i = 2; i <= N; i++) {           long long x = 0;           if (a[i] % i != 0) {             x = i - a[i] % i;           }           rem.push_back({x, i});         }         sort(rem.begin(), rem.end());         vector<pair<pair<long long, long long>, long long>> ans;         for (long long k = 0; k < N - 1; k++) {           auto p = rem[k];           if (p.first > a[1]) {             break;           }           ans.push_back({{1, p.second}, p.first});           a[1] -= p.first;           a[p.second] += p.first;           ans.push_back({{p.second, 1}, a[p.second] / p.second});           a[1] += a[p.second];           a[p.second] = 0;         }         for (long long i = 2; i <= N; i++) {           if (a[i] == 0) {             continue;           }           ans.push_back({{i, 1}, a[i] / i});           a[1] += a[i] / i * i;           a[i] %= i;         }         bool b = 1;         for (long long i = 2; i <= N; i++) {           if (a[i] > S) {             cout << -1 << endl;             b = 0;             break;           }           ans.push_back({{1, i}, S - a[i]});         }         if (b) {           cout << ans.size() << endl;           for (auto p : ans) {             cout << p.first.first <<     << p.first.second <<     << p.second                  << endl;           }         }       }     }   }   