Научная статья на тему 'О способах пропозиционального кодирования различимости объектов в конечных множествах'

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

CC BY
145
19
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
комбинаторные объекты / латинские квадраты / пропозициональное кодирование / проблема выполнимости булевых формул / SAT. / propositional encoding / SAT / latin squares.

Аннотация научной статьи по математике, автор научной работы — Евгения Геннадьевна Белеи, Александр Анатольевич Семенов

В статье описана новая процедура пропозиционального кодирования свойства различимости объектов, составляющих некоторое конечное множество. Для изучаемого в настоящей работе класса комбинаторных проблем достаточно представлять элементы рассматриваемого множества их натуральными номерами. Соответственно, возникает задача построения выполнимой булевой формулы, выполняющие наборы которой кодируют первые n целых неотрицательных чисел без учета их порядка. Необходимость булевого кодирования таких множеств вызвана желанием применить к соответствующим комбинаторным задачам алгоритмы решения проблемы булевой выполнимости (SAT). В статье предлагается новый способ задания булевой формулой характеристической функции предиката, который истин на наборе двоичных слов, представляющих числа от 0 до n − 1. Соответствующий предикат назван OtO (сокращение от One-to-One). Пропозициональная кодировка OtO-предиката имеет более экономную асимптотику роста в сравнении с кодировкой для близкого по смыслу предиката, известного как OOC-предикат (от Only One Cardinality). Описанный в статье OtO-предикат используется для сведения к SAT ряда задач, связанных с латинскими квадратами. Конкретно, с помощью OtO-предиката строятся SAT-кодировки для задач поиска ортогональных пар и квазиортогональных троек латинских квадратов порядка 10. Для вычислительного решения этих задач используются многопоточный SAT-решатель и вычислительный кластер.

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

Похожие темы научных работ по математике , автор научной работы — Евгения Геннадьевна Белеи, Александр Анатольевич Семенов

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

On Propositional Encoding of Distinction Property in Fi- nite Sets

In the paper we describe a new propositional encoding procedure for the property that all objects comprising some finite set are distinct. For the considered class of combinatorial problems it is sufficient to represent the elements of such set by their natural numbers. Thus, there is a problem of constructing a satisfiable Boolean formula, the satisfying assignments of which encode the first n natural numbers without taking into account their order. The necessity to encode such sets into Boolean logic is motivated by the desire to apply to the corresponding combinatorial problems the state-of-the-art algorithms for solving the Boolean satisfiability problem (SAT). In the paper we propose the new approach to defining the Boolean formula for the characteristic function of the predicate which takes the value of True only on the sets of binary words encoding the numbers from 0 to n − 1. The corresponding predicate was named OtO (from Oneto-One). The propositional encoding of the OtO-predicate has a better lower bound compared to the propositional encoding of a relatively similar predicate known as OOCpredicate (from Only One Cardinality). The proposed OtO-predicate is used to reduce to SAT a number of problems related to Latin squares. In particular, using the OtOpredicate we constructed the SAT encodings for the problems of finding orthogonal pairs and quasi-orthogonal triples of Latin squares of order 10. We used the multi-threaded SAT solvers and the resources of a computing cluster to solve these problems.

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

Онлайн-доступ к журналу: http: / / mathizv.isu.ru

Серия «Математика»

2019. Т. 28. С. 3-20

УДК 519.7 MSG 94С10

DOI https://doi.Org/10.26516/1997-7670.2019.28.3

О способах пропозиционального кодирования различимости объектов в конечных множествах*

Е. Г. Белей

Иркутский национальный исследовательский технический университет, Иркутск, Российская Федерация

А. А. Семенов

Институт динамики систем и теории управления им. В. М. Матросова, Иркутск, Российская Федерация

Аннотация. В статье описана новая процедура пропозиционального кодирования свойства различимости объектов, составляющих некоторое конечное множество. Для изучаемого в настоящей работе класса комбинаторных проблем достаточно представлять элементы рассматриваемого множества их натуральными номерами. Соответственно, возникает задача построения выполнимой булевой формулы, выполняющие наборы которой кодируют первые п целых неотрицательных чисел без учета их порядка. Необходимость булевого кодирования таких множеств вызвана желанием применить к соответствующим комбинаторным задачам алгоритмы решения проблемы булевой выполнимости (SAT). В статье предлагается новый способ задания булевой формулой характеристической функции предиката, который истин на наборе двоичных слов, представляющих числа от 0 до п — 1. Соответствующий предикат назван OtO (сокращение от One-to-One). Пропозициональная кодировка OtO-предиката имеет более экономную асимптотику роста в сравнении с кодировкой для близкого по смыслу предиката, известного как ООС-предикат (от Only One Cardinality). Описанный в статье OtO-предикат используется для сведения к SAT ряда задач, связанных с латинскими квадратами. Конкретно, с помощью OtO-предиката строятся SAT-кодировки для задач поиска ортогональных пар и квазиортогональных троек латинских квадратов порядка 10. Для вычислительного решения этих задач используются многопоточный SAT-решатель и вычислительный кластер.

Ключевые слова: комбинаторные объекты, латинские квадраты, пропозициональное кодирование, проблема выполнимости булевых формул, SAT.

* Работа выполнена при финансовой поддержке Российского научного фонда, грант 16-11-10046.

1. Введение

Про современную комбинаторику можно сказать, что это область, в которой встречаются друг с другом методы из, казалось бы, совершенно различных ветвей математики. Долгое время этот тезис относился, главным образом, к «чистой» математике. Датой начала проникновения в комбинаторику методов вычислительной математики можно считать 1960 год, когда Р. Ч. Боузом, С. С. Шрикханде и Е. Т. Паркером (см. [15]) была опровергнута гипотеза о греко-латинских квадратах, сформулированная JI. Эйлером в 1782 году.

