Жорстоке Бінго#3550

Жорстоке Бінго

8 секунд
32 мегабайти
Дуже складна

Бінго — це популярна гра для вечірок, у якій беруть участь кілька гравців і один ведучий. Кожен гравець отримує картку бінго розміром N \times N, що містить N^2 різних чисел (зазвичай N = 5). Ведучий по черзі витягує числа з лотереї. Коли число витягується, гравці відзначають відповідний квадрат на своїй картці, якщо це число там присутнє. Мета гри — першим відзначити квадратів в одному вертикальному, горизонтальному або діагональному рядку і крикнути "Бінго!". Перемагає той, хто першим крикне "Бінго!".

У деяких випадках на картці може залишитися рівно невідзначених квадратів або N(N-1) відзначених квадратів, але без бінго-візерунка. Ваше завдання — написати програму, яка підрахує кількість таких візерунків, які можна отримати з заданого початкового візерунка з нулем або більше відзначеними квадратами.

Вхідні дані

Вхід представлений у наступному форматі:

x_1 y_1 ... x_K y_K

Перший рядок містить два числа: (1 \le N \le 32) — розмір картки бінго, і (0 \le K \le 8) — кількість відзначених квадратів у початковому візерунку. Далі слідують рядків, кожен з яких містить два числа x_i і y_i, що позначають, що квадрат у позиції (x_i, y_i) відзначений. Координати починаються з нуля (тобто 0 \le x_i, y_i \le N-1). Жодна пара відзначених квадратів не повторюється.

Вихідні дані

Виведіть кількість можливих небінго-візерунків з рівно невідзначеними квадратами, які можна створити з даного початкового візерунка. Результат виведіть за модулем в одному рядку (оскільки число може бути дуже великим). Повернуті та дзеркально відображені візерунки вважаються різними і повинні враховуватися окремо.

Приклади

Приклад 1

Loading
Loading