Научная статья на тему 'Выявление изоморфных вхождений R-выражений при построении параллельных алгоритмов логического управления'

Выявление изоморфных вхождений R-выражений при построении параллельных алгоритмов логического управления Текст научной статьи по специальности «Математика»

CC BY
78
28
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЛОГИЧЕСКИЙ МУЛЬТИКОНТРОЛЛЕР / СИНТЕЗ / ПАРАЛЛЕЛЬНЫЙ АЛГОРИТМ ЛОГИЧЕСКОГО УПРАВЛЕНИЯ / РАЗБИЕНИЕ / ОПТИМИЗАЦИЯ / ОРИЕНТИРОВАННЫЕДЕРЕВЬЯ / LOGIC MULTICONTROLLER / SYNTHESIS / PARALLEL LOGIC CONTROL ALGORITHM / SEPARATION / OPTIMIZATION / ORIENTED TREES

Аннотация научной статьи по математике, автор научной работы — Ватутин Э. И., Зотов И. В., Титов В. С.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Ватутин Э. И., Зотов И. В., Титов В. С.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

CHECKING UP ISOMORPHIC INCLUSIONS OF R-EXPRESSIONS IN THE CONSTRUCTIONOF A SET OF SECTIONS FOR PARALLEL LOGIC CONTROL ALGORITHMS

In the paper a hardware-level algorithm is proposed for checking up isomorphism (r-isomorphism) ofR-expression trees (sections of parallel algorithm) based upon a number of R-expression tree features. A descriptionfor the corresponding hardware (accelerator) is presented to check up isomorphism of R-expressions in linear time.

Текст научной работы на тему «Выявление изоморфных вхождений R-выражений при построении параллельных алгоритмов логического управления»

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА

УДК 004.384:004.272:004.414.2

Э. И. Ватутин, И. В. Зотов, В. С. Титов

ВЫЯВЛЕНИЕ ИЗОМОРФНЫХ ВХОЖДЕНИЙ ^-ВЫРАЖЕНИЙ ПРИ ПОСТРОЕНИИ ПАРАЛЛЕЛЬНЫХ АЛГОРИТМОВ ЛОГИЧЕСКОГО УПРАВЛЕНИЯ

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

Ключевые слова: логический мультиконтроллер, синтез, параллельный алгоритм логического управления, разбиение, оптимизация, ориентированные деревья.

Реализация параллельных управляющих алгоритмов в базисе логических мультикон-троллеров (ЛМК) требует их декомпозиции на множество частных алгоритмов ограниченной сложности [1]. Получение оптимального набора частных алгоритмов (разбиения) — сложная комбинаторная задача. Качество ее решения существенно влияет на аппаратную сложность ЛМК и определяет, в конечном счете, время выполнения алгоритма. Один из наиболее эффективных путей решения данной задачи предлагает развиваемый авторами параллельно-последовательный метод декомпозиции [2—8]. Как было показано в статье [9], он позволяет формировать наиболее близкие к оптимальным варианты разбиения с учетом основных структурных и технологических ограничений базиса ЛМК.

Один из ключевых этапов параллельно-последовательной декомпозиции — построение множества сечений, покрывающего все вершины исходного алгоритма. Формирование сечений осуществляется путем выполнения трудоемких операций подстановки над множеством так называемых .-выражений, описывающих алгоритм управления. Как показывают исследования, упрощение и ускорение этих операций возможно путем их сведения к действиям над деревьями, в частности, к проверке изоморфизма.

В настоящей статье предложен алгоритм определения изоморфных вхождений .-выражений, основанный на ряде их специфических свойств, не присущих графам или деревьям общего вида, и обеспечивающий проверку изоморфизма за полиномиальное время. (Как известно [10], для решения задачи распознавания изоморфизма графов общего вида до сих пор не только не придумано эффективного универсального алгоритма, но и не доказана ее принадлежность к классу Р или ЫР [11].) Следует отметить, что рассматриваемый вид изоморфизма .-выражений определяется исходя из возможности проведения операции подстановки [1, 3, 4] и несколько отличается от „классического" понятия изоморфизма [10], определяемого для графов, ввиду чего далее будем именовать его г-изоморфизмом.

