uses crt;
var i,j,n:byte;
t,tp:word;
duyet:array[1..100] of boolean;
a:array[1..100] of byte;
kq:boolean;
luu:array[0..100,0..100] of byte;
f1,f2:text;
const fi='THANHGO.INP';
fo='THANHGO.OUT';
function check():boolean;
var i:byte;
begin
for i:=1 to n do
if duyet[i]=true then exit(false);
exit(true);
end;
procedure try(ii,p:byte);
var jj:byte;
label 0;
begin
if tp<i then
for jj:=ii to n do
begin
if duyet[jj]=true then
if tp+a[jj]<=i then
begin
inc(tp,a[jj]);
duyet[jj]:=false;
luu[j,p]:=jj;
luu[j,0]:=p;
try(jj+1,p+1);
if tp=i then goto 0;
dec(tp,a[jj]);
duyet[jj]:=true;
0:
end;
end
else
if j=t div i then
if check()=true then
kq:=true;
end;
procedure main();
var ii,jj:byte;
begin
assign(f1,fi);reset(f1);
assign(f2,fo);rewrite(f2);
kq:=false;
readln(f1,n);
for i:=1 to n do
begin
readln(f1,a[i]);
t:=t+a[i];
end;
for i:=1 to t do
if kq=true then break else
if t mod i=0 then
begin
fillchar(duyet,sizeof(duyet),true);
j:=0;
while j<t div i do
begin
inc(j);
tp:=0;
try(1,1);
end;
end;
writeln(f2,i-1);
for ii:=1 to j do
begin
for jj:=1 to luu[ii,0] do write(f2,luu[ii,jj],' ');
writeln(f2);
end;
close(f1);close(f2);
end;
begin
clrscr;
main();
end.