ЏђЋѓђЂЊЊ€ђЋ‚ЂЌ€…: ’…Ћђ…Њ› € ‡Ђ„Ђ—€


            Ќ…‘ЉЋ‹њЉЋ ‡ЂЊ…—ЂЌ€‰ ‚Њ…‘’Ћ Џђ…„€‘‹Ћ‚€џ

Љ­ЁЈ    ­ ЇЁб ­   Ї®  ¬ вҐаЁ « ¬  § ­пвЁ©  Їа®Ја ¬¬Ёа®ў ­ЁҐ¬  б®
иЄ®«м­ЁЄ ¬Ё ¬ вҐ¬ вЁзҐбЄЁе Є« бб®ў иЄ®«л N 57.

Љ­ЁЈ  ­ ЇЁб ­  ў  гЎҐ¦¤Ґ­ЁЁ,  зв®  Їа®Ја ¬¬Ёа®ў ­ЁҐ  Ё¬ҐҐв  бў®©
ЇаҐ¤¬Ґв,  ­Ґ  бў®¤пйЁ©бп ­Ё Є Є®­ЄаҐв­л¬ п§лЄ ¬ Ё бЁб⥬ ¬, ­Ё Є
¬Ґв®¤ ¬ Ї®бв஥­Ёп Ўлбвале  «Ј®аЁв¬®ў.

Љв®-в® ®¤­ ¦¤л бЄ § «, зв® ¬®¦­® гЎҐ¤Ёвм ў Їа ўЁ«м­®бвЁ  «Ј®аЁв-
¬ , ­® ­Ґ ў Їа ўЁ«м­®бвЁ Їа®Ја ¬¬л. Ћ¤­  Ё§ 楫Ґ© Є­ЁЈЁ -  Ї®Їл-
в вмбп Їа®¤Ґ¬®­бваЁа®ў вм, зв® нв® ­Ґ в Є.

‚ ЇаЁ­жЁЇҐ, ў®§¬®¦­®бвм Їа ЄвЁзҐбЄ®Ј® ЁбЇ®«­Ґ­Ёп Їа®Ја ¬¬ ­Ґ пў-
«пҐвбп ­ҐЇаҐ¬Ґ­­л¬ гб«®ўЁҐ¬  Ё§г祭Ёп  Їа®Ја ¬¬Ёа®ў ­Ёп.  Ћ¤­ Є®
®­   пў«пҐвбп бЁ«м­Ґ©иЁ¬ бвЁ¬г«®¬ - ЎҐ§ в Є®Ј® бвЁ¬г«  ўап¤ «Ё г
Є®Ј® еў вЁв Ё­вҐаҐб  Ё вҐаЇҐ­Ёп.

‚лЎа ­­л©  ¦ ­а Є­ЁЈЁ Ї® ­Ґ®Ўе®¤Ё¬®бвЁ ®Ја ­ЁзЁў Ґв ҐҐ "Їа®Ја ¬-
¬Ёа®ў ­ЁҐ¬ ў ¬ «®¬", ®бв ў«пп ў бв®а®­Ґ ­Ґ®Ўе®¤Ё¬го з бвм  Їа®Ј-
а ¬¬ЁбвбЄ®Ј®  ®Ўа §®ў ­Ёп  - а Ў®вг Ї® ¬®¤ЁдЁЄ жЁЁ Ў®«миЁе Їа®Ј-
а ¬¬. Ђўв®а Їа®¤®«¦ Ґв ¬Ґзв вм ® ­ Ў®аҐ г祡­ле Їа®Ја ¬¬­ле бЁб-
⥬ нв «®­­®Ј® Є зҐбвў , ¤®бвгЇ­ле ¤«п ¬®¤ЁдЁЄ жЁЁ иЄ®«м­ЁЄ ¬Ё.

Љ ¦Ґвбп, •® а бЄ § «, зв® нбвҐвЁзҐбЄ п ЇаҐ«Ґбвм Їа®Ја ¬¬л -  нв®
­Ґ  аеЁвҐЄвга­®Ґ Ё§«ЁиҐбвў®,   в®, зв® ®в«Ёз Ґв ў Їа®Ја ¬¬Ёа®ў -
­ЁЁ гбЇҐе ®в ­Ґг¤ зЁ. …б«Ё, аҐи п § ¤ зЁ Ё§ нв®© Є­ЁЈЁ, зЁв вҐ«м
Ї®згўбвўгҐв  ЇаҐ«Ґбвм е®а®и® ­ ЇЁб ­­®© Їа®Ја ¬¬л, ў Є®в®а®© "­Ё
гЎ ўЁвм, ­Ё ЇаЁЎ ўЁвм", Ё ᮬ­Ґ­Ёп ў Їа ўЁ«м­®бвЁ Є®в®а®© Є ¦гв-
бп ­Ґ«ҐЇл¬Ё, в®  ўв®а Ўг¤Ґв бзЁв вм бў®о жҐ«м ¤®бвЁЈ­гв®©.

• а ЄвҐа  Ј« ў а §«ЁзҐ­: ў ®¤­Ёе ЇаҐ¤« Ј Ґвбп ­ Ў®а ¬ «® бўп§ ­-
­ле ¤агЈ б ¤агЈ®¬ § ¤ з б аҐиҐ­Ёп¬Ё, ў ¤агЈЁе Ї® бгйҐбвўг  Ё§« -
Ј Ґвбп ®¤Ё­-Ґ¤Ё­б⢥­­л©  «Ј®аЁв¬. ’Ґ¬л Ј« ў ў® ¬­®Ј®¬ ЇҐаҐбҐЄ -
овбп, Ё ¬л ЇаҐ¤Ї®з«Ё Є®Ґ-Є ЄЁҐ Ї®ўв®аҐ­Ёп д®а¬ «м­л¬ ббл«Є ¬.

“а®ўҐ­м ваг¤­®бвЁ § ¤ з Ё Ј« ў  ўҐбм¬   а §«ЁзҐ­.  Њл  бв а «Ёбм
ўЄ«озЁвм  Є Є Їа®бвлҐ § ¤ зЁ, Є®в®алҐ ¬®Јгв Ўлвм Ї®«Ґ§­л ¤«п ­ -
зЁ­ ойЁе, в Є Ё ваг¤­лҐ § ¤ зЁ, Є®в®алҐ ¬®Јгв Ї®б ¤Ёвм ў «г¦г  Ё
бЁ«м­®Ј® иЄ®«м­ЁЄ . (•®вм Ё ।Є®, ­® нв® Ўлў Ґв Ї®«Ґ§­®.)

‚ Є зҐб⢥ п§лЄ  ¤«п § ЇЁбЁ Їа®Ја ¬¬ Ўл« ўлЎа ­ Ї бЄ «м  Џ бЄ «м
¤®бв з­® Їа®бв Ё ҐбвҐб⢥­, Ё¬ҐҐв ­ҐЇ«®еЁҐ ॠ«Ё§ жЁЁ (­ ЇаЁ¬Ґа,
Turbo Pascal 3.0 Ё 5.0 дЁа¬л Borland) Ё Ї®§ў®«пҐв § ЇЁб вм аҐиҐ-
­Ёп  ўбҐе  а бб¬ ваЁў Ґ¬ле  § ¤ з. ‚®§¬®¦­®, Њ®¤г« -2 Ё«Ё ЋЎҐа®­
Ўл«Ё Ўл Ў®«ҐҐ Ё§пй­л¬ ўлЎ®а®¬, ­® Ї®Є  зв® ®­Ё ваг¤­ҐҐ ¤®бвгЇ­л.

ЌҐг¤ з­л© ®Їлв ЇЁб ­Ёп "Ї®Їг«па­ле" г祡­ЁЄ®ў Ї®  Їа®Ја ¬¬Ёа®ў -
­Ёо гзЁв: ­ЁЄ Є®Ј® бобоЄ ­мп! ЇЁб вм ­ ¤® в Є, зв®Ўл Ї®в®¬ б ¬Ё¬
Ўл«® ­Ґ бвл¤­® Їа®зҐбвм.

Џа ЄвЁзҐбЄЁ ўбҐ § ¤ зЁ Ё  «Ј®аЁв¬л, ࠧ㬥Ґвбп, ­Ґ пў«повбп  ­®-
ўл¬Ё. (‚ ­ҐЄ®в®але ।ЄЁе б«гз пе ЇаЁўҐ¤Ґ­л ббл«ЄЁ ­  Є®­ЄаҐв­го
Є­ЁЈг  Ё«Ё  Є®­ЄаҐв­®Ј®  祫®ўҐЄ .  ‘¬.  в Є¦Ґ  бЇЁб®Є  Є­ЁЈ ¤«п
¤ «м­Ґ©иҐЈ® з⥭Ёп.) ‚¬Ґб⥠б ⥬ ¬л ­ ¤ҐҐ¬бп, зв®  ў  ­ҐЄ®в®але
б«гз пе  «Ј®аЁв¬л (Ё ®б®ЎҐ­­® ¤®Є § вҐ«мбвў ) Ё§«®¦Ґ­л Ў®«ҐҐ Є®-
а®вЄ® Ё ®взҐв«Ёў®.

ќв® ­Ґ в®«мЄ® Ё ­Ґ бв®«мЄ® г祡­ЁЄ ¤«п иЄ®«м­ЁЄ , бЄ®«мЄ®  бЇа -
ў®з­ЁЄ Ё § ¤ з­ЁЄ ¤«п ЇаҐЇ®¤ ў вҐ«п, Ј®в®ўп饣®бп Є § ­пвЁо.

ЋЎ " ўв®абЄЁе Їа ў е": Їа ў® д®а¬г«Ёа®ў вм § ¤ зг Ё ®Ўкпб­пвм Ґс
аҐиҐ­ЁҐ пў«пҐвбп ­Ґ®вз㦤 Ґ¬л¬ ҐбвҐб⢥­­л¬ Їа ў®¬ ўбпЄ®Ј®,  Єв®
­  нв® бЇ®б®ЎҐ­. ‚ ᮮ⢥вбвўЁЁ б нвЁ¬ ⥪бв (ў ASCII Ё TeX-ўҐа-
бЁпе)  пў«пҐвбп  бў®Ў®¤­®  а бЇа®бв࠭塞묨. ‘ ­Ё¬ ¬®¦­® ¤Ґ« вм
ўбс, зв® гЈ®¤­®, Ё Ґб«Ё ‚л ў­Ґб«Ё ў ­ҐЈ® ®иЁЎЄЁ, ­Ґ гЄ § ў,  зв®
®­Ё  ЇаЁ­ ¤«Ґ¦ в  ‚ ¬, Ё«Ё ЁбЇ®«м§®ў «Ё ⥪бв ў Є®¬¬ҐазҐбЄЁе жҐ-
«пе, ­Ґ Ї®¤Ґ«ЁўиЁбм ЇаЁЎл«мо - Ѓ®Ј ‚ ¬ бг¤мп.

Ѓ« Ј®¤ а­®бвЁ. џ а ¤ б«гз о Ї®Ў« Ј®¤ аЁвм ўбҐе, б ЄҐ¬ Ё¬Ґ« зҐбвм
б®ваг¤­Ёз вм, ЇаҐЇ®¤ ў п Їа®Ја ¬¬Ёа®ў ­ЁҐ, ®б®ЎҐ­­® вҐе, Єв® Ўл«
"Ї® ¤агЈго бв®а®­г Ў ааЁЄ ¤л".
        Ќ …   Џ Ћ Љ “ Џ Ђ ‰ ’ …   ќ ’ “   Љ Ќ € ѓ “ !

                (ЏаҐ¤гЇаҐ¦¤Ґ­ЁҐ  ўв®а )

     ‚ нв®© Є­ЁЈҐ ­ЁзҐЈ® ­Ґ  Ј®ў®аЁвбп  ®Ў  ®б®ЎҐ­­®бвпе  BIOS ,
DOS , OS , GEM  Ё Windows, ЇаҐ¤бв ў«пойЁе ®б­®ў­го б«®¦­®бвм ЇаЁ
­ бв®п饬 Їа®Ја ¬¬Ёа®ў ­ЁЁ.

     ‚ ­Ґ© ­Ґв ­Ё б«®ў  ®Ў ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®¬ Їа®Ја ¬¬Ёа®-
ў ­ЁЁ, ®вЄалўиҐ¬ ­®ўго нЇ®ег ў Ї®бв஥­ЁЁ ¤а㦥б⢥­­ле Ё нд䥪-
вЁў­ле Їа®Ја ¬¬­ле бЁб⥬.

     €§ ­ҐҐ ‚л ­Ґ г§­ ҐвҐ ® Ја дЁзҐбЄЁе ў®§¬®¦­®бвпе Є®¬ЇмовҐа ,
ЎҐ§  Є®в®але ­Ґ¬лб«Ё¬® ᮢ६Ґ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ, ® Ў®Ј вб⢥
Ё а §­®®Ўа §ЁЁ ¬Ёа  ўЁ¤Ґ® ¤ ЇвҐа®ў.

     ЌҐ а ббЄ § ­® ў ­Ґ© Ё  ®  ­ ЇЁб ­ЁЁ  १Ё¤Ґ­в­ле  Їа®Ја ¬¬,
в®­Є®бвЁ ў§ Ё¬®¤Ґ©бвўЁп Є®в®але ¤®«¦Ґ­ §­ вм Є ¦¤л©.

     €бЄгбб⢥­­л©  Ё­вҐ««ҐЄв,  ®вЄалўиЁ©  ­®ўлҐ ал­ЄЁ бЎлв  ¤«п
Їа®Ја ¬¬­®Ј® ®ЎҐбЇҐзҐ­Ёп, ®Ў®©¤Ґ­ ЇаҐ§аЁвҐ«м­л¬ ¬®«з ­ЁҐ¬.

     ќЄбЇҐав­лҐ бЁб⥬л, Є®в®алҐ ў ᪮஬ Ўг¤г饬  § ©¬гв  ¬Ґбв®
­  а Ў®зҐ¬ бв®«Ґ Є ¦¤®Ј®, ¤ ¦Ґ ­Ґ гЇ®¬Ё­ овбп.

     ‹®ЈЁзҐбЄ®Ґ  Їа®Ја ¬¬Ёа®ў ­ЁҐ,  Ї®б⥯Ґ­­® ўлвҐб­по饥 гбв -
ॢ訩 ®ЇҐа в®а­л© бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп, ­Ґ § ва®­гв®.

     „а ¬ вЁзҐбЄЁ© Ї®ў®а®в ®в Ў § ¤ ­­ле Є Ў § ¬ §­ ­Ё©, ўл§ў ў-
иЁ© ў ¦Ё§­Ё ­®ўго Їа®дҐббЁо -- Ё­¦Ґ­Ґа §­ ­Ё© -- ®бв «бп ­Ґ§ ¬Ґ-
祭­л¬  ўв®а®¬.

     Џа®Ў«Ґ¬л ®в« ¤ЄЁ Ё б®Їа®ў®¦¤Ґ­Ёп Їа®Ја ¬¬,  § ­Ё¬ ойЁҐ,  Ї®
®ЎйҐ¬г  ¬­Ґ­Ёо Їа®дҐббЁ®­ «®ў, 90% ў Їа®Ја ¬¬Ёа®ў ­ЁЁ, ЁЈ­®аЁаг-
овбп.

     ‚  Є­ЁЈҐ  ЁбЇ®«м§говбп  «Ёим б ¬лҐ н«Ґ¬Ґ­в а­лҐ ў®§¬®¦­®бвЁ
Ї бЄ «п. ЋЎиЁа­лҐ ў®§¬®¦­®бвЁ, ЇаҐ¤®бв ў«пҐ¬лҐ ᮢ६Ґ­­л¬Ё  Ё­-
⥣аЁа®ў ­­л¬Ё Їа®Ја ¬¬­л¬Ё б। ¬Ё, ®бв овбп ­Ґў®бвॡ®ў ­­л¬Ё.
(ЌҐ  Ј®ў®ап 㦥 ® ⮬, зв® Ї бЄ «м 㦥 ў®®ЎйҐ гбв аҐ«, ўлвҐб­Ґ­-
­л© п§лЄ®¬ ‘Ё.)

     €ЈагиҐз­лҐ Ј®«®ў®«®¬ЄЁ, Є®в®ал¬ Ї®бўп饭  Є­ЁЈ , ­ЁЄ®¬г  ­Ґ
­г¦­л.  …б«Ё  ¦Ґ ЇҐаҐ¤ ‚ ¬Ё ўбв ­Ґв ¤Ґ©б⢨⥫쭮 ў ¦­ п § ¤ з ,
­Ґг¦Ґ«Ё ‚л ­Ґ бЇа ўЁвҐбм б ­Ґ© б ¬Ё, ЎҐ§ ­ҐЇа®иҐ­ле  гзЁвҐ«Ґ©  Ё
б®ўҐвзЁЄ®ў?

     Љ®а®зҐ  Ј®ў®ап, Ї®ЄгЇ вм нвг Є­ЁЈг Ј«гЇ® - ®б®ЎҐ­­® ⥯Ґам,
Є®Ј¤  ўл室Ёв бв®«мЄ® ЇҐаҐў®¤­ле агЄ®ў®¤бвў, ­ ЇЁб ­­ле ў  жЁўЁ-
«Ё§®ў ­­ле бва ­ е ­ бв®пйЁ¬Ё Їа®дҐббЁ®­ « ¬Ё.
     ѓ« ў  1. ЏҐаҐ¬Ґ­­лҐ, ўла ¦Ґ­Ёп, ЇаЁбў Ёў ­Ёп.

     1.1. ‡ ¤ зЁ ЎҐ§ ¬ ббЁў®ў

     1.1.1. „ ­л ¤ўҐ жҐ«лҐ ЇҐаҐ¬Ґ­­лҐ a, b.  ‘®бв ўЁвм  да Ј¬Ґ­в
Їа®Ја ¬¬л, Ї®б«Ґ ЁбЇ®«­Ґ­Ёп Є®в®а®Ј® §­ зҐ­Ёп ЇҐаҐ¬Ґ­­ле Ї®¬Ґ­п-
«Ёбм Ўл ¬Ґбв ¬Ё (­®ў®Ґ §­ зҐ­ЁҐ a а ў­® бв а®¬г §­ зҐ­Ёо b Ё ­ -
®Ў®а®в).

     ђҐиҐ­ЁҐ. ‚ўҐ¤Ґ¬ ¤®Ї®«­ЁвҐ«м­го 楫го ЇҐаҐ¬Ґ­­го t.
        t := a;
        a := b;
        b := t;
Џ®ЇлвЄ  ®Ў®©вЁбм ЎҐ§ ¤®Ї®«­ЁвҐ«м­®© ЇҐаҐ¬Ґ­­®©, ­ ЇЁб ў
        a := b;
        b := a;
­Ґ ЇаЁў®¤Ёв Є 楫Ё (ЎҐ§ў®§ўа в­® гва зЁў Ґвбп ­ з «м­®Ґ §­ зҐ­ЁҐ
ЇҐаҐ¬Ґ­­®© a).

     1.1.2.  ђҐиЁвм  ЇаҐ¤л¤гйго  § ¤ зг,  ­Ґ  ЁбЇ®«м§гп ¤®Ї®«­Ё-
⥫м­ле ЇҐаҐ¬Ґ­­ле (Ё ЇаҐ¤Ї®« Ј п, зв® §­ зҐ­Ёп¬Ё 楫ле ЇҐаҐ¬Ґ­-
­ле ¬®Јгв Ўлвм Їа®Ё§ў®«м­лҐ жҐ«лҐ зЁб« ).

     ђҐиҐ­ЁҐ. (Ќ з «м­лҐ §­ зҐ­Ёп a Ё b ®Ў®§­ зЁ¬ a0, b0.)
        a := a + b; {a = a0 + b0, b = b0}
        b := a - b; {a = a0 + b0, b = a0}
        a := a - b; {a = b0, b = a0}

     1.1.3.  „ ­®  楫®Ґ  зЁб«®   Ё ­ вга «м­®Ґ (楫®Ґ ­Ґ®ваЁж -
⥫쭮Ґ) зЁб«® n. ‚лзЁб«Ёвм   ў б⥯Ґ­Ё n. „агЈЁ¬Ё б«®ў ¬Ё,  ­Ґ-
®Ўе®¤Ё¬®  б®бв ўЁвм  Їа®Ја ¬¬г,  ЇаЁ ЁбЇ®«­Ґ­ЁЁ Є®в®а®© §­ зҐ­Ёп
ЇҐаҐ¬Ґ­­ле   Ё n ­Ґ ¬Ґ­повбп,   §­ зҐ­ЁҐ ­ҐЄ®в®а®© ¤агЈ®©  ЇҐаҐ-
¬Ґ­­®©  (­ ЇаЁ¬Ґа, b) бв ­®ўЁвбп а ў­л¬   ў б⥯Ґ­Ё n. (ЏаЁ н⮬
а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё ¤агЈЁҐ ЇҐаҐ¬Ґ­­лҐ.)

     ђҐиҐ­ЁҐ. ‚ўҐ¤Ґ¬ 楫го ЇҐаҐ¬Ґ­­го k, Є®в®а п ¬Ґ­пҐвбп ®в  0
¤®  n,  ЇаЁзҐ¬  Ї®¤¤Ґа¦Ёў Ґвбп в Є®Ґ бў®©бвў®: b = (a ў б⥯Ґ­Ё
k).

        k := 0; b := 1;
        {b = a ў б⥯Ґ­Ё k}
        while k <> n do begin
        | k := k + 1;
        | b := b * a;
        end;

„агЈ®Ґ аҐиҐ­ЁҐ в®© ¦Ґ § ¤ зЁ:

        k := n; b := 1;
        {a ў б⥯Ґ­Ё n = b * (a ў б⥯Ґ­Ё k)}
        while k <> 0 do begin
        | k := k - 1;
        | b := b * a;
        end;

     1.1.4. ђҐиЁвм ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё вॡгҐвбп, зв®Ўл зЁб-
«® ¤Ґ©бвўЁ© (ўлЇ®«­пҐ¬ле ®ЇҐа в®а®ў ЇаЁбў Ёў ­Ёп)  Ўл«®  Ї®ап¤Є 
log n (в® Ґбвм ­Ґ ЇаҐў®б室Ё«® Ўл C*log n ¤«п ­ҐЄ®в®а®© Є®­бв ­-
вл C; log n - нв® б⥯Ґ­м, ў Є®в®аго ­г¦­® ў®§ўҐбвЁ 2, зв®Ўл Ї®-
«гзЁвм n).

     ђҐиҐ­ЁҐ. ‚­ҐбҐ¬ ­ҐЄ®в®алҐ Ё§¬Ґ­Ґ­Ёп ў® ўв®а®Ґ Ё§ ЇаҐ¤«®¦Ґ­-
­ле аҐиҐ­Ё© ЇаҐ¤л¤г饩 § ¤ зЁ:

        k := n; b := 1; c:=a;
        {a ў б⥯Ґ­Ё n = b * (c ў б⥯Ґ­Ё k)}
        while k <> 0 do begin
        | if k mod 2 = 0 then begin
        | | k:= k div 2;
        | | c:= c*c;
        | end else begin
        | | k := k - 1;
        | | b := b * c;
        | end;
        end;

Љ ¦¤л© ўв®а®© а § (­Ґ ०Ґ)  Ўг¤Ґв  ўлЇ®«­пвмбп  ЇҐаўл©  ў аЁ ­в
®ЇҐа в®а   ўлЎ®а   (Ґб«Ё  k  ­ҐзҐв­®, в® Ї®б«Ґ ўлзЁв ­Ёп Ґ¤Ё­Ёжл
бв ­®ўЁвбп зҐв­л¬), в Є зв® §  ¤ў  жЁЄ«  ўҐ«ЁзЁ­  k  㬥­ми Ґвбп
Ї® Єа ©­Ґ© ¬ҐаҐ ў¤ў®Ґ.

     1.1.5.  „ ­л ­ вга «м­лҐ зЁб«   , b. ‚лзЁб«Ёвм Їа®Ё§ўҐ¤Ґ­ЁҐ
 *b, ЁбЇ®«м§гп ў Їа®Ја ¬¬Ґ «Ёим ®ЇҐа жЁЁ +, -, =, <>.

     ђҐиҐ­ЁҐ.
        var a, b, c, k : integer;
        k := 0; c := 0;
        {Ё­ў аЁ ­в: c = a * k}
        while k <> b do begin
        | k := k + 1;
        | c := c + a;
        end;
        {c = a * k Ё k = b, б«Ґ¤®ў вҐ«м­®, c = a * b}

     1.1.6.  „ ­л  ­ вга «м­лҐ  зЁб«     Ё b. ‚лзЁб«Ёвм Ёе б㬬г
 +b. €бЇ®«м§®ў вм ®ЇҐа в®ал ЇаЁбў Ёў ­Ёп «Ёим ўЁ¤ 

        <ЇҐаҐ¬Ґ­­ п1> := <ЇҐаҐ¬Ґ­­ п2>,
        <ЇҐаҐ¬Ґ­­ п> := <зЁб«®>,
        <ЇҐаҐ¬Ґ­­ п1> := <ЇҐаҐ¬Ґ­­ п2> + 1.

     ђҐиҐ­ЁҐ.
          ...
         {Ё­ў аЁ ­в: c = a + k}
          ...

     1.1.7. „ ­® ­ вга «м­®Ґ (楫®Ґ ­Ґ®ваЁж вҐ«м­®Ґ) зЁб«®     Ё
楫®Ґ Ї®«®¦ЁвҐ«м­®Ґ зЁб«® d. ‚лзЁб«Ёвм з бв­®Ґ q Ё ®бв в®Є r ЇаЁ
¤Ґ«Ґ­ЁЁ   ­  d, ­Ґ ЁбЇ®«м§гп ®ЇҐа жЁ© div Ё mod.

     ђҐиҐ­ЁҐ. ‘®Ј« б­® ®ЇаҐ¤Ґ«Ґ­Ёо, a = q * d + r, 0 <= r < d.

        {a >= 0; d > 0}
        r := a; q := 0;
        {Ё­ў аЁ ­в: a = q * d + r, 0 <= r}
        while not (r < d) do begin
        | {r >= d}
        | r := r - d; {r >= 0}
        | q := q + 1;
        end;

     1.1.8.  „ ­®  ­ вга «м­®Ґ  n,  ўлзЁб«Ёвм n!
        (0!=1, n! = n * (n-1)!).

     1.1.9.   Џ®б«Ґ¤®ў вҐ«м­®бвм  ”ЁЎ®­ ззЁ  ®ЇаҐ¤Ґ«пҐвбп  в Є:
a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) ЇаЁ k >= 2.  „ ­®  n,
ўлзЁб«Ёвм a(n).

     1.1.10.  ’  ¦Ґ § ¤ з , Ґб«Ё вॡгҐвбп, зв®Ўл зЁб«® ®ЇҐа жЁ©
Ўл«® Їа®Ї®ажЁ®­ «м­® log n. (ЏҐаҐ¬Ґ­­лҐ ¤®«¦­л Ўлвм  жҐ«®зЁб«Ґ­-
­л¬Ё.)

     “Є § ­ЁҐ.  Џ а  б®бҐ¤­Ёе зЁбҐ« ”ЁЎ®­ ззЁ Ї®«гз Ґвбп Ё§ ЇаҐ-
¤л¤г饩 г¬­®¦Ґ­ЁҐ¬ ­  ¬ ваЁжг
            |1 1|
            |1 0|
в Є зв® § ¤ з  бў®¤Ёвбп Є ў®§ўҐ¤Ґ­Ёо ¬ ваЁжл ў  б⥯Ґ­м  n.  ќв®
¬®¦­® ᤥ« вм §  C*log n ¤Ґ©бвўЁ© ⥬ ¦Ґ бЇ®б®Ў®¬, зв® Ё ¤«п зЁ-
ᥫ.

     1.1.11. „ ­® ­ вга «м­®Ґ n, ўлзЁб«Ёвм 1/0!+1/1!+...+1/n!.

     1.1.12.  ’®  ¦Ґ, Ґб«Ё вॡгҐвбп, зв®Ўл Є®«ЁзҐбвў® ®ЇҐа жЁ©
