def decompose(A): m = 0 while A % 2 == 0 and A != 0: m += 1 A = A // 2 return m, A def main(): import sys A = int(sys.stdin.readline().strip()) if A == 0: print("2 0") return elif A == 1: print("1 0") return m, k = decompose(A) if k > 126: # Handle the case where k is larger than 126 # We need to create a graph where 1 connects to k nodes, each connects to N=k+1 # But ensure N does not exceed 128 if k + 1 > 128: N = 128 M = (N - 1) * 2 print(f"{N} {M}") for i in range(2, N + 1): print(f"1 {i}") for i in range(2, N): print(f"{i} {N}") else: N = k + 1 M = (N - 1) * 2 print(f"{N} {M}") for i in range(2, N + 1): print(f"1 {i}") for i in range(2, N): print(f"{i} {N}") else: # Proceed with the initial approach edges = [] nodes = [1] current_node = 1 # Add layers for each factor of 2 for _ in range(m): a = current_node + 1 b = current_node + 2 edges.append((current_node, a)) edges.append((current_node, b)) next_node = current_node + 3 edges.append((a, next_node)) edges.append((b, next_node)) nodes.extend([a, b, next_node]) current_node = next_node # Add the final layer if k > 1 if k > 1: start = current_node + 1 end = start + k - 1 nodes.extend(range(start, end + 1)) for i in range(start, end + 1): edges.append((current_node, i)) next_node = end + 1 nodes.append(next_node) for i in range(start, end + 1): edges.append((i, next_node)) current_node = next_node # Output the result N = len(nodes) M = len(edges) print(f"{N} {M}") for u, v in edges: print(f"{u} {v}") if __name__ == "__main__": main()