При практической реализации операций над ^-выражениями удобным является их представление в виде деревьев, допускающее преобразование в табличный вид (рис. 1). Каж-

X X

дый элемент дерева X, представленного совокупностью наборов листьев Ц , Ц ,

Ь

X

Пь (X у

узлов 71X, Т2,..., Т^Г(X) и связей между ними, кодируется набором полей. С учетом ряда особенностей обработки наборы листьев и узлы дерева кодируются отдельно. Узлы дерева представлены полями:

1) типа узла (ТУ) — параллельный или альтернативный;

2) ссылки на предка (СП) — номер узла-предка;

3) номера соответствия (НС) — номер изоморфного эквивалента в соседнем дереве;

4) типа соответствия (ТС) — может принимать значения „0*" — соответствие отсутствует, „10" — неполное (частичное) соответствие, „11" — полное соответствие.

■X

а99'(а94|а95|а128|(а65'абб'а82'а83'(й,55|а5б|а112) '(а59|а104|а111)))

То

.Т4

Ь4

1 Узлы 1 Тип узла Ссылка на предка

То • —

Г1 \ Го

Г2 • Г1

Гз Г2

Г4 Г2

Г5 — —

N1 — -

Текущее количество узлов Щ

5

Текущее количество наборов листьев

5

№ Множество Ссылка на

в е ь вершин предка

Ьо 99 Го

т с Ц 94, 95, 128 Г

и л ¿2 65, 66, 82, 83 Г2

ы р Ьз 55, 56, 112 Гз

о б ¿4 59, 104, 111 —4

а К ¿5 —

N1 — -

Рис. 1

Наборам листьев дерева при этом соответствуют поля множества вершин (МВ) — двоичный вектор с единичными битами в позициях, соответствующих номерам присутствующих в наборе вершин, а также поля СП, НС и ТС. Во избежание путаницы при обозначении одноименных полей, соответствующих узлам и наборам листьев, будем обозначать их с указанием принадлежности к элементам дерева (например, СП(у) и СП(нл)).

Краткое описание свойств ^-выражений, гарантирующих наличие единственно возможного изоморфного эквивалента поддерева и позволяющих исключить из рассмотрения проверку соответствия типов узлов деревьев, приведено ниже (ввиду ограниченного объема статьи доказательства лемм и теорем не приведены).

Необходимое условие 1 отсутствия г-изоморфизма. Если в дереве А найдется набор листьев ЬА, не находящийся в отношении эквивалентности, обозначаемом как

Ь[~]¿2 = ¿2У(Ь ^¿2М¿2 ^Ь),

ни с одним набором листьев дерева В, то дерево А не является г-изоморфным дереву В:

ЗЬА е А, УЬВ е В, ¿А [~]¿В ^ А[^]В .

Выявление изоморфных вхождений Я-выражений при построении параллельных алгоритмов 39

Необходимое условие 2 отсутствия г-изоморфизма. Если в деревьях А и В присутствует более одной пары наборов листьев с частичным соответствием (ЬА ^ ЬВ, где ЬА — 1-й набор листьев дерева А), рассматриваемые деревья не г-изоморфны.

Аксиома 1. Невозможно найти такие два набора листьев ЬА и ЬА, предком которых являлся бы один и тот же узел.

Аксиома 2. При движении по узлам любой ветви дерева типы узлов строго чередуются. Лемма 1 (об ортогональности наборов листьев в составе дерева). В пределах дерева все

наборы листьев ортогональны: ЬА П Ь^у = 0, V/ ^ у .

Лемма 2 (о совпадении типа узлов-предков для вершин в составе различных наборов

х

листьев). Любые две вершины, входящие в состав одного набора листьев Ц дерева X, могут

у

одновременно войти в состав набора листьев Ьу дерева У только в том случае, если тип узла

X У

предков наборов листьев Ц и Ьу совпадает.

Следствие. У полностью или частично эквивалентных наборов листьев не может быть предков разного типа.