На сегодня известно довольно много результатов, в рамках которых комбинаторные свойства доказываются с использованием компьютеров. Помимо упомянутой работы Боуза и др., еще один известный пример такого рода — доказательство К. Лэмом (см. [23]) отсутствия конечной проективной плоскости порядка 10. Вычислительный эксперимент, который провел Лэм, был настолько сложным, что соответствующая работа породила масштабную дискуссию о том, можно ли считать приведенные аргументы «доказательством» в общепринятом смысле. Буквально в последние несколько лет были построены вычислительные решения еще для нескольких комбинаторных проблем, относящихся к теории Рамсея. Так, в [22] было предъявлено вычислительное доказательство частного случая известной «Проблемы несоответствия Эр-дёша» (Erdos discrepancy problem). Наконец, в [21] с использованием суперкомпьютера была решена еще одна известная комбинаторная задача - «Булева проблема пифагоровых троек» (Boolean Pythagorean triples problem).

В работах [21] и [22] к рассмотренным в них задачам применялись алгоритмы решения проблемы булевой выполнимости (Boolean Satisfiability Problem, SAT). Алгоритмы решения SAT в настоящее время используются в широком спектре областей: символьная верификация, биоинформатика, теория расписаний, криптоанализ и др. Следует отметить, что многие задачи из перечисленных областей допускают эффективную сводимость к SAT. Методы, обеспечивающие сводимости такого рода, называются процедурами пропозиционального кодирования.

В настоящей работе мы предлагаем новые процедуры пропозиционального кодирования некоторых комбинаторных объектов. Эти процедуры могут использоваться для решения различных задач, связанных с латинскими квадратами.

Приведем краткий план статьи. В разделе 2 вводятся основные понятия, относящиеся к проблематике булевой выполнимости. В разделе 3 мы приводим постановки ряда комбинаторных задач, в формулировках которых фигурируют латинские квадраты. В разделе 4 описаны общие принципы пропозиционального кодирования некоторых комбинаторных объектов. В разделе 5 приводится новая процедура пропо-

зиционального кодирования предиката над конечным множеством натуральных чисел, истинного только если все числа в рассматриваемом множестве различны. Мы используем эту схему кодирования для решения ряда комбинаторных задач, связанных с латинскими квадратами. Раздел 6 содержит результаты вычислительных экспериментов.

2. Задача о булевой выполнимости и основные алгоритмы ее решения

Переменные, принимающие значения в множестве из двух элементов, называются булевыми. Чаще всего значения булевых переменных обозначаются через 0 и 1. Булева формула от п переменных - это выражение, построенное по специальным правилам над алфавитом, который включает в себя булевы переменные х\,... ,хп, скобки и специальные символы, называемые булевыми (пропозициональными) связками. Для булевых формул также используются названия «пропозициональные формулы» или «формулы алгебры логики». Пусть {0,1}п — множество всех слов длины п над алфавитом {0,1}. В ряде источников элементы {0,1}п называются булевыми векторами. Любая булева формула F от п переменных задает всюду определенную (тотальную) булеву функцию /f '■ {0,1}п —> {0,1}. Формула F называется выполнимой, если найдется такой набор а € {0,1}п значений входящих в F переменных, что /f (ск) = 1. Такой а называется набором, выполняющим F. Если выполняющего F набора не существует, то F называется невыполнимой. Выделяют булевы формулы специального вида, называемые нормальными формами (см., например, [8]). Основной объект дальнейшего рассмотрения — это конъюнктивная нормальная форма [8], при работе с которой используется аббревиатура КНФ (CNF). По любой булевой формуле F можно построить схему из функциональных элементов над произвольным полным базисом, например, над {А, -■}. По данной схеме, используя преобразования Цейтина [5], можно построить КНФ С (F), которая выполнима тогда и только тогда, когда выполнима F. Формула С (F) — это, вообще говоря, формула от большего числа переменных, чем F. Однако, что важно, переход от F к С (F) осуществляется за полиномиальное время от длины двоичной записи F. Учитывая сказанное, везде далее под задачей о булевой выполнимости (сокращенно обозначаемой SAT) будем понимать проблему выполнимости произвольной КНФ: то есть по произвольной КНФ С требуется ответить на вопрос: «Верно ли, что С выполнима?» SAT - классическая NP-полная задача [17]. Таким образом, если Р ф NP, то SAT не может быть решена в общем случае за полиномиальное (от размера КНФ) время. Тем не менее в последние 20 лет наблюдается существенный прогресс в разработке алгоритмов решения SAT, показывающих впечатляющие результаты на обширных

классах так называемых индустриальных тестов. Начиная с 2001 года проводятся ежегодные соревнования программных реализаций алгоритмов решения SAT. Такие программы называются SAT-решателями (SAT-solvers). В основе подавляющего большинства современных полных SAT-решателей, эффективных на широких классах практических тестов, лежит алгоритм CDCL (Conflict Driven Clause Learning) [24]. В свою очередь данный алгоритм построен на основе известного еще с 60-х годов XX века алгоритма DPLL (от фамилий авторов: М. Davis, Н. Putnam, G. Logemann, D. Loveland). Основное отличие между этими двумя алгоритмами заключается в том, что в CDCL используется память для хранения истории поиска — более точно, информация о тупиковых ветвях дерева поиска записывается в форме новых ограничений, называемых конфликтными дизъюнктами. Это позволяет в ряде случаев совершать существенно более глубокие откаты, чем в DPLL.

Алгоритм CDCL имеет экспоненциальную сложность на семействе булевых формул, известных как формулы Дирихле (Pigeon Hole Principle Formulas, PHP). Данный факт следует из полиномиальной эквивалентности CDCL и метода резолюций, что было установлено в [11], а также из экспоненциальной сложности метода резолюций на формулах Дирихле [20]. Несмотря на гарантированную неэффективность в худшем случае, современные SAT-решатели, основанные на CDCL, с успехом используются для решения задач из широкого спектра прикладных областей. Такие решатели оказываются эффективными даже в отношении задач криптоанализа: для целого ряда шифров их использование позволяет построить атаки, которые существенно эффективнее метода грубой силы [10; 26; 27] и др.

3. Задачи, связанные с латинскими квадратами

Латинский квадрат порядка п — это квадратная п х п таблица, заполненная символами произвольного алфавита А = {ai,... ,ап} таким образом, что в каждой строке и каждом столбце встречаются все символы из А. Имеется тесная связь между латинскими квадратами и различными комбинаторными и алгебраическими структурами (квазигруппы, корректирующие коды, системы аутентификации, математические головоломки и многое другое). Целый ряд важных свойств латинских квадратов описан в классической монографии М. Холла [4]. Руководство [16] является, по-видимому, самым обширным источником информации о комбинаторных структурах в целом и о латинских квадратах в частности. Из недавних обзорных статей по комбинаторным структурам следует отметить работу [3], в которой представлен анализ свойств многомерных перманентов и их взаимосвязи с обширным классом комбинаторных структур, среди которых латинские гиперкубы,

