#include <iostream>
#include <vector>
#define bmax 20
using std::cin;
using std::cout;
struct edge
{
    int u, v, c;
    edge(int _u, int _v, int _c)
    : u(_u), v(_v), c(_c) {}
};
std::vector<edge> eds;
int l;
int main()
{
    std::ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> l;
    cout << bmax << ' ';
    for(int i = bmax - 1, j = 1; i > 1; --i, j <<= 1){
      eds.push_back(edge(i, i + 1, j));
      eds.push_back(edge(i, i + 1, 0));
    }
    int j = 0;
    if((l >> (bmax - 1)) & 1){
      eds.push_back(edge(1, 2, 0));
      eds.push_back(edge(1, 2, 1 << (bmax - 2)));
      j |= 1 << (bmax - 1);
    }
    for(int i = (bmax - 2); i >= 0; --i)
      if((l >> i) & 1){
        eds.push_back(edge(1, bmax - i, j));
        j |= 1 << i;
      }
    cout << eds.size() << '\n';
    for(int i = 0; i < eds.size(); ++i)
      cout << eds[i].u << ' ' << eds[i].v << ' ' << eds[i].c << '\n';
    return 0;
}
