Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Ху, Т. Целочисленное программирование и потоки в сетях

.pdf
Скачиваний:
86
Добавлен:
22.10.2023
Размер:
16.99 Mб
Скачать

 

8.2. МЕТОД РАССТАНОВКИ ПОМЕТОК

151

Л емма 8.2.

При к = О, 1 , 2 , . . .

для любого узла N u спра­

ведливы неравенства

 

 

и

L ^ l ksal

 

(а)

 

 

 

 

Z u i< 4 +1.

 

(б)

Д оказательство. Поскольку (а) и (б)

доказываются аналогично,

рассмотрим одно из них, например (а).

 

 

Если

то соотношение (а) очевидно.

 

Пусть Zsu+1

конечно и равно h. Обозначим через

L h+l крат­

чайший путь

из N s в N u,

увеличивающий поток в сети N {Fh+1).

Пусть

N S = N U(),

N Ui, . . . , N Ufi = N u—последовательность

узлов

пути Lh+l. Тогда

Zs„0 = 0.

Докажем,

что

 

 

 

 

 

 

 

 

 

 

 

 

4 .+1 < !

+

4 г,

г = 0 ,1 , ... ,

 

 

 

 

 

 

(в)

Очевидно,

если

дуга

Л„. „. +1 £ N ( F k+l),

то

либо

Au.u.+i £ N {Fh),

либо ^ u.+jUj. £ Lk. В первом случае lsui+1^

1 + leup поскольку всегда

можно получить путь из N s

в N u.+i не длиннее, чем 1 + 1*и., если

воспользоваться дугой

Аи.и.

. Во втором случае

 

u. =

1 +

Z* и.

 

 

 

 

 

 

 

 

 

I

1т1

 

 

 

 

 

 

 

 

I

 

I"Ь1*

откуда

ls>

и

=

1

+ Is, и. <

1

+ h, и..

 

 

 

 

 

 

 

 

 

Суммируя

 

все

 

неравенства

(в),

получим

 

Zs>

 

+

u0 =

_у __7ft+i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--

I V -- Vs, и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Л емма 8.3.

Пусть

в

некоторой

сети

N(Fh)

 

(к = 0,

1, . . . )

кратчайший

путь,

 

увеличивающий

поток, содержит

дугу Aij,

а в сети N (Fv),

р > к , кратчайший путь, увеличивающий поток,

содержит

дугу

А р.

Тогда

кардинальное

расстояние

Zff

между

узлами

N s и

Nt

в

сети

N ( F P)

превышает

1st

не меньше чем

на

2 единицы,

Z?t^ Z sH -2 .

 

 

 

 

 

 

 

 

 

 

 

 

 

Д оказательство.

 

Так как

 

А ц ^ Ь и, то Z^t =

/м +

1 +

In-

Кроме

того, 1% =

i . I s i и

Ip —1

Ijt'

Так как A j t £ L p,

то

1st l“sj 1

+

lit-

Из

леммы

 

8.2

следует,

что

 

 

и

Ip^lu-

Поэтому

1st

1% ~"Ь 1 4~ l i t

=

(1 +

h i ) Ч~ 1 “Ь (1 ~h h t ) —

2 +

1st-

ш

 

 

 

 

 

Справедлива следующая теорема.

 

 

 

 

 

 

 

 

 

 

Т еорема 8.3. Если в методе расстановки пометок при

поиске

путей

из N s

в N t,

 

увеличивающих поток,

каждый раз выбирать

кратчайший

путь, а в качестве пометки

использовать

е (;') =

=

min [е (г),

Ъц хц + Хр],

то для

получения

максимального

152 ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК

потока в сети достаточно не больше чем п3раз найти путь, увели­ чивающий поток (где п число узлов в сети).

Д оказательство. Пока не получен максимальный поток, длина любого пути, увеличивающего поток, не превышает п — 1. Чтобы доказать теорему, достаточно показать, что расстояние между N s и N t должно стать больше, чем п — 1, если п3 раз найти путь, увеличивающий поток.

Из леммы 8.3 следует, что в последовательности сетей N (F0), N (F^, . . ., N (Fh) каждая дуга A tj может изменить свою ориен-

тацию самое большее—^— раз. По лемме 8.1 при переходе от сети

N (Fk) к сети N (Fk+i) каждый путь, увеличивающий поток, изме­ няет ориентацию не менее чем у одной дуги. Так как всего в сети имеется п (п — 1) дуг, а каждая дуга может менять ориентацию

не более

раз, то общее число путей *), увеличивающих поток,

не может быть больше чем \^п (п — 1) • —g-"] + 1 ^ п3.Л

Ясно, что полученная оценка может быть немного улучшена, если учесть, что у дуг вида A si и А и ориентация не изменяется. Однако в настоящее время неизвестно, как эту оценку существенно уменьшить, например, до О (п2)* 2).