(ўлЇ®«­Ґ­­ле Є®¬ ­¤ ЇаЁбў Ёў ­Ёп) Ўл«® Ўл ­Ґ Ў®«ҐҐ C*n ¤«п  ­Ґ-
Є®в®а®© Є®­бв ­вл ‘.
     ђҐиҐ­ЁҐ.  €­ў аЁ ­в:  sum  =  1/1! +...+ 1/k!, last = 1/k!
(ў ¦­® ­Ґ ўлзЁб«пвм § ­®ў® Є ¦¤л© а § k!).

     1.1.13.  „ ­л  ¤ў   ­ вга «м­ле зЁб«  a Ё b, ­Ґ а ў­лҐ ­г«о
®¤­®ўаҐ¬Ґ­­®. ‚лзЁб«Ёвм ЌЋ„ (a,b) - ­ ЁЎ®«миЁ© ®ЎйЁ© ¤Ґ«ЁвҐ«м   
Ё b.

     ђҐиҐ­ЁҐ (1 ў аЁ ­в).

        if a > b then begin
        | k := a;
        end else begin
        | k := b;
        end;
        {k = max (a,b)}
        {Ё­ў аЁ ­в: ­ЁЄ Є®Ґ  зЁб«®, Ў®«м襥 k, ­Ґ пў«пҐвбп ®Ў-
          йЁ¬ ¤Ґ«ЁвҐ«Ґ¬}
        while not (((a mod k)=0) and ((b mod k)=0)) do begin
        | k := k - 1;
        end;
        {k - ®ЎйЁ© ¤Ґ«ЁвҐ«м, Ў®«миЁҐ - ­Ґв}

       (2  ў аЁ ­в -  «Ј®аЁв¬ …ўЄ«Ё¤ ). Ѓг¤Ґ¬ бзЁв вм , зв® ЌЋ„
(0,0) = 0. ’®Ј¤  ЌЋ„ (a,b) = ЌЋ„ (a-b,b)  =  ЌЋ„  (a,b-a);  ЌЋ„
(a,0) = ЌЋ„ (0,a) = a ¤«п ўбҐе a,b>=0.

         m := a; n := b;
        {Ё­ў аЁ ­в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
        while not ((m=0) or (n=0)) do begin
        | if m >= n then begin
        | | m := m - n;
        | end else begin
        | | n := n - m;
        | end;
        end;
        if m = 0 then begin
        | k := n;
        end else begin
        | k := m;
        end;

     1.1.14. Ќ ЇЁб вм ¬®¤ЁдЁжЁа®ў ­­л© ў аЁ ­в  «Ј®аЁв¬  …ўЄ«Ё-
¤ ,  ЁбЇ®«м§гойЁ© ᮮ⭮襭Ёп ЌЋ„ (a, b) = ЌЋ„ (a mod b, b) ЇаЁ
a >= b, ЌЋ„ (a, b) = ЌЋ„ (a, b mod a) ЇаЁ b >= a.

     1.1.15. „ ­л ­ вга «м­лҐ   Ё b, ­Ґ а ў­лҐ 0  ®¤­®ўаҐ¬Ґ­­®.
Ќ ©вЁ d = ЌЋ„ (a,b) Ё в ЄЁҐ жҐ«лҐ x Ё y, зв® d = a*x + b*y.

     ђҐиҐ­ЁҐ.  „®Ў ўЁ¬ ў  «Ј®аЁв¬ …ўЄ«Ё¤  ЇҐаҐ¬Ґ­­лҐ p, q, r, s
Ё ўЇЁиҐ¬ ў Ё­ў аЁ ­в гб«®ўЁп m = p*a + q*b; n = r*a + s*b.

        m:=a; n:=b; p := 1; q := 0; r := 0; s := 1;
        {Ё­ў аЁ ­в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0
                    m = p*a + q*b; n = r*a + s*b.}
        while not ((m=0) or (n=0)) do begin
        | if m >= n then begin
        | | m := m - n; p := p - r; q := q - s;
        | end else begin
        | | n := n - m; r := r - p; s := s - q;
        | end;
        end;
        if m = 0 then begin
        | k :=n; x := r; y := s;
        end else begin
        | k := m; x := p; y := q;
        end;

     1.1.16. ђҐиЁвм ЇаҐ¤л¤гйго  § ¤ зг,  ЁбЇ®«м§гп  ў   «Ј®аЁв¬Ґ
…ўЄ«Ё¤  ¤Ґ«Ґ­ЁҐ б ®бв вЄ®¬.

     1.1.17. (ќ.„Ґ©Єбва ).  „®Ў ўЁ¬  ў  «Ј®аЁв¬ …ўЄ«Ё¤  ¤®Ї®«­Ё-
⥫м­лҐ ЇҐаҐ¬Ґ­­лҐ u, v, z:

         m := a; n := b; u := b; v := a;
        {Ё­ў аЁ ­в: ЌЋ„ (a,b) = ЌЋ„ (m,n); m,n >= 0 }
        while not ((m=0) or (n=0)) do begin
        | if m >= n then begin
        | | m := m - n; v := v + u;
        | end else begin
        | | n := n - m; u := u + v;
        | end;
        end;
        if m = 0 then begin
        | z:= v;
        end else begin {n=0}
        | z:= u;
        end;

„®Є § вм, зв® Ї®б«Ґ ЁбЇ®«­Ґ­Ёп  «Ј®аЁв¬  z а ў­® г¤ў®Ґ­­®¬г  ­ -
Ё¬Ґ­м襬㠮ЎйҐ¬г Єа в­®¬г зЁбҐ« a, b: z = 2 * ЌЋЉ (a,b).

     ђҐиҐ­ЁҐ. ‡ ¬ҐвЁ¬, зв® ўҐ«ЁзЁ­  m*u + n*v ­Ґ ¬Ґ­пҐвбп ў 室Ґ
ўлЇ®«­Ґ­Ёп   «Ј®аЁв¬ . Ћбв Ґвбп ў®бЇ®«м§®ў вмбп ⥬, зв® ў­ з «Ґ
®­  а ў­  2*a*b Ё зв® ЌЋ„ (a, b) * ЌЋЉ (a, b) = a*b.

     1.1.18.  Ќ ЇЁб вм  ў аЁ ­в   «Ј®аЁв¬  …ўЄ«Ё¤ , ЁбЇ®«м§гойЁ©
ᮮ⭮襭Ёп
        ЌЋ„(2*a, 2*b) = 2*ЌЋ„(a,b)
        ЌЋ„(2*a, b)   =   ЌЋ„(a,b) ЇаЁ ­ҐзҐв­®¬ b,
­Ґ ўЄ«оз ойЁ© ¤Ґ«Ґ­Ёп б ®бв вЄ®¬,   ЁбЇ®«м§гойЁ© «Ёим ¤Ґ«Ґ­ЁҐ ­ 
2 Ё Їа®ўҐаЄг зҐв­®бвЁ. (—Ёб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  log k
¤«п Ёб室­ле ¤ ­­ле, ­Ґ ЇаҐў®б室пйЁе k.)

     ђҐиҐ­ЁҐ.

  m:= a; n:=b; d:=1;
  {ЌЋ„(a,b) = d * ЌЋ„(m,n)}
  while not ((m=0) or (n=0)) do begin
  | if (m mod 2 = 0) and (n mod 2 = 0) then begin
  | | d:= d*2; m:= m div 2; n:= n div 2;
  | end else if (m mod 2 = 0) and (n mod 2 = 1) then begin
  | | m:= m div 2;
  | end else if (m mod 2 = 1) and (n mod 2 = 0) then begin
  | | n:= n div 2;
  | end else if (m mod 2=1) and (n mod 2=1) and (m>=n)then begin
  | | m:= m-n;
  | end else if (m mod 2=1) and (n mod 2=1) and (m<=n)then begin
  | | n:= n-m;
  | end;
  end;
  {m=0 => ®вўҐв=d*n; n=0 => ®вўҐв=d*m}

ЋжҐ­Є  зЁб«  ¤Ґ©бвўЁ©: Є ¦¤®Ґ ўв®а®Ґ ¤Ґ©бвўЁҐ ¤Ґ«Ёв е®вп Ўл ®¤­®
Ё§ зЁбҐ« m Ё n Ї®Ї®« ¬.

     1.1.19. „®Ї®«­Ёвм  «Ј®аЁв¬ ЇаҐ¤л¤г饩 § ¤ зЁ Ї®ЁбЄ®¬ x Ё y,
¤«п Є®в®але ax+by=ЌЋ„(a,b).

     ђҐиҐ­ЁҐ. (€¤Ґп б®®ЎйҐ­  „.‡ў®­ЄЁ­л¬) ЏаҐ¦¤Ґ ўбҐЈ®  § ¬ҐвЁ¬,
зв®  ®¤­®ўаҐ¬Ґ­®Ґ ¤Ґ«Ґ­ЁҐ a Ё b Ї®Ї®« ¬ ­Ґ ¬Ґ­пҐв ЁбЄ®¬ле x Ё y.
Џ®н⮬㠬®¦­® бзЁв вм, зв® б б ¬®Ј® ­ з «  ®¤­® Ё§ зЁбҐ« a  Ё  b
­ҐзҐв­®. (ќв® бў®©бвў® Ўг¤Ґв б®еа ­пвмбп Ё ¤ «ҐҐ.)
     ’ҐЇҐам  Ї®Їлв Ґ¬бп,  Є Є  Ё  а ­миҐ,  еа ­Ёвм  в ЄЁҐ  зЁб« 
p,q,r,s, зв®
     m = ap + bq
     n = ar + bs
Џа®Ў«Ґ¬  ў ⮬, зв® ЇаЁ ¤Ґ«Ґ­ЁЁ, бЄ ¦Ґ¬, m ­  2 ­ ¤® а §¤Ґ«Ёвм p
Ё  q  ­  2, Ё ®­Ё ЇҐаҐбв ­гв Ўлвм 楫묨 (  бв ­гв ¤ў®Ёз­®-а жЁ-
®­ «м­л¬Ё). „ў®Ёз­®-а жЁ®­ «м­®Ґ зЁб«® ҐбвҐб⢥­­® еа ­Ёвм ў ўЁ-
¤Ґ Ї ал (зЁб«ЁвҐ«м, Ї®Є § вҐ«м б⥯Ґ­Ё ¤ў®©ЄЁ ў §­ ¬Ґ­ вҐ«Ґ).  ‚
Ёв®ЈҐ  ¬л  Ї®«гз Ґ¬  d  ў  ўЁ¤Ґ Є®¬ЎЁ­ жЁЁ a Ё b б ¤ў®Ёз­®-а жЁ-
®­ «м­л¬Ё Є®нддЁжЁҐ­в ¬Ё. €­л¬Ё б«®ў ¬Ё, ¬л Ё¬ҐҐ¬
        (2 ў б⥯Ґ­Ё i)* d = ax + by
¤«п  ­ҐЄ®в®але  жҐ«ле x,y Ё ­ вга «м­®Ј® i. —в® ¤Ґ« вм, Ґб«Ё i >
1? …б«Ё x Ё y зсв­л, в® ­  2 ¬®¦­® б®Єа вЁвм. …б«Ё нв®  ­Ґ  в Є,
Ї®«®¦Ґ­ЁҐ ¬®¦­® ЁбЇа ўЁвм ЇаҐ®Ўа §®ў ­ЁҐ¬
        x := x + b
        y := y - a
(®­®  ­Ґ ¬Ґ­пҐв ax+by). “ЎҐ¤Ё¬бп ў н⮬. Ќ Ї®¬­Ё¬, зв® ¬л бзЁв -
Ґ¬, зв® ®¤­® Ё§ зЁбҐ« a Ё b ­Ґзсв­®. Џгбвм нв® Ўг¤Ґв a. …б«Ё ЇаЁ
н⮬ y зсв­®, в® Ё x ¤®«¦­® Ўлвм зсв­л¬ (Ё­ зҐ ax+by  Ўг¤Ґв  ­Ґ-
зсв­л¬). Ђ ЇаЁ ­Ґзсв­®¬ y ўлзЁв ­ЁҐ Ё§ ­ҐЈ® ­сзҐв­®Ј® a ¤Ґ« Ґв y
зсв­л¬.

     1.1.20. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго Єў ¤а вл ўбҐе ­ вг-
а «м­ле зЁбҐ« ®в 0 ¤® § ¤ ­­®Ј® ­ вга «м­®Ј® n.

     ђҐиҐ­ЁҐ.

        k:=0;
        writeln (k*k);
        {Ё­ў аЁ ­в: k<=n, ­ ЇҐз в ­л ўбҐ
          Єў ¤а вл ¤® k ўЄ«озЁвҐ«м­®}
        while not (k=n) do begin
        | k:=k+1;
        | writeln (k*k);
        end;

     1.1.21.  ’  ¦Ґ § ¤ з , ­® а §аҐи Ґвбп ЁбЇ®«м§®ў вм Ё§  аЁд-
¬ҐвЁзҐбЄЁе ®ЇҐа жЁ© «Ёим б«®¦Ґ­ЁҐ Ё ўлзЁв ­ЁҐ, ЇаЁзҐ¬ ®ЎйҐҐ зЁб-
«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  n.

     ђҐиҐ­ЁҐ.  ‚ўҐ¤Ґ¬  ЇҐаҐ¬Ґ­­го k_square (square - Єў ¤а в),
бўп§ ­­го б k ᮮ⭮襭ЁҐ¬ k_square = k*k:

        k := 0; k_square := 0;
        writeln (k_square);
        while not (k = n) do begin
        | k := k + 1;
        | {k_square = (k-1) * (k-1) = k*k - 2*k + 1}
        | k_square := k_square + k + k - 1;
        | writeln (k_square);
        end;

     1.1.22. ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго а §«®¦Ґ­ЁҐ ­  Їа®б-
влҐ ¬­®¦ЁвҐ«Ё § ¤ ­­®Ј® ­ вга «м­®Ј® зЁб«  n > 0 (¤агЈЁ¬Ё б«®ў -
¬Ё, вॡгҐвбп ЇҐз в вм в®«мЄ® Їа®бвлҐ зЁб«  Ё Їа®Ё§ўҐ¤Ґ­ЁҐ ­ ЇҐ-
з в ­­ле  зЁбҐ« ¤®«¦­® Ўлвм а ў­® n; Ґб«Ё n = 1, ЇҐз в вм ­ЁзҐЈ®
­Ґ ­ ¤®).

     ђҐиҐ­ЁҐ (1 ў аЁ ­в).

        k := n;
        {Ё­ў аЁ ­в:  Їа®Ё§ўҐ¤Ґ­ЁҐ ­ ЇҐз в ­­ле зЁбҐ« Ё k а ў­®
         n, ­ ЇҐз в ­л в®«мЄ® Їа®бвлҐ зЁб« }
        while not (k = 1) do begin
        | l := 2;
        | {Ё­ў аЁ ­в: k ­Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ© ў Ё­вҐаў «Ґ (1,l)}
        | while k mod l <> 0 do begin
        | | l := l + 1;
        | end;
        | {l - ­ Ё¬Ґ­миЁ© ¤Ґ«ЁвҐ«м k, Ў®«миЁ© 1, б«Ґ¤®ў вҐ«м­®,
        |  Їа®бв®©}
        | writeln (l);
        | k:=k div l;
        end;

     (2 ў аЁ ­в).

         k := n; l := 2;
         {Їа®Ё§ўҐ¤Ґ­ЁҐ  k Ё ­ ЇҐз в ­­ле зЁбҐ« а ў­® n; ­ ЇҐз -
          в ­­лҐ зЁб«  Їа®бвл; k ­Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©, ¬Ґ­миЁе l}
         while not (k = 1) do begin
         | if k mod l = 0  then begin
         | | {k ¤Ґ«Ёвбп ­  l Ё ­Ґ Ё¬ҐҐв ¤Ґ«ЁвҐ«Ґ©,
         | |   ¬Ґ­миЁе l, §­ зЁв, l Їа®бв®}
         | | k := k div l;
         | | writeln (l);
         | end else begin
         | | { k ­Ґ ¤Ґ«Ёвбп ­  l }
         | | l := l + 1;
         | end;
         end;

     1.1.23. ‘®бв ўЁвм Їа®Ја ¬¬г аҐиҐ­Ёп ЇаҐ¤л¤г饩 § ¤ зЁ, Ёб-
Ї®«м§гойго  в®в  д Єв,  зв®  б®бв ў­®Ґ зЁб«® Ё¬ҐҐв ¤Ґ«ЁвҐ«м, ­Ґ
ЇаҐў®б室пйЁ© Єў ¤а в­®Ј® Є®а­п Ё§ нв®Ј® зЁб« .

     ђҐиҐ­ЁҐ. ‚® ўв®а®¬ ў аЁ ­вҐ аҐиҐ­Ёп ў¬Ґбв® l:=l+1 ¬®¦­® ­ -
ЇЁб вм

                if l*l > k then begin
                | l:=k;
                end else begin
                | l:=l+1;
                end;

     1.1.24. Џа®ўҐаЁвм, пў«пҐвбп «Ё § ¤ ­­®Ґ ­ вга «м­®Ґ  зЁб«®
n > 1 Їа®бвл¬.

     1.1.25. („«п §­ Є®¬ле б ®б­®ў ¬Ё  «ЈҐЎал). „ ­® 楫®Ґ  Ј -
гбб®ў®  зЁб«® n + mi (ЇаЁ­ ¤«Ґ¦ йҐҐ Z[i]). (a) Џа®ўҐаЁвм, пў«п-
Ґвбп «Ё ®­® Їа®бвл¬ (ў Z[i]); (Ў) ­ ЇҐз в вм ҐЈ® а §«®¦Ґ­ЁҐ  ­ 
Їа®бвлҐ (ў Z[i]) ¬­®¦ЁвҐ«Ё.

     1.1.26. ђ §аҐиЁ¬ ЁбЇ®«м§®ў вм Є®¬ ­¤л write (i) «Ёим ЇаЁ i
=  0,1,2,...,9.  ‘®бв ўЁвм Їа®Ја ¬¬г, ЇҐз в ойго ¤ҐбпвЁз­го § -
ЇЁбм § ¤ ­­®Ј® ­ вга «м­®Ј® зЁб«  n > 0. (‘«гз © n =  0  пўЁ«бп
Ўл ­ҐЄ®в®ал¬ ЁбЄ«о祭ЁҐ¬, в Є Є Є ®Ўлз­® ­г«Ё ў ­ з «Ґ зЁб«  ­Ґ
ЇҐз в овбп,   ¤«п n = 0 - ЇҐз в овбп.)

     ђҐиҐ­ЁҐ.

        base:=1;
        {base - б⥯Ґ­м 10, ­Ґ ЇаҐў®б室пй п n}
        while 10 * base <= n do begin
        | base:= base * 10;
        end;
        {base - ¬ ЄбЁ¬ «м­ п б⥯Ґ­м 10, ­Ґ ЇаҐў®б室пй п n}
        k:=n;
        {Ё­ў аЁ ­в: ®бв «®бм ­ ЇҐз в вм k б ⥬ ¦Ґ зЁб«®¬
         §­ Є®ў, зв® ў base; base = 100..00}
        while base <> 1 do begin
        | write(k div base);
        | k:= k mod base;
        | base:= base div 10;
        end;
        {base=1; ®бв «®бм ­ ЇҐз в вм ®¤­®§­ з­®Ґ зЁб«® k}
        write(k);

(’ЁЇЁз­ п ®иЁЎЄ  ЇаЁ аҐиҐ­ЁЁ нв®© § ¤ зЁ: ­ҐЇа ўЁ«м­®  ®Ўа Ў вл-
ў овбп зЁб«  б ­г«п¬Ё Ї®бҐаҐ¤Ё­Ґ. ЏаЁўҐ¤Ґ­­л© Ё­ў аЁ ­в ¤®ЇгбЄ -
Ґв  б«гз ©, Є®Ј¤  k < base; ў н⮬ б«гз Ґ ЇҐз в ­ЁҐ k ­ зЁ­ Ґвбп
б® бв аиЁе ­г«Ґ©.)

     1.1.27. ’® ¦Ґ б ¬®Ґ, ­® ­ ¤® ­ ЇҐз в вм ¤ҐбпвЁз­го § ЇЁбм ў
®Ўа в­®¬ Ї®ап¤ЄҐ. („«п n = 173 ­ ¤® ­ ЇҐз в вм 371.)

     ђҐиҐ­ЁҐ.

        k:= n;
        {Ё­ў аЁ ­в: ®бв «®бм ­ ЇҐз в вм k ў ®Ўа в­®¬ Ї®ап¤ЄҐ}
        while k <> 0 do begin
        | write (k mod 10);
        | k:= k div 10;
        end;

     1.1.28. „ ­® ­ вга «м­®Ґ n. Џ®¤бзЁв вм  Є®«ЁзҐбвў®  аҐиҐ­Ё©
­Ґа ўҐ­бвў   x*x + y*y < n ў ­ вга «м­ле (­Ґ®ваЁж вҐ«м­ле 楫ле)
зЁб« е, ­Ґ ЁбЇ®«м§гп ¤Ґ©бвўЁ© б ўҐйҐб⢥­­л¬Ё зЁб« ¬Ё.

     ђҐиҐ­ЁҐ.

        k := 0; s := 0;
        {Ё­ў аЁ ­в: s = Є®«ЁзҐбвў® аҐиҐ­Ё© ­Ґа ўҐ­бвў 
          x*x + y*y < n c x < k}
        while k*k < n do begin
        | ...
        | {t = зЁб«® аҐиҐ­Ё© ­Ґа ўҐ­бвў  k*k + y*y < n
        |  (ЇаЁ ¤ ­­®¬ k) }
        | k := k + 1;
        | s := s + t;
        end;
        {k*k >= n, Ї®н⮬г s = Є®«ЁзҐбвў® ўбҐе аҐиҐ­Ё©
          ­Ґа ўҐ­бвў }

     ‡¤Ґбм ... - Ї®Є  ҐйҐ ­Ґ ­ ЇЁб ­­л© Єгб®Є Їа®Ја ¬¬л, Є®в®ал©
Ўг¤Ґв в ЄЁ¬:

        l := 0; t := 0;
        {Ё­ў аЁ ­в: t = зЁб«® аҐиҐ­Ё©
          ­Ґа ўҐ­бвў  k*k + y*y < n c y < l }
        while k*k + l*l < n do begin
        | l := l + 1;
        | t := t + 1;
        end;
        {k*k + l*l >= n,  Ї®нв®¬г  t = зЁб«®
          ўбҐе аҐиҐ­Ё© ­Ґа ўҐ­бвў  k*k + y*y < n}

     1.1.29. ’  ¦Ґ § ¤ з , ­® Є®«ЁзҐбвў®  ®ЇҐа жЁ©  ¤®«¦­®  Ўлвм
Ї®ап¤Є  (n ў б⥯Ґ­Ё 1/2). (‚ ЇаҐ¤л¤г饬 аҐиҐ­ЁЁ, Є Є ¬®¦­®
Ї®¤бзЁв вм, Ї®ап¤Є  n ®ЇҐа жЁ©.)

     ђҐиҐ­ЁҐ. Ќ б Ё­вҐаҐбгов в®зЄЁ аҐиҐвЄЁ (б 楫묨 Є®®а¤Ё­ в -
  *              ¬Ё) ў ЇҐаў®¬ Єў ¤а ­вҐ, Ї®Ї ¤ ойЁҐ ў­гвам ЄагЈ 
  * * *          а ¤Ёгб   (n  ў  б⥯Ґ­Ё  1/2). €­вҐаҐбго饥 ­ б
  * * * *        ¬­®¦Ґбвў® (­ §®ўҐ¬ ҐЈ® X) б®бв®Ёв Ё§  ®ЎкҐ¤Ё­Ґ-
  * * * *        ­Ёп  ўҐавЁЄ «м­ле  бв®«Ўж®ў  гЎлў о饩  ўлб®вл.
  * * * * *      €¤Ґп аҐиҐ­Ёп б®бв®Ёв ў  ⮬,  зв®Ўл  "¤ўЁЈ вмбп
ў¤®«м  ҐЈ®  Ја ­Ёжл",  бЇгбЄ пбм  Ї®  ўҐае­Ґ¬г  ҐЈ® Єа о, Є Є Ї®
«Ґбв­ЁжҐ. Љ®®а¤Ё­ вл ¤ўЁ¦г饩бп в®зЄЁ  ®Ў®§­ зЁ¬  <k,l>.  ‚ўҐ¤Ґ¬
ҐйҐ ®¤­г ЇҐаҐ¬Ґ­­го s Ё Ўг¤Ґ¬ Ї®¤¤Ґа¦Ёў вм ЁбвЁ­­®бвм в Є®Ј® гб-
«®ўЁп:
     <k,l> ­ е®¤Ёвбп ба §г ­ ¤ k-л¬ бв®«Ўж®¬;
     s - зЁб«® в®зҐЄ ў ЇаҐ¤л¤гйЁе бв®«Ўж е.

     ”®а¬ «м­®:
l  - ¬Ё­Ё¬ «м­®Ґ б।Ё вҐе l >= 0, ¤«п Є®в®але <k,l> ­Ґ ЇаЁ­ ¤-
    «Ґ¦Ёв X;
s - зЁб«® Ї а ­ вга «м­ле x, y, ¤«п Є®в®але x < k Ё <x,y>  ЇаЁ-
    ­ ¤«Ґ¦Ёв X.
ЋЎ®§­ зЁ¬ нвЁ гб«®ўЁп зҐаҐ§ (€).

  k := 0; l := 0;
  while "<0,l> ЇаЁ­ ¤«Ґ¦Ёв X" do begin
  | l := l + 1;
  end;
  {k = 0, l - ¬Ё­Ё¬ «м­®Ґ б।Ё вҐе l >= 0,
   ¤«п Є®в®але <k,l> ­Ґ ЇаЁ­ ¤«Ґ¦Ёв X }
  s := 0;
  {Ё­ў аЁ ­в: €}
  while not (l = 0) do begin
  | s := s + l;
  | {s - зЁб«® в®зҐЄ ў бв®«Ўж е ¤® k-Ј® ўЄ«озЁвҐ«м­®}
  | k := k + 1;
  | {в®зЄ  <k,l> «Ґ¦Ёв ў­Ґ X, ­®,  ў®§¬®¦­®,  ҐҐ  ­ ¤® б¤ўЁ­гвм
  |    ў­Ё§, зв®Ўл ў®ббв ­®ўЁвм € }
  | while (l <> 0) and ("<k, l-1> ­Ґ ЇаЁ­ ¤«Ґ¦Ёв X") do begin
  | | l := l - 1;
  | end;
  end;
  {€, l = 0, Ї®н⮬г k-л© бв®«ЎҐж Ё ўбҐ б«Ґ¤гойЁҐ Їгбвл,  
    s а ў­® ЁбЄ®¬®¬г зЁб«г}

ЋжҐ­Є  зЁб«  ¤Ґ©бвўЁ© ®зҐўЁ¤­ : б­ з «  ¬л ¤ўЁ¦Ґ¬бп ўўҐае ­Ґ Ў®-
«ҐҐ  祬  ­   (n ў б⥯Ґ­Ё 1/2) и Ј®ў,   § вҐ¬ ў­Ё§ Ё ўЇа ў® - ў
Є ¦¤го бв®а®­г ­Ґ Ў®«ҐҐ 祬 ­  (n ў б⥯Ґ­Ё 1/2) и Ј®ў.

     1.1.30. „ ­л ­ вга «м­лҐ зЁб«  n Ё k, n > 1.  Ќ ЇҐз в вм  k
¤ҐбпвЁз­ле §­ Є®ў зЁб«  1/n. (ЏаЁ ­ «ЁзЁЁ ¤ўге ¤ҐбпвЁз­ле а §«®-
¦Ґ­Ё©  ўлЎЁа Ґвбп в® Ё§ ­Ёе, Є®в®а®Ґ ­Ґ ᮤҐа¦Ёв ¤ҐўпвЄЁ ў ЇҐаЁ-
®¤Ґ.) Џа®Ја ¬¬  ¤®«¦­  ЁбЇ®«м§®ў вм в®«мЄ® жҐ«лҐ ЇҐаҐ¬Ґ­­лҐ.

     ђҐиҐ­ЁҐ. ‘¤ўЁ­гў ў ¤ҐбпвЁз­®© § ЇЁбЁ зЁб«  1/n § Їпвго ­  k
¬Ґбв ўЇа ў®, Ї®«гзЁ¬ зЁб«® (10 ў б⥯Ґ­Ё k)/n. Ќ ¬ ­ ¤®  ­ ЇҐз -
в вм  ҐЈ® 楫го з бвм, в. Ґ. а §¤Ґ«Ёвм (10 ў б⥯Ґ­Ё k) ­  n ­ -
楫®. ‘в ­¤ ав­л© бЇ®б®Ў вॡгҐв ЁбЇ®«м§®ў ­Ёп Ў®«миЁе Ї®  ўҐ«Ё-
зЁ­Ґ  зЁбҐ«, Є®в®алҐ ¬®Јгв ўл©вЁ §  Ја ­Ёжл ¤Ё Ї §®­  ЇаҐ¤бв ўЁ-
¬ле зЁбҐ«. Џ®н⮬㠬л ᤥ« Ґ¬ Ё­ зҐ (б«Ґ¤гп ®Ўлз­®¬г ¬Ґв®¤г "¤Ґ-
«Ґ­Ёп гЈ®«Є®¬") Ё Ўг¤Ґ¬ еа ­Ёвм "®бв в®Є" r:

  l := 0; r := 1;
  {Ё­ў.: ­ ЇҐз в ­® l а §а冷ў 1/n, ®бв «®бм ­ ЇҐз в вм
    k - l а §а冷ў ¤а®ЎЁ r/n}
   while l <> k do begin
   | write ( (10 * r) div n);
   |   r := (10 * r) mod n;
   |   l := l + 1;
   end;

     1.1.31. „ ­® ­ вга «м­®Ґ зЁб«® n > 1. ЋЇаҐ¤Ґ«Ёвм ¤«Ё­г  ЇҐ-
аЁ®¤  ¤ҐбпвЁз­®© § ЇЁбЁ ¤а®ЎЁ 1/n.

     ђҐиҐ­ЁҐ.  ЏҐаЁ®¤  ¤а®ЎЁ  а ўҐ­ ЇҐаЁ®¤г ў Ї®б«Ґ¤®ў вҐ«м­®бвЁ
®бв вЄ®ў (¤®Є ¦ЁвҐ нв®; ў з бв­®бвЁ, ­ ¤® ¤®Є § вм,  зв®  ®­  ­Ґ
¬®¦Ґв  Ўлвм  ¬Ґ­миҐ).  Ља®¬Ґ в®Ј®, ў нв®© Ї®б«Ґ¤®ў вҐ«м­®бвЁ ўбҐ
ЇҐаЁ®¤ЁзҐбЄЁ Ї®ўв®апойЁҐбп ўбҐ з«Ґ­л а §«Ёз­л,   ЇаҐ¤ЇҐаЁ®¤ Ё¬Ґ-
Ґв ¤«Ё­г ­Ґ Ў®«ҐҐ n. Џ®н⮬㠤®бв в®з­® ­ ©вЁ (n+1)-л© з«Ґ­ Ї®б-
«Ґ¤®ў вҐ«м­®бвЁ ®бв вЄ®ў Ё  § вҐ¬  ¬Ё­Ё¬ «м­®Ґ  k,  ЇаЁ  Є®в®а®¬
(n+1+k)-л© з«Ґ­ б®ўЇ ¤ Ґв б (n+1)-л¬.

  l := 0; r := 1;
  {Ё­ў аЁ ­в: r/n = १г«мв в ®вЎа блў ­Ёп l §­ Є®ў ў 1/n}
  while l <> n+1 do begin
  | r := (10 * r) mod n;
  | l := l + 1;
  end;
  c := r;
  {c = (n+1)-л© з«Ґ­ Ї®б«Ґ¤®ў вҐ«м­®бвЁ ®бв вЄ®ў}
  r := (10 * r) mod n;
  k := 0;
  {r = (n+k+1)-л© з«Ґ­ Ї®б«Ґ¤®ў вҐ«м­®бвЁ ®бв вЄ®ў}
  while r <> c do begin
  | r := (10 * r) mod n;
  | k := k + 1;
  end;

     1.1.32 (ќ. „Ґ©Єбва ). ”г­ЄжЁп f б ­ вга «м­л¬Ё   аЈг¬Ґ­в ¬Ё
Ё  §­ зҐ­Ёп¬Ё ®ЇаҐ¤Ґ«Ґ­  в Є: f(0) = 0, f(1) = 1, f (2n) = f(n),
f (2n+1) = f (n) + f (n+1). ‘®бв ўЁвм Їа®Ја ¬¬г ўлзЁб«Ґ­Ёп f (n)
Ї® § ¤ ­­®¬г n, вॡгойго Ї®ап¤Є  log  n  ®ЇҐа жЁ©.

     ђҐиҐ­ЁҐ.
  k := n; a := 1; b := 0;
  {Ё­ў аЁ ­в: 0 <= k, f (n) = a * f(k) + b * f (k+1)}
  while k <> 0 do begin
  | if k mod 2 = 0  then begin
  | | l := k div 2;
  | | {k = 2l, f(k) = f(l), f (k+1) = f (2l+1) = f(l) + f(l+1),
  | |  f (n) = a*f(k) + b*f(k+1) = (a+b)*f(l) + b*f(l+1)}
  | | a := a + b; k := l;
  | end else begin
  | | l := k div 2;
  | | {k = 2l + 1, f(k) = f(l) + f(l+1),
  | |  f(k+1) = f(2l+2) = f(l+1),
  | |  f(n) = a*f(k) + b*f(k+1) = a*f(l) + (a+b)*f(l+1)}
  | | b := a + b; k := l;
  | end;
  end;
  {k = 0, f(n) = a * f(0) + b * f(1) = b, зв® Ё вॡ®ў «®бм}

     1.1.33.  ’®  ¦Ґ,  Ґб«Ё  f(0) = 13, f(1) = 17,   f(2n) =
43 f(n) + 57 f(n+1), f(2n+1) = 91 f(n) + 179 f(n+1) ЇаЁ n>=1.
     “Є § ­ЁҐ.  •а ­Ёвм  Є®нддЁжЁҐ­вл ў ўла ¦Ґ­ЁЁ f(n) зҐаҐ§ ваЁ
б®бҐ¤­Ёе зЁб« .

     1.1.34. „ ­л ­ вга «м­лҐ зЁб«    Ё b, ЇаЁзҐ¬ b >  0.  Ќ ©вЁ
з бв­®Ґ  Ё  ®бв в®Є  ЇаЁ  ¤Ґ«Ґ­ЁЁ   ­  b, ®ЇҐаЁагп «Ёим б 楫묨
зЁб« ¬Ё Ё ­Ґ ЁбЇ®«м§гп ®ЇҐа жЁЁ div Ё mod, §  ЁбЄ«о祭ЁҐ¬  ¤Ґ«Ґ-
­Ёп  ­   2  зҐв­ле  зЁбҐ«;  зЁб«®  и Ј®ў  ­Ґ ¤®«¦­® ЇаҐў®б室Ёвм
C1*log(a/b) + C2 ¤«п ­ҐЄ®в®але Є®­бв ­в C1, C2.

     ђҐиҐ­ЁҐ.

  b1 := b;
  while b1 <= a do begin
  | b1 := b1 * 2;
  end;
  {b1 > a, b1 = b * (­ҐЄ®в®а п б⥯Ґ­м 2)}
  q:=0; r:=a;
  {Ё­ў аЁ ­в: q, r - з бв­®Ґ Ё ®бв в®Є ЇаЁ ¤Ґ«Ґ­ЁЁ a ­  b1,
   b1 = b * (­ҐЄ®в®а п б⥯Ґ­м 2)}
  while b1 <> b do begin
  | b1 := b1 div 2 ; q := q * 2;
  | { a = b1 * q + r, 0 <= r, r < 2 * b1}
  | if r >= b1 then begin
  | | r := r - b1;
  | | q := q + 1;
  | end;
  end;
  {q, r - з бв­®Ґ Ё ®бв в®Є ЇаЁ ¤Ґ«Ґ­ЁЁ a ­  b}

     1.2. Њ ббЁўл.

     ‚ б«Ґ¤гойЁе § ¤ з е ЇҐаҐ¬Ґ­­лҐ x, y, z ЇаҐ¤Ї®« Ј овбп  ®ЇЁ-
б ­­л¬Ё  Є Є  array [1..n] of integer (n - ­ҐЄ®в®а®Ґ ­ вга «м­®Ґ
зЁб«®, Ў®«м襥 0), Ґб«Ё Ё­®Ґ ­Ґ ®Ј®ў®аҐ­® пў­®.

     1.2.1. ‡ Ї®«­Ёвм ¬ ббЁў x ­г«п¬Ё. (ќв® ®§­ з Ґв, зв®  ­г¦­®
б®бв ўЁвм да Ј¬Ґ­в Їа®Ја ¬¬л, Ї®б«Ґ ўлЇ®«­Ґ­Ёп Є®в®а®Ј® ўбҐ §­ -
祭Ёп  x[1]..x[n]  а ў­п«Ёбм  Ўл  ­г«о, ­Ґ§ ўЁбЁ¬® ®в ­ з «м­®Ј®
§­ зҐ­Ёп ЇҐаҐ¬Ґ­­®© x.)

     ђҐиҐ­ЁҐ.

          i := 0;
          {Ё­ў аЁ ­в: ЇҐаўлҐ i §­ зҐ­Ё© x[1]..x[i] а ў­л 0}
          while i <> n do begin
          | i := i + 1;
          | {x[1]..x[i-1] = 0}
          | x[i] := 0;
          end;

     1.2.2. Џ®¤бзЁв вм Є®«ЁзҐбвў® ­г«Ґ© ў ¬ ббЁўҐ x.  (‘®бв ўЁвм
да Ј¬Ґ­в Їа®Ја ¬¬л, ­Ґ ¬Ґ­пойЁ© §­ зҐ­Ёп x, Ї®б«Ґ ЁбЇ®«­Ґ­Ёп Є®-
в®а®Ј®  §­ зҐ­ЁҐ ­ҐЄ®в®а®© 楫®© ЇҐаҐ¬Ґ­­®© k а ў­п«®бм Ўл зЁб«г
­г«Ґ© б।Ё Є®¬Ї®­Ґ­в ¬ ббЁў  x.)

     ђҐиҐ­ЁҐ.
          ...
          {Ё­ў аЁ ­в: k= зЁб«® ­г«Ґ© б।Ё x[1]...x[i] }
          ...

     1.2.3. ЌҐ ЁбЇ®«м§гп ®ЇҐа в®а   ЇаЁбў Ёў ­Ёп  ¤«п  ¬ ббЁў®ў,
б®бв ўЁвм да Ј¬Ґ­в Їа®Ја ¬¬л, нЄўЁў «Ґ­в­л© ®ЇҐа в®аг x:=y.

     ђҐиҐ­ЁҐ.

  i := 0;
  {Ё­ў аЁ ­в: §­ зҐ­ЁҐ y ­Ґ Ё§¬Ґ­Ё«®бм, x[l] = y[l] ЇаЁ l <= i}
  while i <> n do begin
  | i := i + 1;
  | x[i] := y[i];
  end;

     1.2.4. Ќ ©вЁ ¬ ЄбЁ¬г¬ Ё§ x[1]..x[n].

     ђҐиҐ­ЁҐ.
          i := 1; max := x[1];
          {Ё­ў аЁ ­в: max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i]}
          while i <> n do begin
          | i := i + 1;
          | {max = ¬ ЄбЁ¬г¬ Ё§ x[1]..x[i-1]}
          | if x[i] > max then begin
          | | max := x[i];
          | end;
          end;

     1.2.5.  „ ­  ¬ ббЁў x: array [1..n] of integer, ЇаЁзс¬ x[1]
<= x[2] <= ... <= x[n]. Ќ ©вЁ Є®«ЁзҐбвў® а §«Ёз­ле  зЁбҐ«  б।Ё
н«Ґ¬Ґ­в®ў нв®Ј® ¬ ббЁў .

     ђҐиҐ­ЁҐ. (1 ў аЁ ­в)

  i := 1; k := 1;
  {Ё­ў аЁ ­в: k - Є®«ЁзҐбвў® а §«Ёз­ле зЁбҐ« б।Ё x[1]..x[i]}
  while i <> n do begin
  | i := i + 1;
  | if x[i] <> x[i-1] then begin
  | | k := k + 1;
  | end;
  end;

     (2 ў аЁ ­в) €бЄ®¬®Ґ зЁб«® ­  1 Ў®«миҐ Є®«ЁзҐбвў  вҐе  зЁбҐ«
i Ё§ 1..n-1, ¤«п Є®в®але x[i] <> x[i+1].

  k := 1;
  for i := 1 to n-1 do begin
  | if x[i]<> x[i+1] then begin
  | | k := k + 1;
  | end;
  end;

     1.2.6. (‘®®ЎйЁ« Ђ.‹.Ѓаг¤­®.) Џаאַ㣮«м­®Ґ Ї®«Ґ m ­  n а §-
ЎЁв®  ­  mn Єў ¤а в­ле Є«Ґв®Є. ЌҐЄ®в®алҐ Є«ҐвЄЁ Ї®Єа иҐ­л ў зҐа-
­л© 梥в. €§ўҐбв­®, зв® ўбҐ зҐа­лҐ Є«ҐвЄЁ ¬®Јгв Ўлвм а §ЎЁвл  ­ 
­ҐбЄ®«мЄ® ­ҐЇҐаҐбҐЄ ойЁебп Ё ­Ґ Ё¬ҐойЁе ®ЎйЁе ўҐаиЁ­ зҐа­ле Їап-
¬®гЈ®«м­ЁЄ®ў. ‘зЁв п, зв® жўҐв  Є«Ґв®Є ¤ ­л ў ўЁ¤Ґ ¬ ббЁў  вЁЇ 
        array [1..m] of array [1..n] of boolean;
Ї®¤бзЁв вм  зЁб«®  зҐа­ле  Їаאַ㣮«м­ЁЄ®ў,  ® Є®в®але и«  аҐзм.
—Ёб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  m*n.

     ђҐиҐ­ЁҐ. —Ёб«® Їаאַ㣮«м­ЁЄ®ў а ў­® зЁб«г Ёе «Ґўле ўҐае­Ёе
гЈ«®ў. џў«пҐвбп «Ё Є«ҐвЄ  ўҐае­Ё¬ гЈ«®¬, ¬®¦­® г§­ вм, Ї®б¬®вॢ
­  ҐҐ 梥в,   в Є¦Ґ 梥⠢Ґае­ҐЈ®  Ё  «Ґў®Ј®  б®бҐ¤Ґ©.  (ЌҐ  § -
Ўг¤мвҐ, зв® Ёе ¬®¦Ґв ­Ґ Ўлвм, Ґб«Ё Є«ҐвЄ  б Єа о.)

     1.2.7. „ ­ ¬ ббЁў x: array [1..n] of integer.  Ќ ©вЁ  Є®«Ё-
зҐбвў®  а §«Ёз­ле  зЁбҐ«  б।Ё  н«Ґ¬Ґ­в®ў нв®Ј® ¬ ббЁў . (—Ёб«®
¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  n*n.)

     1.2.8.  ’   ¦Ґ  § ¤ з ,  Ґб«Ё  вॡгҐвбп,  зв®Ўл Є®«ЁзҐбвў®
¤Ґ©бвўЁ© Ўл«® Ї®ап¤Є  n* log n. (“Є § ­ЁҐ. ‘¬®ваЁ Ј« ўг ® б®авЁ-
а®ўЄҐ.)

     1.2.9. ’  ¦Ґ § ¤ з , Ґб«Ё Ё§ўҐбв­®, зв® ўбҐ н«Ґ¬Ґ­вл ¬ ббЁ-
ў  - зЁб«  ®в 1 ¤® k Ё зЁб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  n+k.

     1.2.10. „ ­ ¬ ббЁў x [1]..x[n] 楫ле  зЁбҐ«.  ЌҐ  ЁбЇ®«м§гп
¤агЈЁе  ¬ ббЁў®ў, ЇҐаҐбв ўЁвм н«Ґ¬Ґ­вл ¬ ббЁў  ў ®Ўа в­®¬ Ї®ап¤-
ЄҐ.

     ђҐиҐ­ЁҐ. —Ёб«  x [i] Ё x [n+1-i] ­г¦­® Ї®¬Ґ­пвм ¬Ґбв ¬Ё ¤«п
ўбҐе i, ¤«п Є®в®але i < n + 1 - i, в.Ґ. 2*i < n + 1 <=> 2*i <= n
<=> i <= n div 2:
  for i := 1 to n div 2 do begin
  | ...®Ў¬Ґ­пвм x [i] Ё x [n+1-i];
  end;

     1.2.11.  (Ё§  Є­ЁЈЁ  „.ѓаЁб )  „ ­   ¬ ббЁў   楫ле   зЁбҐ«
x[1]..x[m+n],  а бб¬ ваЁў Ґ¬л© Є Є ᮥ¤Ё­Ґ­ЁҐ ¤ўге ҐЈ® ®в१Є®ў:
­ з «  x[1]..x[m] ¤«Ё­л m Ё Є®­ж  x[m+1]..x[m+n] ¤«Ё­л n. ЌҐ Ёб-
Ї®«м§гп ¤®Ї®«­ЁвҐ«м­ле ¬ ббЁў®ў,  ЇҐаҐбв ўЁвм  ­ з «®  Ё  Є®­Ґж.
(—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  m+n.)

     ђҐиҐ­ЁҐ. (1 ў аЁ ­в). ЏҐаҐўҐа­Ґ¬ (а бЇ®«®¦Ё¬ ў ®Ўа в­®¬ Ї®-
ап¤ЄҐ) ®в¤Ґ«м­® ­ з «® Ё Є®­Ґж ¬ ббЁў ,   § вҐ¬ ЇҐаҐўҐа­Ґ¬  ўҐбм
¬ ббЁў Є Є Ґ¤Ё­®Ґ 楫®Ґ.

     (2 ў аЁ ­в, Ђ.ѓ.Љг譨७Є®). ђ бб¬ ваЁў п ¬ ббЁў § ЇЁб ­­л¬
Ї® ЄагЈг, ўЁ¤Ё¬, зв® вॡ㥬®Ґ ¤Ґ©бвўЁҐ - Ї®ў®а®в ЄагЈ . Љ Є Ё§-
ўҐбв­®, Ї®ў®а®в Ґбвм Є®¬Ї®§ЁжЁп ¤ўге ®бҐўле бЁ¬¬ҐваЁ©.

     (3  ў аЁ ­в).  ђ бᬮваЁ¬  Ў®«ҐҐ  ®Ўйго § ¤ зг - ®Ў¬Ґ­ ¤ўге
гз бвЄ®ў ¬ ббЁў  x[p+1]..x[q] Ё x[q+1]..x[s].  ЏаҐ¤Ї®«®¦Ё¬,  зв®
¤«Ё­   «Ґў®Ј®  гз бвЄ   (­ §®ўҐ¬  ҐЈ® A) ­Ґ Ў®«миҐ ¤«Ё­л Їа ў®Ј®
(­ §®ўҐ¬ ҐЈ® B). ‚뤥«Ё¬ ў B ­ з «® в®© ¦Ґ ¤«Ё­л, зв® Ё A, ­ §®-
ўҐ¬ ҐЈ® B1,   ®бв в®Є B2. (’ Є зв® B = B1 + B2, Ґб«Ё  ®Ў®§­ з вм
Ї«оᮬ ЇаЁЇЁблў ­ЁҐ ¬ ббЁў®ў ¤агЈ Є ¤агЈг.) Ќ ¬ ­ ¤® Ё§ A + B1 +
B2 Ї®«гзЁвм B1 + B2 + A. ЊҐ­пп ¬Ґбв ¬Ё гз бвЄЁ A Ё B1 - ®­Ё Ё¬Ґ-
ов ®¤Ё­ Є®ўго ¤«Ё­г, Ё ᤥ« вм нв® «ҐЈЄ®,- Ї®«гз Ґ¬ B1 + A + B2,
Ё  ®бв «®бм  Ї®¬Ґ­пвм  ¬Ґбв ¬Ё A Ё B2. ’Ґ¬ б ¬л¬ ¬л ᢥ«Ё ¤Ґ«® Є
ЇҐаҐбв ­®ўЄҐ ¤ўге ®ва§Є®ў ¬Ґ­м襩 ¤«Ё­л. €в Є,  Ї®«гз Ґ¬  в Єго
б奬㠯ணࠬ¬л:

  p := 0; q := m; r := m + n;
  {Ё­ў аЁ ­в: ®бв «®бм ЇҐаҐбв ўЁвм x[p+1]..x[q], x[q+1]..x[s]}
  while (p <> q) and (q <> s) do begin
  | {®Ў  гз бвЄ  ­ҐЇгбвл}
  | if (q - p) <= (s - q) then begin
  | | ..ЇҐаҐбв ўЁвм x[p+1]..x[q] Ё x[q+1]..x[q+(q-p)]
  | | pnew := q; qnew := q + (q - p);
  | | p := pnew; q := qnew;
  | end else begin
  | | ..ЇҐаҐбв ўЁвм x[q-(r-q)+1]..x[q] Ё x[q+1]..x[r]
  | | qnew := q - (r - q); rnew := q;
  | | q := qnew; r := rnew;
  | end;
  end;

ЋжҐ­Є  ўаҐ¬Ґ­Ё а Ў®вл: ­  ®зҐаҐ¤­®¬ и ЈҐ ®бв ўиЁ©бп ¤«п ®Ўа Ў®в-
ЄЁ гз бв®Є бв ­®ўЁвбп Є®а®зҐ ­  ¤«Ё­г A; зЁб«® ¤Ґ©бвўЁ© ЇаЁ н⮬
в Є¦Ґ Їа®Ї®ажЁ®­ «м­® ¤«Ё­Ґ A.

     1.2.12. Љ®нддЁжЁҐ­вл ¬­®Ј®з«Ґ­  еа ­пвбп ў ¬ ббЁўҐ a: array
[0..n]  of  integer (n - ­ вга «м­®Ґ зЁб«®, б⥯Ґ­м ¬­®Ј®з«Ґ­ ).
‚лзЁб«Ёвм §­ зҐ­ЁҐ нв®Ј® ¬­®Ј®з«Ґ­  ў в®зЄҐ x (в. Ґ.  a[n]*(x  ў
б⥯Ґ­Ё n)+...+a[1]*x+a[0]).

     ђҐиҐ­ЁҐ. (ЋЇЁблў Ґ¬л©  «Ј®аЁв¬ ­ §лў Ґвбп б奬®© ѓ®а­Ґа .)

  k := 0; y := a[n];
  {Ё­ў аЁ ­в: 0 <= k <= n,
   y= a[n]*(x ў б⥯Ґ­Ё k)+...+a[n-1]*(x ў б⥯Ґ­Ё k-1)+...+
                     + a[n-k]*(x ў б⥯Ґ­Ё 0)}
  while k<>n do begin
  | k := k + 1;
  | y := y * x + a [n - k];
  end;

     1.2.13. („«п §­ Є®¬ле б ®б­®ў ¬Ё  ­ «Ё§ . ‘®®ЎйЁ«  Ђ.ѓ.Љги-
­ЁаҐ­Є®.)  „®Ї®«­Ёвм   «Ј®аЁв¬  ўлзЁб«Ґ­Ёп §­ зҐ­Ёп ¬­®Ј®з«Ґ­  ў
§ ¤ ­­®© в®зЄҐ Ї® б奬Ґ ѓ®а­Ґа  ўлзЁб«Ґ­ЁҐ¬ §­ зҐ­Ёп ҐЈ®  Їа®Ё§-
ў®¤­®© ў в®© ¦Ґ в®зЄҐ.

     ђҐиҐ­ЁҐ. „®Ў ў«Ґ­ЁҐ ­®ў®Ј® Є®нддЁжЁҐ­в  ᮮ⢥вбвўгҐв ЇҐаҐ-
室㠮⠬­®Ј®з«Ґ­  P(x) Є ¬­®Ј®з«Ґ­г P(x)*x + c. …Ј® Їа®Ё§ў®¤­ п
ў  в®зЄҐ  x а ў­  P'(x)*x + P(x). (ќв® аҐиҐ­ЁҐ ®Ў« ¤ Ґв § Ў ў­л¬
бў®©бвў®¬: ­Ґ ­ ¤® §­ вм § а ­ҐҐ б⥯Ґ­м ¬­®Ј®з«Ґ­ . …б«Ё вॡ®-
ў вм ўлЇ®«­Ґ­Ёп нв®Ј® гб«®ўЁп, ¤  ҐйҐ Їа®бЁвм  ўлзЁб«пвм  в®«мЄ®
§­ зҐ­ЁҐ Їа®Ё§ў®¤­®©, ­Ґ гЇ®¬Ё­ п ® б ¬®¬ ¬­®Ј®з«Ґ­Ґ, Ї®«гз Ґвбп
­Ґ в Є п г¦ Їа®бв п § ¤ з .)

     1.2.14.  ‚  ¬ ббЁў е
  a:array  [0..k] of integer Ё b: array [0..l] of integer
