#include<bits/stdc++.h>
using namespace std;
inline int read();
inline void write(long long n);
int n,p[200007],cnt;
bool k[200007];
queue<int>a[200007];
list<int>li;
int main(){
n=read();
for(int i=1;i<=n;i++){
scanf("%d",&p[i]);
}
for(int i=1;i<=n;i++){
if(i==1||p[i]!=p[i-1]){
cnt++;
k[cnt]=p[i];
a[cnt].push(i);
while(p[i]==p[i+1]&&i+1<=n){
i++;
a[cnt].push(i);
}
}
}
for(int i=1;i<=cnt;i++){
li.push_back(i);
}
int it1=0;
while(it1<n){
int last,d=0;
bool have=1;
list<int>::iterator it2,nw;
for(it2=li.begin();it2!=li.end();it2++){
int i=(*it2);
if((have||k[i]!=last)&&!a[i].empty()){
last=k[i];
have=0;
it1++;
d++;
write(a[i].front());
putchar(' ');
a[i].pop();
}
if(a[i].empty()){
nw=it2;
it2++;
li.erase(nw);
it2--;
}
}
putchar('\n');
if(d==1){
for(it2=li.begin();it2!=li.end();it2++){
int i=*it2;
while(!a[i].empty()){
write(a[i].front());
putchar('\n');
a[i].pop();
}
}
break;
}
}
write(li.size());
return 0;
}
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(long long n){
if(n<0){putchar('-');n=-n;}
if(n>9){write(n/10);}
putchar(n%10+'0');
}