Copyright (C) $B#I#O#IF|K\0Q0w2q(B 1995.$B!!(BAll rights reserved.


$BLdBj#1$N2rEz$H2r@b(B

$B!!K\Ld$G$O!"D9$5(B m $B$N%S%C%HNs$N$&$A!"$A$g$&$I(B n $B8D$N(B 1 $B$r4^(B $B$_!";D$j$N%S%C%H$O$9$Y$F(B 0 $B$G$"$k$h$&$J$b$N$r!"$b$l$J$/@8@.$9(B $B$k$3$H$r5a$a$F$$$k!#(B $B2<5-$NNc2r$O!"%Q%9%+%k$N;[email protected]!$rCio$KB?$/$N


C$B%W%m%0%i%`(B(1)

bitSEQ c_next(bitSEQ c_old, int m, int n)
{
   bitSEQ c_new;

   if (c_old & bit[m-1]) {
      if (n==1) c_new = 0;
      else {
         c_new = c_next(c_old^bit[m-1],m-1,n-1);
         c_new = !c_new ? 0 : bit[m-1] | c_new;
      }
   }
   else {
      if (n==1) c_new = c_old<<1;
      else {
         c_new = c_next(c_old,m-1,n);
         if (!c_new) c_new = c_first(n-1) | bit[m-1];
      }
   }
   return c_new;
}


BASIC$B%W%m%0%i%`(B(1)

FUNCTION cNext (cOld AS LONG, m AS INTEGER, n AS INTEGER)
   IF FNcAnd(cOld, cBit(m)) <> 0 THEN
      IF n = 1 THEN
         cNew = 0
      ELSE
         cNew = cNext(cOld - cBit(m), m - 1, n - 1)
         IF cNew > 0 THEN cNew = cNew + cBit(m)
      END IF
   ELSE
      IF n = 1 THEN
         cNew = 2 * cOld
      ELSE
         cNew = cNext(cOld, m - 1, n)
         IF cNew = 0 THEN cNew = cFirst(n - 1) + cBit(m)
      END IF
   END IF
   cNext = cNew
END FUNCTION


Pascal$B%W%m%0%i%`(B(1)

function c_next(c_old:bit_seq; m,n:integer):bit_seq;
   var c_new:bit_seq;
begin
   if (c_old and bit[m]) <> 0 then begin
      if n=1 then c_new:=0
      else begin
         c_new:=c_next(c_old xor bit[m],m-1,n-1);
         if c_new<>0 then c_new := c_new or bit[m];
      end;
   end
   else begin
      if n=1 then c_new := c_old shl 1
      else begin
         c_new:=c_next(c_old,m-1,n);
         if c_new=0 then c_new := c_first(n-1) or bit[m];
      end;
   end;
   c_next:=c_new;
end;


JOI$B%[!<%`%Z!<%8(B$B$XLa$k(B

JOI'95$B$XLa$k(B