A = int(input()) if A == 0: print("2 0") elif A == 1: print("1 0") else: factors = [] a = A while a > 1: for k in range(3, 1, -1): # Check 3 first, then 2 if a % k == 0: factors.append(k) a = a // k break else: # Prime number remaining factors.append(a) a = 1 sum_factors = sum(factors) # Calculate total nodes n = sum_factors + 2 # sum_factors layers nodes + start(1) + end if n > 128: # Re-try factorizing, prioritizing more 2's might help in some cases # Alternatively, this problem should ensure a valid solution exists factors = [] a = A while a > 1: for k in range(2, 1, -1): if a % k == 0: factors.append(k) a = a // k break else: factors.append(a) a = 1 sum_factors = sum(factors) n = sum_factors + 2 if n > 128: # If still no, it's a problem, but per problem statement, this won't happen pass # Construct layers layers = [[1]] current_node = 2 for k in factors: layer = list(range(current_node, current_node + k)) layers.append(layer) current_node += k layers.append([current_node]) # End node m = 0 edges = [] for i in range(len(layers) - 1): from_layer = layers[i] to_layer = layers[i + 1] for u in from_layer: for v in to_layer: edges.append((u, v)) m += 1 print(f"{current_node} {m}") for u, v in edges: print(f"{u} {v}")