являющиеся естественными обобщениями латинских квадратов. Помимо прочего, в данной работе приведены оценки числа трансверсалей в латинских квадратах, говорящие о том, что для малых порядков данное число может быть найдено точно в процессе вычислительного эксперимента. В [28] в результате такого эксперимента было найдено число трансверсалей в диагональных латинских квадратах порядка 9. В [29] был описан суперкомпьютерный эксперимент, результат которого — точное число диагональных латинских квадратов порядка 9 (ранее это комбинаторное число не было известно). Целый ряд близких по смыслу результатов может быть найден в статье [25].

Везде далее мы будем в роли алфавита А использовать множество натуральных чисел от 1 до п. Рассмотрим два латинских квадрата А, В порядка п. Занумеруем ячейки первого и второго квадратов в одинаковом порядке т, используя для этой цели числа от 1 до п2. Рассмотрим квадрат А\В, элементами которого являются все возможные пары (а, Ь), а € А,Ь € -В, выписываемые в порядке т (см. рисунок 1). Пары () и (а^, Ъ^) различны по определению тогда и только тогда, когда ец ф а^ или Ъг ф = 1,..., п2, г ф ].

Определение 1. Квадрат А\В называется греко-латинским, если все составляющие его пары различны. Если два латинских квадрата А, В образуют греко-латинский квадрат, то говорят, что А и В ортогональны (используется обозначение «А±В»).

Рис. 1. Пара ортогональных латинских квадратов порядка 3 и образованный ими греко-латинский квадрат.

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

Упомянутая выше гипотеза Эйлера предполагала, что не может существовать греко-латинских квадратов порядка п = Ак + 2 для всех к > 1. Данная гипотеза была сформулирована в 1782 году и опровергнута Р. Ч. Боузом и С. С. Шрикханде в 1959 году в результате построения ортогональной пары порядка 22. Через год в совместной статье с Е. Т. Паркером они же построили первый пример ортогональной пары 10 порядка.

Еще в 1938 году в работе [14] Р. Ч. Боуз установил связь между системами ортогональных латинских квадратов и конечными проективными плоскостями. С одной стороны, можно показать, что если Ь\,... — ортогональная система латинских квадратов порядка п, то £ < п — 1. С другой стороны, при п > 3 проективная плоскость порядка п существует тогда и только тогда, когда существует ортогональная система порядка п и мощности п — 1.

Таким образом, проективная плоскость порядка 10 существует лишь тогда, когда существует ортогональная система, состоящая из 9 латинских квадратов порядка 10. Отсутствие такой системы, как уже говорилось выше, показал К. Лэм в 1991 году, проведя масштабный вычислительный эксперимент [23]. Возникает вопрос: «Какова наименьшая по мощности ортогональная система порядка 10?» Существует гипотеза, что это ортогональная система мощности 2, то есть ортогональная пара. Как было сказано выше, такие пары существуют (данный факт опровергает гипотезу Эйлера) и могут быть найдены различными способами. Таким образом, в соответствии с гипотезой, о которой идет речь, не может существовать ортогональной системы из 3 латинских квадратов порядка 10. Эта гипотеза не доказана и не опровергнута на сегодняшний день и является одной из наиболее известных открытых проблем конечной комбинаторики. Известно большое число попыток доказать данную гипотезу либо построить пример из трех попарно ортогональных латинских квадратов порядка 10. Однако все эти попытки окончились неудачей.

Далее будем называть гипотетическую систему из трех попарно ортогональных латинских квадратов порядка 10 ортогональной тройкой порядка 10. Отметим, что «приближаться» к построению такой системы можно последовательно. Для этого можно использовать следующие понятия (см., например, [16]). Пусть А, В — произвольные латинские квадраты порядка п. Рассмотрим квадрат А\В и выпишем все пары вида (ец, Ьг), г € {1,..., п2}, в некотором фиксированном порядке. Пусть г — число различных пар в полученной последовательности (в указанном выше смысле).

Определение 3. Число г = г (А, В), 1 < г < п2, называется индексом ортогональности пары А, В, а сама эта пара называется квазиортогональной парой индекса г.

Пусть А, В — латинские квадраты порядка п. Очевидно, что А-\_В тогда и только тогда, когда А,В- квазиортогональная пара индекса п2.

Определение 4. Пусть Ь — множество из Ь латинских квадратов порядка п. Пусть г — минимальное значение индекса ортогональности по всем парам квадратов из Ь. Скажем, что Ь — квазиортогональная система индекса г.

Насколько нам известно, одной из наиболее близких по индексу ортогональности к ортогональной тройке порядка 10 является система, приведенная в работе [19]. Конкретно это система из трех латинских квадратов Ь\,Ь2,Ь2~. однако (¿2,Ьз) — квазиортого-

нальная пара индекса 91.

4. Общие принципы пропозиционального кодирования комбинаторных задач, связанных с латинскими квадратами

В данном разделе речь пойдет об общих принципах сведения различных задач о существовании комбинаторных структур к задаче о булевой выполнимости. Основным объектом нашего интереса будут задачи, связанные с латинскими квадратами.

Неформально все дальнейшие построения основаны на идее использовать булевы формулы для задания следующего свойства: «Все элементы в некотором п-элементном множестве различны». Можно ограничиться натуральными номерами элементов и тогда фактически требуется выразить булевой формулой свойство, состоящее в том, что рассматриваемое множество образовано первыми п натуральными числами с точностью до их порядка.

