b:= proc(n, l) option remember; local d, f, k;
d:= nops(l)/2; f:=false;
if n=0 then 1
elif l[1..d]=[f$d] then b(n-1, [l[d+1..2*d][], true$d])
else for k to d while not l[k] do od; b(n, subsop(k=f, l))+
`if`(k<d and n>1 and l[k+d+1],
b(n, subsop(k=f, k+d+1=f, l)), 0)+
`if`(k>1 and n>1 and l[k+d-1],
b(n, subsop(k=f, k+d-1=f, l)), 0)+
`if`(n>1 and l[k+d], b(n, subsop(k=f, k+d=f, l)), 0)+
`if`(k<d and l[k+1], b(n, subsop(k=f, k+1=f, l)), 0)
fi
end:
a:= n-> b(n, [true$(n*2)]):