еа ­пвбп Є®нддЁжЁҐ­вл ¤ўге ¬­®Ј®з«Ґ­®ў б⥯Ґ­Ґ© k Ё  l.  Џ®¬Ґб-
вЁвм ў ¬ ббЁў c: array [0..m] of integer Є®нддЁжЁҐ­вл Ёе Їа®Ё§-
ўҐ¤Ґ­Ёп.  (—Ёб«  k, l, m - ­ вга «м­лҐ, m = k + l; н«Ґ¬Ґ­в ¬ б-
бЁў  б Ё­¤ҐЄб®¬ i ᮤҐа¦Ёв Є®нддЁжЁҐ­в ЇаЁ x ў б⥯Ґ­Ё i.)

     ђҐиҐ­ЁҐ.

          for i:=0 to m do begin
          | c[i]:=0;
          end;
          for i:=0 to k do begin
          | for j:=0 to l do begin
          | | c[i+j] := c[i+j] + a[i]*b[j];
          | end;
          end;

     1.2.15. ЏаҐ¤«®¦Ґ­­л© ўлиҐ  «Ј®аЁв¬ ЇҐаҐ¬­®¦Ґ­Ёп ¬­®Ј®з«Ґ­®ў
вॡгҐв Ї®ап¤Є  n*n ¤Ґ©бвўЁ© ¤«п ЇҐаҐ¬­®¦Ґ­Ёп  ¤ўге  ¬­®Ј®з«Ґ­®ў
б⥯Ґ­Ё n. ЏаЁ¤г¬ вм Ў®«ҐҐ нд䥪⨢­л© (¤«п Ў®«миЁе n)  «Ј®аЁв¬,
Є®в®а®¬г  ¤®бв в®з­®  Ї®ап¤Є   (n  ў  б⥯Ґ­Ё  (log  4)/(log 3))
¤Ґ©бвўЁ©.
     “Є § ­ЁҐ. ЏаҐ¤бв ўЁ¬ ᥡҐ, зв® ­ ¤® ЇҐаҐ¬­®¦Ёвм ¤ў  ¬­®Ј®з-
«Ґ­  б⥯Ґ­Ё 2k. €е ¬®¦­® ЇаҐ¤бв ўЁвм ў ўЁ¤Ґ
        A(x)*x^k + B(x)    Ё    C(x)*x^k + D(x)