Поясним связь данной задачи с задачами существования комбинаторных объектов. Будем действовать «поступательно», определяя сложные комбинаторные объекты на основе более простых. Элементарный комбинаторный объект в нашем случае — ячейка. Будем полагать, что ячейка может обладать любым свойством из некоторого конечного множества. Удобнее всего представлять данные свойства натуральными числами. Если рассматривается система из нескольких различных ячеек, то каждая такая ячейка также может быть занумерована натуральным числом. Таким образом, имеется два набора натуральных чисел: один набор фиксирован и задает порядок на множестве ячеек, другой — это алфавит А = {1 ,...,п} элементы которого могут быть записаны в ячейки произвольным образом. Наборы ячеек могут образовывать более сложные комбинаторные объекты, например, строка из п ячеек — это также комбинаторный объект. Наиболее интересное для нас свойство строки заключается в том, что все числа в ячейках, формирующих эту строку, различны. Из п строк, действуя по аналогии, мы определяем латинский квадрат. Затем пары ортогональных латинских квадратов и т. д.

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

мых формул. Либо, если искомого объекта не существует, соответствующая формула должна быть невыполнимой.

Обозначим через sol (F) множество наборов, выполняющих произвольную булеву формулу F. Базовая идея пропозиционального кодирования состоит в следующем. Пусть имеется описание W некоторого комбинаторного объекта. Данному описанию ставится в соответствие булева формула F, такая, что sol(F) = 0 тогда и только тогда, когда не существует комбинаторных объектов удовлетворяющих описанию W. В противном случае должно существовать тотальное сюръективное отображение множества sol(F) на множество объектов, удовлетворяющих W. Произвольное а € sol(F) назовем пропозициональным кодом комбинаторного объекта, удовлетворяющего W. Процесс построения формулы F называется пропозициональным кодированием.

Поясним приведенные выше понятия и принципы на примере построения семейства выполнимых булевых формул Fn, п € N, такого, что для конкретного п > 2 существует сюръекция sol (Fn) —>■ LSn, где через LSn обозначено множество латинских квадратов порядка п.

Рассмотрим множество ячеек занумерованных числами от 1 до п. Обозначим данное множество через О = {о\,..., оп}. Рассмотрим алфавит А= {1,... ,п}. Назовем конфигурацией типа 0 произвольную пару (о, а) € О х А. Рассмотрим следующее описание W = — такой набор комбинаторных конфигураций типа 0, что задействованными оказываются все ячейки из О, и любым двум ячейкам, входящим в приписаны различные буквы из А». Произвольную конфигурацию, удовлетворяющую описанию W, назовем комбинаторной конфигурацией типа 1.

Опишем теперь известный способ пропозиционального кодирования комбинаторных конфигураций первого и второго типов. Итак, пусть О = {oí,..., оп} — множество из п ячеек. Сопоставим произвольному o¿, i € {1 ,...,п}, множество булевых переменных Хг = {х\,..., хгп}. Рассмотрим следующую булеву формулу:

Несложно понять, что sol образован всеми различными

булевыми векторами длины п, вес Хэмминга которых равен 1. Тем самым каждый вектор а € sol мы можем рассматривать как двоичный код комбинаторной конфигурации типа 0: ячейка, с номером г заполнена числом к, где к — номер позиции единичного бита в а.

Аббревиатура ООС — это сокращение от Only One Cardinality (см., например, [9]). Очевидно, что формулу 4.1 можно рассматривать как способ задания свойства (предиката) булевого вектора длины п иметь единственный единичный бит. Характеристическая функция данного предиката определена всюду на {0,1}га, принимает значение «истина»

Fooc {Хг) = {х\ V--- Va£) А Д

V -4) • (4-1)

только на п единичных векторах и принимает значение «ложь» на всех остальных векторах.

Введем п множеств вида Хг = [хгъ ..., хгп}, г € {1,..., п}, организуем их в виде пхп матрицы, столбец с номером г, г € {1,... , п}, которой составлен из переменных х\,..., хгп. Пусть X1 - множество переменных, образующих строку данной матрицы с номером I, ¿€{1,...,п},то есть

— ^ х1 ^... ^ xl }. Рассмотрим следующую формулу:

Fooc {X1) А • • • A Fooc (Хп) A Fooc (х1) А • • • A Fqoc . (4.2)

Несложно понять, что произвольный набор значений переменных из и?=1 Xх, выполняющий 4.2, если его разбить на участки (сегменты), соответствующие множествам Хг, г € {1 ,...,п}, содержит все п различных единичных векторов из {0,1}п и, таким образом, кодирует комбинаторную конфигурацию типа 1.

Рассмотрим теперь множество Lni образованное п2 ячейками. Будем рассматривать Ьп как квадратную матрицу, каждая строка и каждый столбец которой содержат п ячеек, при этом каждой ячейке в Ьп приписан собственный уникальный номер и произвольное число из множества {1 ,...,п}. Очевидно, что Ьп является латинским квадратом порядка п тогда и только тогда, когда каждая строка и каждый столбец Ьп образуют комбинаторную конфигурацию типа 1. Произвольный латинский квадрат будем называть комбинаторной конфигурацией типа 2. Легко видеть, что в пропозициональной кодировке латинского квадрата порядка п, основанной на ООС-предикате, число переменных растет с ростом п как п3, а число дизъюнктов как В (та4).

5. Новый алгоритм пропозиционального кодирования различимости объектов в конечном множестве

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

Заметим, что довольно очевидной альтернативой рассмотренного выше способа описания произвольного натурального числа г € {1,..., п} единичными вектором длины п является описание данного числа вектором длины riogn"|, являющимся двоичным представлением числа г — 1. Более точно, произвольному числу m € {0,1,... , п — 1} сопоставим булев вектор а = [а\,..., a|-iogra-|), являющийся вектором коэффициентов его двоичного представления:

т = ai + а2 • 2 + • • • + ariogral •

сЦ € {0,1},г € {1,..., flogn]}.

(5.1)

Рассмотрим множество {0,1}""Г1о§га1. Разобьем произвольное слово 7 € {0,1}га'Г1о§га1 на п последовательных подслов длины |~logn~| каждое. Обозначим полученное множество через Л7. Будем говорить, что множество Л7 порождено словом 7. Определим предикат

