      2. ஦  ꥪ⮢.

      ᮡ࠭ ,   ॡ    
㣨   ண ⢠.

     2.1. 饭  ७ﬨ.

     2.1.1.   ᫥⥫쭮  k    ᥫ
1..n.

     襭.  㤥       ᨪ᪮ 浪
(᫥⥫쭮 a ।  ᫥⥫쭮  b,  ᫨
  ண s  砫 १  s ࠢ,  (s+1)-
童  ᫥⥫쭮  a  ).  ࢮ  㤥  ᫥-
⥫쭮  <1, 1, ..., 1>, ᫥ - ᫥⥫쭮 <n, n,
..., n>. 㤥 ࠭ ᫥ ⠭ ᫥⥫쭮
 ᨢ x[1]...x[k].

        ...x[1]...x[k]  ࠢ 1
        ... x
        ...last[1]...last[k]  ࠢ n
        while x <> last do begin
        | ...x := ᫥  x ᫥⥫쭮
        | ... x
        end;

     襬,    ३    x    ᫥饩  ᫥-
⥫쭮.  ᭮ ।,  ᫥饩 ᫥⥫쭮
 s 童   ⠪ ,  (s+1)- - .  
, ᫨ x[s+1] 뫮  n. । ⠪ s 㦭 
襥  ( 祭 ᫥⥫쭮  㤥 -
।⢥ ᫥饩). ⢥饥 x[s+1] 㦭 㢥 
1. ⠪, ,    ᫥⥫쭮,   ᠬ
ࠢ  童,  訩  n ( , ⠪   ।
x<>last), 㢥   1,  騥      童  
ࠢ묨 1.

        p:=k;
        while not (x[p] < n) do begin
        | p := p-1;
        end;
        {x[p] < n, x[p+1] =...= x[k] = n}
        x[p] := x[p] + 1;
        for i := p+1 to k do begin
        | x[i]:=1;
        end;

     砭. ᫨ 童 ᫥⥫쭮  ᫠ 
  1  n,   0  n-1,  室  ᫥饬 ᮮ⢥
ਡ 1  n-筮 ⥬ ᫥.

     2.1.2.  । ⬥ ᯮ ࠢ 
ᨢ x <> last. ࠭ ,  㫥  ६
l  稢  ਠ ᮮ⭮襭 l <=> ᫥⥫쭮 x -
᫥.

     2.1.3.   ⢠ ⢠ {1...k}.

     襭.  ⢠ 室   筮 -
⢥⢨  ᫥⥫쭮ﬨ 㫥    k.

     2.1.4.   ᫥⥫쭮  k ⥫
楫 ᥫ,   i- 童  ॢ室 i.


     2.2. ⠭.

     2.2.1.   ⠭ ᥫ 1..n (  -
⥫쭮    n,     ᥫ 1..n 室
  ࠧ).

     襭. ⠭ 㤥  ࠭    ᨢ  x[1],...,
x[n]      ᨪ᪮ 浪. (ࢮ  ⮬
㤥 ⠭ <1 2...n>, ᫥ - <n...2 1>.)    -
⠢  ⬠  室  ᫥饩 ⠭ 
ᮬ:   砥 k- 童 ⠭  㢥,
  ।? ⢥: ᫨   -  ᫥-
 童 (童  ࠬ  k).       -
襥  k,    ஬    ⠪,  . . ⠪ k,  x[k] <
x[k+1] > ... > x[n]. ᫥  ⮣  x[k]  㦭  㢥  -
   ᯮᮡ, . .  । x[k+1], ..., x[n]
襥 ᫮, 襥 .  x[k]  , ⠥ -
 ᫠  ࠬ k+1, ..., n  ⠪,  ⮡  ⠭
