#ifdef NACHIA #define _GLIBCXX_DEBUG #else #define NDEBUG #endif #include <iostream> #include <string> #include <vector> #include <algorithm> namespace nachia { struct DsuFast{ private: std::vector<int> w; public: DsuFast(int n = 0) : w(n, -1) {} int leader(int u){ if(w[u] < 0) return u; return w[u] = leader(w[u]); } int operator[](int u){ return leader(u); } int merge(int u, int v){ u = leader(u); v = leader(v); if(u == v) return u; if(-w[u] < -w[v]) std::swap(u, v); w[u] += w[v]; w[v] = u; return u; } int size(int u){ return -w[leader(u)]; } bool same(int u, int v){ return leader(u) == leader(v); } }; } // namespace nachia using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(i64 i=0; i<i64(n); i++) const i64 INF = 1001001001001001001; template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; } template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; } using namespace std; void testcase(){ i64 K; cin >> K; vector<i64> A(K); rep(i,K) cin >> A[i]; sort(A.begin(), A.end()); rep(i,K-1) A[K-1-i] -= A[K-2-i]; cout << (K*2+1) << "\n"; rep(i,K){ cout << (i*2+1) << " " << (i*2+2) << " " << A[i] << "\n"; cout << (i*2+2) << " " << (i*2+3) << " " << A[i] << "\n"; } cout << (K+1) << "\n"; rep(i,K+1){ if(i) cout << " "; cout << (i*2+1); } cout << "\n"; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); rep(t,1) testcase(); return 0; }