(样例没过)
#include<bits/stdc++.h>//1 代表苹果,0 代表桔子。
#define ll long long
using namespace std;
const ll maxn = 2*10e5+100;
struct node{
ll x,ai;
};
ll n,flag1,flag2,res1=1,res2=1,res3 = 1;
node a[maxn],b[maxn],c[maxn],d[maxn];
queue<node>p;
queue<node>j;
bool cmp(node y,node z){
return y.x<z.x;
}
int main(){
cin>>n;
for(int i = 1;i<=n;i++){
cin>>a[i].ai;
a[i].x = i;
}
for(int i = 1;i<=n;i++){
if(a[i].ai==1){
if(flag1==0){
flag1 = 1;
p.push(a[i]);
}
else if(flag1==1){
p.push(a[i]);
}
if(a[i].ai==1&&flag2==1){
j.push(a[i]);
flag2 = 0;
}
}
if(a[i].ai==2){
if(flag2==0){
flag2 = 1;
j.push(a[i]);
}
else if(flag2==1){
j.push(a[i]);
}
if(a[i].ai==2&&flag1==1){
p.push(a[i]);
flag1 = 0;
}
}
}
flag1 = 0,flag2 = 0;
while(!p.empty()||!j.empty()){
res1 = 0,res2 = 0,res3 = 0;
while(!p.empty()){
if(p.front().ai==1&&flag1==0){
d[res3] = p.front();
res3++;
p.pop();
flag1 = 1;
continue;
}
if(p.front().ai==0){
flag1 = 0;
}
b[res1] = p.front();
res1++;
p.pop();
}
while(!j.empty()){
if(j.front().ai==1&&flag2==0){
d[res3] = j.front();
res3++;
j.pop();
flag2 = 1;
continue;
}
if(j.front().ai==0){
flag2 = 0;
}
c[res2] = j.front();
res2++;
j.pop();
}
for(ll i = res1;i>=1;i++){
p.push(b[i]);
}
for(ll i = res2;i>=1;i++){
j.push(c[i]);
}
sort(d+1,d+1+res3,cmp);
for(int i = 1;i<=res3;i++){
cout<<d[i].x<<" ";
}
cout<<endl;
}
return 0;
}