#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #include using namespace __gnu_pbds; struct TP{ typedef int tp; tree,rb_tree_tag,tree_order_statistics_node_update> T; void add(tp a){T.insert(a);} void del(tp a){T.erase(a);} int cnt(tp a){return T.order_of_key(a);} tp kth(int a){return *T.find_by_order(a);} int gt(tp b,tp e){return cnt(e+1)-cnt(b);} int sz(){return T.size();} void clr(){T.clear();} int mn(){return kth(0);} int mx(){return kth(sz()-1);} }T; #define LG (18) #define MX (1<A[dp[i+(1<<(k-1))][k-1]]) dp[i][k]=dp[i][k-1]; else dp[i][k]=dp[i+(1<<(k-1))][k-1]; } int qy(int *A,int L,int R){ int j(G[R-L+1]); if(A[dp[L][j]]>=A[dp[R-(1< T; F(L)T[B[i]]=i+1; return 100*T[a]+10*T[b]+T[c]; } void go(int X[MX][5]){ T.clr(); FT(1,N){ T.add(A[k-1]); if(T.mn()A[k])X[k][4]=T.mx(); int I=T.cnt(A[k]); if(T.mx()>=A[k]&&T.kth(I)==A[k])X[k][2]=A[k]; if(T.mn()A[k])X[k][3]=~X[k][2]?T.kth(I+1):T.kth(I); } } set O; map L; int main(void){ scanf("%d",&N),ga(N,A),CL(X,-1),CL(Y,-1),b.ini(A,N),e.ini(A,N); F(N){ if(L.count(A[i])){ if(b.qy(A,L[A[i]],i)A[i])O.insert(121); } L[A[i]]=i; } go(X); reverse(A,A+N),go(Y); reverse(A,A+N); F(N/2)FF(5)swap(Y[i][j],Y[N-i-1][j]); // F(N){ // DEB // printf("%d: ",A[i]);FF(5)printf(" %d",X[i][j]);puts(""); // printf("%d: ",A[i]);FF(5)printf(" %d",Y[i][j]);puts(""); // } F(N)FF(5)if(~X[i][j])FT(0,5)if(~Y[i][k])O.insert(nrm(X[i][j],A[i],Y[i][k])); for(auto&h:O)printf("%d\n",h); return 0; }