뫠 襩,    饬 浪.  砥
⥬,   㦥 ᯮ  뢠饬 浪.

      室  ᫥饩 ⠭.

  {<x[1],...,x[n-1], x[n]> <> <n,...,2, 1>.}
  k:=n-1;
  {᫥⥫쭮 ࠢ  k 뢠: x[k+1] >...> x[n]}
  while x[k] > x[k+1] do begin
  | k:=k-1;
  end;
  {x[k] < x[k+1] > ... > x[n]}
  t:=k+1;
  {t <=n, x[k+1] > ... > x[t] > x[k]}
   while (t < n) and (x[t+1] > x[k]) do begin
   | t:=t+1;
   end;
   {x[k+1] > ... > x[t] > x[k] > x[t+1] > ... > x[n]}
   ...  x[k]  x[t]
   {x[k+1] > ... > x[n]}
   ... ⠢ ⮪ x[k+1] ... x[n]  ⭮ 浪

砭. ணࠬ    䥪:  ᫨  t  =  n,  
x[t+1]  ।.

     2.2.2. ஢  室  ᫥饩  -
⠭ ⠪, ⮡  ᠬ ஢,     -
⠭ ᫥.

     2.3. ⢠.

     2.3.1. ᫨  k- ⢠  ⢠
{1..n}.

     襭.  㤥 ।⠢  ⢮ ᫥-
⥫쭮 x[1]..x[n] 㫥    n,  ன ஢  k
. (㣮 ᯮᮡ ।⠢ ࠧ६ .)  -
⥫쭮 㯮冷稬 ᨪ᪨ (. ). 祢-
  ᯮᮡ  襭   - ॡ  ᫥⥫쭮
 ࠭,  ⥬ ⡨ ।  ,   k   -
 ᨬ,    (᫮ ᫥⥫쭮⥩
  k  栬        ᫠  ᫥-
⥫쭮⥩). 㤥 ᪠ ⠪ , ⮡  祭  -
। ᫥⥫쭮 ॡ 浪 n ⢨.
       砥 s- 童  ᫥⥫쭮    㢥-
,     ।騥? ᫨ x[s]   0  1,  
࠭ 饣 ᫠  㦭 ࠢ  [s]    1
 0.  ࠧ, [s] -  ࠢ ,   
.    ,   [s+1] = 1 ( [s]  ).
 ࠧ  ᪠ 襥  s,    ண  [s]=0,
x[s+1]=1;

                  ______________________
               x |________|0|1...1|0...0|
                           s

 [s+1]    ᪮쪮 ,  ᫥  ᪮쪮
㫥.  [s]  1,   騥   童  ⠪,
⮡ ᫥⥫쭮 뫠  쭠  窨 ७ -
  浪,  . . ⮡ ᭠砫 諨 㫨,  ⮬ . 
 砥:

  ࢠ ᫥⥫쭮    0...01...1 (n-k 㫥, k )
  ᫥ ᫥⥫쭮 1...10...0 (k , n-k 㫥)

   室  ᫥饩  [1]...x[n] ᫥⥫쭮-
   (।,   ):

        s := n - 1;
        while not ((x[s]=0) and (x[s+1]=1)) do begin
        | s := s - 1;
        end;
        {s - 童, 騩   0  1}
        num:=0;
        for k := s to n do begin
        | num := num + x[k];
        end;
        {num - ᫮   ⪥ x[s]...x[n], ᫮ 㫥
         ࠢ ( - ᫮ ), . . (n-s+1) - num}
        x[s]:=1;
        for k := s+1 to n-num+1 do begin
        | x[k] := 0;
        end;
        for k := n-num+2 to n do begin
        | x[k]:=1;
        end;

     㣮  ᯮᮡ ।⠢  -  ᫥
  ⮢.  ⮡    ⢮    ஢   
।⠢,  ਬ     饬
浪. 室  ⠪ .

     2.3.2. ᫨  騥 ᫥⥫쭮 -
  k    ᥫ 1..n  ᨪ᪮ 浪. (ਬ: 
n=5, k=2 砥 12 13 14 15 23 24 25 34 35 45.)

     襭. 쭮 㤥 ᫥⥫쭮 1, 2, ..., k;
