Бінго — це популярна гра для вечірок, у якій беруть участь кілька гравців і один ведучий. Кожен гравець отримує картку бінго розміром 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