#pragma region #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //# pragma GCC target("avx2") //# pragma GCC optimize("O3") struct Init{ Init(){ std::cin.tie(0); ios::sync_with_stdio(false); cout << setprecision(20) << fixed; } }init; using ll = long long; using ull = unsigned long long; using ld = long double; #define all(x) begin((x)), end((x)) #define pb push_back #define mp make_pair #define mt make_tuple #define uq(v) v.erase(unique(begin(v), end(v)), end(v)) #define _overload4(_1,_2,_3,_4,name,...) name #define _overload3(_1,_2,_3,name,...) name #define _rep1(n) for(int i = 0; i < n; ++i) #define _rep2(i,n) for(int i = 0; i < n; ++i) #define _rep3(i,a,b) for(int i = a; i < b; ++i) #define _rep4(i,a,b,c) for(int i = a; i < b; i += c) #define rep(...) _overload4(__VA_ARGS__,_rep4,_rep3,_rep2,_rep1)(__VA_ARGS__) #define _rrep1(n) for(int i = (n) - 1; i >= 0; --i) #define _rrep2(i,n) for(int i = (n) - 1; i >= 0; --i) #define _rrep3(i,a,b) for(int i = (b) - 1; i >= (a); --i) #define _rrep4(i,a,b,c) for(int i = a + (b - a - 1) / c*c; i >= a; i -= c) #define rrep(...) _overload4(__VA_ARGS__,_rrep4,_rrep3,_rrep2,_rrep1)(__VA_ARGS__) template using pq = priority_queue; template using pq_g = priority_queue, greater>; template bool chmax(T &a, const T &b){ if(a < b){a = b; return 1; } return 0; } template bool chmin(T &a, const T &b){ if(a > b){a = b; return 1; } return 0; } template auto min(const T& a){ return *min_element(all(a)); } template auto max(const T& a){ return *max_element(all(a)); } constexpr ull INF = (1ULL << 61) + (1ULL << 30); constexpr int inf = (1 << 30); constexpr int dx[] = {1, 0, -1, 0, 1, 1, -1, -1}; constexpr int dy[] = {0, 1 ,0, -1, 1, -1, 1, -1}; #pragma endregion void solve(){ int N; cin >> N; vector A(N); rep(i, N) cin >> A[i]; vector> op; rep(i, 30){ if(A[0] == A[N - 1]) break; rep(j, N){ if(j == N - 1){ op.pb(mt(1, N - 1, A[N - 1] - A[0])); ll ad = A[N - 1] - A[0]; rep(k, N - 1) A[k] += ad; break; } ll sub = A[j + 1] - A[0]; if(A[j] + sub > A[N - 1]){ op.pb(mt(1, j, A[j] - A[0])); ll ad = A[j] - A[0]; rep(k, j) A[k] += ad; break; } } sort(all(A)); } cout << op.size() << "\n"; for(auto [l, r, v]: op) cout << l << " " << r << " " << v << "\n"; } int main(){ int T; T = 1; //cin >> T; rep(i, T) solve(); }