Теорема 1 (о единственности г-изоморфной пары наборов листьев). Набору листьев ЬА может соответствовать не более одного полностью или частично эквивалентного набора листьев Ьв} : ЦА Ц : ЗЬБк, ЬА ]ЬБк, к * у .

Теорема 2 (о единственности г-изоморфной пары поддеревьев). В деревьях А и В не может быть более одной пары совпадающих поддеревьев.

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

1. Установить значения полей ТС всех наборов листьев дерева А в „00" (соответствия нет), значения полей НС всех наборов листьев дерева А в „11... 1" (ссылка на несуществующий элемент дерева В), значения полей ТС всех узлов дерева А в „11" (полное соответствие), значения полей НС всех узлов дерева А в „11.1".

2. Если Пц (А) > Пц (В) (количество наборов листьев в подставляемом дереве больше количества наборов листьев в объемлющем), установить признак ф = 0 отсутствия изоморфного дереву А поддерева в составе дерева В. Перейти к п. 7.

3. Поочередно выбирать все наборы листьев дерева В. Для выбранного набора листьев

В

Ьу дерева В осуществить параллельное во времени сравнение поля МВ с полями МВ всех наборов листьев дерева А, сформировать признаки полного 5+ = (ьА = ЬВ) и частичного 5- =(ьА ^ Ьу ) соответствия наборов листьев с их последующим сохранением в поле ТС набора листьев ЬА в формате 5- | 5+ (на позиции старшего бита — признак 5-, младшего — 5+ ) и в поле ТС предка набора листьев Ц. В случае полного или частичного соответствия между на-

А В

борами листьев Ц и Ьу сохранить номер у, соответствующий предположительно изоморфному эквиваленту Ц в составе дерева В, в поле НС набора листьев ЬА, а также значение

B A

поля СП набора листьев Lj в поле НС предка набора листьев Li (предположительно изоморфный эквивалент предка набора листьев ИА ).

4. Если хотя бы для одного набора листьев дерева А не нашлось полностью или частично эквивалентного предположительно изоморфного набора листьев в составе дерева Б, т.е.

Г \ ^ : 5- = 0 = _5" (LA ) 1 ,

^ i=0, ^ (А)-1 ; )

установить признак ф = 0 отсутствия изоморфного дереву А поддерева в дереве Б. Перейти к п. 7.

5. Просмотреть все узлы дерева А, кроме корня, в направлении от узлов с большим номером к узлам с меньшим номером. Откорректировать значения поля ТС предка каждого i-го

узла как ТСТ' = / ( тС , ТСТ) в случае наличия предка у предположительно изоморфного

эквивалента текущего узла (у = 0), установить ТС = 00 в противном случае (у = 1) . (Здесь / (х, у) — функция корректировки значения поля ТС узла-предка, х — значение поля ТС узла-предка, у — узла-потомка, эквивалентная функции минимума двух аргументов для всех случаев, кроме / (10,10) = / (10,11) = 00 .) Задать значения поля НС предка рассматри-

Ж Ж

ваемого узла а [ ] как НС = й[а[/].НС].СП, где НС — значение поля НС узла-предка текущего узла.

Если поля ТС всех узлов дерева А имеют значение „11" или „10", т.е.

Г \

ф0 = _&_5" ((А ) = 1 ,

^ г=0, Щ (А)-1 )

в дереве Б есть поддерево, изоморфное дереву А, причем подстановка изоморфизма определяется значениями полей НС (i-му элементу дерева А соответствует изоморфный эквивалент а[/].НС в дереве Б). В противном случае в составе дерева Б нет поддерева, изоморфного дереву А. Установить признак ф = ф0 . 7. Конец алгоритма.

Рассмотрим пример работы описанного алгоритма. В качестве объемлющего дерева Б возьмем дерево, приведенное на рис. 1. Пример (см. таблицу) показывает, что в состав дерева Б (рис. 1) входит поддерево, г-изоморфное изображенному на рис. 2 дереву А.

а66' а83'(а,59|а104|ашНа55|а56|а112)

Рис. 2

Пример определения г-изоморфизма

