#include using namespace std; int main() { long long p, q; cin >> p >> q; vector div; for (long long i = 1; i * i <= q; i++) { if (q % i == 0) { div.push_back(i); if (q / i != i) { div.push_back(q / i); } } } sort(div.begin(), div.end()); set> ans; for (int i = 0; i < (int) div.size(); i++) { for (int j = 0; j <= i; j++) { long long x = div[i] * div[j]; long long y = q * q / x; if ((x + q) % p == 0 && (y + q) % p == 0) { long long A = (x + q) / p; long long B = (y + q) / p; ans.insert(make_pair(A, B)); if (A != B) { ans.insert(make_pair(B, A)); } } } } cout << ans.size() << '\n'; for (auto x : ans) { cout << x.first << ' ' << x.second << '\n'; } }