8.3. Приложения

/М ногие обобщения задачи о максимальном потоке по существу /сводятся к ней. Известно, что эта задача находит приложения

 

в различных комбинаторных задачах. Основная трудность при

 

этом заключается в построении такой сети, чтобы нахождение

.

максимального потока в ней было эквивалентно решению постав-

ленной комбинаторной задачи.

 

\

Рассмотрим несколько задач такого типа. Одной из них являет­

 

ся задача о потоке в сети с несколькими источниками и стоками,

 

когда заданы

предложения товара в источниках и спрос товара

 

в стоках. Множество всех узлов разбивается на источники S,

 

*) Для нахождения одного пути, увеличивающего поток, в сети с р

 

дугами требуется О (р) вычислительных операций. Следовательно, в алго­

 

ритме Эдмондса — Карпа всего требуется О (п3р ) операций для нахождения

 

максимального

потока.

Е. А. [5*] и Карзанова В.

А. [8*] построены алго­

 

В работах

Диница

 

ритмы, более экономные

по числу вычислительных

операций: в работе [4*}

 

максимальный

поток находится за О (п2р ) операций, а в работе [8*] — за

О(п3) операций. — Прим, перев.

2)В работе Н. Заде [19*] приведен пример, когда поиск максимального потока по алгоритму Эдмондса — Карпа требует перебора О (п3) путей, увели­ чивающих поток.— Прим, перев.

8.3. П Р И Л О Ж Е Н И Я

153

промежуточные узлы R и стоки Т. Каждому узлу N t £ S поставле­ но в соответствие неотрицательное число a (N г) (предложение в N t), а каждому узлу N } 6 Т — неотрицательное число b (Nj) (спрос

Р(ис. 8.10.

вN j). Возникает вопрос: при каких условиях спрос в стоках мож­ но удовлетворить предложением в источниках, т. е. когда ограни­ чения

2 * ь i 2

&

N t e s \

j

k

 

 

i

2

=

N i t R ,

j

k

 

N i t T ,

f - 2

xki = b(Nt),

 

k

 

 

0 ^ Xij b%j

допустимы? - Если потоку разрешается течь из любого источника в-любой

сток, то эта задача легко сводится к задаче с одним источником

иодним стоком добавлением одного дополнительного источника

иодного дополнительного стока. Добавляются новые ориентиро­

ванные дуги, ведущие из дополнительного источника во все N t £ S и имеющие пропускные способности а (Л^), а также ориентирован­ ные дуги с пропускными способностями Ъ(Nг), ведущие из каждо­ го N t £ Т в дополнительный сток. Получается сеть, изображенная на рис. 8.10. Тогда задача об удовлетворении требуемого спроса заданным предложением сводится к нахождении! максимального потока в расширенной сети. Подробности можно найти в [67].

Если в сети с несколькими источниками и стоками поток дол­ жен идти из определенных источников в заданные стоки, возникает так называемая задача о многопродуктовых потоках в сети. Она будет рассматриваться в гл. 11.

Получим еще одно обобщение задачи о потоке, если дуговые потоки ограничим снизу не нулями, а заданными положительны­ ми целыми числами, т. е. для каждой дуги введем ограничение

 

*

154

ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК

О ^

hj ^ ха ^ bij. Требуется определить, существует ли поток

из источника N s в сток N и удовлетворяющий на дугах ограниче­ ниям сверху и снизу. Ответим на этот вопрос сначала в случае, когда в сети имеется только одна ориентированная дуга с ограни­ ченным снизу дуговым потоком. Обозначим эту дугу через A tj, а нижнюю границу потока по ней — через ltj. Расширим сеть, добавив два новых узла — искусственный источник N j с предло­ жением ltj и искусственный сток N t с таким же спросом Про­ пускную способность дуги А и изменим: если она была равна Ъц, то в новой сети она станет равной Ьц l tj. Добавим, кроме того,

v

•ориентированную дугу из N t в N s с бесконечной пропускной способностью. Будем искать в расширенной сети максимальный поток из источника Nj в сток N t. Если величина этого потока в расширенной сети больше или равна 1ц, причем поток по дуге A ts равен xts, то^в исходной сети существует такой поток из N s

в N t величины v = xts,

что

^ Хц. Исходная и расширенная

■сети изображены на рис.

8 . 1 1

и 8 . 1 2 соответственно.

Если в сети имеется несколько дуг, обладающих нижними гра­ ницами для дуговых потоков, то следует ввести несколько искус­ ственных источников и стоков, а затем задачу с несколькими источниками и стоками свести к задаче с одним источником и одним стоком введением дополнительного источника и дополнительного стока, как указывалось выше.

Рассмотрим теперь несколько хорошо известных результатов из комбинаторики, которые могут быть сформулированы в терми­ нах максимального потока и минимального разреза. Подробности можно найти в [67].

Граф называется двудольным г), если его узлы можно разбить на два непересекающихся множества S и Т (S = {S t}, i = 1 , 2 , . . .

. . ., m, и Т = {ГД, ] = 1 , 2

, . . .,

п), так, что каждая дуга гра­