ᨬ쭮 - (n-k+1),..., (n-1), n.   砥  s-  童
᫥⥫쭮  㢥? ⢥: ᫨   n-k+s.
᫥ 㢥祭 s-   ᫥騥   
蠣 1. 砥 ⠪  室  ᫥饬:

        s:=n;
        while not (x[s] < n-k+s) do begin
        | s:=s-1;
        end;
        {s - , 騩 㢥祭};
        x[s] := x[s]+1;
        for i := s+1 to n do begin
        | x[i] := x[i-1]+1;
        end;

     2.3.3.      訫 ।⠢ k- -
⢠ ⢠ {1..n} 뢠騬 ᫥⥫쭮ﬨ  k,
㯮冷祭묨 -० ᨪ᪨. (ਬ : 21 31 32
41 42 43 51 52 53 54.)  룫廊 ⮣    室  
᫥饩?

     ⢥. 饬 襥 s,  ண [s]-x[s+1]>1. (᫨
⠪ s ,  s = 0.) 稢 x [s+1]  1,  -
⠫ 쭮 묨 (x[t] = k+1-t  t>s).

     2.3.4.   ।騥 ,   ᨪ-
᪨  冷      (࠭  ,   
ᨪ᪮ 浪).

     2.3.5. ᫨   (㭪樨, ॢ騥  ࠧ-
    ࠧ) ⢠ {1..k}  {1..n} (।-
,  k <= n). ஦ ।   ॡ
浪 k ⢨.

     .          ᢥ  ᫥
  ⠭ ⮢  ⢠.

     2.4. .

     2.4.1. ᫨  ࠧ 楫 ⥫쭮 -
  n   楫 ⥫ ᫠ (ࠧ, ⫨騥
 浪 ᫠,   ). (ਬ: n=4,  ࠧ-
 1+1+1+1, 2+1+1, 2+2, 3+1, 4.)

     襭. ਬ,  (1)  ࠧ ᫠  
饬 浪, (2) ᠬ ࠧ  塞  -
ᨪ᪮  浪.    ࠭    砫  ᨢ
x[1]...x[n],  ⮬ ⢮ 室   ᥫ 稬
k.  砫 x[1]=...=x[n]=1, k=n,   x[1]=n, k=1.
         砥  x[s]  㢥   ।?
-,   x[s-1] > x[s]  s  =  1.  -,  s
    ᫥ ⮬ (㢥祭 s  -
஢ 㬥襭 ᫥). 稢 s,  ᫥騥 -
   쭮 묨.

        s := k - 1;
        while not ((s=1) or (x[s-1] > x[s])) do begin
        | s := s-1;
        end;
        {s - 饥 㢥祭 ᫠}
        x [s] := x[s] + 1;
        sum := 0;
        for i := s+1 to k do begin
        | sum := sum + x[i];
        end;
        {sum - 㬬 童,  ᫥ x[s]}
        for i := 1 to sum-1 do begin
        | x [s+i] := 1;
        end;
        k := s+sum-1;

     2.4.2. ।⠢ -० ࠧ  騥
᫥⥫쭮, ᫨   浪, ⭮ ᨪ-
᪮ ( n=4, ਬ,   4,  3+1,  2+2,
2+1+1, 1+1+1+1).
     .    ࠢ 童,  ࠢ  1;
  ,  㬥訬  1,  ᫥騥 쬥 ᨬ쭮 -
묨  (ࠢ묨 ,  墠⠥ 㬬,  ᫥ - ᪮쪮
⠭).

     2.4.3. ।⠢  ࠧ    뢠騥  ᫥-
⥫쭮,  ᫨    ᨪ᪮ 浪. ਬ
 n=4: 1+1+1+1, 1+1+2, 1+3, 2+2, 4;
     . ᫥ 童 㢥 ,   ।᫥
