procedure Recur(iLevel:integer);
var i:integer;
begin
if iLevel=iLevelCount then Process(X)
else
for i:=0 to Ai[iLevel].Count-1 do
begin
X[iLevel]:=Ai[iLevel][i];
Recur(iLevel+1)
end;
end;
Recur(0);