фа соединяет некоторый узел

из S

с узлом из Т.

х) В книге [67] такие графы называются двусторонними.— Прим, перев.

8.3. ПРИЛОЖЕНИЯ

155

Множество узлов называется (S , Т)-рассекающим множеством, «ели удаление из графа этих узлов вместе с инцидентными им дуга­ ми разрывает все цепи из S в Т .

Теорема 8.4 (теорема Кёнига — Эгервари). Пусть G дву­ дольный граф. Максимальное число дуг графа G, попарно не имею­ щих общих узлов, равно минимальному числу узлов в (S , Т)-рас- секающем множестве узлов.

Т еорема 8.5 (теорема Менгера). Пусть- S и Т два непересекающихся подмножества узлов графа. Максимальное число цепей из S в Т, попарно не имеющих общих узлов, равно минимальному числу узлов в (S , Т)-рассекающем множестве узлов.

Граф называется ориентированным, если он содержит только ориентированные дуги. Граф называется ациклическим, если он не содержит циклов. Пусть G — ациклический ориентированный граф. Разложение графа G на цепи есть такое разбиение множества узлов и дуг графа G на цепи, что каждый узел из G принадлежит одной и только одной цепи (или говорят, что множество цепей покрывает граф). Разложение с минимальным числом цепей назо­ вем минимальным. Будем говорить, что N j больше, чем N t, если имеется цепь, ведущая из N t в N } (это отношение порядка будем обозначать следующим образом: N t > N j). Два узла ациклическо­ го графа называются несравнимыми, если не выполняется ни N t >

> N j, ни N j >

N t.

*

(теорема Дилворта). Максимальное число взаимно

Т еорема 8 .6

несравнимых узлов в ациклическом ориентированном графе равно числу цепей в минимальном разложении графа.

Пусть

N — {N

N г, . . ., N n} — заданное множество эле­

ментов;

S = {St, S 2,

. . ., S m} — некоторое семейство подмно­

жеств данного множества N . Набор R различных элементов мно­

жества N

 

 

R

=■ { NH, N n , . . ., N jm)

называется системой различных представителей семейства S, если

N jt 6 St, i = 1 , . . .,

т.

3,

4, 5},

=

{2,

4,

5},

S 2 =

Например,

пусть

