#include using namespace std; using ll = long long; __int128_t cube_sum(ll x){ return (__int128_t)(x * (x + 1) / 2) * (x * (x + 1) / 2); } int main() { ll n; cin >> n; assert(1 <= n && n <= 1000000000000000000); vector> ans; for (ll i = 1; i * i * i <= n; i++){ auto check = [&](ll mid)->bool { return cube_sum(mid) - cube_sum(i - 1) <= n; }; ll ok = i, ng = 1000010; while (abs(ok - ng) > 1){ ll mid = (ok + ng) / 2; if (check(mid)) ok = mid; else ng = mid; } if (cube_sum(ok) - cube_sum(i - 1) == n) ans.emplace_back(i, ok); } cout << ans.size() << endl; for (auto [x, y] : ans) cout << x << " " << y << endl; }