import numpy as np
import math


dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

def step(A, days=1):
    B = A.copy()
    for _ in range(days):
        for i in range(A.shape[0]):
            for j in range(A.shape[1]):
                if A[i,j] == -1: 
                    continue
                for d in range(4):
                    if i+dy[d] >= 0 and i+dy[d] < len(A) and j+dx[d] >= 0 and j+dx[d] < len(A[i]):
                        if A[i+dy[d],j+dx[d]] != -1:
                            B[i,j] += A[i+dy[d],j+dx[d]]
        np.copyto(A, B)
    return B

def make_rand(n, sz=6):
    A = np.random.rand(n, n)
    A[A < 0.5] = 1
    A[A >= 0.5] = 0
    # A[ind[2]] = -1 

    B = np.zeros((sz, sz))
    for i in range(sz):
        for j in range(sz):
            if np.random.random() < 0.5:
                B[i,j] = 1
    B[sz//2,sz//2] = 1

    s = n // 2 - sz // 2
    A[s:s + sz, s:s+sz] = B
    return A

def solve(n):
    while True:
        dims = 200
        days = int(math.log10(n)) * 2
        A = make_rand(dims, min(100, max(5, days)))
        start = A.copy()
        step(A, days)

        a = A.ravel()
        b = np.argsort(a)[::-1]
        left = n
        take = []
        for i in b:
            if a[i] > 0 and a[i] <= left:
                left -= a[i] 
                take.append(i)
                if left == 0:
                    break

        #if left < 1e5:
        #    print(left)
        #    quit()

        if left == 0:
            ind = start != -1
            print(ind.sum())
            for y in range(len(ind)):
                for x in range(len(ind[y])):
                    print(x, y, ind[y][x] * 1)

            print(len(take), days)
            # print(take)
            for i in take:
                print(i % dims, i // dims)
                # print(a[i])
                # print(A[i // dims, i % dims])

            return

solve(int(input()))