with(combinat):
a:= n-> add(multinomial(n-nops(p), map(x-> x-1, p)[], 0), p=map(h->
permute(h)[], select(l-> nops(l)=nops({l[]}), partition(n)))):
seq(a(n), n=0..28);
# Alternative:
a:= proc(m) option remember; local b; b:=
proc(n, i, j) option remember; `if`(i*(i+1)/2>=n,
`if`(n=0, (m-j)!*j!, b(n, i-1, j)+
b(n-i, min(n-i, i-1), j+1)/(i-1)!), 0)
end: b(m$2, 0):
end:
seq(a(n), n=0..28);