(§¤Ґбм x^k ®Ў®§­ з Ґв x  ў б⥯Ґ­Ё k). Џа®Ё§ўҐ¤Ґ­ЁҐ Ёе а ў­®
       A(x)C(x)*x^{2k}  +  (A(x)D(x)+B(x)C(x))*x^k  + B(x)D(x)
…бвҐб⢥­­л© бЇ®б®Ў ўлзЁб«Ґ­Ёп AC, AD+BC, BD вॡгҐв зҐвлаҐе г¬-
­®¦Ґ­Ё© ¬­®Ј®з«Ґ­®ў б⥯Ґ­Ё k, ®¤­ Є® Ёе Є®«ЁзҐбвў® ¬®¦­® б®Єа -
вЁвм  ¤®  ваҐе  б  Ї®¬®ймо  в Є®©  еЁва®бвЁ:  ўлзЁб«Ёвм AC, BD Ё
(A+B)(C+D),   § вҐ¬ § ¬ҐвЁвм, зв® AD+BC=(A+B)(C+D)-AC-BD.

     1.2.16.  „ ­л  ¤ў   ў®§а бв ойЁе ¬ ббЁў  x: array [1..k] of
integer Ё y: array [1..l] of  integer.  Ќ ©вЁ  Є®«ЁзҐбвў®  ®ЎйЁе
н«Ґ¬Ґ­в®ў ў нвЁе ¬ ббЁў е (в. Ґ. Є®«ЁзҐбвў® вҐе 楫ле t, ¤«п Є®-
в®але  t = x[i] = y[j] ¤«п ­ҐЄ®в®але i Ё j). (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є  k+l.)

     ђҐиҐ­ЁҐ.

  k1:=0; l1:=0; n:=0;
  {Ё­ў аЁ ­в: 0<=k1<=k; 0<=l1<=l; ЁбЄ®¬л© ®вўҐв = n + Є®«ЁзҐбвў®
   ®ЎйЁе н«Ґ¬Ґ­в®ў ў x[k1+1]...x[k] Ё y[l1+1]..y[l]}
  while (k1 <> k) and (l1 <> l) do begin
  | if x[k1+1] < y[l1+1] then begin
  | | k1 := k1 + 1;
  | end else if x[k1+1] > y[l1+1] then begin
  | | l1 := l1 + 1;
  | end else begin {x[k1+1] = y[l1+1]}
  | | k1 := k1 + 1;
  | | l1 := l1 + 1;
  | | n := n + 1;
  | end;
  end;
  {k1 = k Ё«Ё l1 = l, Ї®н⮬㠮¤­® Ё§ ¬­®¦Ґбвў, гЇ®¬п­гвле ў
   Ё­ў аЁ ­вҐ, Їгбв®,   n а ў­® ЁбЄ®¬®¬г ®вўҐвг}

‡ ¬Ґз ­ЁҐ. ‚ ваҐв쥩  «мвҐа­ вЁўҐ ¤®бв в®з­® Ўл«® Ўл 㢥«ЁзЁў вм
®¤­г Ё§ ЇҐаҐ¬Ґ­­ле k1, l1; ўв®а п ¤®Ў ў«Ґ­  ¤«п бЁ¬¬ҐваЁЁ.

     1.2.17.  ђҐиЁвм  ЇаҐ¤л¤гйго § ¤ зг, Ґб«Ё Ё§ўҐбв­® «Ёим, зв®
x[1] <= ... <= x[k] Ё y[1] <= ... <= y[l] (ў®§а бв ­ЁҐ  § ¬Ґ­Ґ­®
­ҐгЎлў ­ЁҐ¬).

     ђҐиҐ­ЁҐ.  “б«®ўЁҐ  ў®§а бв ­Ёп  Ўл«® ЁбЇ®«м§®ў ­® ў ваҐв쥩
 «мвҐа­ вЁўҐ ўлЎ®а : б¤ўЁ­гў k1 Ё l1 ­  1, ¬л ⥬ б ¬л¬ г¬Ґ­ми -
«Ё  ­   1  Є®«ЁзҐбвў®  ®ЎйЁе  н«Ґ¬Ґ­в®ў   ў   x[k1+1]...x[k]   Ё
x[l1+1]...x[l]. ’ҐЇҐам нв® ЇаЁ¤Ґвбп ¤Ґ« вм б«®¦­ҐҐ.

          ...
          end else begin {x[k1+1] = y[l1+1]}
          | t := x [k1+1];
          | while (k1<k) and (x[k1+1]=t) do begin
          | | k1 := k1 + 1;
          | end;
          | while (l1<l) and (x[l1+1]=t) do begin
          | | l1 := l1 + 1;
          | end;
          end;

     ‡ ¬Ґз ­ЁҐ. ќв  Їа®Ја ¬¬  Ё¬ҐҐв ¤ҐдҐЄв: ЇаЁ Їа®ўҐаЄҐ гб«®ўЁп
                  (l1<l) and (x[l1+1]=t)
(Ё«Ё ўв®а®Ј®,  ­ «®ЈЁз­®Ј®) ЇаЁ «®¦­®© ЇҐаў®© бЄ®ЎЄҐ ўв®а п ®Є -
¦Ґвбп ЎҐбб¬лб«Ґ­­®© (Ё­¤ҐЄб ўл©¤Ґв §  Ја ­Ёжл ¬ ббЁў ) Ё ў®§­ЁЄ-
­Ґв ®иЁЎЄ . ЌҐЄ®в®алҐ ўҐабЁЁ Ї бЄ «п, ўлзЁб«пп (A and B), б­ з -
«   ўлзЁб«пов  A Ё ЇаЁ «®¦­®¬ A ­Ґ ўлзЁб«пов B. (’ Є ўҐ¤Ґв ᥡп,
­ ЇаЁ¬Ґа, бЁб⥬  Turbo Pascal, 5.0 - ­® ­Ґ 3.0.) ’®Ј¤   ®ЇЁб ­-
­ п ®иЁЎЄ  ­Ґ ў®§­ЁЄ­Ґв.
     Ќ® Ґб«Ё ¬л ­Ґ е®вЁ¬ Ї®« Ј вмбп ­  в Є®Ґ бў®©бвў®  ЁбЇ®«м§г-
Ґ¬®©  ­ ¬Ё  ॠ«Ё§ жЁЁ  Ї бЄ «п  (­Ґ ЇаҐ¤гᬮв७­®Ґ ҐЈ®  ўв®а®¬
Ќ.‚Ёа⮬), в® ¬®¦­® Ї®бвгЇЁвм в Є. ‚ўҐ¤Ґ¬  ¤®Ї®«­ЁвҐ«м­го  ЇҐаҐ-
¬Ґ­­го b: boolean Ё ­ ЇЁиҐ¬:

  if k1 < k  then b := (x[k1+1]=t)  else  b:=false;
  {b = (k1<k) and (x[k1+1] = t}
  while  b  do  begin
  | k1:=k1+1;
  | if k1 < k then b := (x[k1+1]=t) else b:=false;
  end;

Њ®¦­® в Є¦Ґ ᤥ« вм Ё­ зҐ:

          end else begin {x[k1+1] = y[l1+1]}
          | if k1 + 1 = k then begin
          | | k1 := k1 + 1;
          | | n := n + 1;
          | end else if x[k1+1] = x [k1+2] then begin
          | | k1 := k1 + 1;
          | end else begin
          | | k1 := k1 + 1;
          | | n := n + 1;
          | end;
          end;

’ Є Ўг¤Ґв Є®а®зҐ, е®вп ¬Ґ­ҐҐ бЁ¬¬ҐваЁз­®.

     Ќ Є®­Ґж, ¬®¦­® 㢥«ЁзЁвм а §¬Ґа  ¬ ббЁў   ў  ҐЈ®  ®ЇЁб ­ЁЁ,
ўЄ«озЁў  ў  ­ҐЈ®  дЁЄвЁў­лҐ н«Ґ¬Ґ­вл.

     1.2.18. „ ­л ¤ў  ­ҐгЎлў ойЁе ¬ ббЁў   x:  array  [1..k]  of
integer Ё y: array [1..l] of integer. Ќ ©вЁ зЁб«® а §«Ёз­ле н«Ґ-
¬Ґ­в®ў  б।Ё  x[1],...,x[k], y[1],...,y[l]. (—Ёб«® ¤Ґ©бвўЁ© Ї®-
ап¤Є  k+l.)

     1.2.19.  „ ­л ¤ў  ¬ ббЁў  x[1] <= ... <= x[k] Ё y[1] <= ...
<= y[l]. "‘®Ґ¤Ё­Ёвм" Ёе ў ¬ ббЁў z[1] <= ... <= z[m] (m  =  k+l;
Є ¦¤л©  н«Ґ¬Ґ­в  ¤®«¦Ґ­  ўе®¤Ёвм ў ¬ ббЁў z бв®«мЄ® а §, бЄ®«мЄ®
а § ®­ ўе®¤Ёв ў ®ЎйҐ© б«®¦­®бвЁ ў ¬ ббЁўл x Ё y). —Ёб«® ¤Ґ©бвўЁ©
Ї®ап¤Є  m.

     ђҐиҐ­ЁҐ.

  k1 := 0; l1 := 0;
  {Ё­ў аЁ ­в: ®вўҐв Ї®«гзЁвбп, Ґб«Ё Є  z[1]..z[k1+l1]  ЇаЁЇЁб вм
   бЇа ў  ᮥ¤Ё­Ґ­ЁҐ ¬ ббЁў®ў x[k1+1]..x[k] Ё y[l1+1]..y[l]}
  while (k1 <> k) or (l1 <> l) do begin
  | if k1 = k then begin
  | | {l1 < l}
  | | l1 := l1 + 1;
  | | z[k1+l1] := y[l1];
  | end else if l1 = l then begin
  | | {k1 < k}
  | | k1 := k1 + 1;
  | | z[k1+l1] := x[k1];
  | end else if x[k1+1] <= y[l1+1] then begin
  | | k1 := k1 + 1;
  | | z[k1+l1] := x[k1];
  | end else if x[k1+1] >= y[l1+1] then begin
  | | l1 := l1 + 1;
  | | z[k1+l1] := y[l1];
  | end else begin
  | | { в Є®Ј® ­Ґ Ўлў Ґв }
  | end;
  end;
  {k1 = k, l1 = l, ¬ ббЁўл ᮥ¤Ё­Ґ­л}

ќв®в  Їа®жҐбб  ¬®¦­®  Ї®пб­Ёвм  в Є. Џгбвм г ­ б Ґбвм ¤ўҐ бв®ЇЄЁ
Є ав®зҐЄ, ®вб®авЁа®ў ­­ле Ї®  «д ўЁвг. Њл ᮥ¤Ё­пҐ¬  Ёе  ў  ®¤­г
бв®ЇЄг,  ўлЎЁа п Є ¦¤л© а § вг Ё§ ўҐае­Ёе Є ав®зҐЄ ®ЎҐЁе бв®Ї®Є,
Є®в®а п Ё¤Ґв а ­миҐ ў  «д ўЁв­®¬ Ї®ап¤ЄҐ.

     1.2.20. „ ­л ¤ў  ¬ ббЁў  x[1] <= ... <= x[k] Ё y[1] <=  ...
<=  y[l].  Ќ ©вЁ  Ёе  "ЇҐаҐбҐзҐ­ЁҐ",  в.Ґ. ¬ ббЁў z[1] <= ... <=
z[m], ᮤҐа¦ йЁ© Ёе ®ЎйЁҐ  н«Ґ¬Ґ­вл,  ЇаЁзҐ¬  Єа в­®бвм  Є ¦¤®Ј®
н«Ґ¬Ґ­в  ў ¬ ббЁўҐ z а ў­пҐвбп ¬Ё­Ё¬г¬г Ё§ ҐЈ® Єа в­®б⥩ ў ¬ б-
бЁў е x Ё y. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  k+l.

     1.2.21. „ ­л ¤ў  ¬ ббЁў  x[1]<=...<=x[k] Ё  y[1]<=...<=y[l]
Ё  зЁб«® q. Ќ ©вЁ б㬬㠢Ё¤  x[i]+y[j], ­ ЁЎ®«ҐҐ Ў«Ё§Єго Є зЁб«г
q. (—Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  k+l, ¤®Ї®«­ЁвҐ«м­ п Ї ¬пвм - дЁЄбЁа®-
ў ­­®Ґ зЁб«® 楫ле ЇҐаҐ¬Ґ­­ле, б ¬Ё ¬ ббЁўл ¬Ґ­пвм ­Ґ а §аҐи Ґв-
бп.)
     “Є § ­ЁҐ. Ќ ¤® ­ ©вЁ ¬Ё­Ё¬ «м­®Ґ а ббв®п­ЁҐ ¬Ґ¦¤г н«Ґ¬Ґ­в -
¬Ё x[1]<=...<=x[k] Ё q-y[l]<=..<=q-y[1], зв® ­Ґваг¤­® ᤥ« вм  ў
室Ґ Ёе б«Ёп­Ёп ў ®¤Ё­ (ў®®Ўа ¦ Ґ¬л©) ¬ ббЁў.

     1.2.22. (Ё§ Є­ЁЈЁ „.ѓаЁб ) ЌҐЄ®в®а®Ґ  зЁб«®  ᮤҐа¦Ёвбп  ў
Є ¦¤®¬ Ё§ ваҐе 楫®зЁб«Ґ­­ле ­ҐгЎлў ойЁе ¬ ббЁў®ў x[1] <= ... <=
x[p],  y[1]  <=  ... <= y[q], z[1] <= ... <= z[r]. Ќ ©вЁ ®¤­® Ё§
в ЄЁе зЁбҐ«. —Ёб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  p + q + r.

     ђҐиҐ­ЁҐ.

  p1:=1; q1=1; r1:=1;
  {Ё­ў аЁ ­в: x[p1]..x[p], y[q1]..y[q], z[r1]..z[r]
   ᮤҐа¦ в ®ЎйЁ© н«Ґ¬Ґ­в }
  while not ((x[p1]=y[q1]) and (y[q1]=z[r1])) do begin
  | if x[p1]<y[q1] then begin
  | | p1:=p1+1;
  | end else if y[q1]<z[r1] then begin
  | | q1:=q1+1;
  | end else if z[r1]<x[p1] then begin
  | | r1:=r1+1;
  | end else begin
  | | { в Є ­Ґ Ўлў Ґв }
  | end;
  end;
  {x[p1] = y[q1] = z[r1]}
  writeln (x[p1]);

     1.2.23. ’  ¦Ґ § ¤ з , в®«мЄ® § а ­ҐҐ ­Ґ Ё§ўҐбв­®, бгйҐбвўг-
Ґв  «Ё ®ЎйЁ© н«Ґ¬Ґ­в ў ваҐе ­ҐгЎлў ойЁе ¬ ббЁў е Ё вॡгҐвбп нв®
ўлпб­Ёвм (Ё ­ ©вЁ ®¤Ё­ Ё§ ®ЎйЁе н«Ґ¬Ґ­в®ў, Ґб«Ё ®­Ё Ґбвм).

     1.2.24. ќ«Ґ¬Ґ­в ¬Ё  ¬ ббЁў   a[1..n]  пў«повбп  ­ҐгЎлў ойЁҐ
¬ ббЁўл  [1..m]  楫ле зЁбҐ« (a: array [1..n] of array [1..m] of
integer; a[1][1] <= ... <=  a[1][m],  ...,  a[n][1]  <=  ...  <=
a[n][m]). €§ўҐбв­®, зв® бгйҐбвўгҐв зЁб«®, ўе®¤п饥 ў® ўбҐ ¬ ббЁ-
ўл  a[i]  (бгйҐбвўгҐв  в Є®Ґ  е,  зв®  ¤«п  ўбпЄ®Ј®  i Ё§ [1..n]
­ ©¤свбп j Ё§ [1..m], ¤«п Є®в®а®Ј® a[i][j]=x). Ќ ©вЁ ®¤­® Ё§ в -
ЄЁе зЁбҐ« е.

     ђҐиҐ­ЁҐ. ‚ўҐ¤Ґ¬ ¬ ббЁў b[1]..b[n], ®в¬Ґз ойЁ© ­ з «® "®бв -
о饩бп з бвЁ" ¬ ббЁў®ў a[1]..a[n].

  for k:=1 to n do begin
  |  b[k]:=1;
  end;
  eq := true;
  for k := 2 to n do begin
  | eq := eq and (a[1][b[1]] = a[k][b[k]]);
  end;
  {Ё­ў аЁ ­в: ®бв ўиЁҐбп з бвЁ  ЇҐаҐбҐЄ овбп,  в.Ґ.  бгйҐбвўгҐв
   в Є®Ґ  е,  зв® ¤«п ўбпЄ®Ј® i Ё§ [1..n] ­ ©¤свбп j Ё§ [1..m],
   ­Ґ ¬Ґ­м襥 b[i], ¤«п Є®в®а®Ј® a[i][j] =  е;  eq  <=>  ЇҐаўлҐ
   н«Ґ¬Ґ­вл ®бв ўиЁебп з б⥩ а ў­л}
  while not eq do begin
  | s := 1; k := 1;
  | {a[s][b[s]] - ¬Ё­Ё¬ «м­®Ґ б।Ё a[1][b[1]]..a[k][b[k]]}
  | while k <> n do begin
  | | k := k + 1;
  | | if a[k][b[k]] < a[s][b[s]] then begin
  | | | s := k;
  | | end;
  | end;
  | {a[s][b[s]] - ¬Ё­Ё¬ «м­®Ґ б।Ё a[1][b[1]]..a[n][b[n]]}
  | b [s] := b [s] + 1;
  | for k := 2 to n do begin
  | | eq := eq and (a[1][b[1]] = a[k][b[k]]);
  | end;
  end;
  writeln (a[1][b[1]]);

     1.2.25.  ЏаЁўҐ¤Ґ­­®Ґ  аҐиҐ­ЁҐ ЇаҐ¤л¤г饩 § ¤ зЁ вॡгҐв Ї®-
ап¤Є  m*n*n ¤Ґ©бвўЁ©. ЏаЁ¤г¬ вм бЇ®б®Ў б зЁб«®¬ ¤Ґ©бвўЁ© Ї®ап¤Є 
m*n.
     “Є § ­ЁҐ.  ЏаЁ¤Ґвбп  Ї®¦Ґавў®ў вм бЁ¬¬ҐваЁҐ© Ё ўлЎа вм ®¤­г
Ё§ бва®Є §  ®б­®ў­го. „ўЁЈ пбм Ї® ®б­®ў­®© бва®ЄҐ,  Ї®¤¤Ґа¦Ёў Ґ¬
в Є®Ґ  ᮮ⭮襭ЁҐ:  ў®  ўбҐе  ®бв «м­ле  бва®Є е ®в¬ҐзҐ­ ¬ ЄбЁ-
¬ «м­л© н«Ґ¬Ґ­в, ­Ґ  ЇаҐў®б室пйЁ©  ⥪г饣®  н«Ґ¬Ґ­в   ®б­®ў­®©
бва®ЄЁ.

     1.2.26. („ў®Ёз­л© Ї®ЁбЄ) „ ­   Ї®б«Ґ¤®ў вҐ«м­®бвм  x[1]  <=
...  <=  x[n] 楫ле зЁбҐ« Ё зЁб«® a. ‚лпб­Ёвм, ᮤҐа¦Ёвбп «Ё a ў
нв®© Ї®б«Ґ¤®ў вҐ«м­®бвЁ, в. Ґ. бгйҐбвўгҐв «Ё i Ё§ 1..n, ¤«п  Є®-
в®а®Ј® x[i]=a. (Љ®«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є  log n.)

     ђҐиҐ­ЁҐ. (ЏаҐ¤Ї®« Ј Ґ¬, зв® n > 0.)

  l := 1; r := n+1;
  {Ґб«Ё a Ґбвм ў®®ЎйҐ, в® Ґбвм Ё б।Ё x[l]..x[r-1], r > l}
  while r - l <> 1 do begin
  | m := l + (r-l) div 2 ;
  | {l < m < r }
  | if x[m] <= a then begin
  | | l := m;
  | end else begin {x[m] > a}
  | | r := m;
  | end;
  end;
(ЋЎа вЁвҐ ў­Ё¬ ­ЁҐ, зв® Ё ў б«гз Ґ x[m] = a Ё­ў аЁ ­в ­Ґ ­ аги -
Ґвбп.)
     Љ ¦¤л© а § r-l 㬥­ми Ґвбп ЇаЁ¬Ґа­® ў¤ў®Ґ, ®вЄг¤  Ё ўл⥪ -
Ґв вॡ㥬 п ®жҐ­Є  зЁб«  ¤Ґ©бвўЁ©.
     ‡ ¬Ґз ­ЁҐ.
l + (r-l) div 2 = (2l + (r-l)) div 2 = (r+l) div 2.

     1.2.27. (€§ Є­ЁЈЁ „.ѓаЁб ) „ ­ ¬ ббЁў x:  array  [1..n]  of
array  [1..m]  of  integer,  гЇ®а冷祭­л©  Ї®  "бва®Є ¬"  Ё  Ї®
"бв®«Ўж ¬":
         x[i][j] <= x[i+1][j],
         x[i][j] <= x[i][j+1]
Ё зЁб«® a. ’ॡгҐвбп ўлпб­Ёвм, ўбваҐз Ґвбп «Ё a б।Ё x[i][j].

     ђҐиҐ­ЁҐ. ЏаҐ¤бв ў«пп ᥡҐ  ¬ ббЁў  a  Є Є  ¬ ваЁжг  (Їаאַ-
гЈ®«м­ЁЄ,  § Ї®«­Ґ­­л© зЁб« ¬Ё), ¬л ўлЎҐаҐ¬ Їаאַ㣮«м­ЁЄ, ў Є®-
в®а®¬ в®«мЄ® Ё ¬®¦Ґв ᮤҐа¦ вмбп a, Ё Ўг¤Ґ¬ ҐЈ®  бг¦ вм.  Џаאַ-
гЈ®«м­ЁЄ нв®в Ўг¤Ґв ᮤҐа¦ вм x[i][j] ЇаЁ 1<=i<=l Ё k<=j<=m.
                1                     k         m
               -----------------------------------
              1|                     |***********|
               |                     |***********|
               |                     |***********|
              l|                     |***********|
               |---------------------------------|
               |                                 |
              n|                                 |
               -----------------------------------
(¤®ЇгбЄ овбп ЇгбвлҐ Їаאַ㣮«м­ЁЄЁ ЇаЁ l = 0 Ё k = m+1).

  l:=n; k:=1;
  {l>=0, k<=m+1, Ґб«Ё a Ґбвм, в® ў ®ЇЁб ­­®¬ Їаאַ㣮«м­ЁЄҐ}
  while (l > 0) and (k < m+1) and (x[l][k] <> a) do begin
  | if x[l][k] < a then begin
  | | k := k + 1; {«Ґўл© бв®«ЎҐж ­Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐЈ®}
  | end else begin {x[l][k] > a}
  | | l := l - 1; {­Ё¦­пп бва®Є  ­Ґ ᮤҐа¦Ёв a, г¤ «пҐ¬ ҐҐ}
  | end;
  end;
  {x[l][k] = a Ё«Ё Їаאַ㣮«м­ЁЄ Їгбв }
  answer:= (l > 0) and (k < m+1) ;

     ‡ ¬Ґз ­ЁҐ.  ‡¤Ґбм в  ¦Ґ ®иЁЎЄ : x[l][k] ¬®¦Ґв ®Є § вмбп ­Ґ-
®ЇаҐ¤Ґ«Ґ­­л¬. (…с ЁбЇа ў«Ґ­ЁҐ ЇаҐ¤®бв ў«пҐвбп зЁв вҐ«о.)

     1.2.28. (Њ®бЄ®ўбЄ п ®«Ё¬ЇЁ ¤  Ї® Їа®Ја ¬¬Ёа®ў ­Ёо) „ ­ ­Ґ-
гЎлў ойЁ© ¬ ббЁў Ї®«®¦ЁвҐ«м­ле 楫ле зЁбҐ« a[1] <= a[2]  <=...<=
a[n].  Ќ ©вЁ ­ Ё¬Ґ­м襥 楫®Ґ Ї®«®¦ЁвҐ«м­®Ґ зЁб«®, ­Ґ ЇаҐ¤бв ўЁ-
¬®Ґ ў ўЁ¤Ґ бг¬¬л ­ҐбЄ®«мЄЁе н«Ґ¬Ґ­в®ў нв®Ј® ¬ ббЁў  (Є ¦¤л© н«Ґ-
¬Ґ­в ¬ ббЁў  ¬®¦Ґв Ўлвм ЁбЇ®«м§®ў ­ ­Ґ Ў®«ҐҐ ®¤­®Ј® а § ). —Ёб«®
¤Ґ©бвўЁ© Ї®ап¤Є  n.

     ђҐиҐ­ЁҐ. Џгбвм Ё§ўҐбв­®, зв®  зЁб« ,  ЇаҐ¤бв ўЁ¬лҐ  ў  ўЁ¤Ґ
б㬬л н«Ґ¬Ґ­в®ў a[1],...,a[k], § Ї®«­пов ®в१®Є ®в 1 ¤® ­ҐЄ®в®-
а®Ј® N. …б«Ё a[k+1] > N+1, в® N+1 Ё Ўг¤Ґв ¬Ё­Ё¬ «м­л¬ зЁб«®¬, ­Ґ
ЇаҐ¤бв ўЁ¬л¬  ў ўЁ¤Ґ б㬬л н«Ґ¬Ґ­в®ў ¬ ббЁў  a[1]..a[n]. …б«Ё ¦Ґ
a[k+1] <= N+1, в® зЁб« , ЇаҐ¤бв ўЁ¬лҐ  ў  ўЁ¤Ґ  бг¬¬л  н«Ґ¬Ґ­в®ў
a[1]..a[k+1], § Ї®«­пов ®в१®Є ®в 1 ¤® N+a[k+1].

  k := 0; N := 0;
  {Ё­ў аЁ ­в: зЁб« , ЇаҐ¤бв ўЁ¬лҐ ў ўЁ¤Ґ б㬬л н«Ґ¬Ґ­в®ў ¬ ббЁў 
   a[1]..a[k], § Ї®«­пов ®в१®Є 1..N}
  while (k <> n) and (a[k+1] <= N+1) do begin
  | N := N + a[k+1];
  | k := k + 1;
  end;
  {(k = n) Ё«Ё (a[k+1] > N+1); ў ®Ў®Ёе б«гз пе ®вўҐв N+1}
  writeln (N+1);

(‘­®ў  в®в ¦Ґ ¤ҐдҐЄв: ў гб«®ўЁЁ жЁЄ«  ЇаЁ «®¦­®¬ ЇҐаў®¬  гб«®ўЁЁ
ўв®а®Ґ ­Ґ ®ЇаҐ¤Ґ«Ґ­®.)

     1.2.29.  („«п  §­ Є®¬ле б ®б­®ў ¬Ё  «ЈҐЎал) ‚ 楫®зЁб«Ґ­­®¬
¬ ббЁўҐ a[1]..a[n] еа ­Ёвбп ЇҐаҐбв ­®ўЄ  зЁбҐ« 1..n  (Є ¦¤®Ґ  Ё§
зЁбҐ« ўбваҐз Ґвбп Ї® ®¤­®¬г а §г).
     ( ) ЋЇаҐ¤Ґ«Ёвм зҐв­®бвм ЇҐаҐбв ­®ўЄЁ. (€ ў ( ), Ё ў (Ў) Є®-
«ЁзҐбвў® ¤Ґ©бвўЁ© Ї®ап¤Є  n.)
     (Ў)  ЌҐ ЁбЇ®«м§гп ¤агЈЁе ¬ ббЁў®ў, § ¬Ґ­Ёвм ЇҐаҐбв ­®ўЄг ­ 
®Ўа в­го (Ґб«Ё ¤® а Ў®вл Їа®Ја ¬¬л a[i]=j, в® Ї®б«Ґ ¤®«¦­®  Ўлвм
a[j]=i).

     “Є § ­ЁҐ.  ( )  —Ґв­®бвм  ЇҐаҐбв ­®ўЄЁ  ®ЇаҐ¤Ґ«пҐвбп  Є®«Ё-
зҐбвў®¬ жЁЄ«®ў. —в®Ўл ®в«Ёз вм 㦥 Їа®©¤Ґ­­лҐ жЁЄ«л, г  Ёе  н«Ґ-
¬Ґ­в®ў ¬®¦­®, ­ ЇаЁ¬Ґа, ¬Ґ­пвм §­ Є. (Ў) ЋЎа йҐ­ЁҐ Їа®Ё§ў®¤Ё¬ Ї®
жЁЄ« ¬.

     1.2.30. „ ­ ¬ ббЁў a[1..n] Ё зЁб«® b. ЏҐаҐбв ўЁвм  зЁб«   ў
¬ ббЁўҐ  в ЄЁ¬  ®Ўа §®¬, зв®Ўл б«Ґў  ®в ­ҐЄ®в®а®© Ја ­Ёжл бв®п«Ё
зЁб« , ¬Ґ­миЁҐ Ё«Ё а ў­лҐ b,   бЇа ў  ®в Ја ­Ёжл -  Ў®«миЁҐ  Ё«Ё
а ў­лҐ b.

     ђҐиҐ­ЁҐ.

        l:=0; r:=n;
        {Ё­ў аЁ ­в: a[1]..a[l]<=b; a[r+1]..a[n]>=b}
        while l <> r do begin
        | if a[l+1] <= b then begin
        | | l:=l+1;
        | end else if a[r] >=b then begin
        | | r:=r-1;
        | end else begin {a[l+1]>b; a[r]<b}
        | | Ї®¬Ґ­пвм a[l+1] Ё  a[r]
        | | l:=l+1; r:+r-1;
        | end;
        end;

     1.2.31. ’  ¦Ґ § ¤ з , ­® вॡгҐвбп, зв®Ўл б­ з «  и«Ё  н«Ґ-
¬Ґ­вл,  ¬Ґ­миЁҐ  b, § вҐ¬ а ў­лҐ b,   «Ёим § вҐ¬ Ў®«миЁҐ b.

     ђҐиҐ­ЁҐ.  ’ҐЇҐам  Ї®вॡговбп  ваЁ Ја ­Ёжл: ¤® ЇҐаў®© Ўг¤гв
Ё¤вЁ н«Ґ¬Ґ­вл, ¬Ґ­миЁҐ b, ®в ЇҐаў®© ¤® ўв®а®© - а ў­лҐ b,  § вҐ¬
­ҐЁ§ўҐбв­® Є ЄЁҐ ¤® ваҐв쥩,   Ї®б«Ґ ваҐв쥩 - Ў®«миЁҐ b. (Ѓ®«ҐҐ
бЁ¬¬ҐваЁз­®Ґ  аҐиҐ­ЁҐ ЁбЇ®«м§®ў «® Ўл зҐвлॠЈа ­Ёжл, ­® ўап¤ «Ё
ЁЈа  бв®Ёв ᢥз.) ‚ Є зҐб⢥ ®зҐаҐ¤­®Ј® а бб¬ ваЁў Ґ¬®Ј® н«Ґ¬Ґ­-
в  ЎҐаҐ¬ н«Ґ¬Ґ­в бЇа ў  ®в б।­Ґ© Ја ­Ёжл.

     l:=0; m:=0; r:=n;
     {Ё­ў аЁ ­в: a[1..l]<b; a[l+1..m]=b; a[r+1]..a[n]>b}
     while m <> r do begin
     | if a[m+1]=b then begin
     | | m:=m+1;
     | end else if a[m+1]>b then begin
     | | ®Ў¬Ґ­пвм a[m+1] Ё a[r]
     | | r:=r-1;
     | end else begin {a[m+1]<b}
     | | ®Ў¬Ґ­пвм a[m+1] Ё a[l+1]
     | | l:=l+1; m:=m+1;
     end;

     1.2.32.  (ў аЁ ­в  ЇаҐ¤л¤г饩  § ¤ зЁ,  ­ §ў ­­л©  ў  Є­ЁЈҐ
„Ґ©Єбвал § ¤ зҐ© ® Ј®«« ­¤бЄ®¬ д« ЈҐ) ‚ ¬ ббЁўҐ бв®пв зЁб«  0, 1
Ё  2.  ЏҐаҐбв ўЁвм  Ёе  ў Ї®ап¤ЄҐ ў®§а бв ­Ёп, Ґб«Ё Ґ¤Ё­б⢥­­®©
а §аҐиҐ­­®© ®ЇҐа жЁҐ© (Ї®¬Ё¬® з⥭Ёп) ­ ¤ ¬ ббЁў®¬ пў«пҐвбп  ЇҐ-
аҐбв ­®ўЄ  ¤ўге н«Ґ¬Ґ­в®ў.

     1.2.33. „ ­ ¬ ббЁў a[1]..a[n]  Ё  зЁб«®  m<=n.  „«п  Є ¦¤®©
ЈагЇЇл  Ё§ m бв®пйЁе а冷¬ з«Ґ­®ў (в ЄЁе ЈагЇЇ, ®зҐўЁ¤­®, n-m+1)
ўлзЁб«Ёвм ҐҐ б㬬г. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®ап¤Є  n.

     ђҐиҐ­ЁҐ.  ЏҐаҐе®¤п  ®в ЈагЇЇл Є б®бҐ¤­Ґ©, ¬л ¤®Ў ў«пҐ¬ ®¤Ё­
з«Ґ­,   ¤агЈ®© ўлзЁв Ґ¬.

     1.2.34. „ ­  Єў ¤а в­ п в Ў«Ёж  a[1..n][1..n] Ё зЁб«® m<=n.
„«п Є ¦¤®Ј® Єў ¤а в  а §¬Ґа  m ­  m  ў  нв®©  в Ў«ЁжҐ  ўлзЁб«Ёвм
бг¬¬г  бв®пйЁе ў ­Ґ¬ зЁбҐ«. ЋЎйҐҐ зЁб«® ¤Ґ©бвўЁ© ¤®«¦­® Ўлвм Ї®-
ап¤Є  n*n.

     ђҐиҐ­ЁҐ. ‘­ з «  ¤«п Є ¦¤®Ј® Ј®аЁ§®­в «м­®Ј® Їаאַ㣮«м­ЁЄ 
а §¬Ґа®¬ n ­  1 ўлзЁб«пҐ¬ б㬬г бв®пйЁе ў ­Ґ¬ зЁбҐ«. (ЏаЁ б¤ўЁЈҐ
в Є®Ј®  Їаאַ㣮«м­ЁЄ   Ї®  Ј®аЁ§®­в «Ё ­  1 ­г¦­® ¤®Ў ўЁвм ®¤­®
зЁб«® Ё ®¤­® ўлзҐбвм.) ‡ вҐ¬,  ЁбЇ®«м§гп  нвЁ  б㬬л,  ўлзЁб«пҐ¬
бг¬¬л ў Єў ¤а в е. (ЏаЁ б¤ўЁЈҐ Єў ¤а в  Ї® ўҐавЁЄ «Ё ¤®Ў ў«пҐвбп
Ї®«®бЄ ,   ¤агЈ п Ї®«®бЄ  гЎ ў«пҐвбп.)

     1.3. €­¤гЄвЁў­лҐ дг­ЄжЁЁ (Ї® Ђ.ѓ.Љг譨७Є®).

     Џгбвм M - ­ҐЄ®в®а®Ґ ¬­®¦Ґбвў®. ”г­ЄжЁп f,  аЈг¬Ґ­в ¬Ё Є®в®-
а®© пў«повбп Ї®б«Ґ¤®ў вҐ«м­®бвЁ н«Ґ¬Ґ­в®ў ¬­®¦Ґбвў  M,    §­ зҐ-
­Ёп¬Ё - н«Ґ¬Ґ­вл ­ҐЄ®в®а®Ј® ¬­®¦Ґбвў  N, ­ §лў Ґвбп Ё­¤гЄвЁў­®©,
Ґб«Ё  ҐҐ §­ зҐ­ЁҐ ­  Ї®б«Ґ¤®ў вҐ«м­®бвЁ x[1]..x[n] ¬®¦­® ў®ббв -
­®ўЁвм Ї® ҐҐ §­ зҐ­Ёо ­  Ї®б«Ґ¤®ў вҐ«м­®бвЁ  x[1]..x[n-1]  Ё  Ї®
x[n],  в.  Ґ.  Ґб«Ё  бгйҐбвўгҐв  дг­ЄжЁп F Ё§ N*M (¬­®¦Ґбвў® Ї а
<n,m>, Ј¤Ґ n - н«Ґ¬Ґ­в ¬­®¦Ґбвў  N,   m - н«Ґ¬Ґ­в ¬­®¦Ґбвў  M) ў
N, ¤«п Є®в®а®©

      f(<x[1],...,x[n]>) = F (f (<x[1],...,x[n-1]>), x[n]).

     ‘奬   «Ј®аЁв¬  ўлзЁб«Ґ­Ёп Ё­¤гЄвЁў­®© дг­ЄжЁЁ:

  k := 0; f := f0;
  {Ё­ў аЁ ­в: f - §­ зҐ­ЁҐ дг­ЄжЁЁ ­  <x[1],...,x[k]>}
  while  k<> n do begin
  | k := k + 1;
  | f := F (f, x[k]);
  end;

     ‡¤Ґбм f0 - §­ зҐ­ЁҐ дг­ЄжЁЁ  ­   Їгбв®©  Ї®б«Ґ¤®ў вҐ«м­®бвЁ
(Ї®б«Ґ¤®ў вҐ«м­®бвЁ  ¤«Ё­л  0). …б«Ё дг­ЄжЁп f ®ЇаҐ¤Ґ«Ґ­  в®«мЄ®
­  ­ҐЇгбвле Ї®б«Ґ¤®ў вҐ«м­®бвпе, в® ЇҐаў п бва®Є  § ¬Ґ­пҐвбп  ­ 
"k := 1; f := f (<x[1]>);".

     €­¤гЄвЁў­лҐ а биЁаҐ­Ёп.

     …б«Ё дг­ЄжЁп f ­Ґ пў«пҐвбп Ё­¤гЄвЁў­®©, Ї®«Ґ§­®  ЁбЄ вм  ҐҐ
Ё­¤гЄвЁў­®Ґ  а биЁаҐ­ЁҐ  - в Єго Ё­¤гЄвЁў­го дг­ЄжЁо g, §­ зҐ­Ёп
Є®в®а®© ®ЇаҐ¤Ґ«пов §­ зҐ­Ёп f (нв® §­ зЁв, зв® бгйҐбвўгҐв  в Є п
дг­ЄжЁп  t,  зв®  f  (<x[1]...x[n]>) = t (g (<x[1]...x[n]>)) ЇаЁ
ўбҐе <x[1]...x[n]>). Њ®¦­® ¤®Є § вм, зв® б।Ё ўбҐе  Ё­¤гЄвЁў­ле
а биЁаҐ­Ё©  бгйҐбвўгҐв  ¬Ё­Ё¬ «м­®Ґ  а биЁаҐ­ЁҐ F (¬Ё­Ё¬ «м­®бвм
®§­ з Ґв, зв® ¤«п «оЎ®Ј® Ё­¤гЄвЁў­®Ј® а биЁаҐ­Ёп  g  §­ зҐ­Ёп  F
®ЇаҐ¤Ґ«повбп §­ зҐ­Ёп¬Ё g).

     1.3.1.  “Є § вм  Ё­¤гЄвЁў­лҐ  а биЁаҐ­Ёп   ¤«п   б«Ґ¤гойЁе
дг­ЄжЁ©:
    )  б।­ҐҐ   аЁд¬ҐвЁзҐбЄ®Ґ  Ї®б«Ґ¤®ў вҐ«м­®бвЁ ўҐйҐб⢥­­ле
