There are 1 to $N$ digits ($1\le N \le 10$) in certain order. Add adjacent numbers together to get the next line, until the there is only one number left.(Just like Pascal's triangle) For example, there are 3 integers: $$1, 2, 3$$ $$3, 5$$ $$8$$

So, given $N$ and the final sum, find the lexicographically least ordering of integers.

• Be aware of that the question is asking 1 to $N$ digits, so we don't have to test all possible permutations from 1 to 10.

• The results of next_permutation() in STL are in ascending order in default.

### Solution:

Use next_permutation() to check all possibilities and stimulate the triangle additions. Since the permutation is already in lexicographical order, when we get the find the first result, it is the final answer.

#include<iostream>
#include<algorithm>
using namespace std;

int n, sum, ans, s;

void solve() {
for (int i = 1; i <= n; i++) ans[i-1] = i;
if (n == 1 && ans == sum) {
cout << sum << endl;
return;
}
do {
for (int i = 0; i < n-1; i++)
s[i] = ans[i]+ans[i+1];
for (int i = n-2; i >= 0; i--) {
for (int j = 0; j < i; j++)
s[j] = s[j]+s[j+1];
}
if (s == sum) {
for (int i = 0; i < n; i++) cout << ans[i] << " ";
cout << endl;
return;
}
} while (next_permutation(ans, ans+n));
}

int main(void) {
cin >> n >> sum;
solve();
return 0;
}