№ итерации Пояснение к действию Значения полей элементов дерева А

и и ь2 То Т1 т2

С НС ТС НС тс НС тс НС ТС НС ТС НС

1 - 00 -1 00 -1 00 -1 11 -1 11 -1 11 -1

2 ^ (л) = 3, Л/ (в) = 5, пь (л) < пь (В) 00 -1 00 -1 00 -1 11 -1 11 -1 11 -1

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3.1 ] = 0, В1() .МВ = а99 00 -1 00 -1 00 -1 11 -1 11 -1 11 -1

3.2 } = 1, В.Ьг .МВ = я94я9^я1т8 00 1 00 -1 00 1 11 -1 11 -1 11 -1

3.3 ] = 2, В.Ьп .МВ = я6^я66я8тя83, г = 0, А : Ьп —>■ Тп, В : —>■ 7^ 10 2 00 -1 00 1 10 2 11 -1 11 -1

3.4 ] = 3, В.ЬЪ .МВ = , / = 2, : —>■ 7/ 7> : 7,3 —>■ Г3 10 2 00 -1 11 3 10 2 11 -1 11 3

3.5 У = 4, 5.14.МВ = о,9о1П4о1П, У = 1, ,4 :->■ 7],5 :14 ->■ Г4 10 2 11 4 11 3 10 2 11 4 11 3

4 Х=1&1&1=1 10 2 11 4 11 3 10 2 11 4 11 3

5.1 ' 2. .1: 7. -+Т0,А.Т2 [~]5.7; 5:7; ч» 7/ у = 0, 7;.ТС = /(11,10) = 10 10 2 11 4 11 3 10 2 11 4 11 3

5.2 ' 1-1:'/ >Г • • 1-7 | ■ |/>'•/.: 5 : Г4 7/ у = 0, 7; .ТС = /(11,10) = 10 10 2 11 4 11 3 10 2 11 4 11 3

6 Ф = 1&1&1 = 1 10 2 11 4 11 3 10 2 11 4 11 3

Рис. 3

Выявление изоморфных вхождений Я-выражений при построении параллельных алгоритмов 43

На основании приведенного выше алгоритма синтезировано специализированное устройство, функциональная схема которого представлена на рис. 3. Регистры 1, 2 и 27 предназначены для хранения значений ^ (В), пТ (А) и ^ (А) соответственно, при этом значения

полей обрабатываемых деревьев хранятся в элементах однородной среды электронной модели дерева (ОСЭМД) [12] В.МВ, А.МВ, А.СП(нл), А.ТС(нл), А.Нс(нл), В.СП(нл), А.СП(у), В.СП(у), А.ТС(у) и А.НС(у), схема ячейки которой приведена на рис. 4.

wdi owdi

wa —-Cw

Caw ----

ra0[i]----

ra-[-] ■■ — гак[]

D —Л TT

C

4

у

5

I + И

wd owd

wa ?

Cw

Caw

rao[i] d

rai[.i]

raK[i] d