зЁбҐ«;
   Ў) зЁб«® н«Ґ¬Ґ­в®ў Ї®б«Ґ¤®ў вҐ«м­®б⨠楫ле зЁбҐ«, а ў­ле ҐҐ
¬ ЄбЁ¬ «м­®¬г н«Ґ¬Ґ­вг;
   ў)  ўв®а®© Ї® ўҐ«ЁзЁ­Ґ н«Ґ¬Ґ­в Ї®б«Ґ¤®ў вҐ«м­®б⨠楫ле зЁбҐ«
(в®в, Є®в®ал© Ўг¤Ґв ўв®ал¬, Ґб«Ё ЇҐаҐбв ўЁвм з«Ґ­л ў ­ҐгЎлў о饬
Ї®ап¤ЄҐ);
   Ј) ¬ ЄбЁ¬ «м­®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё­ Є®ўле н«Ґ¬Ґ­в®ў;
   ¤) ¬ ЄбЁ¬ «м­ п ¤«Ё­  ¬®­®в®­­®Ј® (­ҐгЎлў о饣®  Ё«Ё  ­Ґў®§-
а бв о饣®)  гз бвЄ   Ё§  Ё¤гйЁе  Ї®¤ап¤ н«Ґ¬Ґ­в®ў ў Ї®б«Ґ¤®ў -
⥫쭮б⨠楫ле зЁбҐ«;
   Ґ) зЁб«® ЈагЇЇ Ё§ Ґ¤Ё­Ёж, а §¤Ґ«Ґ­­ле ­г«п¬Ё  (ў  Ї®б«Ґ¤®ў -
⥫쭮бвЁ ­г«Ґ© Ё Ґ¤Ё­Ёж).

     ђҐиҐ­ЁҐ.

 ) <б㬬  ўбҐе з«Ґ­®ў Ї®б«Ґ¤®ў вҐ«м­®бвЁ; ¤«Ё­ >;

Ў)  <зЁб«®  н«Ґ¬Ґ­в®ў,  а ў­ле  ¬ ЄбЁ¬ «м­®¬г;  §­ зҐ­ЁҐ ¬ ЄбЁ-
     ¬ «м­®Ј®>;

ў) <­ ЁЎ®«миЁ© н«Ґ¬Ґ­в Ї®б«Ґ¤®ў вҐ«м­®бвЁ; ўв®а®©  Ї®  ўҐ«ЁзЁ­Ґ
     н«Ґ¬Ґ­в>;

Ј) <¬ ЄбЁ¬ «м­®Ґ зЁб«® Ё¤гйЁе Ї®¤ап¤ ®¤Ё­ Є®ўле н«Ґ¬Ґ­в®ў; зЁб-
     «®  Ё¤гйЁе  Ї®¤ап¤ ®¤Ё­ Є®ўле н«Ґ¬Ґ­в®ў ў Є®­жҐ Ї®б«Ґ¤®ў -
     ⥫쭮бвЁ; Ї®б«Ґ¤­Ё© н«Ґ¬Ґ­в Ї®б«Ґ¤®ў вҐ«м­®бвЁ>;

¤) <¬ ЄбЁ¬ «м­ п ¤«Ё­  ¬®­®в®­­®Ј® гз бвЄ ; ¬ ЄбЁ¬ «м­ п  ¤«Ё­ 
      ­ҐгЎлў о饣®  гз бвЄ   ў Є®­жҐ Ї®б«Ґ¤®ў вҐ«м­®бвЁ; ¬ ЄбЁ-
      ¬ «м­ п ¤«Ё­  ­Ґў®§а бв о饣® гз бвЄ  ў Є®­жҐ  Ї®б«Ґ¤®ў -
      ⥫쭮бвЁ; Ї®б«Ґ¤­Ё© з«Ґ­ Ї®б«Ґ¤®ў вҐ«м­®бвЁ>;

Ґ) <зЁб«® ЈагЇЇ Ё§ Ґ¤Ё­Ёж, Ї®б«Ґ¤­Ё© з«Ґ­>.

     1.3.2. (‘®®ЎйЁ« „.‚ аб®­®д쥢.) „ ­л ¤ўҐ Ї®б«Ґ¤®ў вҐ«м­®бвЁ
x[1]..x[n] Ё y[1]..y[k] 楫ле зЁбҐ«. ‚лпб­Ёвм, пў«пҐвбп «Ё  ўв®-
а п Ї®б«Ґ¤®ў вҐ«м­®бвм Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвмо ЇҐаў®©, в. Ґ. ¬®¦-
­®  «Ё  Ё§ ЇҐаў®© ўлзҐаЄ­гвм ­ҐЄ®в®алҐ з«Ґ­л в Є, зв®Ўл ®бв « бм
ўв®а п. —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  n+k.

       ђҐиҐ­ЁҐ.  (1  ў аЁ ­в)  Ѓг¤Ґ¬  бў®¤Ёвм  § ¤ зг  Є  § ¤ зҐ
¬Ґ­м襣® а §¬Ґа .

  n1:=n;
  k1:=k;
  {Ё­ў аЁ ­в:  ЁбЄ®¬л© ®вўҐв <=> ў®§¬®¦­®бвм Ё§ x[1]..x[n1] Ї®-
   «гзЁвм y[1]..y[k1] }
  while (n1 > 0) and (k1 > 0) do begin
  | if x[n1] = y[k1] then begin
  | | n1 := n1 - 1;
  | | k1 := k1 - 1;
  | end else begin
  | | n1 := n1 - 1;
  | end;
  end;
  {n1 = 0 Ё«Ё k1 = 0; Ґб«Ё k1 = 0, в® ®вўҐв - ¤ , Ґб«Ё k1 <>  0
   (Ё n1 = 0), в® ®вўҐв - ­Ґв}
  answer := (k1 = 0);

     Њл ЁбЇ®«м§®ў «Ё в®, зв® Ґб«Ё x[n1] = y[k1] Ё y[1]..y[k1] -
Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвм x[1]..x[n1], в® y[1]..y[k1-1] - Ї®¤Ї®б«Ґ-
¤®ў вҐ«м­®бвм x[1]..x[n1-1].

     (2  ў аЁ ­в)  ”г­ЄжЁп x[1]..x[n1] |-> (¬ ЄбЁ¬ «м­®Ґ k1, ¤«п
Є®в®а®Ј® y[1]..y[k1] Ґбвм Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвм x[1]..x[n1]) Ё­-
¤гЄвЁў­ .

     1.3.3. „ ­л ¤ўҐ Ї®б«Ґ¤®ў вҐ«м­®бвЁ x[1]..x[n] Ё  y[1]..y[k]
楫ле  зЁбҐ«. Ќ ©вЁ ¬ ЄбЁ¬ «м­го ¤«Ё­г Ї®б«Ґ¤®ў вҐ«м­®бвЁ, пў«п-
о饩бп Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвмо ®ЎҐЁе  Ї®б«Ґ¤®ў вҐ«м­®б⥩.  Љ®«Ё-
зҐбвў® ®ЇҐа жЁ© Ї®ап¤Є  n*k.

     ђҐиҐ­ЁҐ  (б®®ЎйҐ­® Њ.Ќ.‚ ©­жў ©Ј®¬, Ђ.Њ.„Ё¬Ґ­в¬ ­®¬). ЋЎ®§-
­ зЁ¬ зҐаҐ§  f(n1,k1)  ¬ ЄбЁ¬ «м­го  ¤«Ё­г  ®ЎйҐ©  Ї®¤Ї®б«Ґ¤®ў -
⥫쭮бвЁ Ї®б«Ґ¤®ў вҐ«м­®б⥩ x[1]..x[n1] Ё y[1]..y[k1]. ’®Ј¤ 

   x[n1] <> y[k1] => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1));
   x[n1] = y[k1]  => f(n1,k1) = max (f(n1,k1-1), f(n1-1,k1),
                              f(n1-1,k1-1)+1 );

(Џ®бЄ®«мЄг  f(n1-1,k1-1)+1  >= f(n1,k1-1), f(n1-1,k1), ў® ўв®а®¬
б«гз Ґ ¬ ЄбЁ¬г¬ ваҐе зЁбҐ« ¬®¦­® § ¬Ґ­Ёвм ­  ваҐвмҐ Ё§ ­Ёе.)
     Џ®н⮬㠬®¦­® § Ї®«­пвм в Ў«Ёжг §­ зҐ­Ё© дг­ЄжЁЁ f, Ё¬Ґойго
а §¬Ґа n*k. Њ®¦­® ®Ў®©вЁбм Ё Ї ¬пвмо Ї®ап¤Є  k (Ё«Ё n), Ґб«Ё Ё­-
¤гЄвЁў­®  (Ї®  n1) ўлЇЁб вм <f(n1,0), ..., f(n1,k)> (Є Є дг­ЄжЁп
®в n1 нв®в ­ Ў®а Ё­¤гЄвЁўҐ­).

     1.3.4 (Ё§ Є­ЁЈЁ „.ѓаЁб ) „ ­  Ї®б«Ґ¤®ў вҐ«м­®бвм 楫ле  зЁ-
ᥫ  x[1],...,  x[n].  Ќ ©вЁ  ¬ ЄбЁ¬ «м­го ¤«Ё­г ҐҐ ў®§а бв о饩
Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвЁ (зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є  n*log(n)).

     ђҐиҐ­ЁҐ. €бЄ®¬ п дг­ЄжЁп ­Ґ Ё­¤гЄвЁў­ , ­® Ё¬ҐҐв  б«Ґ¤го饥
Ё­¤гЄвЁў­®Ґ  а биЁаҐ­ЁҐ: ў ­ҐЈ® ўе®¤Ёв Ї®¬Ё¬® ¬ ЄбЁ¬ «м­®© ¤«Ё­л
ў®§а бв о饩 Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвЁ (®Ў®§­ зЁ¬ ҐҐ k) в Є¦Ґ Ё зЁб-
«  u[1],...,u[k], Ј¤Ґ u[i] = (¬Ё­Ё¬ «м­л©  Ё§  Ї®б«Ґ¤­Ёе  з«Ґ­®ў
ў®§а бв ойЁе  Ї®¤Ї®б«Ґ¤®ў вҐ«м­®б⥩ ¤«Ё­л i). ЋзҐўЁ¤­®, u[1] <=
... <= u[k]. ЏаЁ ¤®Ў ў«Ґ­ЁЁ ­®ў®Ј® з«Ґ­  x §­ зҐ­Ёп u Ё  k  Є®а-
४вЁаговбп.

  n1 := 1; k := 1; u[1] := x[1];
  {Ё­ў аЁ ­в: k Ё u ᮮ⢥вбвўгов ¤ ­­®¬г ўлиҐ ®ЇЁб ­Ёо}
  while n1 <> n do begin
  | n1 := n1 + 1;
  | ...
  | {i - ­ ЁЎ®«м襥 Ё§ вҐе зЁбҐ« ®в१Є  1..k, ¤«п Є®в®-
  |   але u[i] < x[n1]; Ґб«Ё в ЄЁе ­Ґв, в® i=0 }
  | if i = k then begin
  | | k := k + 1;
  | | u[k+1] := x[n1];
  | end else begin {i < k, u[i] < x[n1] <= u[i+1] }
  | | u[i+1] := x[n1];
  | end;
  end;

     ”а Ј¬Ґ­в ... ЁбЇ®«м§гҐв Ё¤Ґо ¤ў®Ёз­®Ј® Ї®ЁбЄ ; ў Ё­ў аЁ ­-
⥠гб«®ў­® Ї®« Ј Ґ¬ u[0] а ў­л¬ ¬Ё­гб ЎҐбЄ®­Ґз­®бвЁ,    u[k+1]
- Ї«об ЎҐбЄ®­Ґз­®бвЁ; ­ и  楫м: u[i] < x[n1] <= u[i+1].

  i:=0; j:=k+1;
  {u[i] < x[n1] <= u[j], j > i}
  while (j - i) <> 1 do begin
  | s := i + (j-i) div 2;    {i < s < j}
  | if u[s] >= x[n1] then begin
  | | j := s;
  | end else begin {u[s] < x[n1]}
  | | i := s;
  | end;
  end;
  {u[i] < x[n1] <= u[j], j-i = 1}

     ‡ ¬Ґз ­ЁҐ.  Ѓ®«ҐҐ  Їа®б⮥  (­® ­Ґ ¬Ё­Ё¬ «м­®Ґ) Ё­¤гЄвЁў­®Ґ
а биЁаҐ­ЁҐ Ї®«гзЁвбп, Ґб«Ё ¤«п Є ¦¤®Ј®  i  еа ­Ёвм  ¬ ЄбЁ¬ «м­го
¤«Ё­г   ў®§а бв о饩  Ї®¤Ї®б«Ґ¤®ў вҐ«м­®бвЁ,  ®Є ­зЁў о饩бп  ­ 
x[i]. ќв® а биЁаҐ­ЁҐ ЇаЁў®¤Ёв Є  «Ј®аЁв¬г б зЁб«®¬ ¤Ґ©бвўЁ©  Ї®-
ап¤Є  n*n.

     1.3.5.  Љ ЄЁҐ  Ё§¬Ґ­Ґ­Ёп  ­г¦­® ў­ҐбвЁ ў аҐиҐ­ЁҐ ЇаҐ¤л¤г饩
§ ¤ зЁ, Ґб«Ё ­ ¤®  ЁбЄ вм  ¬ ЄбЁ¬ «м­го  ­ҐгЎлў ойго  Ї®б«Ґ¤®ў -
⥫쭮бвм?
     ѓ« ў  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 ¬®¦Ґв Ўлвм
б«ЁиЄ®¬ ўҐ«ЁЄ®.)
      ѓ« ў  3. ЋЎе®¤ ¤ҐаҐў . ЏҐаҐЎ®а б ў®§ўа в ¬Ё.

     3.1. ”Ґа§Ё, ­Ґ ЎмойЁҐ ¤агЈ ¤агЈ : ®Ўе®¤ ¤ҐаҐў  Ї®§ЁжЁ©

     ‚  ЇаҐ¤л¤г饩 Ј« ўҐ ¬л а бб¬ ваЁў «Ё ­ҐбЄ®«мЄ® § ¤ з ®¤­®Ј®
Ё в®Ј® ¦Ґ вЁЇ : "ЇҐаҐзЁб«Ёвм ўбҐ н«Ґ¬Ґ­вл  ­ҐЄ®в®а®Ј®  ¬­®¦Ґбвў 
A". ‘奬  аҐиҐ­Ёп Ўл«  в Є®ў : ­  ¬­®¦Ґб⢥ A ўў®¤Ё«бп Ї®а冷Є Ё
®ЇЁблў « бм  Їа®жҐ¤га   ЇҐаҐе®¤   ®в Їа®Ё§ў®«м­®Ј® н«Ґ¬Ґ­в  ¬­®-
¦Ґбвў  A Є б«Ґ¤го饬㠧  ­Ё¬ (ў н⮬ Ї®ап¤ЄҐ).  ’ Єго  беҐ¬г  ­Ґ
ўбҐЈ¤   г¤ Ґвбп  аҐ «Ё§®ў вм  ­ҐЇ®б।б⢥­­®, Ё ў нв®© Ј« ўҐ ¬л
а бᬮваЁ¬ ¤агЈ®© Ї®«Ґ§­л© ЇаЁҐ¬ ЇҐаҐзЁб«Ґ­Ёп ўбҐе н«Ґ¬Ґ­в®ў ­Ґ-
Є®в®а®Ј® ¬­®¦Ґбвў . …Ј® ­ §лў ов "Ї®ЁбЄ  б  ў®§ўа в ¬Ё",  "¬Ґв®¤
ўҐвўҐ©  Ё Ја ­Ёж", "backtracking". Ќ  ­ и ў§Ј«п¤ ­ ЁЎ®«ҐҐ в®з­®Ґ
­ §ў ­ЁҐ нв®Ј® ¬Ґв®¤  - ®Ўе®¤ ¤ҐаҐў .

     3.1.1. ЏҐаҐзЁб«Ёвм ўбҐ бЇ®б®Ўл а ббв ­®ўЄЁ n дҐа§Ґ© ­  и е-
