## https://yukicoder.me/problems/no/1006 def main(): X = int(input()) # osa-k法による素因数分解をベースに約数の数を計算 min_primes = [i for i in range(X + 1)] for p in range(2, X + 1): if min_primes[p] != p: continue x = 2 * p while x <= X: if min_primes[x] == x: min_primes[x] = p x += p divisor_count = [0] * (X + 1) for x in range(1, X + 1): p_map = {} x0 = x while x0 != 1: p = min_primes[x0] if p not in p_map: p_map[p] = 0 p_map[p] += 1 x0 //= p ans = 1 for v in p_map.values(): ans *= (v + 1) divisor_count[x] = ans answer = float("inf") answer_ab = [] for a in range(1, X): b = X - a da = divisor_count[a] db = divisor_count[b] ans = abs(a - da - b + db) if answer > ans: answer = ans answer_ab = [(a, b)] elif answer == ans: answer_ab.append((a, b)) answer_ab.sort(key=lambda x : x[0]) for ans in answer_ab: print(ans[0],ans[1]) if __name__ == "__main__": main()