#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 4000000000000000001LL pair op(pair a,pair b){ return min(a,b); } pair e(){ return {Inf32,Inf32}; } segtree,op,e> seg; int root = -1; vector> E; void dfs(int l,int r,int pp){ if(l==r)return; auto p = seg.prod(l,r); if(pp!=-1){ E[pp].push_back(p.first); } else root = p.first; dfs(l,p.second,p.first); dfs(p.second+1,r,p.first); } int B[200005],C[200005]; void dfs2(int v,int p,int d){ B[v] = d; rep(i,E[v].size()){ int u = E[v][i]; if(u==p)continue; dfs2(u,v,d+1); C[v] += C[u]+1; } } int main(){ int n; cin>>n; seg = segtree,op,e>(n); rep(i,n){ int a; cin>>a; a--; seg.set(a,pair(i,a)); } E.resize(n); dfs(0,n,-1); dfs2(root,-1,0); rep(i,n){ if(i!=0)cout<<' '; cout<