#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void doit(int N, int k, int m, int * sol, int K)
{
if (k == 0 && N == 0)
{
for(int i = 0; i < K; ++i)
{
printf("%d%c", sol
[i
], (i
== K
-1) ? '\n' : '+');
}
}
else if (N < 0 || m > N || k < 0) return;
else
{
for(int i = m; i <= N; ++i)
{
sol[K-k] = i;
doit(N-i,k-1,i+1,sol,K);
}
}
}
int main(int argc, const char * argv[])
{
int N, k;
int * sol
= malloc(sizeof(int)*k
); doit(N,k,1,sol,k);
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdm9pZCBkb2l0KGludCBOLCBpbnQgaywgaW50IG0sIGludCAqIHNvbCwgaW50IEspCnsKICAgIGlmIChrID09IDAgJiYgTiA9PSAwKQogICAgewogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBLOyArK2kpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiVkJWMiLCBzb2xbaV0sIChpID09IEstMSkgPyAnXG4nIDogJysnKTsKCiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoTiA8IDAgfHwgbSA+IE4gfHwgayA8IDApIHJldHVybjsKICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IoaW50IGkgPSBtOyBpIDw9IE47ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIHNvbFtLLWtdID0gaTsKICAgICAgICAgICAgZG9pdChOLWksay0xLGkrMSxzb2wsSyk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgaW50IE4sIGs7CiAgICBzY2FuZigiJWQgJWQiLCZOLCZrKTsKCiAgICBpbnQgKiBzb2wgPSBtYWxsb2Moc2l6ZW9mKGludCkqayk7CiAgICBkb2l0KE4saywxLHNvbCxrKTsKCn0K