powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Решение NP-сложных задач за полиномиальное время
25 сообщений из 136, страница 3 из 6
Решение NP-сложных задач за полиномиальное время
    #40103277
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov


Даже миллион успешных решений для небольших N говорит лишь о том,
что вы, возможно, на правильном пути.
Например, срезали у экспоненты M степеней.
Это здорово, но этого мало.


Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103282
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov


Даже миллион успешных решений для небольших N говорит лишь о том,
что вы, возможно, на правильном пути.
Например, срезали у экспоненты M степеней.
Это здорово, но этого мало.


Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего.


Открыл. Убедился.
Вы гарантируете, что при любом N единственный вызов функции IsSatisfable
дает окончательный ответ и не придется ничего "дорешивать" и перепроверять?
Если ответ "да", то поздравляю.
Если ответ "в редких случаях надо еще...", то сами понимаете.

Интересуют ложноположительные срабатывания.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103287
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

Я правильно понимаю, что на всех примерах и каталога samples
нет ложноположительных срабатываний?

Еще стоит присмотреться к тому примеру, о котором вы писали,
что не все назначения из допустимой с точки зрения решателя суперпозиции
давали положительный результат.
Можно попробовать добавить в этот пример несколько условий
с целью отсечь назначения, дающие положительный результат,
и оставить только ложноположительный.
Можно попробовать сделать это не прямо, а при помощи
произведения с симметричной КНФ (с перенумерованными переменными).
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103295
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
20 переменных
50 переменных
если кто-то будет утверждать, что тут есть экспоненциальная сложность.
Есть же исходники на гитхабе, там текста на две страницы всего. Проверить, что бесконечных циклов нет, проблемы не должно быть.
Клянусь мамой?
Покажите графики с ассимптотикой здесь.
Там 2 страницы, а здесь уже 3-я стр., а тех двух здесь всё ещё нет.
Что означает "проверить"? бесконечные циклы - вопрос на стороне программиста, при чём здесь беск. циклы?
Экспоненциальной может и не быть для некоторого подмножества данных.

У Usov'а тоже старый ноут, и ничего, долго - на ночь можно. Графики убеждают лучше, чем ля-ля.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103305
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Мы видимо так и будем тут говорить о разном ) Нет там экспоненты вообще. Откройте уже исходный код и убедитесь. Две страницы текста всего.


Открыл. Убедился.
Вы гарантируете, что при любом N единственный вызов функции IsSatisfable
дает окончательный ответ и не придется ничего "дорешивать" и перепроверять?
Если ответ "да", то поздравляю.
Если ответ "в редких случаях надо еще...", то сами понимаете.

Интересуют ложноположительные срабатывания.


Дорешивать придется. Есть пример, на котором алгоритм всегда выдает ложноположительный ответ. Особый случай КНФ, в котором алгоритм не может разрешить две или более невыполнимых циклических зависимости, взаимоотрицающих друг друга. В разделе samples лежит файл Mikhail_unsat.cnf , содержащий восемь таких циклов. Как найти и разрешить такие зависимости я вполне представляю и сейчас занимаюсь алгоритмом этой проблемы. Других вариантов ложноположительных ответов не существует. Уже написана большая часть формального доказательства работы алгоритма, в котором подробно рассматривается это исключение. Так же есть доказательство того, что невозможно получить ложноотрицательное решение.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103306
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98

Там 2 страницы, а здесь уже 3-я стр., а тех двух здесь всё ещё нет.


Вы серьезно? Может мне сюда проект весь выложить в отдельную тему специально для тех, кто не увидел тут ссылки на проект github? Думаю модераторы будут очень рады такому.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103307
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...


Открыл. Убедился.
Вы гарантируете, что при любом N единственный вызов функции IsSatisfable
дает окончательный ответ и не придется ничего "дорешивать" и перепроверять?
Если ответ "да", то поздравляю.
Если ответ "в редких случаях надо еще...", то сами понимаете.

Интересуют ложноположительные срабатывания.


Дорешивать придется. Есть пример, на котором алгоритм всегда выдает ложноположительный ответ. Особый случай КНФ, в котором алгоритм не может разрешить две или более невыполнимых циклических зависимости, взаимоотрицающих друг друга. В разделе samples лежит файл Mikhail_unsat.cnt, содержащий восемь таких циклов. Как найти и разрешить такие зависимости я вполне представляю и сейчас занимаюсь алгоритмом этой проблемы. Других вариантов ложноположительных ответов не существует. Уже написана большая часть формального доказательства работы алгоритма, в котором подробно рассматривается это исключение.


Дорешивание - это и есть экспонента.

> Других вариантов ложноположительных ответов не существует
Откуда вы это знаете. Может, просто другие варианты вам не попадались.
В общем, это надо доказать, или дорешивать придется всегда.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103309
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
это надо доказать, или дорешивать придется всегда.