¬ в­®© ¤®бЄҐ n ­  n, ЇаЁ Є®в®але ®­Ё ­Ґ Ўмов ¤агЈ ¤агЈ .

     ђҐиҐ­ЁҐ. ЋзҐўЁ¤­®, ­  Є ¦¤®© Ё§ n Ј®аЁ§®­в «Ґ© ¤®«¦­®  бв®-
пвм  Ї®  дҐа§о.  Ѓг¤Ґ¬  ­ §лў вм k-Ї®§ЁжЁҐ© (¤«п k = 0, 1,...,n)
Їа®Ё§ў®«м­го а ббв ­®ўЄг k дҐа§Ґ© ­  k ­Ё¦­Ёе Ј®аЁ§®­в «пе (дҐа-
§Ё ¬®Јгв ЎЁвм ¤агЈ ¤агЈ ). Ќ аЁб㥬 "¤ҐаҐў® Ї®§ЁжЁ©": ҐЈ® Є®а­Ґ¬
Ўг¤Ґв Ґ¤Ё­б⢥­­ п 0-Ї®§ЁжЁп,   Ё§ Є ¦¤®©  k-Ї®§ЁжЁЁ  ўл室Ёв  n
бв५®Є  ўўҐае ў (k+1)-Ї®§ЁжЁЁ. ќвЁ n Ї®§ЁжЁ© ®в«Ёз овбп Ї®«®¦Ґ-
­ЁҐ¬ дҐа§п ­  (k+1)-®© Ј®аЁ§®­в «Ё. Ѓг¤Ґ¬ бзЁв вм, зв®  а бЇ®«®-
¦Ґ­ЁҐ  Ёе  ­  аЁбг­ЄҐ ᮮ⢥вбвўгҐв Ї®«®¦Ґ­Ёо нв®Ј® дҐа§п: «ҐўҐҐ
в  Ї®§ЁжЁп, ў Є®в®а®© дҐа§м а бЇ®«®¦Ґ­ «ҐўҐҐ.

                                        „ҐаҐў® Ї®§ЁжЁ© ¤«п
                                           n = 2








‘।Ё Ї®§ЁжЁ© нв®Ј® ¤ҐаҐў  ­ ¬ ­ ¤® ®в®Ўа вм ⥠n-Ї®§ЁжЁЁ, ў Є®-
в®але дҐа§Ё ­Ґ Ўмов ¤агЈ ¤агЈ . Џа®Ја ¬¬  Ўг¤Ґв "®Ўе®¤Ёвм  ¤ҐаҐ-
ў®" Ё ЁбЄ вм Ёе. —в®Ўл ­Ґ ¤Ґ« вм «Ёи­Ґ© а Ў®вл, § ¬ҐвЁ¬ ў®в зв®:
Ґб«Ё  ў  Є Є®©-в®  k-Ї®§ЁжЁЁ  дҐа§Ё  Ўмов ¤агЈ ¤агЈ , в® бв ўЁвм
¤ «м­Ґ©иЁе дҐа§Ґ© б¬лб«  ­Ґв. Џ®н⮬г, ®Ў­ аг¦Ёў нв®,  ¬л  Ўг¤Ґ¬
ЇаҐЄа й вм Ї®бв஥­ЁҐ ¤ҐаҐў  ў н⮬ ­ Їа ў«Ґ­ЁЁ.

     ’®з­ҐҐ,  ­ §®ўҐ¬  k-Ї®§ЁжЁо ¤®ЇгбвЁ¬®©, Ґб«Ё Ї®б«Ґ г¤ «Ґ­Ёп
ўҐае­ҐЈ® дҐа§п ®бв ўиЁҐбп ­Ґ Ўмов ¤агЈ ¤агЈ . Ќ и  Їа®Ја ¬¬  Ўг-
¤Ґв а бб¬ ваЁў вм в®«мЄ® ¤®ЇгбвЁ¬лҐ Ї®§ЁжЁЁ.




                                         „ҐаҐў® ¤®ЇгбвЁ¬ле
                                         Ї®§ЁжЁ© ¤«п n = 3









     ђ §®ЎмҐ¬ § ¤ зг ­  ¤ўҐ з бвЁ: (1) ®Ўе®¤ Їа®Ё§ў®«м­®Ј® ¤ҐаҐ-
ў  Ё (2) ॠ«Ё§ жЁо ¤ҐаҐў  ¤®ЇгбвЁ¬ле Ї®§ЁжЁ©.
     ‘д®а¬г«Ёа㥬 § ¤ зг ®Ўе®¤  Їа®Ё§ў®«м­®Ј® ¤ҐаҐў . Ѓг¤Ґ¬ бзЁ-
в вм, зв® г ­ б Ё¬ҐҐвбп ђ®Ў®в, Є®в®ал© ў Є ¦¤л© ¬®¬Ґ­в ­ е®¤Ёвбп
ў ®¤­®© Ё§ ўҐаиЁ­ ¤ҐаҐў  (ўҐаиЁ­л Ё§®Ўа ¦Ґ­л ­  аЁбг­ЄҐ  Єа㦮з-
Є ¬Ё). Ћ­ 㬥Ґв ўлЇ®«­пвм Є®¬ ­¤л:

                              ўўҐае_­ «Ґў®  (Ё¤вЁ Ї® б ¬®© «Ґў®©
                                 Ё§ ўл室пйЁе ўўҐае бв५®Є)

                              ўЇа ў® (ЇҐаҐ©вЁ ў б®бҐ¤­оо  бЇа ў 
                                 ўҐаиЁ­г)

                              ў­Ё§ (бЇгбвЁвмбп ў­Ё§ ­  ®¤Ё­ га®-
                                 ўҐ­м)

            ўўҐае_­ «Ґў®
            ўЇа ў®
            ў­Ё§

Ё Їа®ўҐаЄЁ, ᮮ⢥вбвўгойЁҐ ў®§¬®¦­®бвЁ ўлЇ®«­Ёвм Є ¦¤го Ё§  Є®-
¬ ­¤,   ­ §лў Ґ¬лҐ  "Ґбвм_ᢥаег",  "Ґбвм_бЇа ў ",  "Ґбвм_б­Ё§г"
(Ї®б«Ґ¤­пп ЁбвЁ­­  ўбо¤г, Єа®¬Ґ Є®а­п). ЋЎа вЁвҐ  ў­Ё¬ ­ЁҐ,  зв®
Є®¬ ­¤  "ўЇа ў®" Ї®§ў®«пҐв ЇҐаҐ©вЁ «Ёим Є "த­®¬г Ўа вг", ­® ­Ґ
Є "¤ў®оத­®¬г".


                                    ’ Є Є®¬ ­¤  "ўЇа ў®"
                                    Ќ… ¤Ґ©бвўгҐв!



     Ѓг¤Ґ¬ бзЁв вм, зв® г ђ®Ў®в  Ґбвм Є®¬ ­¤  "®Ўа Ў®в вм" Ё зв®
ҐЈ® § ¤ з  - ®Ўа Ў®в вм ўбҐ  «Ёбвмп  (ўҐаиЁ­л,  Ё§  Є®в®але  ­Ґв
бв५®Є ўўҐае, в® Ґбвм Ј¤Ґ гб«®ўЁҐ "Ґбвм_ᢥаег" «®¦­®). „«п ­ -
襩  и е¬ в­®©  § ¤ зЁ  Є®¬ ­¤Ґ ®Ўа Ў®в вм Ўг¤Ґв ᮮ⢥вбвў®ў вм
Їа®ўҐаЄ  Ё ЇҐз вм Ї®§ЁжЁЁ дҐа§Ґ©.

     „®Є § вҐ«мбвў®  Їа ўЁ«м­®бвЁ ЇаЁў®¤Ё¬®© ¤ «ҐҐ Їа®Ја ¬¬л Ёб-
Ї®«м§гҐв в ЄЁҐ ®ЇаҐ¤Ґ«Ґ­Ёп. Џгбвм дЁЄбЁа®ў ­® Ї®«®¦Ґ­ЁҐ ђ®Ў®в  ў
®¤­®© Ё§ ўҐаиЁ­ ¤ҐаҐў . ’®Ј¤  ўбҐ «Ёбвмп ¤ҐаҐў   а §ЎЁў овбп  ­ 
ваЁ  Є вҐЈ®аЁЁ: ­ ¤ ђ®Ў®в®¬, «ҐўҐҐ ђ®Ў®в  Ё Їа ўҐҐ ђ®Ў®в . (Џгвм
Ё§ Є®а­п ў «Ёбв ¬®¦Ґв Їа®е®¤Ёвм зҐаҐ§ ўҐаиЁ­г б ђ®Ў®в®¬,  бў®а -
зЁў вм  ў«Ґў®,  ­Ґ ¤®е®¤п ¤® ­ҐҐ Ё бў®а зЁў вм ўЇа ў®, ­Ґ ¤®е®¤п
¤® ­ҐҐ.) —ҐаҐ§ (Ћ‹) ®Ў®§­ зЁ¬ гб«®ўЁҐ "®Ўа Ў®в ­л ўбҐ «Ёбвмп «Ґ-
ўҐҐ ђ®Ў®в ",   зҐаҐ§ (Ћ‹Ќ) - гб«®ўЁҐ "®Ўа Ў®в ­л ўбҐ «Ёбвмп  «Ґ-
ўҐҐ Ё ­ ¤ ђ®Ў®в®¬".












Ќ ¬ Ї®­ ¤®ЎЁвбп в Є п Їа®жҐ¤га :

  procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  | {¤ ­®: (Ћ‹), ­ ¤®: (Ћ‹Ќ)}
  begin
  | {Ё­ў аЁ ­в: Ћ‹}
  | while Ґбвм_ᢥаег do begin
  | | ўўҐае_­ «Ґў®
  | end
  | {Ћ‹, ђ®Ў®в ў «ЁбвҐ}
  | ®Ўа Ў®в вм;
  | {Ћ‹Ќ}
  end;

Ћб­®ў­®©  «Ј®аЁв¬:

  ¤ ­®: ђ®Ў®в ў Є®а­Ґ, «Ёбвмп ­Ґ ®Ўа Ў®в ­л
  ­ ¤®: ђ®Ў®в ў Є®а­Ґ, «Ёбвмп ®Ўа Ў®в ­л

  {Ћ‹}
  ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  {Ё­ў аЁ ­в: Ћ‹Ќ}
  while Ґбвм_б­Ё§г do begin
  | if Ґбвм_бЇа ў  then begin {Ћ‹Ќ, Ґбвм бЇа ў }
  | | ўЇа ў®;
  | | {Ћ‹}
  | | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
  | end else begin
  | | {Ћ‹Ќ, ­Ґ Ґбвм_бЇа ў , Ґбвм_б­Ё§г}
  | | ў­Ё§;
  | end;
  end;
  {Ћ‹Ќ, ђ®Ў®в ў Є®а­Ґ => ўбҐ «Ёбвмп ®Ўа Ў®в ­л}

Ћбв «®бм  ў®бЇ®«м§®ў вмбп  б«Ґ¤гойЁ¬Ё  бў®©бвў ¬Ё  Є®¬ ­¤ ђ®Ў®в 
(ᢥаег § ЇЁб ­л гб«®ўЁп, ў Є®в®але ўлЇ®«­пҐвбп Є®¬ ­¤ , б­Ё§г -
г⢥তҐ­Ёп ® १г«мв вҐ ҐҐ ўлЇ®«­Ґ­Ёп):

   (1) {Ћ‹, ­Ґ Ґбвм_ᢥаег}  (2) {Ћ‹}
       ®Ўа Ў®в вм                ўўҐае_­ «Ґў®
       {Ћ‹Ќ}                     {Ћ‹}

   (3) {Ґбвм_бЇа ў , Ћ‹Ќ}    (4) {­Ґ Ґбвм_бЇа ў , Ћ‹Ќ}
       ўЇа ў®                    ў­Ё§
       {Ћ‹}                      {Ћ‹Ќ}

     3.1.2. „®Є § вм, зв® ЇаЁўҐ¤Ґ­­ п Їа®Ја ¬¬  § ўҐаи Ґв а Ў®вг
(­  «оЎ®¬ Є®­Ґз­®¬ ¤ҐаҐўҐ).
     ђҐиҐ­ЁҐ. Џа®жҐ¤га  ўўҐае_­ «Ґў®  § ўҐаи Ґв  а Ў®вг  (ўлб®в 
ђ®Ў®в   ­Ґ ¬®¦Ґв 㢥«ЁзЁў вмбп ЎҐбЄ®­Ґз­®). …б«Ё Їа®Ја ¬¬  а Ў®-
в Ґв ЎҐбЄ®­Ґз­®, в®, Ї®бЄ®«мЄг «Ёбвмп ­Ґ ®Ўа Ў влў овбп  Ї®ўв®а-
­®, ­ зЁ­ п б ­ҐЄ®в®а®Ј® ¬®¬Ґ­в  ­Ё ®¤Ё­ «Ёбв ­Ґ ®Ўа Ў влў Ґвбп.
Ђ  нв®  ў®§¬®¦­®,  в®«мЄ®  Ґб«Ё ђ®Ў®в ўбҐ ўаҐ¬п бЇгбЄ Ґвбп ў­Ё§.
Џа®вЁў®аҐзЁҐ. (ЋЎ ®жҐ­ЄҐ зЁб«  ¤Ґ©бвўЁ© б¬. ¤ «ҐҐ.)

     3.1.3. „®Є § вм Їа ўЁ«м­®бвм б«Ґ¤го饩 Їа®Ја ¬¬л ®Ўе®¤  ¤Ґ-
ॢ :

  var state: (WL, WLU);
  state := WL;
  while Ґбвм_б­Ё§г or (state <> WLU) do begin
  | if (state = WL) and Ґбвм_ᢥаег then begin
  | | ўўҐае;
  | end else if (state = WL) and not Ґбвм_ᢥаег then begin
  | | ®Ўа Ў®в вм; state := WLU;
  | end else if (state = WLU) and Ґбвм_бЇа ў  then begin
  | |  ўЇа ў®; state := WL;
  | end else begin {state = WLU, not Ґбвм_бЇа ў , Ґбвм_б­Ё§г}
  | |  ў­Ё§;
  | end;
  end;

     ђҐиҐ­ЁҐ. €­ў аЁ ­в жЁЄ« :
        state = WL  => Ћ‹
        state = WLU => Ћ‹Ќ
„®Є § вҐ«мбвў® § ўҐа襭Ёп а Ў®вл: ЇҐаҐе®¤ Ё§ б®бв®п­Ёп Ћ‹ ў  Ћ‹Ќ
ў®§¬®¦Ґ­  в®«мЄ®  ЇаЁ  ®Ўа Ў®вЄҐ ўҐаиЁ­л, Ї®н⮬㠥᫨ Їа®Ја ¬¬ 
а Ў®в Ґв ЎҐбЄ®­Ґз­®, в® б ­ҐЄ®в®а®Ј® ¬®¬Ґ­в  §­ зҐ­ЁҐ  state  ­Ґ
¬Ґ­пҐвбп, зв® ­Ґў®§¬®¦­®.

    3.1.4.  ђҐиЁвм § ¤ зг ®Ў ®Ўе®¤Ґ ¤ҐаҐў , Ґб«Ё ¬л е®вЁ¬, зв®Ўл
®Ўа Ў влў «Ёбм ўбҐ ўҐаиЁ­л (­Ґ в®«мЄ® «Ёбвмп).

    ђҐиҐ­ЁҐ. Џгбвм x - ­ҐЄ®в®а п ўҐаиЁ­ . ’®Ј¤  «оЎ п ўҐаиЁ­   y
®в­®бЁвбп Є ®¤­®© Ё§ зҐвлаҐе Є вҐЈ®аЁ©. ђ бᬮваЁ¬ Їгвм Ё§ Є®а­п
ў y. Ћ­ ¬®¦Ґв:
    ( ) Ўлвм з бвмо ЇгвЁ Ё§ Є®а­п ў x (y ­Ё¦Ґ x);
    (Ў) ᢥа­гвм ­ «Ґў® б ЇгвЁ ў x (y «ҐўҐҐ x);
    (ў) Їа®©вЁ зҐаҐ§ x (y ­ ¤ x);
    (Ј) ᢥа­гвм ­ Їа ў® б ЇгвЁ ў x (y Їа ўҐҐ x);
‚  з бв­®бвЁ,  б ¬  ўҐаиЁ­  x ®в­®бЁвбп Є Є вҐЈ®аЁЁ (ў). “б«®ўЁп
⥯Ґам Ўг¤гв в ЄЁ¬Ё:
    (ЋЌ‹) ®Ўа Ў®в ­л ўбҐ ўҐаиЁ­л ­Ё¦Ґ Ё «ҐўҐҐ;
    (ЋЌ‹Ќ) ®Ўа Ў®в ­л ўбҐ ўҐаиЁ­л ­Ё¦Ґ, «ҐўҐҐ Ё ­ ¤.
