generic function Card<T>(const ASet: T): Integer;
var
Bytes: array [0..31] of byte;absolute ASet;
i: Integer;
begin
if GetTypeKind(T) <> tkSet then
Exit(-1);
if (SizeOf(ASet) > 32) then
Exit(-1);
Result := 0;
for i := 0 to SizeOf(T) - 1 do
Result := Result + PopCnt(Bytes[i]);
end;
begin
n:=Card(X);
end.