Согласен. После моего алгоритма в случае положительного ответа придется запускать алгоритм или получения всех ответов - он экспоненциальный, так как решение может содержать все 2 n возможных решений, но может быть выгоден, если количество оставшихся "в живых" состояний крайне мало и соответственно решений тоже очень мало, или алгоритм с построением направленного графа таких зависимостей, он неприятный, требует дополнительно N 6 памяти и работает соответственно не меньше чем за N 6 времени, хотя на фоне общего времени получения решения N 10 его стоимость мала.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103316
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
это надо доказать, или дорешивать придется всегда.


Согласен. После моего алгоритма в случае положительного ответа придется запускать алгоритм или получения всех ответов - он экспоненциальный, так как решение может содержать все 2 n возможных решений, но может быть выгоден, если количество оставшихся "в живых" состояний крайне мало и соответственно решений тоже очень мало, или алгоритм с построением направленного графа таких зависимостей, он неприятный, требует дополнительно N 6 памяти и работает соответственно не меньше чем за N 6 времени, хотя на фоне общего времени получения решения N 10 его стоимость мала.


N^6 по памяти - это проблема.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103317
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

Есть пока только гипотеза, что исследовать нужно не только пространство возможных решений, но и пространство нулей - тех состояний которые были выкинуты на этапе работы алгоритма консенсуса. Если среди них есть циклические зависимости, то вероятно они являются отражением наших циклов на область нулей. Плюс такого подхода в том, что при ложноположительном результате в области нулей практически отсутствуют состояния, что значительно сокращает пространство поиска такой зависимости. Например со случаем файла mikhail_unsat в пространство нулей кроме самой КНФ вобще ничего не попадает.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103327
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov,

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



Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103329
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
Aleksandr Sharahov,

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



Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей.


Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103331
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...



Что мешает домножить файл mikhail_unsat на КНФ с сотней других переменных, которая имеет решение и кучу нулей.


Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих.


Решатели так и делают.
Расщепляют по наиболее популярной переменной и упрощают.
Тут сразу рекурсия вырисовывается.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103333
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Вообще в конце можно попытаться построить хотя бы одно решение, тогда получим конкретный вектор, указывающий на конфликт, рассматриваем этот вектор и убиваем конфликт. Проблема может быть в том, что число таких конфликтов конечно конечно, но я не готов сейчас назвать даже порядок ) Проблема еще и в том, что на данный момент я даже не знаю, влияет ли такой конфликт на всё решение сразу или только на часть возможных решений. Если он влияет только на часть возможных решений, то способ с построением конкретного решения может стать экспоненциальным. Например, имеется одно решение и 2^n -1 конфликтующих.


Решатели так и делают.
Расщепляют по наиболее популярной переменной и упрощают.
Тут сразу рекурсия вырисовывается.


Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103338
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...


Решатели так и делают.
Расщепляют по наиболее популярной переменной и упрощают.
Тут сразу рекурсия вырисовывается.


Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт.


Оно не много дает, если действовать рекурсивно.
Хорошо бы уметь определять независимые конфликты не рекурсивно.
Нечто подобное есть в эвристиках решателей - они не суются повторно туда, где однажды обожглись.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40103339
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт.


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


Можно нулевые вектора попробовать проверить на наличие цепочек приводящих к какому-то локальному решению. Консенсус среди нулей. Пусть сами выберут кто лишний.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40104529
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Интересно, да, если имеет место расщепление по какой-то переменной, то сумма всех нулевых векторов в обоих половинах не может превышать сумму таких векторов в общем решении. Но я не уверен, что это нам что-то даёт.


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


Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40104538
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...


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


Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector


Насчет 2n можно пояснить:
что хранится,
как сравнивается,
почему этого достаточно для фильтрации множества решений?
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40104543
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Решение готово. Надо просто ХРАНИТЬ все построенные векторы и сравнивать не с тремя переменными комбинации, а с вектором целиком. Новое решение решает проблему, жрёт в 2n раз больше памяти и соответственно времени. Исходники можно найти тут: https://github.com/gromas/polysat/tree/extended_vector


Насчет 2n можно пояснить:
что хранится,
как сравнивается,
почему этого достаточно для фильтрации множества решений?


  • хранятся векторы значений размера 2n для каждого сочетания трёх переменных из n. По два бита на значение. Принимают значения 0/1 + бит на хранение статуса Set/Unset
  • сравниваются между собой вектор одного сочетания со всеми векторами остальных сочетаний. При совпадении вектор проверяемого сочетания дополняется (выставляются совпадающие биты), при отстутствии совпадений вектор удаляется (последний бит в наборе байтов вектора хранит признак удаления)
  • при полном удалении всех 8 векторов сочетания получаем UNSAT
  • при отсутствии изменений в очередном цикле сравнения получаем SAT. Цикл do ... while(changed). Максимальное количество циклов в худшем случае составляет 2n^4, если в каждом цикле обновляется один единственный бит, обычно занимает от трёх до пяти циклов.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40104546
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
почему этого достаточно для фильтрации множества решений?