- ; ᫨ ᫥ 㢥祭  1 ।᫥ 童  
᫥  ⠭,    童  ᤥ
,  ᫨  ,    ᫥ 童  ࠧ  ᫠,
ࠢ ।饬,  ⮪,  訩 .

     2.4.4.  ।⠢  ࠧ    뢠騥 ᫥-
⥫쭮, ᫨   浪, ⭮ ᨪ᪮-
. ਬ  n=4: 4, 2+2, 1+3, 1+1+2, 1+1+1+1.
     .  ⮡  x[s]  뫮 㬥, -
, ⮡ s = 1  x[s-1] < x[s]. ᫨ x[s]  ᫥,  
⮣  筮. ᫨  ᫥,  㦭, ⮡ x[s-1] <=
(楫  (x[s]/2))  s=1.


     2.5.     .

       뢠   ꥪ  ⠪ 浪,
⮡  ᫥騩 쭮  ⫨砫    ।饣.
ᬮਬ ᪮쪮  ⠪ த.

     2.5.1.  ᫨  ᫥⥫쭮  n  ᥫ
1..k  ⠪ 浪, ⮡  ᫥ ⫨砫   -
饩  ⢥ , 祬  , 祬  1.

     襭. ᬮਬ אַ㣮  ਭ n    
k.    ⨪ 㤥  誠.  ࠧ, -
 襪 ᮮ⢥ ᫥⥫쭮  ᥫ 1..k -
 n (s- 童 ᫥⥫쭮 ᮮ⢥  誨 
s- ਧ⠫).   誥 㥬  ५,  
  ࠢ   . 砫  誨 ⠢
    ਧ⠫ ५窮 .   誨 
⠪ ࠢ:  ᠬ ࠢ ,     -
   ࠢ (ᮢ  ) ५,   
   ⮬ ࠢ,   騥  ࠢ    誨
( 㯥૨  ࠩ) ࠧ稢 㣮.
     ᭮,    蠣 ⮫쪮  誠 ᤢ, ..
 童 ᫥⥫쭮   1.  樥 
n,   室  ᫥⥫쭮  ᥫ 1...k. 砩
n = 1 祢.  n > 1.  室   ,   -
  ᫥ 誠,  ,    ᫥.  -
஬ 砥 ᫥ 誠 ⮨  ⥭,     稢,
⠪      室 ண ⨯ ᫥ k-1 室 ࢮ
⨯,  ६  ᫥ 誠 뢠   ⪠.
᫨  ⥯ 㤥  ᫥ 誥,    n-1
 । 樨 ஡  ᫥⥫쭮 
n-1   ࠧ;   ᫥ 誨   ᫥-
⥫쭮  n-1  k ᫥⥫쭮⥩  n.
       ணࠬ,   ᫥⥫쭮 x[1]...x[n], 㤥
࠭ ᨢ d[1]...d[n]  ᥫ +1   -1  (+1  ᮮ⢥
५ , -1 -५ ).

砫쭮 ﭨ: x[1] =...= x[n] = 1; d[1] =...= d[n] = 1.

ਢ    室  ᫥饩 ᫥⥫쭮 (-
६ ,    - ⢥ ⠭  -
 㫥᪮ ६ p).

  {᫨ , ᤥ 蠣   p := true, ᫨ ,
    p := false }
  i := n;
  while (i > 1) and
  | (((d[i]=1) and (x[i]=n)) or ((d[i]=-1) and (x[i]=1)))
  |   do begin
  | i:=i-1;
  end;
  if (d[i]=1 and x[i]=n) or (d[i]=-1 and x[i]=1)
  |    then begin {i=1}
  | p:=false;
  end else begin
  | p:=true;
  | x[i] := x[i] + d[i];
  | for j := i+1 to n do begin
  | | d[j] := - d[j];
  | end;
  end;

     砭.   ᫥⥫쭮⥩ 㫥   
㣮 襭, ᯮ饥  ⥬. (   -
뢠 筮   " ".)
     襬   ᫠  0  (2  ⥯ n) - 1  -
