Prefer varianta asta:
#include <iostream>
using namespace std;
int x[20000], v[1000][2], n, nr;
void afis()
{
cout << nr << '\n';
for(int i=1; i<=nr; i++)
cout << v[i][0] << ' ' << v[i][1] << '\n';
}
void afis(int k)
{
nr++;
v[nr][0] = k;
v[nr][1] = x[1];
}
int valid(int k)
{
int suma = 0;
for(int i=1; i<=k; i++) suma += x[i];
if(suma == n) return 1;
return 0;
}
void bkt(int pas)
{
for(int i=1-n; i<=n; i++) {
x[pas] = i;
if( (pas == 1) || (x[pas] == x[pas-1] + 1) ) {
if(valid(pas) && pas != 1) afis(pas);
else bkt(pas+1);
}
}
}
int main()
{
cin >> n;
bkt(1);
afis();
return 0;
}