from collections import deque, defaultdict, Counter from bisect import bisect_left, bisect_right from itertools import permutations, combinations from functools import cmp_to_key, cache from heapq import heappop, heappush import math, sys import pypyjit pypyjit.set_param('max_unroll_recursion=-1') sys.setrecursionlimit(10**7) _int = lambda x: int(x)-1 MOD = 998244353 INF = 1<<62 Yes, No = "Yes", "No" M = 200000 X = int(input()) def prime(num): num = int(num) p = [] if num < 2: return p p.append(2) memo = [i%2 for i in range(num+1)] for i in range(3, num+1, 2): if memo[i] == 0: continue p.append(i) for j in range(i, num+1, i): memo[j] = 0 return p P = prime(M) # print(P) if X < 6: print(X+1) for i in range(X): print(1, i+2) C = ["b"]+["g"]*X print(*C) exit() cur = 1 last = -1 UV = [] C = [] for p in P: while X%p == 0: if cur+p > M: print(-1) exit() par = cur if last != -1: UV.append((last, par)) last = par C.append("b") cur += p+1 for i in range(p): UV.append((par, par+i+1)) C.append("g") X //= p if X != 1: print(-1) exit() print(len(C)) for u, v in UV: print(u, v) print(*C)