#!/usr/bin/env python3 import sys def main(): input = sys.stdin.readline x = int(input()) # X=1 の特例 if x == 1: print(2) print("1 2") print("b g") return # 200,000 以下の因数で試し割り(200,000 を超える因数があれば後で検出) temp = x prime_factors = [] # 素因数をリストに列挙 d = 2 while d * d <= temp and d <= 200000: while temp % d == 0: prime_factors.append(d) temp //= d d += 1 if temp > 1: prime_factors.append(temp) # もし因数の中に 200,000 を超えるものがあれば,頂点数が必ず制限を超える for p in prime_factors: if p > 200000: print(-1) return # ここで,素因数リスト prime_factors から「まとめるべき部分」 # - 2 の因子は,2 個でまとめると 4 として使うと頂点数が減る factors = [] count2 = prime_factors.count(2) non_twos = [p for p in prime_factors if p != 2] # 2 の個数が偶数なら,そのペアをまとめて 4 を作る factors.extend([4] * (count2 // 2)) # 奇数個なら,最後の 1 つはそのまま 2 とする if count2 % 2 == 1: factors.append(2) # 2 以外の素因数はそのまま使う(それぞれの素因数 p は p+1 の頂点を必要とする) factors.extend(non_twos) # 茶色頂点の数 k と総緑色頂点数(因子和)から全体頂点数を計算 k = len(factors) total_vertices = k + sum(factors) if total_vertices > 200000: print(-1) return n = total_vertices edges = [] # 茶色頂点は 1,2,...,k とし,それらを鎖状につなぐ for i in range(1, k): edges.append((i, i+1)) # 次に,各茶色頂点 i に対して factors[i-1] 個の緑色頂点を付ける current_green = k + 1 for i, f in enumerate(factors, start=1): for _ in range(f): edges.append((i, current_green)) current_green += 1 # 色は,頂点 1..k を茶色 (b),残りを緑色 (g) とする colors = ["b"] * k + ["g"] * (n - k) # 出力(フォーマットに厳密に従う) print(n) for u, v in edges: print(u, v) print(" ".join(colors)) if __name__ == '__main__': main()