program shhv;
const
nm = 50;
var
a: array[1..nm] of byte;
t: array[1..nm] of boolean;
f: array[1..nm] of longword;
i, j, n: byte;
s: longword;
begin
n := 0;
while not seekeoln do
begin
inc(n);
read(a[n]);
end;
fillchar(t, sizeof(t), true);
s := 1; f[0] := 1;
for i := 1 to n do f[i] := f[i-1] * i;
for i := 1 to n do
begin
for j := 1 to a[i]-1 do
if t[j] then s := s + f[n-i];
t[a[i]] := false;
end;
writeln(s);
readln(s);
fillchar(t, sizeof(t), true);
for i := 1 to n do
begin
for j := 1 to n do
if t[j] then
if (s > f[n-i]) then s := s - f[n-i] else break;
a[i] := j;
t[j] := false;
end;
for i := 1 to n do write(a[i], ' ');
end.
cHJvZ3JhbSBzaGh2Owpjb25zdAogICAgbm0gPSA1MDsKdmFyCiAgICBhOiBhcnJheVsxLi5ubV0gb2YgYnl0ZTsKICAgIHQ6IGFycmF5WzEuLm5tXSBvZiBib29sZWFuOwogICAgZjogYXJyYXlbMS4ubm1dIG9mIGxvbmd3b3JkOwogICAgaSwgaiwgbjogYnl0ZTsKICAgIHM6IGxvbmd3b3JkOwpiZWdpbgogICAgbiA6PSAwOwogICAgd2hpbGUgbm90IHNlZWtlb2xuIGRvCiAgICAgICAgYmVnaW4KICAgICAgICAgICAgaW5jKG4pOwogICAgICAgICAgICByZWFkKGFbbl0pOwogICAgICAgIGVuZDsKICAgIGZpbGxjaGFyKHQsIHNpemVvZih0KSwgdHJ1ZSk7CiAgICBzIDo9IDE7IGZbMF0gOj0gMTsKICAgIGZvciBpIDo9IDEgdG8gbiBkbyBmW2ldIDo9IGZbaS0xXSAqIGk7CiAgICBmb3IgaSA6PSAxIHRvIG4gZG8KICAgICAgICBiZWdpbgogICAgICAgICAgICBmb3IgaiA6PSAxIHRvIGFbaV0tMSBkbwogICAgICAgICAgICAgICAgaWYgdFtqXSB0aGVuIHMgOj0gcyArIGZbbi1pXTsKICAgICAgICAgICAgdFthW2ldXSA6PSBmYWxzZTsKICAgICAgICBlbmQ7CiAgICB3cml0ZWxuKHMpOwogICAgcmVhZGxuKHMpOwogICAgZmlsbGNoYXIodCwgc2l6ZW9mKHQpLCB0cnVlKTsKICAgIGZvciBpIDo9IDEgdG8gbiBkbwogICAgICAgIGJlZ2luCiAgICAgICAgICAgIGZvciBqIDo9IDEgdG8gbiBkbwogICAgICAgICAgICAgICAgaWYgdFtqXSB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPiBmW24taV0pIHRoZW4gcyA6PSBzIC0gZltuLWldIGVsc2UgYnJlYWs7CiAgICAgICAgICAgIGFbaV0gOj0gajsKICAgICAgICAgICAgdFtqXSA6PSBmYWxzZTsKICAgICAgICBlbmQ7CiAgICBmb3IgaSA6PSAxIHRvIG4gZG8gd3JpdGUoYVtpXSwgJyAnKTsKZW5kLgoKCgo=