ОЮ : {0,{False, True}

как свойство произвольного слова 7 длины п ■ [logп\ порождать множество Л7, содержащее расположенные в произвольном порядке векторы двоичных представлений (в соответствии с (5.1)) всех чисел из множества {0,1,..., п — 1}.

Определение 5. Про произвольное 7 € {0,1}га'Г1-1^ на К0т0р0М ОЮ принимает значение True, будем говорить, что данное слово обладает ОЮ-свойством.

Очевидно, что произвольное слово 7 из {0,1}га , на котором OtO-предпкат принимает значение True, можно рассматривать как двоичный код комбинаторной конфигурации типа 1. В этом случае будем также говорить, что 7 задает такую конфигурацию.

Построим теперь булеву формулу, задающую OtO-предпкат. С этой целью будем рассматривать нашу базовую задачу: имеется множество ячеек-объектов О = {о\,..., оп} и множество чисел Р = {1,..., п}.

Свяжем с каждым объектом Oi € О, г € {1,... ,п} , множество, состоящее из s = [logn] булевых переменных Хг = {х\,... ,хг3}. Для произвольного т € {0,1,... , п — 1} обозначим через

(ai (m),...,as (m))

вектор двоичного представления 5.1 числа т. Везде далее запись хх как обычно (см. [8]) означает литерал -<х при Л = 0, и литерал х при Л = 1.

Введем в рассмотрение следующую формулу:

ф{Х\т) = {х\)а1(т) Л---л(Ж;Г(т),

Таким образом, ф (Хг,т) принимает значение 1 только на наборе значений переменных Хг, который является вектором коэффициентов двоичного представления 5.1 числа т. Рассмотрим формулу:

п п— 1

Ф(Х) = Д V (ИГМ Л • • • А (4ГМ) • (5.2)

i= 1 т=О

Лемма 1. Формула Ф (X) задает ОЮ-предикат.

Доказательство. Запишем 5.2 в следующем виде: v(It1)aiMA".A(If(,-1)).

V

(5.3)

Рассмотрим произвольный 7 € {0,1}га'Г1о§га1 _ Разобьем его на п последовательных сегментов, рассматривая данный вектор как набор значений переменных из X1,... ,Хп. Предположим, что 7 состоит из двоичных представлений всех чисел от 0 до п — 1, записанных в произвольном порядке. Тогда для каждого г € {1,... ,п} найдется такое т € {0,...,п — 1} что формула вида ф(Хг, т) выполнена на векторе 7. Соответственно,

Ф(Х)|7 = 1.

Пусть теперь 7 - произвольный вектор из {0,1 }«■• П°§ ; не обладающий ОЮ-свойством. Легко понять, что в данном случае найдется такое г € {1,..., п}, что для любого т € {0,..., п — 1} формула ф (Хг, т) примет значение 0 на 7. Тем самым имеет место Ф(Х)|7 = 0. Лемма 1 доказана. □

Далее мы покажем, что пропозициональная кодировка конфигурации типа 1, построенная на основе OtO-предиката, является асимптотически существенно более экономной, чем на основе О ОС-предиката, по числу дизъюнктов. Также мы увидим, что кодировка на основе OtO выгодно отличается от ООС-кодировки в смысле еще одного свойства. Для понимания его сути нам потребуется понятие так называемых лазеек (Backdoor sets), введенное в [30].

Рассмотрим произвольную КНФ С над множеством переменных X. Для произвольного Х',Х' С X, через {0,обозначим множество наборов значений переменных, входящих в X'. Через C[X'/fi], fi € {0,1}|Х'' обозначим КНФ, которая получается из С в результате подстановки набора /3 значений переменных из X' (подстановка определяется стандартным способом — см., например, [7]).

Определение 6. (см. [30]). Пусть А — некоторый полиномиальный алгоритм. Если для любого fi € {0,1}'Х ' алгоритм А выдает верный ответ на вопрос о выполнимости КНФ С[Х'/[5\, то X' называется лазейкой (Backdoor Set) для КНФ С относительно алгоритма А.

Применение лазеек часто позволяет определить выполнимость КНФ существенно быстрее, чем без их использования. Очевидно, что SAT в отношении КНФ С с лазейкой X' можно решать в параллельном режиме, рассматривая I SAT-задач в отношении КНФ вида С [X'/¡3] и решая каждую из них алгоритмом А.

Определение 7. Если алгоритм А - это правило единичного дизъюнкта (Unit Propagation rule, UP [24]), то лазейку для КНФ С относительно А будем называть UP-лазейкой.

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

Теорема 1. Существует пропозициональная кодировка латинского квадрата Ln, основанная на OtO-предикате, с асимптотикой роста числа переменных О (п3) и асимптотикой роста числа дизъюнктов О (п3 • log п), имеющая UP-лазейку мощности п2 • [log п \.

Доказательство. Итак, представим OtO-предикат формулой 5.3. Наша цель — перейти от задачи выполнимости 5.3 к задаче выполнимости КНФ. Используем для этого преобразования Цейтина [5]. Для каждого m € {0,..., п — 1} и произвольного г € {1,..., п} введем новую переменную z™ и рассмотрим формулу

КНФ-представление формулы 5.4 содержит в+1 дизъюнкт. Обозначим эту КНФ через ф™1. Рассмотрим следующую КНФ:

В силу свойств преобразований Цейтина существует биекция между множеством наборов значений переменных из X, выполняющих 5.2, и множеством наборов перемененных из Х{]{г™}, i € {1 ,...,п}, т € {О,... ,п — 1}, выполняющих 5.5. Тем самым мы свели задачу выполнимости формул вида Ф (X) к задаче выполнимости КНФ вида 5.5 с асимптотикой по переменным В (п2) и асимптотикой по дизъюнктам В (п2 • log п). Данная КНФ кодирует комбинаторную конфигурацию типа 1 (например, произвольную строку латинского квадрата Ьп). Соответственно, для КНФ, кодирующей весь квадрат Ьп целиком, будет иметь место асимптотика по переменным В (п3) и асимптотика по дизъюнктам В (п3 • log п).

С формулами, кодирующими латинский квадрат порядка п, построенными на основе ООС-предиката и на основе OtO-предпката, есте-

3

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

ственным образом связываются функции вида fooc '■ {0,1}га —> {0,1} и foto ■ {0, ir2'riogral ->■ {0,1}. Например, в случае функции fooc мно-

3

жество {0,1}п рассматривается как множество значений переменных

(5.4)

(5.5)

из X = и?=1 Хг, приписанных ячейкам латинского квадрата: fooc при-

3

нимает значение 1 на любом таком векторе а € {0,1}п , для которого выполнены все ООС-условия, задающие строки и столбцы данного латинского квадрата, и принимает значение 0 на всех остальных векторах

3

из {0,1}п . Аналогичным образом определяется функция foto- Функции fooc и foto можно задать схемами из функциональных элементов Sooc и Soto (соответственно) над базисом {А, -■}. Описанные выше пропозициональные кодировки латинского квадрата Ьп могут быть эффективно построены в результате преобразований Цейтина, примененных к схемам Sooc и Soto■ В работах [2; 12] был установлен следующий факт. Пусть / : {0,1}М —> {0,1}W — произвольная дискретная функция, заданная схемой S (/) из функциональных элементов над базисом {А, -■}, и С (/) — КНФ, построенная по схеме S (/) в результате преобразований Цейтина. Тогда множество Хгп переменных в С (/), приписанных входным полюсам схемы S (/), является UP-лазейкой для С (/). Из сказанного выше следует, что в случае функции fooc мощность Хт есть п3, а в случае foto множество Хгп имеет мощность п2 • [~logn~|. Теорема 1 доказана. □

Отметим, что описанная выше кодировка латинского квадрата на основе OtO-предиката асимптотически существенно экономнее, чем ООС-кодировка по дизъюнктам и имеет меньшую UP-лазейку. Данные кодировки имеют одинаковую асимптотику по переменным. Однако на самом деле число переменных в OtO-кодировке больше, поскольку основной вклад в асимптотику В (п3) вносят «цейтиновские» переменные вида г™, притом что помимо них в кодировке присутствуют и п2 • [log п\ переменных, кодирующих содержимое ячеек квадрата.

6. Вычислительные эксперименты

В данном разделе мы приводим результаты использования пропозициональной кодировки OtO-предиката, описанной в теореме 1, для поиска некоторых комбинаторных структур, в основе которых лежат латинские квадраты. Мы реализовали алгоритм пропозиционального кодирования латинских квадратов из теоремы 1, а также кодировку на основе ООС-предиката. Соответствующие алгоритмы строят КНФ в формате DIMACS [18]. К этим КНФ мы применяли известный многопоточный SAT-решатель Plingeling [13]. Все эксперименты проводились на одном узле вычислительного кластера Иркутского суперкомпьютерного центра «Академик В.М. Матросов» [6].

Первая серия экспериментов относится к поиску ортогональных пар латинских квадратов порядка 10 (каждая такая пара опровергает гипотезу Эйлера). Решатель Plingeling — рандомизированный алгоритм.

С учетом этого мы сделали по 10 независимых запусков РНг^еИг^ на ООС- и ОЮ-кодировках, кодирующих существование ортогональных пар латинских квадратов порядка 10. По результатам данных экспериментов ОЮ-кодировка оказалась в среднем в два раза эффективнее ООС-кодировки (среднее время нахождения одной ортогональной пары порядка 10 при использовании ОЮ-кодировки составило менее 15 минут). Вторая серия экспериментов заключалась в поиске квазиортогональных троек латинских квадратов порядка 10. Как было сказано в пункте 3, гипотетическая ортогональная тройка порядка 10 — это на самом деле квазиортогональная система из трех латинских квадратов с индексом ортогональности 100. При кодировании условий на индекс ортогональности мы использовали методы, описанные в статье [1]. Как результат, были найдены квазиортогональные тройки порядка 10 с индексом ортогональности до 85 включительно. На данной серии экспериментов ОЮ-кодировка проиграла по эффективности О ОС-кодировке в среднем около 10%.

7. Заключение

В настоящей статье мы описали новый алгоритм пропозиционального кодирования предиката над п натуральными числами, истинного в том случае, если все эти числа различны. Мы использовали построенную кодировку для сведения некоторых комбинаторных задач, связанных с латинскими квадратами, к проблеме булевой выполнимости (SAT). К получаемым SAT-задачам применялся многопоточный решатель Plingeling, с использованием которого были проведены эксперименты на вычислительном кластере «Академик В. М. Матросов» Иркутского суперкомпьютерного центра. На некоторых задачах новая кодировка по эффективности существенно превзошла известную схему кодирования, основанную на ООС-предикате.

Список литературы

1. Белей Е. Г., Семенов А. А. О вычислительном поиске квазиортогональных систем латинских квадратов, близких к ортогональным системам // International Journal of Open Information Technologies. 2018. Vol. 6, N 2, P. 22-30.

2. Семенов А. А. Декомпозиционные представления логических уравнений в задачах обращения дискретных функций // Изв. РАН. 2009. № 5. С. 47-61.

3. Тараненко А. А. Перманенты многомерных матриц: свойства и приложения // Дискретный анализ и исследование операций. 2016. Т. 23, № 4. С. 35-101. https://doi.org/10.17377/daio.2016.23.517

4. Холл М. Комбинаторика. М. : Мир, 1970. 424 с.

5. Цейтин Г.С. О сложности вывода в исчислении высказываний // Записки научных семинаров ЛОМИ. 1968. Т. 8. С. 234-259.

6. ЦКП Иркутский суперкомпьютерный СО РАН [Электронный ресурс]. http://hpc.icc.ru (дата обращения: 28.04.2019).

7. Чень Ч., Ли Р. Математическая логика и автоматическое доказательство теорем. М. : Наука, 1983. 360 с.

8. Яблонский С. В. Введение в дискретную математику. М. : Наука, 1986. 384 с.

9. Asin R., Nieuwenhuis R., Oliveras A., Rodriguez-Carbonell E. Cardinality networks: a theoretical and empirical study // Constraints. Vol. 16. Iss. 2011. P. 195-221. https://doi.org/10.1007/sl0601-010-9105-0

10. Bard G. V. Algebraic Cryptanalysis. Springer Publishing Company, Incorporated, last Edition, 2009. https://doi.org/10.1007/978-0-387-88757-9

11. Beame P., Kautz H., Sabharwal A. Understanding the power ol clause learning // IJCAI (18th International Joint Conlerence on Artificial Intelligence). 2003. P. 1194-1201.

12. Bessiere C., Katsirelos G., Narodytska N., Walsh T. Circuit complexity and decompositions ol global constraints. In IJCAI 2009, Proceedings ol the 21st International Joint Conlerence on Artificial Intelligence. 2009. P. 412-418.

13. Biere A. Splatz, Lingeling, Plingeling, Treengeling, YalSAT Entering the SAT Competition 2016 // Proc. ol SAT Competition / Balyo Т., Heule M., Jarvisalo M. (eds.). 2016. P. 44-45.

14. Bose R. C. On the application ol the properties ol Galois fields to the problem ol construction ol hyper-Graeco-Latin squares // Sankhya. 1938. Vol. 3. P. 323-338.

15. Bose R. C., Shrikhande S. S., Parker E. T. Further results on the construction ol mutually orthogonal Latin squares and the lalsity ol Euler's conjecture // Canadian Journal ol Mathematics. 1960. P. 189-203.

16. Colbourn C. J., Dinitz J. H. Handbook ol combinatorial designs. Second edition. CRC Press, 2010. http://doi.org/10.1201/9781420010541

17. Cook S. A. The complexity ol theorem-proving procedures // Third annual ACM symposium on Theory of computing, 1971, Ohio, USA. P. 151-159.

18. DIMACS Implementation Challenges [Electronic resource]. URL: http://dimacs.rutgers.edu/Challenges/

19. Egan J., Wanless I. M., Enumeration of MOLS of small order // Math. Comput. 2016. Vol. 85. P. 799-824. https://doi.org/10.1090/mcom/3010

20. Haken A. The intractability or resolution // Theoretical Computer Science. 1985. Vol. 39. P. 297-308.

21. Heule M. J. H., Kullman О., Marec V. W. Solving and Verifying the Boolean Pythagorean Triples Problem via Cube-and-Conquer // Lecture Notes in Computer Science. 2014. Vol. 9710 (SAT-2016). P. 228-245.

22. Konev В., Lisitsa A. A SAT Attack on Erdos Discrepancy Problem // Lecture Notes in Computer Science. 2014. Vol. 8561 (SAT-2014). P. 219-226. https://doi.org/10.1007/978-3-319-09284-3_17

23. Lam C.W.H. The Search for a Finite Projective Plane of Order 10. The American Mathematical Monthly. 1991. P. 305-318.

24. Marques-Silva J. P., Lynce I., Malik S. Conflict-Driven Clause Learning SAT solvers // Handbook of Satisfiability / Biere A., Heule M., van Maaren H., Walsh T. (eds.). 2009. P. 131-153. https://www.doi.org/10.3233/978-l-58603-929-5-131

25. McKay B. D., Wanless I. M. A census of small Latin hypercubes // SIAM J. Discrete Math. 2008. Vol. 22. P. 719-736. https://doi.org/10.1137/070693874

26. Mironov I., Zhang L. Applications of SAT solvers to cryptanalysis of hash functions // Lecture Notes in Computer Science. 2006. Vol. 4121. P. 102-115. https://doi.org/10.1007/11814948_13

27. Semenov A., Zaikin О., Otpuschennikov I., Kochemazov S., Ignatiev A. On cryptographic attacks using backdoors for SAT. In The Thirty-Second AAAI Conference on Artificial Intelligence, AAAI'2018, pages 6641-6648, 2018.

28. Vatutin E., Kochemazov S., Zaikin O., Valyaev S. Enumerating the Transversals for Diagonal Latin Squares of Small Order // Ceur-WS. 2017. Vol. 1973 (BOINC:FAST 2017). P. 6-14.

29. Vatutin E., Kochemazov S., Zaikin O. Applying Volunteer and Parallel Computing for Enumerating Diagonal Latin Squares of Order 9// Communication in Computer and Information Science. 2017. Vol. 753. P. 114-129. https://doi.org/10.1007/978-3-319-67035-5_9

30. Williams R., Gomes C. P., Selman B. Backdoors to typical case complexity //In 18th International Joint Conference on Articial Intelligence - IJCAI 2003. 2003. P. 1173-1178.

Евгения Геннадьевна Белей, магистрант, Иркутский национальный исследовательский технический университет, Российская Федерация, 664074, г. Иркутск, ул. Лермонтова, 83, тел.: (908)6684039 (e-mail: [email protected])

Александр Анатольевич Семенов, кандидат технических наук, доцент, зав. лабораторией, Институт динамики систем и теории управления им. В. М. Матросова СО РАН, Российская Федерация, 664033, г. Иркутск, ул. Лермонтова, 134, тел.: (914)8707647 (e-mail: [email protected])

Поступила в редакцию 30.04-19

On Propositional Encoding of Distinction Property in Finite Sets

E. G. Beley

Irkutsk National Research Technical University, Irkutsk, Russian Federation

A. A. Semenov

Matrosov Institute for System Dynamics and Control Theory of SB RAS, Irkutsk, Russian Federation

Abstract. In the paper we describe a new propositional encoding procedure for the property that all objects comprising some finite set are distinct. For the considered class of combinatorial problems it is sufficient to represent the elements of such set by their natural numbers. Thus, there is a problem of constructing a satisfiable Boolean formula, the satisfying assignments of which encode the first те natural numbers without taking into account their order. The necessity to encode such sets into Boofean fogic is motivated by the desire to appfy to the corresponding combinatoriaf probfems the state-of-the-art afgorithms for sofving the Boofean satisfiabifity probfem (SAT). In the paper we propose the new approach to defining the Boofean formufa for the characteristic function of the predicate which takes the vafue of True only on the sets of binary words encoding the numbers from 0 to те — 1. The corresponding predicate was named OtO (from One-

to-One). The propositional encoding of the OtO-predicate has a better lower bound compared to the propositional encoding of a relatively similar predicate known as OOC-predicate (from Only One Cardinality). The proposed OtO-predicate is used to reduce to SAT a number of problems related to Latin squares. In particular, using the OtO-predicate we constructed the SAT encodings for the problems of finding orthogonal pairs and quasi-orthogonal triples of Latin squares of order 10. We used the multi-threaded SAT solvers and the resources of a computing cluster to solve these problems.

Keywords: propositional encoding, SAT, latin squares.

References

1. Beley E.G., Semenov A.A. On computational search for quasi-orthogonal systems of Latin squares which are close to orthogonal system. International Journal of Open Information Technologies, 2018, vol. 6, no. 2, pp. 22-30. (in Russian)

2. Semenov A.A. Decomposition representations of logical equations in inversion problems of discrete functions. News of the Russian Academy of Sciences, 2009, no. 5, pp. 47-61. (in Russian)

3. Taranenko A.A. Permanents of multidimensional matrices: Properties and applications. Journal of Applied and Industrial Mathematics, 2016, vol. 10, no. 4, pp. 567-604. https://doi.org/10.1134/S1990478916040141

4. Hall M. Combinatorics. Moscow, Mir Publ., 1970. 424 p.

5. Tseitin G.S. About the complexity of the conclusion in the calculus of statements. Notes of scientific seminars LOMI, 1968, vol. 8., pp.234-259. (in Russian)

6. CCU Irkutsk supercomputer SB RAS [Electronic resource]. URL: http://hpc.icc.ru (the date of handling: 04.28.2019).

7. Chen C., Lee R. Mathematical logic and automatic proof of theorems. Moscow, Nauka Publ. 1983. 360 p. (in Russian)

8. Yablonsky S.V. Introduction to discrete mathematics. Moscow, Nauka Publ. 1986. 384 p.(in Russian)

9. Asin R., Nieuwenhuis R., Oliveras A., Rodriguez-Carbonell E. Cardinality networks: a theoretical and empirical study. Constraints, vol. 16, Iss. 2011, pp. 195-221. https://doi.org/10.1007/sl0601-010-9105-0

10. Bard G.V. Algebraic Cryptanalysis. Springer Publishing Company, Incorporated, 2009. https://doi.org/10.1007/978-0-387-88757-9

11. Beame P., Kautz H., Sabharwal A. Understanding the power of clause learning. Proceedings of thel8th International Joint Conference on Artificial Intelligence), 2003, pp. 1194-1201.

12. Bessiere C., Katsirelos G., Narodytska N., Walsh T. Circuit complexity and decompositions of global constraints. Proceedings of the 21st International Joint Conference on Artificial Intelligence, 2009, pp. 412-418.

13. Biere A. Splatz, Lingeling, Plingeling, Treengeling, YalSAT Entering the SAT Competition 2016. Proc. of SAT Competition 2016, pp. 44-45.

14. Bose R.C. On the application of the properties of Galois fields to the problem of construction of hyper-Graeco-Latin squares. Sankhya, 1938, vol. 3. no. 4, pp. 323-338.

15. Bose R.C., Shrikhande S.S., Parker E.T. Further results on the construction of mutually orthogonal Latin squares and the falsity of Euler's conjecture. Canadian Journal of Mathematics, 1960, pp. 189-203.

16. Colbourn C.J., Dinitz J.H. Handbook of combinatorial designs. CRC Press. 2010. http://doi.org/10.1201 /9781420010541

17. Cook S.A. The complexity of theorem-proving procedures. Third annual ACM symposium on Theory of computing, 1971, Ohio, USA. pp. 151-159.

18. DIMACS Implementation Challenges [Electronic resource]. URL: http://dimacs.rutgers.edu/Challenges/

19. Egan J., Wanless I. M. Enumeration of MOLS of small order. Math. Comput, 2016, vol. 85, pp. 799-824. https://doi.org/10.1090/mcom/3010

20. Haken A. The intractability or resolution. Theoretical Computer Science, 1985, vol. 39. pp. 297-308.

21. Heule M.J.H., Kullman O., Marec V.W. Solving and Verifying the Boolean Pythagorean Triples Problem via Cube-and-Conquer. Lecture Notes in Computer-Science, 2014, vol. 9710 (SAT-2016), pp. 228-245.

22. Konev B., Lisitsa A. A SAT Attack on Erdos Discrepancy Problem. Lecture Notes in Computer Science, 2014, vol. 8561 (SAT-2014), pp. 219-226. https://doi.org/10.1007/978-3-319-09284-3_17

23. Lam C.W.H. The Search for a Finite Projective Plane of Order 10. The American Mathematical Monthly. 1991. pp. 305-318.

24. Marques-Silva J. P., Lynce I., Malik S. Conflict-Driven Clause Learning SAT solvers. Handbook of Satisfiability, 2009, pp. 131-153. https://doi.org/10.3233/978-1-58603-929-5-131

25. McKay B. D., Waniess I. M.A census of small Latin hypercubes. SIAM J. Discrete Math., 2008, vol. 22, pp. 719-736. https://doi.org/10.1137/070693874

26. Mironov I., Zhang L. Applications of SAT solvers to cryptanalysis of hash functions. Lecture Notes in Computer Science, 2006, vol. 4121, pp. 102-115. https://doi.org/10.1007/11814948_13

27. Semenov A., Zaikin O., Otpuschennikov I., Kochemazov S., Ignatiev A. On cryptographic attacks using backdoors for SAT. In The Thirty-Second AAAI Conference on Artificial Intelligence, AAAI'2018, 2018, pp. 6641-6648.

28. Vatutin E., Kochemazov S., Zaikin O., Valyaev S. Enumerating the Transversals for Diagonal Latin Squares of Small Order. Ceur-WS, 2017, vol. 1973, pp. 6-14.

29. Vatutin E., Kochemazov S., Zaikin O. Applying Volunteer and Parallel Computing for Enumerating Diagonal Latin Squares of Order 9. Communication in Computer and Information Science, 2017, vol. 753, pp. 114-129. https://doi.org/10.1007/978-3-319-67035-5_9

30. Wiifiams R., Gomes C.P., Seiman B. Backdoors to typicai case compfexity. Proceedings of the 18th International Joint Conference on Articial Intelligence -IJCAI 2003, 2003, pp. 1173-1178.

Evgenia Beley, Undergraduate, Irkutsk National Research Technical University, 83, Lermontov st., Irkutsk, 664074, Russian Federation, tel.: (908)6684039 (e-mail: [email protected])

Alexander Semenov, Candidate of Sciences (Technic Sciences), Head of Laboratory, Matrosov Institute for System Dynamics and Control Theory SB RAS, 134, Lermontov st., Irkutsk, 664033, Russian Federation, tel.: (914)8707647 (e-mail: [email protected])

Received 30.04.19

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