#include<bits/stdc++.h> using namespace std; int a[200010]; int b[200010]; int dp[200010][6]; int pre[200010][6]; int ans[200010]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int j=1;j<=5;j++) dp[1][j]=1; for(int i=2;i<=n;i++) { if(a[i]>a[i-1]) { for(int j=1;j<=5;j++) { if(dp[i-1][j]) { for(int k=j+1;k<=5;k++) { dp[i][k]=1;//对于前一种状态的每一种情况,都更新第i位的状态 pre[i][k]=j;//这里被更新没事 } //这里有很多种转移方式,只要记录一种就可以了 } } } else if(a[i]<a[i-1]) { for(int j=1;j<=5;j++) { if(dp[i-1][j]) { for(int k=1;k<=j-1;k++) { dp[i][k]=1; pre[i][k]=j; } } } } else if(a[i]==a[i-1]) { for(int j=1;j<=5;j++) { if(dp[i-1][j]) { for(int k=1;k<=5;k++) { if(j==k) continue; dp[i][k]=1; pre[i][k]=j; } } } } } int index=-1; for(int k=1;k<=5;k++) { if(dp[n][k]==1) { index=k; break; } } if(index==-1) { printf("-1\n"); return 0; } int num=0; int tot=n; ans[++num]=index; while(pre[tot][index]) { ans[++num]=pre[tot][index]; index=ans[num]; tot--; } for(int i=num;i>=1;i--) printf("%d ",ans[i]); printf("\n"); }