Spongebob is already tired trying to reason his weird actions and calculations, so he simply asked you to find all pairs of n and m, such that there are exactly x distinct squares in the table consisting of n rows and m columns. For example, in a 3 × 5 table there are 15squares with side one, 8 squares with side two and 3 squares with side three. The total number of distinct squares in a 3 × 5 table is15 + 8 + 3 = 26.
The first line of the input contains a single integer x (1 ≤ x ≤ 1018) — the number of squares inside the tables Spongebob is interested in.
First print a single integer k — the number of tables with exactly x distinct squares inside.
Then print k pairs of integers describing the tables. Print the pairs in the order of increasing n, and in case of equality — in the order of increasing m.
26
6 1 26 2 9 3 5 5 3 9 2 26 1
2
2 1 2 2 1
8
4 1 8 2 3 3 2 8 1
In a 1 × 2 table there are 2 1 × 1 squares. So, 2 distinct squares in total.
![](https://i-blog.csdnimg.cn/blog_migrate/8e6e1a925f3b23d7da926224d5966248.png)
In a 2 × 3 table there are 6 1 × 1 squares and 2 2 × 2 squares. That is equal to 8 squares in total.
![](https://i-blog.csdnimg.cn/blog_migrate/71443f2b18e63d5042b0b920902acaaa.png)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
#include <cmath>
#include <queue>
#include <ctime>
#define maxn 1000005
#define INF 1e18
using namespace std;
typedef long long ll;
struct Node{
Node(){
}
Node(ll a, ll b){
n = a;
m = b;
}
ll n, m;
friend bool operator < (const Node&a, const Node&b){
return a.n < b.n || (a.n == b.n && a.m < b.m);
}
};
vector<Node> v;
int main(){
// freopen("in.txt", "r", stdin);
ll x, p = 0;
scanf("%I64d", &x);
for(ll i = 1;; i++){
if(p > x - i * i)
break;
p += i * i;
ll d = x - p;
ll k = (1 + i) * i / 2;
if(d % k == 0){
v.push_back(Node(i, d/k+i));
if(d != 0)
v.push_back(Node(d/k+i, i));
}
}
sort(v.begin(), v.end());
printf("%d\n", v.size());
for(int i = 0; i < v.size(); i++){
printf("%I64d %I64d\n", v[i].n, v[i].m);
}
return 0;
}