‚®в Є Є Ўг¤Ґв ўлЈ«п¤Ґвм Їа®Ја ¬¬ :

  procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  | {¤ ­®: (ЋЌ‹), ­ ¤®: (ЋЌ‹Ќ)}
  begin
  | {Ё­ў аЁ ­в: ЋЌ‹}
  | while Ґбвм_ᢥаег do begin
  | | ®Ўа Ў®в вм
  | | ўўҐае_­ «Ґў®
  | end
  | {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
  | ®Ўа Ў®в вм;
  | {ЋЌ‹Ќ}
  end;

Ћб­®ў­®©  «Ј®аЁв¬:

  ¤ ­®: ђ®Ў®в ў Є®а­Ґ, ­ЁзҐЈ® ­Ґ ®Ўа Ў®в ­®
  ­ ¤®: ђ®Ў®в ў Є®а­Ґ, ўбҐ ўҐаиЁ­л ®Ўа Ў®в ­л

  {ЋЌ‹}
  ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  {Ё­ў аЁ ­в: ЋЌ‹Ќ}
  while Ґбвм_б­Ё§г do begin
  | if Ґбвм_бЇа ў  then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
  | | ўЇа ў®;
  | | {ЋЌ‹}
  | | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
  | end else begin
  | | {Ћ‹Ќ, ­Ґ Ґбвм_бЇа ў , Ґбвм_б­Ё§г}
  | | ў­Ё§;
  | end;
  end;
  {ЋЌ‹Ќ, ђ®Ў®в ў Є®а­Ґ => ўбҐ ўҐаиЁ­л ®Ўа Ў®в ­л}

     3.1.5. ЏаЁўҐ¤Ґ­­ п в®«мЄ® зв® Їа®Ја ¬¬  ®Ўа Ў влў Ґв ўҐаиЁ-
­г ¤® в®Ј®, Є Є ®Ўа Ў®в ­ «оЎ®© Ё§ ҐҐ Ї®в®¬Є®ў. Љ Є Ё§¬Ґ­Ёвм ҐҐ,
зв®Ўл Є ¦¤ п ўҐаиЁ­ , ­Ґ пў«пой пбп «Ёб⮬, ®Ўа Ў влў « бм ¤ў ¦-
¤л: ®¤Ё­ а § ¤®,   ¤агЈ®© а § Ї®б«Ґ ўбҐе бў®Ёе Ї®в®¬Є®ў? (‹Ёбвмп
Ї®-ЇаҐ¦­Ґ¬г ®Ўа Ў влў овбп Ї® а §г.)

    ђҐиҐ­ЁҐ.  Џ®¤ "®Ўа Ў®в ­® ­Ё¦Ґ Ё «ҐўҐҐ" Ўг¤Ґ¬ Ї®­Ё¬ вм "­Ё¦Ґ
®Ўа Ў®в ­® Ї® а §г, б«Ґў  ®Ўа Ў®в ­® Ї®«­®бвмо («Ёбвмп Ї®  а §г,
®бв ­лҐ Ї® ¤ў )". Џ®¤ "®Ўа Ў®в ­® ­Ё¦Ґ, «ҐўҐҐ Ё ­ ¤" Ўг¤Ґ¬ Ї®­Ё-
¬ вм "­Ё¦Ґ ®Ўа Ў®в ­® Ї® а §г, «ҐўҐҐ Ё ­ ¤ - Ї®«­®бвмо".

Џа®Ја ¬¬  Ўг¤Ґв в Є®©:

  procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  | {¤ ­®: (ЋЌ‹), ­ ¤®: (ЋЌ‹Ќ)}
  begin
  | {Ё­ў аЁ ­в: ЋЌ‹}
  | while Ґбвм_ᢥаег do begin
  | | ®Ўа Ў®в вм
  | | ўўҐае_­ «Ґў®
  | end
  | {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
  | ®Ўа Ў®в вм;
  | {ЋЌ‹Ќ}
  end;

Ћб­®ў­®©  «Ј®аЁв¬:

  ¤ ­®: ђ®Ў®в ў Є®а­Ґ, ­ЁзҐЈ® ­Ґ ®Ўа Ў®в ­®
  ­ ¤®: ђ®Ў®в ў Є®а­Ґ, ўбҐ ўҐаиЁ­л ®Ўа Ў®в ­л

  {ЋЌ‹}
  ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
  {Ё­ў аЁ ­в: ЋЌ‹Ќ}
  while Ґбвм_б­Ё§г do begin
  | if Ґбвм_бЇа ў  then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
  | | ўЇа ў®;
  | | {ЋЌ‹}
  | | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
  | end else begin
  | | {Ћ‹Ќ, ­Ґ Ґбвм_бЇа ў , Ґбвм_б­Ё§г}
  | | ў­Ё§;
  | | ®Ўа Ў®в вм;
  | end;
  end;
  {ЋЌ‹Ќ, ђ®Ў®в ў Є®а­Ґ => ўбҐ ўҐаиЁ­л ®Ўа Ў®в ­л Ї®«­®бвмо}

     3.1.6. „®Є § вм, зв® зЁб«® ®ЇҐа жЁ© ў нв®© Їа®Ја ¬¬Ґ Ї® Ї®-
ап¤Єг а ў­® зЁб«г ўҐаиЁ­ ¤ҐаҐў . (Љ Є Ё ў ¤агЈЁе Їа®Ја ¬¬ е, Є®-
в®алҐ  ®в«Ёз овбп ®в нв®© «Ёим Їа®ЇгбЄ®¬ ­ҐЄ®в®але Є®¬ ­¤ "®Ўа -
Ў®в вм".)
     “Є § ­ЁҐ. ЏаЁ¬Ґа­® Є ¦¤®Ґ ўв®а®Ґ  ¤Ґ©бвўЁҐ  ЇаЁ  ЁбЇ®«­Ґ­ЁЁ
нв®© Їа®Ја ¬¬л - ®Ўа Ў®вЄ  ўҐаиЁ­л,   Є ¦¤ п ўҐаиЁ­  ®Ўа Ў влў -
Ґвбп ¬ ЄбЁ¬г¬ ¤ў ¦¤л.

     ’ҐЇҐам ॠ«Ё§гҐ¬ ®ЇҐа жЁЁ б ¤ҐаҐў®¬ Ї®§ЁжЁ©. Џ®§ЁжЁо  Ўг¤Ґ¬
ЇаҐ¤бв ў«пвм  б Ї®¬®ймо ЇҐаҐ¬Ґ­­®© k: 0..n (зЁб«® дҐа§Ґ©) Ё ¬ б-
бЁў  c: array [1..n] of 1..n (c [i] - Є®®а¤Ё­ вл дҐа§п  ­   i-®©
Ј®аЁ§®­в «Ё; ЇаЁ i > k §­ зҐ­ЁҐ c [i] а®«Ё ­Ґ ЁЈа Ґв). ЏаҐ¤Ї®« -
Ј Ґвбп,  зв®  ўбҐ Ї®§ЁжЁЁ ¤®ЇгбвЁ¬л (Ґб«Ё гЎа вм ўҐае­ҐЈ® дҐа§п,
®бв «м­лҐ ­Ґ Ўмов ¤агЈ ¤агЈ ).

  program queens;
  | const n = ...;
  | var
  |   k: 0..n;
  |   c: array [1..n] of 1..n;
  |
  | procedure begin_work; {­ з вм а Ў®вг}
  | begin
  | | k := 0;
  | end;
  |
  | function danger: boolean; {ўҐае­Ё© дҐа§м Ї®¤ Ў®Ґ¬}
  | | var b: boolean; i: integer;
  | begin
  | | if k <= 1 then begin
  | | | danger := false;
  | | end else begin
  | | | b := false; i := 1;
  | | | {b <=> ўҐае­Ё© дҐа§м Ї®¤ Ў®Ґ¬ дҐа§Ґ© б ­®¬Ґа ¬Ё < i}
  | | | while i <> k do begin
  | | | | b := b or (c[i]=c[k]) {ўҐавЁЄ «м}
  | | | |     or (abs(c[[i]-c[k]))=abs(i-k)); {¤Ё Ј®­ «м}
  | | | | i := i+ 1;
  | | | end;
  | | | danger := b;
  | | end;
  | end;
  |
  | function is_up: boolean {Ґбвм_ᢥаег}
  | begin
  | | is_up := (k < n) and not danger;
  | end;
  |
  | function is_right: boolean {Ґбвм_бЇа ў }
  | begin
  | | is_right := (k > 0) and (c[k] < n);
  | end;
  | {ў®§¬®¦­  ®иЁЎЄ : ЇаЁ k=0 ­Ґ ®ЇаҐ¤Ґ«Ґ­® c[k]}
  |
  | function is_down: boolean {Ґбвм_б­Ё§г}
  | begin
  | | is_up := (k > 0);
  | end;
  |
  | procedure up; {ўўҐае_­ «Ґў®}
  | begin {k < n}
  | | k := k + 1;
  | | c [k] := 1;
  | end;
  |
  | procedure right; {ўЇа ў®}
  | begin {k > 0,  c[k] < n}
  | | c [k] := c [k] + 1;
  | end;
  |
  | procedure down; {ў­Ё§}
  | begin {k > 0}
  | | k := k - 1;
  | end;
  |
  | procedure work; {®Ўа Ў®в вм}
  | | var i: integer;
  | begin
  | | if (k = n) and not danger then begin
  | | | for i := 1 to n do begin
  | | | | write ('<', i, ',' , c[i], '> ');
  | | | end;
  | | | writeln;
  | | end;
  | end;
  |
  | procedure UW; {ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм}
  | begin
  | | while is_up do begin
  | | | up;
  | | end
  | | work;
  | end;
  |
  begin
  | begin_work;
  | UW;
  | while is_down do begin
  | | if is_right then begin
  | | | right;
  | | | UW;
  | | end else begin
  | | | down;
  | | end;
  | end;
  end.

     3.1.7. ЏаЁўҐ¤Ґ­­ п Їа®Ја ¬¬  ва вЁв ¤®ў®«м­® ¬­®Ј®  ўаҐ¬Ґ­Ё
­   ўлЇ®«­Ґ­ЁҐ  Їа®ўҐаЄЁ  Ґбвм_ᢥаег  (Їа®ўҐаЄ ,  ­ е®¤Ёвбп  «Ё
ўҐае­Ё© дҐа§м Ї®¤ Ў®Ґ¬, вॡгҐв зЁб«  ¤Ґ©бвўЁ© Ї®ап¤Є  n). €§¬Ґ-
­Ёвм ॠ«Ё§ жЁо ®ЇҐа жЁ© б ¤ҐаҐў®¬ Ї®§ЁжЁ© в Є,  зв®Ўл  ўбҐ  ваЁ
Їа®ўҐаЄЁ Ґбвм_ᢥаег/бЇа ў /б­Ё§г Ё ᮮ⢥вбвўгойЁҐ Є®¬ ­¤л ваҐ-
Ў®ў «Ё  Ўл  Є®«ЁзҐбвў  ¤Ґ©бвўЁ©, ®Ја ­ЁзҐ­­®Ј® ­Ґ § ўЁбп饩 ®в n
Є®­бв ­в®©.

     ђҐиҐ­ЁҐ. „«п Є ¦¤®© ўҐавЁЄ «Ё, Є ¦¤®© ў®б室п饩  Ё  Є ¦¤®©
­Ёб室п饩 ¤Ё Ј®­ «Ё Ўг¤Ґ¬ еа ­Ёвм Ўг«ҐўбЄ®Ґ §­ зҐ­ЁҐ - ᢥ¤Ґ­Ёп
® ⮬, ­ е®¤Ёвбп «Ё ­  нв®© «Ё­ЁЁ дҐа§м (ўҐае­Ё© дҐа§м ­Ґ гзЁвл-
ў Ґвбп).  (‡ ¬ҐвЁ¬, зв® ў бЁ«г ¤®ЇгбвЁ¬®бвЁ Ї®§ЁжЁЁ ­  Є ¦¤®© Ё§
«Ё­Ё© ¬®¦Ґв Ўлвм ­Ґ Ў®«ҐҐ ®¤­®Ј® дҐа§п.).

     3.2.  ЋЎе®¤ ¤ҐаҐў  ў ¤агЈЁе § ¤ з е.

     3.2.1. €бЇ®«м§®ў вм ¬Ґв®¤ ®Ўе®¤  ¤ҐаҐў  ¤«п аҐиҐ­Ёп  б«Ґ¤г-
о饩   § ¤ зЁ:   ¤ ­  ¬ ббЁў  Ё§  n  楫ле  Ї®«®¦ЁвҐ«м­ле  зЁбҐ«
a[1]..a[n] Ё зЁб«® s; вॡгҐвбп г§­ вм, ¬®¦Ґв «Ё  зЁб«®  s  Ўлвм
ЇаҐ¤бв ў«Ґ­®  Є Є  б㬬   ­ҐЄ®в®але  Ё§ зЁбҐ« ¬ ббЁў  a. (Љ ¦¤®Ґ
зЁб«® ¬®¦­® ЁбЇ®«м§®ў вм ­Ґ Ў®«ҐҐ 祬 Ї® ®¤­®¬г а §г.)

     ђҐиҐ­ЁҐ. Ѓг¤Ґ¬ § ¤ ў вм k-Ї®§ЁжЁо Ї®б«Ґ¤®ў вҐ«м­®бвмо Ё§  k
Ўг«ҐўбЄЁе  §­ зҐ­Ё©,  ®ЇаҐ¤Ґ«пойЁе,  ўе®¤пв  «Ё  ў  бг¬¬г  зЁб« 
a[1]..a[k] Ё«Ё ­Ґ ўе®¤пв. Џ®§ЁжЁп ¤®ЇгбвЁ¬ , Ґб«Ё  ҐҐ  б㬬   ­Ґ
ЇаҐў®б室Ёв s.

     ‡ ¬Ґз ­ЁҐ. Џ® ба ў­Ґ­Ёо б Ї®«­л¬ ЇҐаҐЎ®а®¬ ўбҐе (2 ў б⥯Ґ-
­Ё  n) Ї®¤¬­®¦Ґбвў вгв Ґбвм ­ҐЄ®в®ал© ўлЁЈали. Њ®¦­® в Є¦Ґ ЇаҐ¤-
ў аЁвҐ«м­® ®вб®авЁа®ў вм ¬ ббЁў a ў гЎлў о饬 Ї®ап¤ЄҐ,     в Є¦Ґ
бзЁв вм  ­Ґ¤®ЇгбвЁ¬л¬Ё  ⥠ Ї®§ЁжЁЁ, ў Є®в®але б㬬  ®вЎа®иҐ­­ле
з«Ґ­®ў Ў®«миҐ, 祬 а §­®бвм бг¬¬л ўбҐе  з«Ґ­®ў  Ё  s.  Џ®б«Ґ¤­Ё©
ЇаЁс¬  ­ §лў ов  "¬Ґв®¤®¬  ўҐвўҐ©  Ё Ја ­Ёж". Ќ® ЇаЁ­жЁЇЁ «м­®Ј®
г«гз襭Ёп Ї® ба ў­Ґ­Ёо б Ї®«­л¬ ЇҐаҐЎ®а®¬ вгв ­Ґ Ї®«гз Ґвбп (нв 
§ ¤ з , Є Є Ј®ў®апв, NP-Ї®«­ ,  б¬.  Ї®¤а®Ў­®бвЁ  ў  Є­ЁЈҐ  Ђе®,
•®ЇЄа®дв  Ё “«м¬ ­  "Џ®бв஥­ЁҐ Ё  ­ «Ё§ ўлзЁб«ЁвҐ«м­ле  «Ј®аЁв-
¬®ў").  ’а ¤ЁжЁ®­­®Ґ  ­ §ў ­ЁҐ  нв®© § ¤ зЁ - "§ ¤ з  ® аоЄ§ ЄҐ"
(аоЄ§ Є ®ЎйҐ© Ја㧮Ї®¤кҐ¬­®бвмо s ­г¦­® гЇ Є®ў вм  Ї®¤  § ўп§Єг,
а бЇ®« Ј п  ЇаҐ¤¬Ґв ¬Ё  ўҐб   a[1]..a[n]).  ‘¬.  в Є¦Ґ ў Ј« ўҐ 7
(а §¤Ґ« ® ¤Ё­ ¬ЁзҐбЄ®¬ Їа®Ја ¬¬Ёа®ў ­ЁЁ)   «Ј®аЁв¬  Ґс  аҐиҐ­Ёп,
Ї®«Ё­®¬Ё «м­л© Ї® n+s.

     3.2.2.  ЏҐаҐзЁб«Ёвм ўбҐ Ї®б«Ґ¤®ў вҐ«м­®бвЁ Ё§ n ­г«Ґ©, Ґ¤Ё-
­Ёж Ё ¤ў®ҐЄ, ў Є®в®але ­ЁЄ Є п ЈагЇЇ  жЁда  ­Ґ  Ї®ўв®апҐвбп  ¤ў 
а §  Ї®¤ап¤ (­Ґв ЄгбЄ  ўЁ¤  XX).

     3.2.3.  Ђ­ «®ЈЁз­ п  § ¤ з  ¤«п Ї®б«Ґ¤®ў вҐ«м­®б⥩ ­г«Ґ© Ё
Ґ¤Ё­Ёж, ў Є®в®але ­ЁЄ Є п ЈагЇЇ  жЁда ­Ґ  Ї®ўв®апҐвбп  ваЁ  а § 
Ї®¤ап¤ (­Ґв ЄгбЄ  ўЁ¤  XXX).

     Љ нв®© ¦Ґ Є вҐЈ®аЁЁ ®в­®бпвбп § ¤ зЁ вЁЇ  "¬®¦­® «Ё б«®¦Ёвм
¤ ­­го дЁЈгаг Ё§ ЇҐ­в ¬Ё­®" Ё Ё¬ Ї®¤®Ў­лҐ. ‚  ­Ёе  ў ¦­®  㬥«®Ґ
б®Єа йҐ­ЁҐ  ЇҐаҐЎ®а  (ў®ўаҐ¬п а бЇ®§­ вм, зв® Ё¬Ґо饥бп а бЇ®«®-
¦Ґ­ЁҐ дЁЈга®Є 㦥 Їа®вЁў®аҐзЁв вॡ®ў ­Ёп¬, Ё Ї® нв®© ўҐвўЁ  Ї®-
ЁбЄ ­Ґ Їа®¤®«¦ вм).
        ѓ« ў  4. ‘®авЁа®ўЄ .

     4.1. Љў ¤а вЁз­лҐ  «Ј®аЁв¬л.

     4.1.1. Џгбвм a[1],  ...,  a[n]  -  жҐ«лҐ  зЁб« .  ’ॡгҐвбп
Ї®бва®Ёвм  ¬ ббЁў  b[1],  ..., b[n], ᮤҐа¦ йЁ© ⥠¦Ґ зЁб« , ¤«п
Є®в®але b[1] <= ... <= b[n].
     ‡ ¬Ґз ­ЁҐ. ‘।Ё зЁбҐ« a[1]...a[n] ¬®Јгв Ўлвм а ў­лҐ.  ’аҐ-
ЎгҐвбп,  зв®Ўл  Є ¦¤®Ґ 楫®Ґ зЁб«® ўе®¤Ё«® ў b[1]...b[n] бв®«мЄ®
¦Ґ а §, бЄ®«мЄ® Ё ў a[1]...a[n].

     ђҐиҐ­ЁҐ. “¤®Ў­® бзЁв вм, зв® зЁб«  a[1]..a[n] Ё  b[1]..b[n]
ЇаҐ¤бв ў«пов б®Ў®© ­ з «м­®Ґ Ё Є®­Ґз­®Ґ §­ зҐ­Ёп ¬ ббЁў  x. ’аҐ-
Ў®ў ­ЁҐ  "a  Ё b ᮤҐа¦ в ®¤­Ё Ё ⥠¦Ґ зЁб« " Ўг¤Ґв § ўҐ¤®¬® ўл-
Ї®«­Ґ­®, Ґб«Ё ў Їа®жҐбᥠࠡ®вл  ¬л  ®Ја ­ЁзЁ¬бп  ЇҐаҐбв ­®ўЄ ¬Ё
н«Ґ¬Ґ­в®ў x.
  ...
  k := 0;
  {k ­ Ё¬Ґ­миЁе н«Ґ¬Ґ­в®ў ¬ ббЁў  x гбв ­®ў«Ґ­л ­  бў®Ё ¬Ґбв }
  while k <> n do begin
  | s := k + 1; t := k + 1;
  | {x[s] - ­ Ё¬Ґ­миЁ© б।Ё x[k+1]...x[t] }
  | while t<>n do begin
  | | t := t + 1;
  | | if x[t] < x[s] then begin
  | | | s := t;
  | | end;
  | end;
  | {x[s] - ­ Ё¬Ґ­миЁ© б।Ё x[k+1]..x[n] }
  | ... ЇҐаҐбв ўЁвм x[s] Ё x[k+1];
  | k := k + 1;
  end;

     4.1.2.  „ вм ¤агЈ®Ґ аҐиҐ­ЁҐ § ¤ зЁ б®авЁа®ўЄЁ, ЁбЇ®«м§го饥
Ё­ў аЁ ­в {ЇҐаўлҐ k н«Ґ¬Ґ­в®ў гЇ®а冷祭л: x[1] <= ... <= x[k]}

     ђҐиҐ­ЁҐ.

  k:=1
  {ЇҐаўлҐ k н«Ґ¬Ґ­в®ў гЇ®а冷祭л}
  while k <> n do begin
  | {k+1-л© н«Ґ¬Ґ­в Їа®¤ўЁЈ Ґвбп Є ­ з «г, Ї®Є  ­Ґ § ©¬Ґв
  |   ­ ¤«Ґ¦ йҐЈ® ¬Ґбв  }
  | t := k+1;
  | {x[1] <= ... <= x[t-1] Ё x[t-1], x[t] <= ... <= x[k+1] }
  | while (t > 1) and (x[t] < x[t-1]) do begin
  | | ... Ї®¬Ґ­пвм x[t-1] Ё x[t];
  | | t := t - 1;
  | end;
  end;

     ‡ ¬Ґз ­ЁҐ. „ҐдҐЄв Їа®Ја ¬¬л: ЇаЁ «®¦­®¬ ўла ¦Ґ­ЁЁ (t  >  1)
Їа®ўҐаЄ  x[t] < x[t-1] вॡгҐв ­ҐбгйҐбвўго饣® §­ зҐ­Ёп x[0].
     ЋЎ   ЇаҐ¤«®¦Ґ­­ле аҐиҐ­Ёп вॡгов зЁб«  ¤Ґ©бвўЁ©, Їа®Ї®ажЁ-
®­ «м­®Ј® n*n. ‘гйҐбвўгов Ў®«ҐҐ нд䥪⨢­лҐ  «Ј®аЁв¬л.

     4.2. Ђ«Ј®аЁв¬л Ї®ап¤Є  n log n.

     4.2.1. ЏаҐ¤«®¦Ёвм  «Ј®аЁв¬ б®авЁа®ўЄЁ, зЁб«® ¤Ґ©бвўЁ© Є®в®-
а®Ј®  Ўл«®  Ўл  Ї®ап¤Є   n  log  n,  в®  Ґбвм ­Ґ ЇаҐў®б室Ё«® Ўл
C*n*log(n) ¤«п ­ҐЄ®в®а®Ј® C Ё ¤«п ўбҐе n.

     Њл ЇаҐ¤«®¦Ё¬ ¤ў  аҐиҐ­Ёп.

     ђҐиҐ­ЁҐ 1. (б®авЁа®ўЄ  б«Ёп­ЁҐ¬).
     Џгбвм  k  -  Ї®«®¦ЁвҐ«м­®Ґ  楫®Ґ  зЁб«®.  ђ §®ЎмҐ¬  ¬ ббЁў
x[1]..x[n]  ­   ®в१ЄЁ  ¤«Ё­л  k.  (ЏҐаўл©  - x[1]..x[k], § вҐ¬
x[k+1]..x[2k] Ё в.¤.) Џ®б«Ґ¤­Ё© ®в१®Є Ўг¤Ґв ­ҐЇ®«­л¬,  Ґб«Ё  n
­Ґ  ¤Ґ«Ёвбп ­  k. Ќ §®ўҐ¬ ¬ ббЁў k-гЇ®а冷祭­л¬, Ґб«Ё Є ¦¤л© Ё§
нвЁе ®в१Є®ў гЇ®а冷祭. ‹оЎ®© ¬ ббЁў 1-гЇ®а冷祭. …б«Ё ¬ ббЁў
k-гЇ®а冷祭 Ё n<=k, в® ®­ гЇ®а冷祭.
     Њл  ®ЇЁиҐ¬,  Є Є  ЇаҐ®Ўа §®ў вм  k-гЇ®а冷祭­л©  ¬ ббЁў  ў
2k-гЇ®а冷祭­л© (Ё§ вҐе ¦Ґ н«Ґ¬Ґ­в®ў). ‘ Ї®¬®ймо нв®Ј® ЇаҐ®Ўа -
§®ў ­Ёп  «Ј®аЁв¬ § ЇЁблў Ґвбп в Є:

  k:=1;
  {¬ ббЁў x пў«пҐвбп k-гЇ®а冷祭­л¬}
  while k < n do begin
  | .. ЇаҐ®Ўа §®ў вм k-гЇ®а冷祭­л© ¬ ббЁў ў 2k-гЇ®а冷祭­л©;
  | k := 2 * k;
  end;

     ’ॡ㥬®Ґ  ЇаҐ®Ўа §®ў ­ЁҐ  б®бв®Ёв ў ⮬,зв® ¬л ¬­®Ј®Єа в­®
"б«Ёў Ґ¬" ¤ў  гЇ®а冷祭­ле ®в१Є  ¤«Ё­л ­Ґ  Ў®«миҐ  k  ў  ®¤Ё­
гЇ®а冷祭­л©  ®в१®Є. Џгбвм Їа®жҐ¤га  б«Ёп­ЁҐ (p,q,r: integer)
ЇаЁ p <=q <= r б«Ёў Ґв ®в१ЄЁ  x[p+1]..x[q]  Ё  x[q+1]..x[r]  ў
гЇ®а冷祭­л©  ®в१®Є x[p+1]..x[r] (­Ґ § ва ЈЁў п ¤агЈЁе з б⥩
¬ ббЁў  x).
                  p               q               r
            -------|---------------|---------------|-------
                   | гЇ®а冷祭­л© | гЇ®а冷祭­л© |
            -------|---------------|---------------|-------
                                  |
                                  |
                                  V
            -------|-------------------------------|-------
                   |     гЇ®а冷祭­л©             |
            -------|-------------------------------|-------

’®Ј¤  ЇаҐ®Ўа §®ў ­ЁҐ k-гЇ®а冷祭­®Ј® ¬ ббЁў  ў 2k-гЇ®а冷祭­л©
®бгйҐбвў«пҐвбп в Є:

  t:=0;
  {t Єа в­® 2k Ё«Ё t = n, x[1]..x[t] пў«пҐвбп
   2k-гЇ®а冷祭­л¬; ®бв в®Є ¬ ббЁў  x ­Ґ Ё§¬Ґ­Ё«бп}
  while t + k < n do begin
  | p := t;
  | q := t+k;
  | ...r := min (t+2*k, n); {ў Ї бЄ «Ґ ­Ґв дг­ЄжЁЁ min }
  | б«Ёп­ЁҐ (p,q,r);
  | t := r;
  end;

‘«Ёп­ЁҐ вॡгҐв ўбЇ®¬®Ј вҐ«м­®Ј® ¬ ббЁў  ¤«п § ЇЁбЁ  १г«мв в®ў
б«Ёп­Ёп  -  ®Ў®§­ зЁ¬ ҐЈ® b. —ҐаҐ§ p0 Ё q0 ®Ў®§­ зЁ¬ ­®¬Ґа  Ї®б-
«Ґ¤­Ёе н«Ґ¬Ґ­в®ў гз бвЄ®ў, Ї®¤ўҐаЈиЁебп б«Ёп­Ёо, s0 -  Ї®б«Ґ¤­Ё©
§ ЇЁб ­­л©  ў  ¬ ббЁў b н«Ґ¬Ґ­в. Ќ  Є ¦¤®¬ и ЈҐ б«Ёп­Ёп Їа®Ё§ў®-
¤Ёвбп ®¤­® Ё§ ¤ўге ¤Ґ©бвўЁ©:

        b[s0+1]:=x[p0+1];
        p0:=p0+1;
        s0:=s0+1;
Ё«Ё
        b[s0+1]:=x[q0+1];
        q0:=q0+1;
        s0:=s0+1;

ЏҐаў®Ґ ¤Ґ©бвўЁҐ (ў§пвЁҐ н«Ґ¬Ґ­в  Ё§ ЇҐаў®Ј® ®в१Є ) ¬®¦Ґв  Їа®-
Ё§ў®¤Ёвмбп ЇаЁ ¤ўге гб«®ўЁпе:
    (1) ЇҐаўл© ®в१®Є ­Ґ Є®­зЁ«бп (p0 < q);
    (2) ўв®а®© ®в१®Є Є®­зЁ«бп (q0 = r)  Ё«Ё  ­Ґ  Є®­зЁ«бп,  ­®
н«Ґ¬Ґ­в ў ­Ґ¬ ­Ґ ¬Ґ­миҐ [(q0 < r) Ё (x[p0+1] <= x[q0+1])].
     Ђ­ «®ЈЁз­® ¤«п ўв®а®Ј® ¤Ґ©бвўЁп. €в Є, Ї®«гз Ґ¬

  p0 := p; q0 := q; s0 := p;
  while (p0 <> q) or (q0 <> r) do begin
  | if (p0 < q) and ((q0 = r) or ((q0 < r) and
  | |                (x[p0+1] <= x[q0+1]))) then begin
  | | b [s0+1] := x [p0+1];
  | | p0 := p0+1;
  | | s0 := s0+1;
  | end else begin
  | | {(q0 < r) and ((p0 = q) or ((p0<q) and
  | |   (x[p0+1] >= x[q0+1])))}
  | | b [s0+1] := x [q0+1];
  | | q0 := q0 + 1;
  | | s0 := s0 + 1;
  | end;
  end;

(…б«Ё ®Ў  ®в१Є  ­Ґ Є®­зҐ­л Ё ЇҐаўлҐ ­ҐўлЎа ­­лҐ н«Ґ¬Ґ­вл ў ­Ёе
а ў­л, в® ¤®ЇгбвЁ¬л ®Ў  ¤Ґ©бвўЁп; ў Їа®Ја ¬¬Ґ ўлЎа ­® ЇҐаў®Ґ.)
     Џа®Ја ¬¬   Ё¬ҐҐв  ЇаЁўлз­л© ¤ҐдҐЄв: ®Ўа йҐ­ЁҐ Є ­ҐбгйҐбвўг-
ойЁ¬ н«Ґ¬Ґ­в ¬ ¬ ббЁў  ЇаЁ ўлзЁб«Ґ­ЁЁ Ўг«ҐўбЄЁе ўла ¦Ґ­Ё©.

     ђҐиҐ­ЁҐ 2 (б®авЁа®ўЄ  ¤ҐаҐў®¬).
     Ќ аЁб㥬 "Ї®«­®Ґ ¤ў®Ёз­®Ґ ¤ҐаҐў®"  -  Є авЁ­Єг,  ў  Є®в®а®©
б­Ё§г ®¤Ё­ Єа㦮Є, Ё§ ­ҐЈ® ўл室пв бв५ЄЁ ў ¤ў  ¤агЈЁе, Ё§ Є ¦-
¤®Ј® - ў ¤ў  ¤агЈЁе Ё в Є ¤ «ҐҐ:

               .............
                 o  o o  o
                  \/   \/
                   o   o
                    \ /
                     o


     Ѓг¤Ґ¬  Ј®ў®аЁвм, зв® бв५ЄЁ ўҐ¤гв "®в ®вж®ў Є бл­®ўмп¬": г
Є ¦¤®Ј® Єаг¦Є  ¤ў  бл­  Ё ®¤Ё­ ®вҐж (Ґб«Ё  Єа㦮Є  ­Ґ  ўҐае­Ё©).
ЏаҐ¤Ї®«®¦Ё¬  ¤«п  Їа®бв®вл, зв® Є®«ЁзҐбвў® Ї®¤«Ґ¦ йЁе б®авЁа®ўЄҐ
зЁбҐ« Ґбвм б⥯Ґ­м ¤ў®©ЄЁ, Ё ®­Ё ¬®Јгв § Ї®«­Ёвм ®¤Ё­  Ё§  а冷ў
楫ЁЄ®¬. ‡ ЇЁиҐ¬ Ёе вг¤ . ‡ вҐ¬ § Ї®«­Ё¬ з бвм ¤ҐаҐў  Ї®¤ ­Ё¬ Ї®
Їа ўЁ«г:
   зЁб«® ў Єаг¦ЄҐ = ¬Ё­Ё¬г¬ Ё§ зЁбҐ« ў Єаг¦Є е-бл­®ўмпе
’Ґ¬  б ¬л¬  ў  Є®а­Ґ ¤ҐаҐў  (­Ё¦­Ґ¬ Єаг¦ЄҐ) Ўг¤Ґв § ЇЁб ­® ¬Ё­Ё-
¬ «м­®Ґ зЁб«® ў® ўбҐ¬ ¬ ббЁўҐ.
     €§л¬Ґ¬ Ё§ б®авЁа㥬®Ј®  ¬ ббЁў   ¬Ё­Ё¬ «м­л©  н«Ґ¬Ґ­в.  „«п
нв®Ј®  ҐЈ®  ­ ¤® ў­ з «Ґ ­ ©вЁ. ќв® ¬®¦­® ᤥ« вм, Ё¤п ®в Є®а­п:
®в ®вж  ЇҐаҐе®¤Ё¬ Є ⮬г бл­г, Ј¤Ґ § ЇЁб ­® в® ¦Ґ  зЁб«®.  €§кпў
¬Ё­Ё¬ «м­л©  н«Ґ¬Ґ­в,  § ¬Ґ­Ё¬  ҐЈ®  бЁ¬ў®«®¬  "ЎҐбЄ®­Ґз­®бвм" Ё
бЄ®а४вЁа㥬 Ў®«ҐҐ ­Ё§ЄЁҐ пагбл (¤«п нв®Ј®  ­ ¤®  б­®ў   Їа®©вЁ
Їгвм Є Є®а­о). ЏаЁ н⮬ бзЁв Ґ¬, зв® ¬Ё­Ё¬г¬ Ё§ n Ё ЎҐбЄ®­Ґз­®б-
вЁ  а ўҐ­  n. ’®Ј¤  ў Є®а­Ґ Ї®пўЁвбп ўв®а®© Ї® ўҐ«ЁзЁ­Ґ н«Ґ¬Ґ­в,
¬л Ё§л¬ Ґ¬ ҐЈ®, § ¬Ґ­пп ЎҐбЄ®­Ґз­®бвмо Ё Є®а४вЁагп ¤ҐаҐў®. ’ Є
Ї®б⥯Ґ­­® ¬л Ё§л¬Ґ¬ ўбҐ н«Ґ¬Ґ­вл ў Ї®ап¤ЄҐ ў®§а бв ­Ёп, Ї®Є   ў
Є®а­Ґ ­Ґ ®бв ­Ґвбп ЎҐбЄ®­Ґз­®бвм.
     ЏаЁ § ЇЁбЁ нв®Ј®  «Ј®аЁв¬  Ї®«Ґ§­® ­г¬Ґа®ў вм Єа㦮窨 зЁб-
« ¬Ё 1, 2, ...: бл­®ўмп¬Ё Єаг¦Є  ­®¬Ґа n пў«повбп Єаг¦ЄЁ  2*n  Ё
2*n+1. Џ®¤а®Ў­®Ґ Ё§«®¦Ґ­ЁҐ нв®Ј®  «Ј®аЁв¬  ¬л ®ЇгбвЁ¬, Ї®бЄ®«мЄг
¬л  Ё§«®¦Ё¬  Ў®«ҐҐ  нд䥪⨢­л©  ў аЁ ­в,  ­Ґ вॡгойЁ© ¤®Ї®«­Ё-
⥫쭮© Ї ¬пвЁ, Єа®¬Ґ Є®­Ґз­®Ј® зЁб«  ЇҐаҐ¬Ґ­­ле (ў ¤®Ї®«­Ґ­ЁЁ Є
б®авЁа㥬®¬г ¬ ббЁўг).
     Њл Ўг¤Ґ¬ § ЇЁблў вм б®авЁагҐ¬лҐ зЁб«  ў® ўбҐе ўҐаиЁ­ е  ¤Ґ-
ॢ ,    ­Ґ в®«мЄ® ­  ўҐае­Ґ¬ га®ў­Ґ. Џгбвм x[1]..x[n] - ¬ ббЁў,
Ї®¤«Ґ¦ йЁ© б®авЁа®ўЄҐ. ‚ҐаиЁ­ ¬Ё ¤ҐаҐў  Ўг¤гв зЁб«  ®в 1 ¤® n; ®
зЁб«Ґ x[i] ¬л Ўг¤Ґ¬ Ј®ў®аЁвм Є Є ® зЁб«Ґ, бв®п饬 ў ўҐаиЁ­Ґ i. ‚
Їа®жҐбᥠб®авЁа®ўЄЁ Є®«ЁзҐбвў® ўҐаиЁ­ ¤ҐаҐў  Ўг¤Ґв  б®Єа й вмбп.
—Ёб«® ўҐаиЁ­ ⥪г饣® ¤ҐаҐў  Ўг¤Ґ¬ еа ­Ёвм ў ЇҐаҐ¬Ґ­­®© k. ’ ЄЁ¬
®Ўа §®¬,  ў  Їа®жҐбᥠࠡ®вл  «Ј®аЁв¬  ¬ ббЁў x[1]..x[n] ¤Ґ«Ёвбп
­  ¤ўҐ з бвЁ: ў x[1]..x[k] еа ­пвбп зЁб«  ­  ¤ҐаҐўҐ,   ў  x[k+1]
.. x[n] еа ­Ёвбп 㦥 ®вб®авЁа®ў ­­ п ў Ї®ап¤ЄҐ ў®§а бв ­Ёп з бвм
¬ ббЁў  - н«Ґ¬Ґ­вл, 㦥 § ­пўиЁҐ бў®Ґ § Є®­­®Ґ ¬Ґбв®.
     Ќ  Є ¦¤®¬ и ЈҐ  «Ј®аЁв¬ Ўг¤Ґв Ё§л¬ вм ¬ ЄбЁ¬ «м­л©  н«Ґ¬Ґ­в
¤ҐаҐў  Ё Ї®¬Ґй вм ҐЈ® ў ®вб®авЁа®ў ­­го з бвм, ­  ®бў®Ў®¤ЁўиҐҐбп
ў १г«мв вҐ б®Єа йҐ­Ёп ¤ҐаҐў  ¬Ґбв®.
     „®Ј®ў®аЁ¬бп ® вҐа¬Ё­®«®ЈЁЁ. ‚ҐаиЁ­ ¬Ё ¤ҐаҐў  бзЁв овбп зЁб-
«  ®в 1 ¤® ⥪г饣® §­ зҐ­Ёп ЇҐаҐ¬Ґ­­®© k. “  Є ¦¤®©  ўҐаиЁ­л  s
¬®Јгв  Ўлвм  бл­®ўмп 2s Ё 2s+1. …б«Ё ®Ў  нвЁе зЁб«  Ў®«миҐ k, в®
бл­®ўҐ© ­Ґв; в Є п ўҐаиЁ­  ­ §лў Ґвбп «Ёб⮬. …б«Ё 2s=k, в® ўҐа-
иЁ­  s Ё¬ҐҐв а®ў­® ®¤­®Ј® бл­  (2s).
     „«п Є ¦¤®Ј® s Ё§ 1..k а бᬮваЁ¬ "Ї®¤¤ҐаҐў®" б Є®а­Ґ¬ ў  s:
®­®  ᮤҐа¦Ёв ўҐаиЁ­г s Ё ўбҐе ҐҐ Ї®в®¬Є®ў (бл­®ўҐ©, бл­®ўҐ© бл-
­®ўҐ© Ё в.¤. - ¤® вҐе Ї®а, Ї®Є  ¬л ­Ґ ўл©¤Ґ¬ Ё§  ®в१Є   1..k).
‚ҐаиЁ­г  s Ўг¤Ґ¬ ­ §лў вм ॣг«па­®©, Ґб«Ё бв®п饥 ў ­Ґ© зЁб«® -
¬ ЄбЁ¬ «м­л© н«Ґ¬Ґ­в s-Ї®¤¤ҐаҐў ; s-Ї®¤¤ҐаҐў®  ­ §®ўҐ¬  ॣг«па-
­л¬,  Ґб«Ё  ўбҐ  ҐЈ® ўҐаиЁ­л ॣг«па­л. (‚ з бв­®бвЁ, «оЎ®© «Ёбв
®Ўа §гҐв ॣг«па­®Ґ ®¤­®н«Ґ¬Ґ­в­®Ґ Ї®¤¤ҐаҐў®.)

     ‘奬   «Ј®аЁв¬  в Є®ў :

  k:= n
  ... ‘¤Ґ« вм 1-Ї®¤¤ҐаҐў® ॣг«па­л¬;
  {x[1],..,x[k] <= x[k+1] <= ... <= x[n]; 1-Ї®¤¤ҐаҐў® ॣг«па­®,
   ў з бв­®бвЁ, x[1] - ¬ ЄбЁ¬ «м­л© н«Ґ¬Ґ­в б।Ё x[1]..x[k]}
  while k <> 1 do begin
  | ... ®Ў¬Ґ­пвм ¬Ґбв ¬Ё x[1] Ё x[k];
  | k := k - 1;
  | {x[1]..x[k-1] <= x[k] <=...<= x[n]; 1-Ї®¤¤ҐаҐў® ॣг-
  |   «па­® ўҐ§¤Ґ, Єа®¬Ґ, ў®§¬®¦­®, б ¬®Ј® Є®а­п }
  | ... ў®ббв ­®ўЁвм ॣг«па­®бвм 1-Ї®¤¤ҐаҐў  ўбо¤г
  end;

‚ Є зҐб⢥ ўбЇ®¬®Ј вҐ«м­®© Їа®жҐ¤гал ­ ¬  Ї®­ ¤®ЎЁвбп  Їа®жҐ¤га 
ў®ббв ­®ў«Ґ­Ёп ॣг«па­®бвЁ s-Ї®¤¤ҐаҐў  ў Є®а­Ґ. ‚®в ®­ :

  {s-Ї®¤¤ҐаҐў® ॣг«па­® ўҐ§¤Ґ, Єа®¬Ґ, ў®§¬®¦­®, Є®а­п}
  t := s;
  {s-Ї®¤¤ҐаҐў® ॣг«па­® ўҐ§¤Ґ, Єа®¬Ґ, ў®§¬®¦­®, ўҐаиЁ­л t}
  while ((2*t+1 <= k) and (x[2*t+1] > x[t])) or
  |     ((2*t <= k) and (x[2*t] > x[t])) do begin
  | if (2*t+1 <= k) and (x[2*t+1] >= x[2*t]) then begin
  | | ... ®Ў¬Ґ­пвм x[t] Ё x[2*t+1];
  | | t := 2*t + 1;
  | end else begin
  | | ... ®Ў¬Ґ­пвм x[t] Ё x[2*t];
  | | t := 2*t;
  | end;
  end;

     —в®Ўл гЎҐ¤Ёвмбп ў Їа ўЁ«м­®бвЁ нв®© Їа®жҐ¤гал, Ї®б¬®ваЁ¬ ­ 
­ҐҐ Ї®ў­Ё¬ вҐ«м­ҐҐ. Џгбвм ў s-Ї®¤¤ҐаҐўҐ ўбҐ ўҐаиЁ­л, Єа®¬Ґ а §ўҐ
зв® ўҐаиЁ­л t, ॣг«па­л. ђ бᬮваЁ¬ бл­®ўҐ© ўҐаиЁ­л t. Ћ­Ё  аҐ-
Јг«па­л, Ё Ї®в®¬г ᮤҐа¦ в ­ ЁЎ®«миЁҐ зЁб«  ў бў®Ёе Ї®¤¤ҐаҐўмпе.
’ ЄЁ¬  ®Ўа §®¬,  ­   а®«м  ­ ЁЎ®«м襣® зЁб«  ў t-Ї®¤¤ҐаҐўҐ ¬®Јгв
ЇаҐвҐ­¤®ў вм зЁб«® ў б ¬®© ўҐаиЁ­Ґ t Ё зЁб«  ў  ҐҐ  бл­®ўмпе. (‚
ЇҐаў®¬ б«гз Ґ ўҐаиЁ­  t ॣг«па­ , Ё ўбҐ ў Ї®ап¤ЄҐ.) ‚ нвЁе вҐа-
¬Ё­ е жЁЄ« ¬®¦­® § ЇЁб вм в Є:

  while ­ ЁЎ®«м襥 зЁб«® ­Ґ ў t,   ў ®¤­®¬ Ё§ бл­®ўҐ© do begin
  | if ®­® ў Їа ў®¬ бл­Ґ then begin
  | | Ї®¬Ґ­пвм t б ҐҐ Їа ўл¬ бл­®¬; t:= Їа ўл© бл­
  | end else begin {­ ЁЎ®«м襥 зЁб«® - ў «Ґў®¬ бл­Ґ}
  | | Ї®¬Ґ­пвм t б ҐҐ «Ґўл¬ бл­®¬; t:= «Ґўл© бл­
  | end
  end

Џ®б«Ґ  ®Ў¬Ґ­   ўҐаиЁ­   t  бв ­®ўЁвбп ॣг«па­®© (ў ­ҐҐ Ї®Ї ¤ Ґв
¬ ЄбЁ¬ «м­®Ґ зЁб«® t-Ї®¤¤ҐаҐў ). ЌҐ ЇаЁ­пўиЁ© гз бвЁп  ў  ®Ў¬Ґ­Ґ
бл­ ®бв Ґвбп ॣг«па­л¬,   ЇаЁ­пўиЁ© гз бвЁҐ ¬®¦Ґв Ё ­Ґ Ўлвм аҐ-
Јг«па­л¬. ‚ ®бв «м­ле ўҐаиЁ­ е s-Ї®¤¤ҐаҐў  ­Ґ Ё§¬Ґ­Ё«Ёбм ­Ё зЁб-
« ,  ­Ё Ї®¤¤ҐаҐўмп Ёе Ї®в®¬Є®ў (а §ўҐ зв® ¤ў  н«Ґ¬Ґ­в  Ї®¤¤ҐаҐў 
ЇҐаҐбв ўЁ«Ёбм), в Є з⮠ॣгпа­®бвм ­Ґ ­ агиЁ« бм.

   ќв  ¦Ґ Їа®жҐ¤га  ¬®¦Ґв ЁбЇ®«м§®ў вмбп ¤«п в®Ј®, зв®Ўл ᤥ« вм
1-Ї®¤¤ҐаҐў® ॣг«па­л¬ ­  ­ з «м­®© бв ¤ЁЁ б®авЁа®ўЄЁ:

  k := n;
  u := n;
  {ўбҐ s-Ї®¤¤ҐаҐўмп б s>u ॣг«па­л }
  while u<>0 do begin
  | {u-Ї®¤¤ҐаҐў® ॣг«па­® ўҐ§¤Ґ, Єа®¬Ґ а §ўҐ зв® Є®а­п}
  | ... ў®ббв ­®ўЁвм ॣг«па­®бвм u-Ї®¤¤ҐаҐў  ў Є®а­Ґ;
  | u:=u-1;
  end;

     ’ҐЇҐам § ЇЁиҐ¬ Їа®жҐ¤гаг б®авЁа®ўЄЁ ­  Ї бЄ «Ґ  (ЇаҐ¤Ї®« -
Ј п,  зв®  n  -  Є®­бв ­в ,  x  Ё¬ҐҐв вЁЇ arr = array [1..n] of
integer).

  procedure sort (var x: arr);
  | var u, k: integer;
  | procedure exchange(i, j: integer);
  | | var tmp: integer;
  | | begin
  | | tmp  := x[i];
  | | x[i] := x[j];
  | | x[j] := tmp;
  | end;
  | procedure restore (s: integer);
  | | var t: integer;
  | | begin
  | | t:=s;
  | | while ((2*t+1 <= k) and (x[2*t+1] > x[t]) ) or
  | | |     ((2*t <= k) and (x[2*t] > x[t])) do begin
  | | | if (2*t+1 <= k) and (x[2*t+1] >= x[2*t]) then begin
  | | | | exchange (t, 2*t+1);
  | | | | t := 2*t+1;
  | | | end else begin
  | | | | exchange (t, 2*t);
  | | | | t := 2*t;
  | | | end;
  | | end;
  | end;
  begin
  | k:=n;
  | u:=n;
  | while u <> 0 do begin
  | | restore (u);
  | | u := u - 1;
  | end;
  | while k <> 1 do begin
  | | exchange (1, k);
  | | k := k - 1;
  | | restore (1);
  | end;
  end;

     ЌҐбЄ®«мЄ® § ¬Ґз ­Ё©.

     ЊҐв®¤, ЁбЇ®«м§®ў ­­л© ЇаЁ б®авЁа®ўЄҐ ¤ҐаҐў®¬, Ўлў Ґв Ї®«Ґ§-
­л¬ ў ¤агЈЁе б«гз е. (‘¬. ў Ј« ўҐ 6 (® вЁЇ е ¤ ­­ле)  а §¤Ґ«  ®Ў
®зҐаҐ¤Ё б ЇаЁ®аЁвҐв ¬Ё.)

     ‘®авЁа®ўЄ  б«Ёп­ЁҐ¬ е®а®и  ⥬, зв® ®­  ­   вॡгҐв,  зв®Ўл
ўҐбм  б®авЁагҐ¬л©  ¬ ббЁў  Ї®¬Ґй «бп ў ®ЇҐа вЁў­®© Ї ¬пвЁ. Њ®¦­®
б­ з «  ®вб®авЁа®ў вм в ЄЁҐ ЄгбЄЁ, Є®в®алҐ Ї®¬Ґй овбп  ў  Ї ¬пвЁ
(­ ЇаЁ¬Ґа, б Ї®¬®ймо ¤ҐаҐў ),   § вҐ¬ б«Ёў вм Ї®«г祭­лҐ д ©«л.

     …йҐ ®¤Ё­ Їа ЄвЁзҐбЄЁ ў ¦­л©  «Ј®аЁв¬ б®авЁа®ўЄЁ в Є®ў: зв®-
Ўл  ®вб®авЁа®ў вм ¬ ббЁў, ўлЎҐаҐ¬ б«гз ©­л© ҐЈ® н«Ґ¬Ґ­в b, Ё а -
§®ЎкҐ¬ ¬ ббЁў ­  ваЁ з бвЁ: ¬Ґ­миЁҐ b, а ў­лҐ  b  Ё  Ў®«миЁҐ  b.
(ќв   § ¤ з   ЇаЁўҐ¤Ґ­  ў Ј« ўҐ ® ¬ ббЁў е.) ’ҐЇҐам ®бв «®бм ®в-
б®авЁа®ў вм ЇҐаўго Ё ваҐвмо з бвЁ: нв® ¤Ґ« Ґвбп ⥬ ¦Ґ бЇ®б®Ў®¬.
‚६п а Ў®вл нв®Ј®  «Ј®аЁв¬  - б«гз ©­ п ўҐ«ЁзЁ­ ;  ¬®¦­®  ¤®Є -
§ вм, зв® ў б।­Ґ¬ ®­ а Ў®в Ґв ­Ґ Ў®«миҐ C*n*log n. Ќ  Їа ЄвЁЄҐ
- ®­ ®¤Ё­ Ё§ б ¬ле Ўлбвале. (Њл ҐйҐ ўҐа­Ґ¬бп Є ­Ґ¬г, ЇаЁўҐ¤п ҐЈ®
४габЁў­го Ё ­ҐаҐЄгабЁў­го ॠ«Ё§ жЁЁ.)

     Ќ Є®­Ґж, ®в¬ҐвЁ¬, зв® б®авЁа®ўЄ  §  ўаҐ¬п Ї®ап¤Є  C*n*log n
¬®¦Ґв Ўлвм ўлЇ®«­Ґ­  б Ї®¬®ймо вҐе­ЁЄЁ бЎ « ­бЁа®ў ­­ле ¤ҐаҐўмҐў
(б¬.  Ј« ўг  12), ®¤­ Є® Їа®Ја ¬¬л вгв б«®¦­ҐҐ Ё Є®­бв ­в  C ¤®-
ў®«м­® ўҐ«ЁЄ .

     4.3. ЏаЁ¬Ґ­Ґ­Ёп б®авЁа®ўЄЁ.

     4.3.1. Ќ ©вЁ Є®«ЁзҐбвў®  а §«Ёз­ле  зЁбҐ«  б।Ё  н«Ґ¬Ґ­в®ў
¤ ­­®Ј® ¬ ббЁў . —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  n*log n. (ќв  § ¤ з  㦥
Ўл«  ў Ј« ўҐ ® ¬ ббЁў е.)

     ђҐиҐ­ЁҐ. Ћвб®авЁа®ў вм зЁб« ,   § вҐ¬ Ї®бзЁв вм  Є®«ЁзҐбвў®
а §«Ёз­ле, Їа®б¬ ваЁў п н«Ґ¬Ґ­вл ¬ ббЁў  Ї® Ї®ап¤Єг.

     4.3.2. „ ­® n ®в१Є®ў [a[i],  b[i]]  ­   Їаאַ©  (i=1..n).
Ќ ©вЁ ¬ ЄбЁ¬ «м­®Ґ k, ¤«п Є®в®а®Ј® бгйҐбвўгҐв в®зЄ  Їаאַ©, Ї®Є-
алв п k ®в१Є ¬Ё ("¬ ЄбЁ¬ «м­®Ґ зЁб«® б«®Ґў"). —Ёб«® ¤Ґ©бвўЁ© -
Ї®ап¤Є  n*log n.

     ђҐиҐ­ЁҐ. “Ї®а冷稬 ўбҐ «ҐўлҐ Ё Їа ўлҐ Є®­жл ®в१Є®ў ў¬Ґб-
⥠ (ЇаЁ н⮬ «Ґўл© Є®­Ґж бзЁв Ґвбп ¬Ґ­миҐ Їа ў®Ј® Є®­ж , а бЇ®-
«®¦Ґ­­­®Ј® ў в®© ¦Ґ в®зЄҐ Їаאַ©). „ «ҐҐ ¤ўЁЈ Ґ¬бп б«Ґў   ­ Їа -
ў®,  бзЁв п  зЁб«®  б«®Ґў.  ‚бваҐзҐ­­л© «Ґўл© Є®­Ґж 㢥«ЁзЁў Ґв
зЁб«®  б«®Ґў  ­  1, Їа ўл© - 㬥­ми Ґв. Ћв¬ҐвЁ¬, зв® ЇаЁ¬лЄ ойЁҐ
¤агЈ Є ¤агЈг ®в१ЄЁ ®Ўа Ў влў овбп Їа ўЁ«м­®: б­ з «  Ё¤Ґв  «Ґ-
ўл© Є®­Ґж (Їа ў®Ј® ®в१Є ),   § вҐ¬ - Їа ўл© («Ґў®Ј® ®в१Є ).

     4.3.3. „ ­® n в®зҐЄ ­  Ї«®бЄ®бвЁ. “Є § вм (n-1)-§ўҐ­­го ­Ґ-
б ¬®ЇҐаҐбҐЄ ойгобп ­Ґ§ ¬Є­гвго «®¬ ­го, Їа®е®¤пйго зҐаҐ§ ўбҐ нвЁ
в®зЄЁ.  (‘®бҐ¤­Ё¬  ®в१Є ¬  «®¬ ­®© а §аҐи Ґвбп «Ґ¦ вм ­  ®¤­®©
Їаאַ©.) —Ёб«® ¤Ґ©бвўЁ© Ї®ап¤Є  n*log n.

     ђҐиҐ­ЁҐ. “Ї®а冷稬 в®зЄЁ Ї®  x-Є®®а¤Ё­ вҐ,     ЇаЁ  а ў­ле
x-Є®®а¤Ё­ в е  - Ї® y-Є®®а¤Ё­ вҐ. ‚ в Є®¬ Ї®ап¤ЄҐ Ё ¬®¦­® Їа®ў®-
¤Ёвм «®¬ ­го.

     4.3.4. ’  ¦Ґ § ¤ з , Ґб«Ё «®¬ ­ п ¤®«¦­  Ўлвм § ¬Є­гв®©.

     ђҐиҐ­ЁҐ. ‚®§м¬Ґ¬ б ¬го «Ґўго в®зЄг (в.Ґ. в®зЄг б ­ Ё¬Ґ­м襩
x-Є®®а¤Ё­ в®©) Ё Їа®ўҐ¤Ґ¬ Ё§ ­ҐҐ «гзЁ ў®  ўбҐ  ®бв «м­лҐ  в®зЄЁ.
’ҐЇҐам гЇ®а冷稬 нвЁ «гзЁ,   в®зЄЁ ­  ®¤­®¬ «гзҐ Ї®¬ҐбвЁ¬ ў Ї®-
ап¤ЄҐ 㢥«ЁзҐ­Ёп а ббв®п­Ёп ®в ­ з «  «гз .

     4.3.5. „ ­® n в®зҐЄ ­   Ї«®бЄ®бвЁ.  Џ®бва®Ёвм  Ёе  ўлЇгЄ«го
®Ў®«®зЄг  -  ¬Ё­Ё¬ «м­го  ўлЇгЄ«го дЁЈгаг, Ёе ᮤҐа¦ йго. (”®а¬г
ўлЇгЄ«®© ®Ў®«®зЄЁ ЇаЁ¬Ґв १Ё­®ў®Ґ Є®«ҐзЄ®, Ґб«Ё ҐЈ® ­ вп­гвм ­ 
Јў®§¤Ё, ўЎЁвлҐ ў в®зЄ е.)  —Ёб«® ®ЇҐа жЁ© ­Ґ Ў®«ҐҐ n*log n.

    “Є § ­ЁҐ. “Ї®а冷稬 в®зЄЁ - Ј®¤Ёвбп «оЎ®© Ё§ Ї®ап¤Є®ў,  Ёб-
Ї®«м§®ў ­­ле ў ¤ўге ЇаҐ¤л¤гйЁе § ¤ з е. ‡ вҐ¬, а бб¬ ваЁў п в®з-
ЄЁ Ї® ®зҐаҐ¤Ё, Ўг¤Ґ¬ бва®Ёвм ўлЇгЄ«го ®Ў®«®зЄг 㦥 а бᬮв७­ле
в®зҐЄ. („«п еа ­Ґ­Ёп ўлЇгЄ«®© ®Ў®«®зЄЁ Ї®«Ґ§­® ЁбЇ®«м§®ў вм ¤ҐЄ,
б¬. Ј« ўг 6 ® вЁЇ е ¤ ­­ле.)


     4.4. ЌЁ¦­ЁҐ ®жҐ­ЄЁ ¤«п зЁб«  ба ў­Ґ­Ё© ЇаЁ б®авЁа®ўЄҐ.

     Џгбвм  Ё¬ҐҐвбп  n  а §«Ёз­ле Ї® ўҐбг Є ¬­Ґ© Ё ўҐбл, Є®в®алҐ
Ї®§ў®«пов §  ®¤­® ў§ўҐиЁў ­ЁҐ ®ЇаҐ¤Ґ«Ёвм, Є Є®© Ё§ ¤ўге  ўлЎа ­-
­ле  ­ ¬Ё  Є ¬­Ґ© в殮«ҐҐ. (‚ Їа®Ја ¬¬ЁбвбЄЁе вҐа¬Ё­ е: ¬л Ё¬ҐҐ¬
¤®бвгЇ Є дг­ЄжЁЁ  в殮«ҐҐ(i,j:1..n):boolean.)  Ќ ¤®  гЇ®а冷зЁвм
Є ¬­Ё  Ї®  ўҐбг,  ᤥ« ў  Є Є  ¬®¦­® ¬Ґ­миҐ ў§ўҐиЁў ­Ё© (ўл§®ў®ў
дг­ЄжЁЁ "в殮«ҐҐ").

    ђ §г¬ҐҐвбп, зЁб«® ў§ўҐиЁў ­Ё© § ўЁбЁв ­Ґ в®«мЄ® ®в ўлЎа ­­®-
Ј®  ­ ¬Ё  «Ј®аЁв¬ , ­® Ё ®в в®Ј®, Є Є ®Є § «Ёбм а бЇ®«®¦Ґ­л Є ¬-
­Ё. ‘«®¦­®бвмо  «Ј®аЁв¬  ­ §®ўҐ¬ зЁб«® ў§ўҐиЁў ­Ё© ЇаЁ ­ Ёег¤иҐ¬
а бЇ®«®¦Ґ­ЁЁ Є ¬­Ґ©.

    4.4.1. „®Є § вм, зв® б«®¦­®бвм «оЎ®Ј®  «Ј®аЁв¬  б®авЁа®ўЄЁ n
Є ¬­Ґ© ­Ґ ¬Ґ­миҐ log (n!). (‹®Ј аЁд¬ ЎҐаҐвбп Ї® ®б­®ў ­Ёо 2,  n!
- Їа®Ё§ўҐ¤Ґ­ЁҐ зЁбҐ« 1..n.)

     ђҐиҐ­ЁҐ. Џгбвм Ё¬ҐҐвбп  «Ј®аЁв¬ б«®¦­®бвЁ ­Ґ Ў®«ҐҐ  d.  „«п
Є ¦¤®Ј®  Ё§ n! ў®§¬®¦­ле а бЇ®«®¦Ґ­Ё© Є ¬­Ґ© § Їа®в®Є®«Ёа㥬 аҐ-
§г«мв вл ў§ўҐиЁў ­Ё© (®Ўа йҐ­Ё© Є дг­ЄжЁЁ "в殮«ҐҐ");  Ёе  ¬®¦­®
§ ЇЁб вм  ў  ўЁ¤Ґ  Ї®б«Ґ¤®ў вҐ«м­®бвЁ  Ё§ ­Ґ Ў®«ҐҐ 祬 d ­г«Ґ© Ё
Ґ¤Ё­Ёж. „«п  Ґ¤Ё­®®Ўа §Ёп  ¤®Ї®«­Ё¬  Ї®б«Ґ¤®ў вҐ«м­®бвм  ­г«п¬Ё,
зв®Ўл ҐҐ ¤«Ё­  бв «  а ў­®© d. ’Ґ¬ б ¬л¬ г ­ б Ё¬ҐҐвбп n! Ї®б«Ґ-
¤®ў вҐ«м­®б⥩  Ё§  d ­г«Ґ© Ё Ґ¤Ё­Ёж. ‚ᥠнвЁ Ї®б«Ґ¤®ў вҐ«м­®бвЁ
а §­лҐ - Ё­ зҐ ­ и  «Ј®аЁв¬ ¤ « Ўл ®¤Ё­ Є®ўлҐ ®вўҐвл ¤«п  а §­ле
Ї®ап¤Є®ў  (Ё ®¤Ё­ Ё§ ®вўҐв®ў Ўл« Ўл ­ҐЇа ўЁ«м­л¬). Џ®«гз Ґ¬, зв®
2 ў б⥯Ґ­Ё d ­Ґ ¬Ґ­миҐ n! - зв® Ё вॡ®ў «®бм ¤®Є § вм.

     „агЈ®© бЇ®б®Ў ®Ўкпб­Ёвм в® ¦Ґ б ¬®Ґ  -  а бᬮваҐвм  ¤ҐаҐў®
ў аЁ ­в®ў,  ў®§­ЁЄ о饥 ў 室Ґ ўлЇ®«­Ґ­Ёп  «Ј®аЁв¬ , Ё б®б« вмбп
­  в®, зв® ¤ҐаҐў® ўлб®вл d ­Ґ ¬®¦Ґв Ё¬Ґвм Ў®«ҐҐ (2 ў б⥯Ґ­Ё  d)
«Ёбв쥢.

     ќв®  а бб㦤Ґ­ЁҐ Ї®Є §лў Ґв, зв® «оЎ®©  «Ј®аЁв¬ б®авЁа®ўЄЁ,
ЁбЇ®«м§гойЁ© в®«мЄ® ба ў­Ґ­Ёп н«Ґ¬Ґ­в®ў ¬ ббЁў  Ё Ёе ЇҐаҐбв ­®ў-
ЄЁ, вॡгҐв ­Ґ ¬Ґ­ҐҐ C*n*log n ¤Ґ©бвўЁ©, в Є зв® ­ иЁ   «Ј®аЁв¬л
Ў«Ё§ЄЁ  Є  ®ЇвЁ¬ «м­л¬. Ћ¤­ Є®  «Ј®аЁв¬ б®авЁа®ўЄЁ, ЁбЇ®«м§гойЁ©
¤агЈЁҐ ®ЇҐа жЁЁ, ¬®¦Ґв ¤Ґ©бвў®ў вм Ўлбв॥. ‚®в ®¤Ё­  Ё§  ЇаЁ¬Ґ-
а®ў.

     4.4.2. €¬ҐҐвбп ¬ ббЁў 楫ле зЁбҐ«  a[1]..a[n],  ЇаЁзҐ¬  ўбҐ
зЁб«  ­Ґ®ваЁж вҐ«м­л Ё ­Ґ ЇаҐў®б室пв m. Ћвб®авЁа®ў вм нв®в ¬ б-
бЁў; зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є  m+n.

     ђҐиҐ­ЁҐ.  „«п Є ¦¤®Ј® зЁб«  ®в 0 ¤® m Ї®¤бзЁвлў Ґ¬, бЄ®«мЄ®
а § ®­® ўбваҐз Ґвбп ў ¬ ббЁўҐ. Џ®б«Ґ нв®Ј® Ёб室­л© ¬ ббЁў ¬®¦­®
бвҐаҐвм Ё § Ї®«­Ёвм § ­®ў® ў Ї®ап¤ЄҐ ў®§а бв ­Ёп, ЁбЇ®«м§гп ᢥ-
¤Ґ­Ёп ® Єа в­®бвЁ Є ¦¤®Ј® зЁб« .

Ћв¬ҐвЁ¬ в Є¦Ґ, зв® нв®в  «Ј®аЁв¬ ­Ґ ЇҐаҐбв ў«пҐв зЁб«  ў  ¬ ббЁ-
ўҐ, Є Є Ў®«миЁ­бвў® ¤агЈЁе,   "§ ЇЁблў Ґв Ёе вг¤  § ­®ў®".

…бвм в Є¦Ґ ¬Ґв®¤ б®авЁа®ўЄЁ, ў Є®в®а®¬ Ї®б«Ґ¤®ў вҐ«м­® Їа®ў®¤Ёвбп