#include using namespace std; #define mk make_pair #define st first #define nd second typedef long long lld; typedef __int128_t int128; int S; int generateTabacco(int exp, const int& start, vector >& toPick) { // cout << "EXP: " << exp << '\n'; if (!exp) { cout << 0 << ' ' << start << ' ' << 1 << '\n'; toPick.push_back(mk(0, start)); return start + 1; } ++exp; for (int i = 0; i < exp; i++) { int end = 2 * exp - 2 * i - 1; cout << i << ' ' << start + i << ' ' << 1 << '\n'; for (int j = 1; j < end; j++) { cout << i << ' ' << start + i + j << ' ' << 0 << '\n'; } cout << i << ' ' << end + start + i << ' ' << 1 << '\n'; } --exp; int mid = start + exp; for (int i = -1; i >= exp - S; i--) { cout << i << ' ' << mid << ' ' << 0 << '\n'; cout << i << ' ' << mid + 1 << ' ' << 0 << '\n'; } toPick.push_back(mk(exp - S, mid)); return start + 2 * exp + 2; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); lld N; cin >> N; if (!N) { cout << "0 0\n"; return 0; } int exp = 0, start = -1000000; int toCut = 0; vector bits; while (N) { if (N & 1) { bits.push_back(exp); toCut += exp * (exp + 1); } ++exp; N >>= 1; } cout << toCut << '\n'; // cout << "BITS: "; // for (int i = 0; i < bits.size(); i++) // cout << bits[i] << ' '; // cout << '\n'; S = exp - 1; vector > toPick; while (!bits.empty()) { start = 1 + generateTabacco(bits.back(), start, toPick); bits.pop_back(); } cout << toPick.size() << ' ' << S << '\n'; for (pair& i : toPick) { cout << i.first << ' ' << i.second << '\n'; } return 0; }