N = {1, 2,

= {1, 5}, S 3 =

{3, 4},

S t = {3,

4}.

Тогда

R =

{5,

1,

3,

4}

есть

система различных представителей для S — {Si,

S 2, S 3,

<S4}.

Т еорема 8.7 (теорема Холла). Система различных представи­ телей для семейства S существует в том и только том случае, если объединение любых к множеств из S содержит по крайней мере к различных элементов, к = 1 , 2 , . . ., т.

156

ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК

8.4. Линейное программирование и потоки в сетях

Введем сначала несколько элементарных понятий теории гра­ фов. Деревом называется неориентированный связный граф, не содержащий циклов. Следовательно, между любыми двумя узлами дерева имеется единственная цепь, их соединяющая.

Граф Н , содержащий п узлов, является деревом, если выпол­ няются любые два из следующих трех условий:

1)граф Н связный,

2)граф Н не имеет циклов,

3)число дуг в Н равно п — 1.

Подграф Я графа G называется связывающим деревом1), если Н является деревом и каждый узел из G принадлежит Н.

Если граф G содержит п узлов, то всякий подграф графа G, являющийся деревом и содержащий п узлов, будет являться свя­ зывающим деревом. Если каждой дуге графа или сети поставить в соответствие некоторое число dij (длину дуги), то можно ввести понятие минимального (или максимального) связывающего дерева.

Минимальным (или максимальным) связывающим деревом графа

(сети) называется такое связывающее дерево, у которого сумма длин dtj всех дуг минимальна (или максимальна) среди всех свя­ зывающих деревьев этого графа (сети).

Вернемся, к задаче о максимальном потоке. В § 8.1 при ее изучении не использовались понятия линейного программирова­ ния. Но в действительности задачи о потоке в сети представляют собой специальный класс задач линейного программирования, и каждая потоковая задача может быть сформулирована как задача линейного программирования. Многие алгоритмы решения пото­ ковых задач основаны на принципах двойственности линейного программирования.

Рассмотрим, например, сеть, изображенную на рис. 8.1. Дуго­ вые потоки в сети будем рассматривать в качестве 6 переменных: xs2 , xs3, . . ., Xjf Хотя v выражается через хц, (v = xs2 + xs3),

будем считать v седьмой переменной. Задачу о максимальном потоке можно сформулировать как задачу линейного программи­ рования следующим образом:

максимизировать

Z = сх

при условиях

А'х = 0, А"х<Ь, х > 0 ,

(1)

J) В литературе связывающее дерево часто называют деревом-остовом.—

П р и м , перее .

 

8.5. СВОЙСТВО АБСОЛЮТНОЙ УНИМОДУЛЯРНОСТИ

159

уравнений

 

Ах =

Ь,

 

 

 

 

где X — [р,

3'2ч ■• *?

?^2? • • •?

 

 

А — матрица размера

(п + т) X (2т + 1).

 

Если теперь нужно перевезти заданное количество товара из источника в сток с минимальными затратами, то, возможно, не удастся весь поток пропустить по единственной цепи. Но число

ненулевых

базисных переменных всегда будет меньше чем п

— 1 + т.

Это значит, что задача останется вырожденной.

8.5. Свойство абсолютной унимодулярности (Гофман, Краскал [103], Вейнотт, Данциг [199])

Выше было показано, что всякая задача о потоке в сети может быть сформулирована как задача линейного программирования

максимизировать

2

=

СХ

 

при условиях

 

 

 

Ах =

Ь,

х ГЗг 0.

(1)

Задача о максимальном потоке, изучаемая в этой главе, и зада­ ча о потоке минимальной стоимости (гл. 1 0 ) могут быть представ­

лены в виде (1). В § 8.2 было показано, что всегда существует целочисленное оптимальное решение задачи о максимальном потоке, если пропускные способности дуг целочисленны. Мы не мо­ жем утверждать, что и для общей задачи линейного программиро­ вания оптимальное решение всегда целочисленно.

Будем исследовать подкласс тех задач линейного программи­ рования, которые обладают целочисленным оптимальным реше­ нием. Гофман и Краскал [103] показали, что задача линейного программирования с ограничениями Ах ^ Ь, х ^ 0, всегда имеет целочисленное оптимальное решение при любом целочисленном векторе ограничений Ь, если матрица А является абсолютно унимодулярной.

Напомним, что матрица А называется абсолютно унимодулярной, если все ее миноры равны либо 0, либо ± 1 . Результат, полу­ ченный Гофманом и Краскалом, означает, что выпуклый много­ гранник, определяемый ограничениями Ах ^ Ь, х ^ 0, имеет целочисленные крайние точки при любом целочисленном векторе Ь, если матрица А абсолютно унимодулярна. Ясно, что условие абсо­ лютной унимодулярности матрицы А достаточно для существова­ ния целочисленного оптимального решения. Труднее показать, что это условие является и необходимым. Доказательство Гофма­

160

ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК

на и Краскала [103] довольно громоздко, поэтому рассмотрим более простое доказательство Вейнотта и Данцига [199].

Если А есть X н)-матрица ранга т, то любую ее квадрат­ ную подматрицу ранга т назовем базисом матрицы А.

