Завдання № 31
відбірково-тренувальних зборів
команди міста Києва


за матеріалами ІІІ (міського) етапу 2013 року

1. Фарбування

Максимальна оцінка: 100 балів
Обмеження на час: 0,15 сек.
Обмеження на пам’ять: 32 MБ
Вхідний файл: farben.in
Вихідний файл: farben.out
Програма: farben.*

      На заняттях шкільного гуртка Євгенію навчили виготовляти з паперу моделі правильних многогранників (платонових тіл) і напівправильних многогранників (архімедових тіл). Вона запам’ятала такі означення:

  1. Платоновим тілом називають (опуклий) многогранник, у якому всі грані — правильні однакові многокутники, а многогранні кути при всіх вершинах однакові.

  2. Архімедовим тілом називають (опуклий) многогранник, у якому всі грані — правильні многокутники (не обов’язково з однаковою кількістю сторін), а многогранні кути при всіх вершинах однакові. При цьому є щонайменше дві різні грані.

      Таким чином, в архімедовому тілі грані кожного виду зустрічаються в тій самій кількості й у тій самій послідовності при обході навколо кожної вершини (чи для однакових, чи для протилежних напрямів обходу, якщо «дивитися ззовні»).
      Кілька моделей многогранників Євгенія виготовила для оформлення кабінету математики і прихопила додому, щоб вразити своїх рідних. Враження, звичайно, вона справила. Але, вечеряючи, недогледіла, як молодша сестра Марічка взялася розфарбовувати грані: кожну грань лише однією фарбою. При цьому кілька граней могли бути й одного кольору, навіть якщо вони були суміжними, тобто мали спільне ребро. Євгенія задумалась… Її, як майбутнього математика, зацікавило питання: скількома способами можна розфарбувати грані тіла, маючи певну кількість фарб, з точністю до симетрій — рухів простору, що залишають многогранник на тому самому місці. Інакше кажучи, коли не розрізняють розфарбування, отримані одне з іншого взаємно однозначним відображенням граней при збереженні відношення суміжності.

      Завдання
      Знаючи все про суміжність чи несуміжність граней тіла Платона чи Архімеда, визначте кількість розфарбувань цього многогранника для даної кількості кольорів.

      Вхідні дані
      У першому рядку вхідного файлу вказано натуральну кількість фарб m, m < 6.
      Кількість рядків вхідного файлу на 1 перевищує кількість граней многогранника і менша від 24. Усі грані многогранника занумеровано послідовними натуральними числами, починаючи з 1. При j > 1 j-й рядок містить (невпорядкований) перелік номерів граней, суміжних з гранню ( j – 1).
      Вхідні дані гарантують, що кількість симетрій многогранника не перевищує 120.

      Вихідні дані
      Вихідний файл має містити кількість розфарбувань граней тіла, виконаних за допомогою m фарб і різних з точністю до симетрій многогранника.

      Приклад

farben.infarben.out
2
2 3 4
1 3 4
1 2 4
1 2 3
5




      Пояснення
      Різні розфарбування двома фарбами правильного 4-гранника, який є трикутною пірамідою, розрізняють лише за кількістю граней одного кольору.

2. Фортеця

Максимальна оцінка: 100 балів
Обмеження на час: 0,15 сек.
Обмеження на пам’ять: 32 MБ
Вхідний файл: fortress.in
Вихідний файл: fortress.out
Програма: fortress.*


      На полі потрібно збудувати фортецю. План її вигляду згори повинен мати форму невиродженого опуклого многокутника, сторони якого зображують вали, а вершини — вежі. Також вежі можна розташовувати на валах. Місцевість, де треба збудувати фортецю, є дуже різноманітною з гео- та гідрологічної точки зору. Тому будувати вежі можна лише у певних точках. На відміну від веж, прямолінійні вали можна насипати довільно. Чим більше веж розташовано вздовж огорожі фортеці, тим краще.

      Завдання
      Визначте, яку найбільшу кількість веж можна розташувати у перетинах (стиках) валів і вздовж валів фортеці, яка при виді згори має форму невиродженого опуклого многокутника, за умови, що в усіх стиках валів (вершинах многокутника) міститимуться вежі.

      Вхідні дані
      Перший рядок містить запис цілого числа n (1 ≤ n ≤ 100) — кількості точок, де можна будувати вежі. У кожному з наступних n рядків записано по два цілих числа xj та yj — координати точки, де можна будувати вежу (| xj | ≤ 10000, | yj | ≤ 10000). Усі точки (x1, y1), (x2, y2), ..., (xn, yn) є різними.

      Вихідні дані
      Єдиний рядок вихідного файлу має містити запис найбільшої кількості веж фортеці. Якщо побудувати фортецю неможливо, то потрібно записати 0.

      Приклади

fortress.infortress.out
3
0 0
1 1
2 2
0



4
1 1
10 1
1 10
3 3
3




4
-1 0
0 0
1 0
0 1
4




3. Вкладені множини

Максимальна оцінка: 100 балів
Обмеження на час: 1,5 сек.
Обмеження на пам’ять: 32 Mб
Вхідний файл: nested.in
Вихідний файл: nested.out
Програма: nested.*


      Петрик нещодавно дізнався про поняття множини і вкладення множин. Він зацікавився послідовностями:

S0S1S2 ⊇ … ⊇ SN ,

у яких кожний наступний елемент — підмножина попереднього, S0 — певна скінченна множина {a1, a2, …, aM}. Петрик зауважив: кожній з вкладених множин можна поставити у відповідність ціле число:

H(S) = Σ 2k – 1 .
akS

Таким чином, H(S0) = 2M – 1, H (∅) = 0.
      Петрик випадковим чином обрав N чисел: h1, h2, …, hN . Йому стало цікаво: скільки існує різних наборів вкладених множин S1, S2, …, SN при
H(S1) = h1 (mod 41),
H(S2) = h2 (mod 41), …,
H(SN) = hN (mod 41)?
      На жаль, Петрик збився з рахунку, тому просить вас про допомогу.

      Завдання
      Знайти кількість послідовностей вкладених множин, що задовольняють перелічені умови.

      Вхідні дані
      Перший рядок вхідного файлу містить два цілих числа N і M: 1 ≤ N ≤ 5, 1 ≤ M ≤ 20.
      Другий рядок містить N цілих чисел h1, h2, …, hN , кожне з яких задовольняє умову: 0 ≤ hj ≤ 40.

      Вихідні дані
      Єдиний рядок вихідного файлу має містити одне ціле число — шукану кількість послідовностей вкладених множин. Відомо, що це число не перевищує 1018.

      Приклади

nested.innested.out
3 5
7 3 3
1

3 5
7 4 5
0

1 7
3
4

3 10
31 29 17
28

Пояснення до тестів
  1. Існує лише один варіант: S1 = {a1, a2, a3}, S2 = S3 = {a1, a2}. H(S1) = 7, H(S2) = H (S3) = 3.
  2. Такої послідовності вкладених множин не існує.
  3. H({a1, a2}) = 21 – 1 + 22 – 1 = 3,
    H({a3, a4, a6, a2}) = 22 + 23 + 25 = 4 + 8 + 32 = 44 = 41 + 3,
    H({a1, a3, a5, a7}) = 20 + 22 + 24 + 26 = 1 + 4 + 16 + 64 = 85 = 2∙41 + 3,
    H({a2, a3, a4, a5, a6, a7}) = 21 + 22 + 23 + 24 + 25 + 26 =
    = 2 + 4 + 8 + 16 + 32 + 64 = 126 = 3∙41 + 3.