rdo[j] rd- [-[ rdKß]

3+K

i I...........\

ЩЩ МЦ mm \ i\

rdo[j] rdi[j] rdK[j] Рис. 4

Коммутаторы 3, 23—25 управляются сигналом р и предназначены для коммутации значений на разных этапах работы алгоритма. Дешифраторы 4, 22, 28, 33, 34, 38 используются для преобразования номеров позиций элементов дерева в табличном представлении из двоичного кода в унитарный, используемый на входах ra (сокр. от „read address" — адрес чтения) элементов ОСЭМД. Шифратор 21 используется для обратного преобразования. Сдвиговый регистр 5 используется для поочередного выбора элементов обрабатываемых деревьев. Блоки элементов ИЛИ 7, запрета 8, ИЛИ 9—12 используются для формирования начальных значений полей на этапе инициализации. Элементы ИЛИ 6, ИЛИ 13 и И 36 используются для коммутации синхросигналов. Блок элементов запрета 26 в совокупности с элементом И 29 и схемой маскировки неиспользуемых позиций (СМНП) 1 используется для формирования значения признака X. Схема СМНП 2 в совокупности с блоком элементов запрета 37, элементом ИЛИ 39, запрета 30, блоком элементов И 31 и элементом ИЛИ 32 используется для формирования результирующего признака r-изоморфизма ф, при этом на выходе элемента ИЛИ 39 формируется значение признака а отсутствия узлов у дерева A. Элемент И 35, на выходе которого формируется значение признака у, в совокупности со схемой определения типа соответствия предка (СОТСП) отвечает за формирование обновленного значения поля типа соответствия узла-предка (фактически схема СОТСП реализует рассмотренную выше функцию f). Блок элементов НЕ 14 в совокупности со схемами сравнения битовых векторов (ССБВ) 1—n, образованными блоками элементов И 15 и 16, ИЛИ 17, И-НЕ 19 и элементами И 18 и 20,

используется для формирования признаков 5+ и 5- полного и частичного соответствия наборов листьев. Элемент задержки предназначен для задержки синхросигнала сдвига

ö

&

i

3

&

&

i

2

&

i

&

содержимого регистра 5 на время, достаточное для формирования и записи обновленных значений полей на предыдущей итерации алгоритма.

По сравнению с программной реализацией предлагаемого алгоритма выигрыш в скорости достигается за счет параллельной инициализации значений полей ТС и НС узлов и наборов листьев дерева А; параллельного сравнения выбранного у-го набора листьев дерева В со всеми наборами листьев дерева А; параллельного сравнения компонентов битовых векторов, соответствующих наборам листьев; параллельного чтения и записи значений различных полей (А.ТС(нл), А.НС(нл), А.НС(у) и т.д.) из/в разные элементы ОСЭМД.

При программной реализации [3, 5, 6] имеют место дополнительные затраты на организацию стека возвратов при рекуррентном сравнении деревьев, сканирование наборов листьев при этом фактически является условием завершения рекурсии: обработка элементов наборов листьев производится последовательно. Просмотр узлов деревьев как при программной, так и при аппаратной реализации осуществляется последовательно.

Последовательная программная реализация предложенного в статье алгоритма проверки г-изоморфизма предполагает попарное сравнение наборов листьев деревьев А и В (каждое сравнение наборов листьев требует О (Ьтах) действий) с последующим просмотром узлов дерева А снизу вверх. Ее асимптотическая временная сложность составляет

О (( ¿тах + ^ ) О (Ь3тах ) ,

где — максимально возможное число наборов листьев в дереве, Ьтах — размерность

битовых векторов МВ наборов листьев (фактически число вершин в алгоритме управления). Предложенное аппаратное решение обладает асимптотической временной сложностью

О ((¿тах + ^х ) О (Ьтах )

где Ыг — максимально возможное число узлов в дереве.

тах

СПИСОК ЛИТЕРАТУРЫ

1. Организация и синтез микропрограммных мультимикроконтроллеров / И. В. Зотов, В. А. Колосков, В. С. Титов и др. Курск: КурскГТУ, 1999. 368 с.

2. Зотов И. В., Колосков В. А., Титов В. С. Выбор оптимальных разбиений алгоритмов при проектировании микроконтроллерных сетей // Автоматика и вычислительная техника. 1997. № 5. С. 5162.

3. Поиск базового сечения в задаче разбиения параллельных алгоритмов / Э. И. Ватутин, И. В. Зотов. Курск: КурскГТУ. 2оо3. 3о с.

4. Ватутин Э. И., Зотов И. В., Титов В. С. Построение множества сечений в задаче оптимального разбиения параллельных управляющих алгоритмов // Изв. ТулГУ. Вычислительная техника. Информационные технологии. Системы управления. Тула: ТулГУ, 2оо3. Т. 1, вып. 2. С. 7о—77.

5. Ватутин Э. И., Зотов И. В. Метод формирования субоптимальных разбиений параллельных управляющих алгоритмов // Параллельные вычисления и задачи управления (РАСО'о4). М.: ИПУ РАН, 2оо4. С. 884—917.

6. Ватутин Э. И., Зотов И. В. Параллельно-последовательный метод формирования субоптимальных разбиений параллельных управляющих алгоритмов. Свид-во об офиц. регистрации программы для ЭВМ № 2оо5613о91 от 28.11.о5.

7. Ватутин Э. И., Зотов И. В. Программная система для построения разбиений параллельных управляющих алгоритмов // Идентификация систем и задачи управления (81СРЯО'о6). М.: ИПУ РАН, 2оо6. С. 2239—225о.

8. Ватутин Э. И., Зотов И. В. Визуальная среда синтеза разбиений параллельных алгоритмов логического управления. Свид-во об офиц. регистрации программы для ЭВМ № 2оо7613222 от 3о.о7.о7.

9. Ватутин Э. И., Волобуев С. В., Зотов И. В. Комплексная сравнительная оценка методов выбора разбиений при проектировании логических мультиконтроллеров // Идентификация систем и задачи управления (81СРЯО'о8). М.: ИПУ РАН, 2оо8. С. 1917—194о.

Параллельно-конвейерное устройство для векторизации аэрокосмических изображений 45

10. Зыков А. А. Основы теории графов. М.: Наука, 1987. 381 с.

11. Хопкрофт Дж., Мотвани Р., Ульман Дж. Введение в теорию автоматов, языков и вычислений: Пер. с англ. М.: Вильямс, 2оо2. 528 с.

12. Ватутин Э. И. Однородная среда электронной модели дерева для аппаратно-ориентированной обработки Я-выражений // Оптико-электронные приборы и устройства в системах распознавания образов, обработки изображений и символьной информации (Распознавание — 2оо8). Ч. 1. Курск: КурскГТУ, 2оо8. С. 9о—92.

Эдуард Игоревич Ватутин — Игорь Валерьевич Зотов —

Виталий Семенович Титов —

Рекомендована кафедрой вычислительной техники

Сведения об авторах

аспирант; Курский государственный технический университет, кафедра вычислительной техники; E-mail: [email protected] д-р техн. наук, профессор; Курский государственный технический университет, кафедра вычислительной техники; E-mail: [email protected]

д-р техн. наук, профессор; Курский государственный технический университет, кафедра вычислительной техники; зав. кафедрой; E-mail: [email protected]

Поступила в редакцию 12.09.08 г.

УДК 681.3

С. Ю. Мирошниченко, В. С. Титов

ПАРАЛЛЕЛЬНО-КОНВЕЙЕРНОЕ УСТРОЙСТВО ДЛЯ ВЕКТОРИЗАЦИИ АЭРОКОСМИЧЕСКИХ ИЗОБРАЖЕНИЙ

ЗЕМНОЙ ПОВЕРХНОСТИ

Рассмотрены структурная схема и алгоритмы функционирования устройства автоматического построения тематического слоя зданий и строений для электронных карт геоинформационных систем на основе аэрокосмических изображений. Наличие специализированных параллельных графических модулей и конвейерный режим функционирования устройства позволяют повысить степень загрузки вычислительных блоков и увеличить его производительность.

Ключевые слова: геоинформационные системы, аэрокосмические изображения, автоматическая векторизация, слой зданий, выделение контуров, параллельно-конвейерное устройство.

В современном мире геоинформационные системы (ГИС) используются при решении широкого круга задач в области кадастрового учета и городского планирования, управления транспортом, землепользования и сельскохозяйственной деятельности, подведения коммуникаций и их обслуживания [1, 2]. Для эффективного решения поставленных задач пользователи ГИС должны получать актуальную информацию, полностью отражающую реальное состояние определенного региона на текущий момент времени. Следовательно, необходимо периодически производить актуализацию электронных карт ГИС с учетом изменений, произошедших со времени последнего обновления.

Наиболее актуальную информацию, необходимую для создания и обновления электронных карт ГИС, предоставляют цифровые аэрокосмические изображения. Перенос информации, содержащейся в аэрокосмическом изображении, в электронную карту выполняется путем формирования набора тематических слоев, каждый из которых содержит векторные представления принадлежащих данному слою объектов.

i Надоели баннеры? Вы всегда можете отключить рекламу.