Т еорема 8.8. Пусть задача линейного программирования имеет ограничения вида Ах = Ь, х ^ 0. Если при этом матрица А целочисленна, ее вектор-строки линейно независимы, а вектор Ь целочислен, то следующие три условия являются эквивалентными.

1.Определитель любого базиса В матрицы А равен 1 или —1

2.Все крайние точки выпуклого многогранника С, определяе­ мого ограничениями Ах = Ь, х ^ 0, целочисленны при любом целочисленном векторе Ь.

3.Обращение В"1 любого базиса В является целочисленной матрицей.

Доказательство. Из условия 1 следует условие 2. Действи­

тельно, пусть х — произвольная крайняя точка выпуклого мно­

гогранника

С,

 

а В — соответствующий ей базис.

Тогда

х =

= [xB, x N],

где

Вхд = Ь,

и

x N = 0. По предположению

Ь —

целочисленный вектор, а по условию

1, det В = ± 1 .

Тогда по

правилу

Крамера

следует,

что

х в — целочисленный

вектор.

Значит,

крайняя точка х =

[хв, х^]

целочисленна.

 

 

 

 

Из условия 2 следует условие 3.

Действительно, пусть В —

базис, а

у — произвольный

целочисленный вектор,

такой,

что

у +

В _1ег ^

0,

где

е, есть

i-й единичный вектор-столбец. Пусть

z =

у +

В - Ч

^

0.

Тогда

Bz =

By

— целочисленный век­

тор, так как В, у, е* целочисленны. Поскольку в качестве Ь мож­ но взять любой целочисленный вектор, то положим Bz = Ь. Имеем Bz = b, z ^ 0, а это значит, что z является крайней точ­ кой выпуклого многогранника С, определяемого ограничениями Ах = Ь, х ^ 0. По условию 2 z является целочисленным векто­ ром. Но z — у В_1ег, значит, В_1ег — целочисленный вектор (как разность двух целочисленных векторов z и у). Вектор В_1ег является i-м вектор-столбцом в В-1, значит, i-й столбец матрицы

В-1

целочислен. Эти рассуждения справедливы для любого ег,

г =

1, 2, . . .,

т. Следовательно, матрица В-1 целочисленна.

Из условия

3 следует условие 1. Пусть В — некоторый базис.

По предположению матрица В целочисленна и, следовательно, det В — целое число, не равное 0. По условию 3, В-1 — целочис­ ленная матрица, det В-1 — также целое число, не равное 0. Но

(det В) (det В-1) = 1, откуда следует, что det В = det В-1 = ± l - i

Аналогичные результаты могут быть получены для выпуклого многогранника С, определяемого ограничениями Ах ^ Ь, х ^ 0.

8.5. СВОЙСТВО АБСОЛЮТНОЙ УНИМОДУЛЯРНОСТИ

161

Следствие. Рассмотрим выпуклый многогранник С, определяе­

мый условиями Ах ^ Ь, х ^3=О, где матрица А целочисленна. Тогда

следующие три условия являются эквивалентными.

1'. Матрица А абсолютно унимодулярна.

2'. Все крайние точки многогранника С целочисленны при любом целочисленном векторе Ь.

3'. Каждая невырожденная подматрица матрицы Аобладает целочисленной обратной матрицей.

Положим А = (А, I). Можно легко доказать эквивалентность условий 1 и 1', 2 и 2', 3 и 3'. Покажем, например, что из условия 1' следует условие 1. Пусть М — произвольная невырожденная под­ матрица матрицы А, имеющая ранг т к. Тогда некоторый базис

