#include using namespace std; const int N = 200001; vector reversed(vector x) { reverse(x.begin(), x.end()); return x; } vector negated(vector x) { for(auto &y: x) y = -y; return x; } void ans_reverse(vector &s) { for(auto &t: s) reverse(t.begin(), t.end()); } void ans_negate(vector &s) { for(auto &t: s) { char mx = *max_element(t.begin(), t.end()), mn = *min_element(t.begin(), t.end()); for(auto &c: t) c = mn + (mx - c); } } vector answers(vector x) { multiset before, after; set common; int n = x.size(); for(int i = 0; i < n; i++) after.insert(x[i]); vector ans; for(auto y: x) { after.erase(after.find(y)); if(before.count(y) && after.count(y)) common.insert(y); else common.erase(y); //111 if(before.count(y) && after.count(y)) ans.push_back("111"); //121 if(!common.empty() && *common.begin() < y) ans.push_back("121"); //112 if(before.count(y) && !after.empty() && *after.rbegin() > y) ans.push_back("112"); //123 if(!before.empty() && *before.begin() < y && !after.empty() && *after.rbegin() > y) ans.push_back("123"); //213 auto it = before.upper_bound(y); if(it != before.end() && !after.empty() && *it < *after.rbegin()) ans.push_back("213"); before.insert(y); if(before.count(y) && after.count(y)) common.insert(y); else common.erase(y); } return ans; } int main() { int n; scanf("%d", &n); vector x(n); for(auto &y: x) scanf("%d", &y); set ans; for(int rev: { 0, 1 }) for(int neg: { 0, 1 }) { vector v = x; if(rev) v = reversed(v); if(neg) v = negated(v); auto vans = answers(v); if(rev) ans_reverse(vans); if(neg) ans_negate(vans); ans.insert(vans.begin(), vans.end()); } for(auto s: ans) printf("%s\n", s.c_str()); }