Вопрос интересный. Сейчас сижу описываю принцип работы. Смысл следующий.

  • Изначально решение представляет набор векторов назначения переменных (состояний) всех возможных сочетаний по 3 переменных из n. Каждое такое сочетание может содержать не более 2^3 = 8 векторов для каждого варианта назначения трёх переменных 0/1.
  • Что бы построить полный вектор конкретного решения, требуется что бы каждое сочетание содержало в себе как минимум один вектор побитно совпадающий с решением.
  • Соответственно, если в одном из сочетаний отсутствуют векторы, ни одного решения не существует.
  • Удаляем из нашего набора все векторы, назначения которых соответствуют клозам КНФ.
  • Для каждого вектора в каждом сочетании пытаемся построить полную цепочку решения, соответственно поочередно перебираем все сочетания и из каждого выбираем совместимые с проверяемым вектором векторы и в случае разрешения какого-либо нового бита обновляем исходный вектор. Если совместимых векторов не обнаружено, значит для исследуемого вектора невозможно построить полную цепочку из векторов всех остальных сочетаний, соответственно он в решении лишнее звено - удаляем его.
  • Расчёт заканчивается когда либо в одном из сочетаний удалены все векторы либо больше не существует противоречий между векторами. Отсутствие противоречий объясняет возможность построения полного решения. Сам полученный набор векторов является суперпозицией всех возможных решений, соответственно если он существует - решения есть, не существует - решений нет.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40104548
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
  • при отсутствии изменений в очередном цикле сравнения получаем SAT.

  • Почему?
    ...
    Рейтинг: 0 / 0
    Решение NP-сложных задач за полиномиальное время
        #40104565
    Фотография Верблюд
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Aleksandr Sharahov
    Верблюд
  • при отсутствии изменений в очередном цикле сравнения получаем SAT.

  • Почему?


    На пальцах сложно объяснить. Общий смысл такой: допустим у нас в списке существует некоторый вектор, для которого решение (полный вектор размером n) построить нельзя. Предыдущий алгоритм пропускал такие векторы по той причине, что он каждый раз начинал строиться не учитывая предыдущей истории, а проверяя соответствие только текущему назначению трёх переменных. Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу. Это означает две вещи - что данная пара конфликтующих векторов единственная и другого варианта выбора (расщепления пространства решений с другими значениями маски) для этого конфликта у нас нет, иначе бы мы не получили конфликт, так как каждый вектор соответствует хотя бы одному другому в каждом сочетании, ну и из этого следует, что два проверяемых вектора конфликтуют с единственным возможным вектором, что невозможно в силу того, что алгоритм как раз такие конфликтующие пары удаляет. На а про то, что цепочки из возможных решений не могут быть удалены объяснение совсем простое. Если существует решение (полный вектор размером n), то для него в каждой комбинации должен существовать вектор как минимум размером 3. При этом для каждого такого вектора в одной комбинации переменных должен существовать как минимум один не противоречащий ему вектор в следующей комбинации и их полные вектора будут полностью соответствовать друг другу и всем последующим, подходящим к решению, так как они не могут конфликтовать друг с другом в силу того, что являются частью одного решения.
    ...
    Рейтинг: 0 / 0
    Решение NP-сложных задач за полиномиальное время
        #40104567
    Aleksandr Sharahov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Верблюд
    Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу.


    Это простейший случай, с ним все понятно.

    Но ведь может существовать длинная цепочка, не приводящая к решению,
    в которой нет попарно противоречащих друг другу масок сочетаний.
    Она запросто даст ложноположительное решение.
    ...
    Рейтинг: 0 / 0
    Решение NP-сложных задач за полиномиальное время
        #40104569
    Фотография Верблюд
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Aleksandr Sharahov
    Верблюд
    Теперь если вектору соответствует какая-то цепочка, не приводящая к решению, то в ней как минимум две маски сочетаний будут противоречить друг другу.


    Это простейший случай, с ним все понятно.

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


    могла существовать в прошлом варианте. тут нет как таковой длинной цепочки, так как вектор после пересчета по сути сам является концом длинной цепочки "слева" и по сути в бесконечном плане происходит замыкание начала и конца цепочки (раньше так сделать было невозможно, так как истории слева не было) - цепочки, где любой выбор не противоречит любому другому дальше.
    ...
    Рейтинг: 0 / 0
    Решение NP-сложных задач за полиномиальное время
        #40104572
    Aleksandr Sharahov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Верблюд,

    То, что если ее "вытянуть", то она замкнется это как раз понятно.
    Но непонятно, как вы это обнаружите.
    Что такого нового вы добавили в алгоритм, из-за чего он стал это обнаруживать.
    Не факт, что в любом случае будет достаточно цикла, можете удалить лишнее.
    Вдруг цепочки имеют общие части, и нужна рекурсия.
    ...
    Рейтинг: 0 / 0
    25 сообщений из 136, страница 3 из 6
    Форумы / Программирование [игнор отключен] [закрыт для гостей] / Решение NP-сложных задач за полиномиальное время
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали тему (0):
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


    Просмотр
    0 / 0
    Close
    Debug Console [Select Text]