Вматрицы А можно представить (после перестановки столбцов)

вследующем виде:

в=

О

 

N

Ь

 

где Ife — единичная матрица размера к X

к. Очевидно, det В =

= det М, и, следовательно, в силу 1' det

В = + 1 .

Аналогичными преобразованиями можно получить все осталь­ ные результаты, впервые приведенные в работе [103]. Заметим, что если хотя бы одна из матриц А, Ат, —А, (А, А) или (А, I) абсолютно унимодулярна, то этим свойством обладают и все остальные^выписанные матрицы. Более подробный материал, касающий­ ся рассмотренных преобразований, можно найти в работах [103], [199].

Чтобы проверить, обладает ли матрица А свойством абсолют­ ной унимодулярности, надо провести большую работу, если пере­ бирать все миноры матрицы А. Существуют, однако, достаточные (но не необходимые) условия абсолютной унимодулярности мат­ риц, которые проверяются гораздо легче.

Теорема 8.9. Матрица А абсолютно унимодулярна, если вы­ полняются следующие условия.

1. Каждый ее элемент равен 0, + 1 или —1.

2. Каждый ее столбец содержит не более двух ненулевых эле­ ментов *).

3. Строки матрицы А можно разбить на два непересекающихся множества /?( и Й2 таким образом, что

г) Можно показать, что если матрица А обладает свойством 2, то усло­

вия 1, За, 36 необходимы для абсолютной ушшодулярности матрицы А .—

Прим. ред.

иТ . Ху

162

ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК

а) если столбец из А содержит два ненулевых элемента одного, знака, то один из них входит в Rt, а другой в R 2,

б) если столбец из А содержит два ненулевых элемента с про­ тивоположными знаками, то оба они входят либо в R\, либо в R 2.

Д оказательство. (Предложено Гофманом в добавлении к рабо­ те [99].) Легко видеть, что любая подматрица матрицы А в свою очередь удовлетворяет условиям теоремы. Поэтому достаточно доказать, что определитель любой квадратной матрицы, удовлет­ воряющей условиям теоремы, равен 0, -(-1 или —1. Доказатель­ ство проведем индукцией по размеру матрицы. Для матрицы размера 1 x 1 теорема выполняется согласно условию (1). Пред­ положим теперь, что теорема верна для матрицы размера (п 1 ) X,

X (п — 1), и пусть А — матрица размера п X п. Если в некото­ ром столбце все элементы равны 0, то det А = 0. Если в какомнибудь столбце матрицы А только один ненулевой элемент, то разложим определитель матрицы А по элементам этого столбца. Тогда det А = ± А ', где А' — алгебраическое дополнение нену­ левого элемента, равное 0 или ± 1 по индуктивному предположе­

нию. Остается рассмотреть случай, когда каждый столбец матри­ цы А имеет ровно два ненулевых элемента. Тогда из условий (1) —

(3) следует, что

2

аи = 2 aih 7 = 1» 2, . . ., п. Отсюда сле-

дует, что det А =

i£Hi

г£Яг

0 1). Заметим, что все рассуждения справедли­

вы и в случае, когда одно из множеств R t пусто. н

Упражнения

1. Используя метод расстановки пометок, найти максимальный поток из N s в N t в сети, изображенной на рис. 8.13. В качестве исходного потока взять xsi = xi2 = хгъ — x3t = 2 , остальные xij — 0- (Число, написанное около дуги, обозначает ее пропуск­ ную способность.)

2.Найти минимальное связывающее дерево для сети, изобра­ женной на рис. 8.13, принимая числа, указанные рядом с дугами, за их длины.

3.При доказательстве теоремы о максимальном потоке и мини­

мальном разрезе множество X определялось следующими прави­

лами :

если N t £ X

и

Хц < Ь ^ ,

то N j £X,

N s £ X,

 

если N t £ X

и

хп > / 0 ,

то N } ^X.

Дать аналогичное рекуррентное определение минимального

разреза (Y , Y), используя

некоторый максимальный поток из N s

в N t и начиная с правила Nt

6 Y.

 

х) Действительно, в этом случае строки матрицы А линейно зависимы.—

Прим. ред.

Соседние файлы в папке книги из ГПНТБ