#include #include #include #include #include #include int main() { int n; scanf("%d", &n); // pre std::vector prime, mip(2e6 + 1); mip[0] = mip[1] = -1; for(int i = 2; i < mip.size(); i++) { if(mip[i] == 0) { mip[i] = i; prime.push_back(i); } for(int j = 0; j < prime.size() and prime[j] <= mip[i] and i * prime[j] <= mip.size(); j++) { mip[i * prime[j]] = prime[j]; } } auto pfact = [&](int x) { std::vector> vec; while(x > 1) { if(vec.empty() or vec.back().first != mip[x]) { vec.push_back({mip[x], 1}); } else { vec.back().second++; } x /= mip[x]; } return vec; }; int ans = 1 << 30; std::vector> vec; for(int A = 1; A < n; A++) { int B = n - A; auto X = pfact(A); auto Y = pfact(B); int x = 1, y = 1; for(auto v: X) x *= v.second + 1; for(auto v: Y) y *= v.second + 1; int tmp = std::abs((A - x) - (B - y)); if(ans > tmp) { ans = tmp; vec.clear(); } if(ans == tmp) vec.push_back({A, B}); } for(auto v: vec) printf("%d %d\n", v.first, v.second); return 0; }