n,i:integer;
t:array[1..100] of integer;
b:array[1..100] of boolean; {狀態數組}
f:text;
s:longint;
st:string;
procedure next(m:integer;ss:longint;sst:string);
var
k:integer;
s0:string;
begin
if m=n then begin
if ss<s then begin
s:=ss;
st:=sst;
for k:=1 to n do
if not b[k] then begin
str(k:0,s0);
st:=st+' '+s0;
end;
end;
end
else for k:=1 to n do if not b[k] then
begin
b[k]:=true;
str(k:0,s0);
next(m+1,ss+t[k]*(n-m),sst+' '+s0);
{第壹個人接水,後面有9人等待,......}
b[k]:=false;
end;
end;
begin
assign(f,'排隊接水.in'); reset(f);
readln(f,n);
for i:=1 to n do read(f,t[i]);
close(f);
for i:=1 to n do b[i]:=false;
s:=9999999;
st:='';
next(1,0,'');
writeln(st);
writeln(s/n:10:2);
end.
{這是窮舉所有可能的總體最優遞歸解法!
從計算結果看,將接水時間從小到大排序,
按接水時間短的優先打水,最後所得等待時間最短}
計算結果:
3 9 2 7 8 1 4 6 10 5
243.90