#include <iostream>
#include <array>
#include <algorithm>
#include <iterator>
using namespace std;
using table = array<int, 3>;
table sorted(const table &input){
int a = input[0], b = input[1], c = input[2];
if(a > b) swap(a, b);
if(a > c) swap(a, c);
if(b > c) swap(b, c);
return {a, b, c};
}
template <class T, std::size_t N>
ostream& operator<<(ostream& o, const array<T, N>& arr){
copy(arr.cbegin(), arr.cend(), ostream_iterator<T>(o, " "));
return o;
}
template<typename T1, typename T2>
void assert_equal(const T1 &lhs, const T2 &rhs){
if(!(lhs == rhs)){
cout << "Assertion failed!\n";
cout << "lhs: " << lhs << ", rhs: " << rhs << endl;
}
}
int main() {
table expected = {1, 2, 3};
table arg = expected;
do{
cout << "( " << arg << ")\n";
assert_equal(sorted(arg), expected);
}while(next_permutation(begin(arg), end(arg)));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIHRhYmxlID0gYXJyYXk8aW50LCAzPjsKCnRhYmxlIHNvcnRlZChjb25zdCB0YWJsZSAmaW5wdXQpewoJaW50IGEgPSBpbnB1dFswXSwgYiA9IGlucHV0WzFdLCBjID0gaW5wdXRbMl07CglpZihhID4gYikgc3dhcChhLCBiKTsKCWlmKGEgPiBjKSBzd2FwKGEsIGMpOwoJaWYoYiA+IGMpIHN3YXAoYiwgYyk7CgkKCXJldHVybiB7YSwgYiwgY307Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IGFycmF5PFQsIE4+JiBhcnIpewogICAgY29weShhcnIuY2JlZ2luKCksIGFyci5jZW5kKCksIG9zdHJlYW1faXRlcmF0b3I8VD4obywgIiAiKSk7CiAgICByZXR1cm4gbzsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgp2b2lkIGFzc2VydF9lcXVhbChjb25zdCBUMSAmbGhzLCBjb25zdCBUMiAmcmhzKXsKCWlmKCEobGhzID09IHJocykpewoJCWNvdXQgPDwgIkFzc2VydGlvbiBmYWlsZWQhXG4iOwoJCWNvdXQgPDwgImxoczogIiA8PCBsaHMgPDwgIiwgcmhzOiAiIDw8IHJocyA8PCBlbmRsOwoJfQp9CgppbnQgbWFpbigpIHsKCXRhYmxlIGV4cGVjdGVkID0gezEsIDIsIDN9OwoJCgl0YWJsZSBhcmcgPSBleHBlY3RlZDsKCWRvewoJCWNvdXQgPDwgIiggIiA8PCBhcmcgPDwgIilcbiI7CgkJYXNzZXJ0X2VxdWFsKHNvcnRlZChhcmcpLCBleHBlY3RlZCk7Cgl9d2hpbGUobmV4dF9wZXJtdXRhdGlvbihiZWdpbihhcmcpLCBlbmQoYXJnKSkpOwoKCXJldHVybiAwOwp9