4,5,8,9 too short
#include<bits/stdc++.h>
using namespace std;
int n;
int a[200010];
struct node{
int start,num,pre,nxt,inxt,id,is;
queue<int>son;
}lst[200010];
int lft;
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n;
lft=n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
a[n+1]=-1;
queue<int>q;
for(int i=1,j=1;i<=n;i++,j++){
int ti=i;
while(a[i]==a[i+1])i++;
lst[j]={ti,i-ti+1,j-1,j+1,-1,0,a[i]};
if(i==n)lst[j].nxt=-1;
q.push(j);
}
lst[0]={0,0,-1,1,-1,0,-1};
q.push(-1);
int saki=-1,sakiid=-1;
while(!q.empty()){
int j=q.front();
q.pop();
if(j==-1){
cout<<'\n';
saki=-1;
if(!q.empty())q.push(-1);
continue;
}
if(lst[j].is==saki){
if(lst[sakiid].id<lst[sakiid].num){
lst[sakiid].son.push(j);
}
else{
q.push(j);
sakiid=j;
}
continue;
}
cout<<lst[j].start+lst[j].id<<' ';
lst[j].id++;
if(lst[j].id<lst[j].num){
q.push(j);
}
else{
if(!lst[j].son.empty()){
q.push(lst[j].son.front());
if(!lst[lst[j].son.front()].son.empty()){
queue<int>t;
t=lst[lst[j].son.front()].son;
lst[j].son.pop();
while(!lst[j].son.empty()){
t.push(lst[j].son.front());
lst[j].son.pop();
}
}
else{
lst[lst[j].son.front()].son=lst[j].son;
lst[lst[j].son.front()].son.pop();
}
}
}
saki=lst[j].is;
sakiid=j;
lft--;
}
// cout<<lft<<endl;
return 0;
}