筮 ⥬. ਬ,  n = 3 襬:

            000 001 010 011 100 101 110 111

⥬    ᥫ ࣭ ८ࠧ,  
, ஬ ࢮ,   㬬  ।饩 ன (  
2). 묨 ᫮, ᫮

     a[1], a[2],...,a[n]  ८ࠧ㥬 
     a[1], a[1] + a[2], a[2] + a[3],...,a[n-1] + a[n]

(㬬   2).  n=3 稬:

            000 001 011 010  110  111 101 100.

      ஢,  ᠭ ८ࠧ ᥫ -
 ( ⥬ ᠬ    ᫥⥫쭮      ࠧ).
஬  ⮣,     ᥤ ᥫ ⫨ 
 011...1   100...0,   -  ᫥  ८ࠧ  -
ਢ   ⢥ .

     ਬ  .    ,    -
⨬  ⠢ 稪 㣫  ⮩ . ᠤ   -
ࠡ, ᨬ  ࠡ   梥,    -
  ⠭ .   室 㤥   -
砥  0,     1 (. .  塞 㣮 " 筮 
180").

     ⪠ ࠡ:
                     0       1
             -> |_|_|_|_|*|*|*|*| <- (᪫ ).

      冷  ஦      ⥩ 
⠢  ன , 砥   㣮
 筮  90 ࠤᮢ:

                   0   0   1   1
                   0   1   0   1
                 _ _ _ _
                |_|_|_|_|*|*|*|*|
                |_|_|*|*|_|_|*|*|

 ,

                 0 0 0 0 1 1 1 1
                 0 0 1 1 0 0 1 1
                 0 1 0 1 0 1 0 1
                 _ _ _ _
                |_|_|_|_|*|*|*|*|
                |_|_|*|*|_|_|*|*|
                |_|*|_|*|_|*|_|*|

  ਬ 㣮  筮  45 ࠤᮢ  ..   -
, , ⮪:   祭 ࠭  ࠧ  -
쪮  ⮢    ᨣ,  ᫨   -
  ६,  - ६  -
⮢  ᫥묨.          ⮩
᭮.   ⠪, ⮡   蠣 﫮 
   ( ⮬ ᫥   ᫥, ᫥  -
 ).

                 0 0 0 0 1 1 1 1
                 0 0 1 1 1 1 0 0
                 0 1 1 0 0 1 1 0
                 _ _ _ _
                |_|_|_|_|*|*|*|*|
                |_|_|*|*|*|*|_|_|
                |_|*|*|_|_|*|*|_|

     ᠭ  㫠   ८ࠧ  -
  ⮢    㣫 .

     2.5.2.   ⠭ ᥫ  1..n  ⠪,  ⮡
   ᫥   砫      ।饩  ⠭
(࠭ᯮ樥)  ᥤ ᥫ. ਬ,  n = 3  -
⨬ ⠪ 冷: 3.2 1 -> 2 3.1 -> 2.1 3 -> 1 2.3 -> 1.3 2  ->
3 1 2 ( ⠢塞묨 ᫠ ⠢ 窨).

     襭.   ⢮ ⠭  ᬮਬ  -
⢮  ᫥⥫쭮⥩ y[1]..y[n] 楫 ⥫ -
ᥫ,   y[1] <= 0,..., y[n] <= n-1.   ⮫쪮  -
⮢, ᪮쪮  ⢥  ⠭,   ᥩ -
    筮 ᮮ⢥⢨. ,  -
  ⠭  ⠢    ᮮ⢥⢨  ᫥⥫쭮
y[1]..y[n],  y[i] - ⢮ ᥫ,  i   -
 i  ⮩ ⠭.   筮  ⥪  
⠪  砭. ⠭ ᥫ 1...n 砥  -
⠭ ᥫ 1..n-1  ᫠ n, ஥  ⠢
   n .  ⮬  ᮯ⠢塞     ᫥-
⥫쭮      童, ਭ騩 祭  0
 n-1,  ।騥 童  .    ⮬  뢠,
        童 ᫥⥫쭮 y
ᮮ⢥ ⠭  ᥤ ᥫ, ᫨   ᫥-
騥  ᫠ ᫥⥫쭮 y ਭ ᨬ쭮  -
쭮    祭. , 㢥祭 y[i]   1
ᮮ⢥  ⠭  ᫠  i      ࠢ ᥤ, 
㬥襭 -  .
      ᯮ 襭   ᫥  ᫥-
⥫쭮⥩,   蠣 ண  童   -
.  אַ㣮  ᪮  ଥ ⭨ (-
 i- ⨪ ࠢ i)   誨  ⥬  ࠢ, 
᫨  ᫥⥫쭮 y, 祬 i- 童 㤥  -
,    ᫨    ᫥騥 誨   .  
㬥 ࠫ쭮    y  ४஢  ⠭.
祢  ᯮᮡ ॡ ᪠   ᫠ i;   -
, ᫨  ᠬ ⠭ ࠭ 㭪 i  |--->
  ᫠ i  ⠭ (⭮  ⠭ ⮡-
),  ᮮ⢥騬 ࠧ  ४஢.    
砥 ணࠬ:

 program test;
 | const n=...;
 | var
 |   x: array [1..n] of 1..n; {⠭}
 |   inv_x: array [1..n] of 1..n; {⭠ ⠭}
 |   y: array [1..n] of integer; {Y[i] < i}
 |   d: array [1..n] of -1..1; {ࠢ}
 |   b: boolean;
 |
 | procedure print_x;
 | | var i: integer;
 | begin
 | | for i:=1 to n do begin
 | | | write (x[i], ' ');
 | | end;
 | | writeln;
 | end;
 |
 | procedure set_first;{ࢠ ⠭: y[i]=0   i}
 | | var i : integer;
 | begin
 | | for i := 1 to n do begin
 | | | x[i] := n + 1 - i;
 | | | inv_x[i] := n + 1 - i;
 | | | y[i]:=0;
 | | | d[i]:=1;
 | | end;
 | end;
 |
 | procedure move (var done : boolean);
 | | var i, j, pos1, pos2, val1, val2, tmp : integer;
 | begin
 | | i := n;
 | | while (i > 1) and (((d[i]=1) and (y[i]=i-1)) or
 | | |          ((y[i]=-1) and (y[i]=0))) do begin
 | | | i := i-1;
 | | end;
 | | done := (i>1);
 | | {饭 易  ⥬,   童  }
 | | if done then begin
 | | | y[i] := y[i]+d[i];
 | | | for j := i+1 to n do begin
 | | | | d[j] := -d[j];
 | | | end;
 | | | pos1 := inv_x[i];
 | | | val1 := i;
 | | | pos2 := pos1 + d[i];
 | | | val2 := x[pos2];
 | | | {pos1, pos2 -  ⠢塞 ⮢;
 | | |   val1, val2 -  祭}
 | | | tmp := x[pos1];
 | | | x[pos1] := x[pos2];
 | | | x[pos2] := tmp;
 | | | tmp := inv_x[val1];
 | | | inv_x[val1] := inv_x[val2];
 | | | inv_x[val2] := tmp;
 | | end;
 | end;
 |
 begin
 | set_first;
 | print_x;
 | b := true;
 | {⠭  ⠭  ⥪饩 ⥫쭮;
 |   ᫨ b ,  ⥪ - ᫥}
 | while b do begin
 | | move (b);
 | | if b then print_x;
 | end;
 end.

     2.6. ᪮쪮 砭.

     ᬮਬ  ࠧ  ᯮ짮    ਥ.  砫
㤠       ⠪ 奬: ।塞 冷 
 ᫥ ꥪ   뢠 楤  -
室   ꥪ  ᫥饬 ( ᫥ ⮣ 浪).
         ॡ ࠭,  ⥪饣
ꥪ,      ⥫  ଠ  (ࠢ
५). ,    ᫥ ⠭ ( -
  蠣 ⨬  ࠭ᯮ)  ਬ ⠪ ਥ:
⠭  筮 ᮮ⢥⢨   塞
⢮  㣨,   ஥.  ᮮ⢥⢨
  ਪ  ⭮  .   ਢ ᪮쪮 ,
易  ⠪ 뢠묨 "᫠ ⠫".

     2.6.1. ᫨  ᫥⥫쭮  2n, ⠢-
  n   n  ,   㬬   -
砫쭮  १ ⥫쭠 (.. ᫮     
ॢ室 ᫠ ).

     襭. ࠦ  ஬ (1,1),    
஬  (1,-1),  ᪠,   饬   窨 (0,0)
  (n,0),  ᪠騥   .
     㤥  ᫥⥫쭮    ᨪ᪮
浪,  ,    -1  ।  1.  ࢮ  ᫥-
⥫쭮 㤥 ""
        1, -1, 1, -1, ...
 ᫥ - "ઠ"
        1, 1, 1, ..., 1, -1, -1, ..., -1.
      ३  ᫥⥫쭮  ᫥饩?  -
    ᮢ,  ⥬    -1    1.
     ᯮ   ࠢ.  -
 -1  1  ⮫쪮  ⮬ 砥, ᫨ ࠢ    
 (    -1).  -1  1,  -
室    ⠪  :  䨪஢  砫 ᮪ ᫥-
⥫쭮,   쭮 த.  襭:  
ਯ뢠 -1, ᫨    ᫮ ⥫쭮, 
 ਯ뢠 1. 砥 ⠪ ணࠬ:

    ...
    type array2n = array [1..2n] of integer;
    ...
    procedure get_next (var a: array2n; var last: Boolean);
    | { a 頥 ᫥ ᫥⥫쭮, ᫨}
    | {  ( ⮬ last=false),  last:=true}
    | var k, i, sum: integer;
    begin
    | k:=2*n;
    | {ਠ:  a[k+1..2n] ⮫쪮  }
    | while a[k] = -1 do begin k:=k-1; end;
    | {k - ᨬ쭮 । ,   a[k]=1}
    | while (k>0) and (a[k] = 1) do begin k:=k-1; end;
    | {a[k] - ᠬ ࠢ -1,  ன  1;
    |  ᫨ ⠪ ,  k=0}
    | if k = 0 then begin
    | | last := true;
    | end else begin
    | | last := false;
    | | i:=0; sum:=0;
    | | {sum = a[1]+...+a[i]}
    | | while i<> k do begin
    | | | i:=i+1; sum:= sum+a[i];
    | | end;
    | | {sum = a[1]+...+a[k]}
    | |  a[k]:= 1; sum:= sum+2;
    | | {  a[k]  , sum=a[1]+...+a[k]}
    | | while k <> 2*n do begin
    | | | k:=k+1;
    | | | if sum > 0 then begin
    | | | | a[k]:=-1
    | | | end else begin
    | | | | a[k]:=1;
    | | | end;
    | | | sum:= sum+a[k];
    | | end;
    | | {k=n, sum=a[1]+...a[2n]=0}
    | end;
    end;

     2.6.2.  ᫨  ⠭ ᪮  ந n
ᮬ⥫. 冷 ᮬ⥫  , ᪮ 
। 冷 ⢨. (ਬ,  n = 4  5 -
 ((ab)c)d, (a(bc))d, (ab)(cd), a((bc)d), a(b(cd)).)

     .  浪 ⢨ ᮮ⢥ ᫥-
⥫쭮  ⥪ .

     2.6.3.   㦭  2n 祪, ஭㬥஢  1
 2n. ᫨  ᯮᮡ ஢ n ᥪ  
 設   窠.

     2.6.4. ᫨  ᯮᮡ ࠧ१ n-㣮쭨  -
㣮쭨, ஢ n - 2  .

           ᫥  ⮢ -
 ⢠   ᬮਬ  ,  㦤  ⮤  ᪠  
⠬ (backtracking).

     2.7.  .

           ⢮  ꥪ⮢    ⥬  
᢮⢮,   . ᪨ ਬ: C(n,k) - ᫮
 k-  n-⭮  ⢠  -  
,  ⠡ 祭 㭪樨   㫠:

    C (n,0) = C (n,n) = 1            (n >= 1)
    C (n,k) = C (n-1,k-1) + C (n-1,k) (n > 1, 0 < k < n);

  㫥 n!/((k!)*(n-k)!). ( ᯮᮡ 䥪⨢, -
  ᫨  祭 (n,k).)

    ਢ 㣨 ਬ.

     2.7.1 (᫮ ࠧ). (।    -
   ணࠬ஢ 1988 .)  P(n) - ᫮ ࠧ-
 楫 ⥫쭮 n   楫  ⥫  ᫠
(  浪, 1+2  2+1 -     ࠧ).  n=0
 P(n) = 1 (⢥ ࠧ  ᮤন ᫠).
ந  ᫥ P(n)   n.
     襭.      ( ਢ쭮) ⠪ 
 P(n):

 P(n) = P(n-1)+P(n-2)-P(n-5)-P(n-7)+P(n-12)+P(n-15) +...

(   童 ।, ⠥       ࠢ
(3*q*q-q)/2  (3*q*q+q)/2).
         ᯮ짮  ਤ㬠 ᯮᮡ -
  P(n),  ⢥ 䥪⨢ ॡ  
 ࠧ.
     稬 १ R(n,k) ( n >= 0, k >= 0) ᫮ ࠧ
n    楫  ⥫  ᫠,  ॢ室騥 k. (
⮬  R(0,k) ⠥ ࠢ 1   k >= 0.) 祢, P(n) =
R(n,n).  ࠧ n  ᫠,   ॢ室騥  k,  -
쥬    㯯    ᨬ    ᨬ쭮 ᫠
(稬  i). ᫮ R(n,k) ࠢ 㬬 ( ᥬ i   1  
k)   ࠧ  ᫠묨   k  ᨬ
᫠, ࠢ i.  ࠧ n  ᫠      k  
  ᫠, ࠢ i,   ।⠢ ᮡ ࠧ-
 n - i  ᫠,  ॢ室騥 i ( i <= k).  


    R(n,k) = 㬬  i  1  k ᥫ R(n-i,i)  k <= n;
    R(n,k) = R(n,n)  k >= n,

   ⠡ 祭 㭪樨 R.

     2.7.2 (⫨ ). ( ।  -
   ணࠬ஢ 1989 ). ᫥⥫쭮
 2n  (   0  9) 뢠 ⫨  -
⮬, ᫨ 㬬  n  ࠢ 㬬 ᫥ n . -
 ᫮ ⫨ ᫥⥫쭮⥩  .

     襭. (饭   ⭨ ;  ᮦ-
,    㪠 䠬, ⠪  ࠡ ஢﫨 -
஢묨.) ᬮਬ   :  ᫮  ᫥-
⥫쭮⥩,    ࠧ   㬬  n   㬬
᫥ n  ࠢ k (k = -9n,..., 9n).  T(n, k) - -
 ⠪ ᫥⥫쭮⥩.
     쥬  ⢮  ⠪  ᫥⥫쭮⥩   
ᨬ  ࠧ  ࢮ   ᫥  ࠬ.  ᫨
 ࠧ ࠢ t,  ࠧ  㬬 㯯  ⠢-
  n-1  ࠢ k-t. 뢠,     ࠧ t -
 10 - ( t), 砥 
   T(n,k) = 㬬  t  -9  9 ᥫ (10-|t|) * T(n-1,  k-t).
( ᫠  ⢮, ⠪  k-t  
᫨誮 .)
