Вам надається позиція на дошці для гри «Go» та руху для гри. Вам потрібно вивести, чи закон є чи законним, чи нову позицію ради, якщо вона законна.
Коротке пояснення рухів Go: гра складається з альтернативного розміщення чорно-білих шматочків («каміння») в порожніх місцях на квадратній дошці. Набори шматочків одного кольору, які з'єднані один з одним (чотиристоронніми), називаються групами. Порожні місця на дошці, які примикають до групи (також 4-х сторонні), вважаються "свободами" цієї групи. Група з 0 свободами захоплюється (видаляється з дошки). Хід, який спричинив би захоплення власної групи ("самогубство"), є незаконним, якщо тільки він не захопить одну чи кілька груп опонента (здобуття волі в процесі, щоб вона фактично не була захоплена).
Для тих, кого це не стосується, вам не потрібно мати справу з ko (і superko), тобто ви можете вважати, що захоплення ko є законним. Якщо ви не знаєте, що це означає, просто дотримуйтесь наведених вище правил, і це буде добре.
Введення: число n між 2 і 19 (включно), що представляє розмір плати, а потім n рядків з n чисел між 0 і 2 (включно), що представляють позицію дошки, а потім 3 числа, розділені пробілом, що представляють собою рух, який потрібно зробити. У положенні дошки 0 означає порожнє місце, 1 означає чорний камінь і 2 означає білий камінь. Цей хід дає стовпчик, рядок і колір (1 або 2) каменю для розміщення. Стовпець і рядок засновані на 0, починаючи від 0 до n-1 (включно) і рахуються в тому ж порядку, що і вхід дошки.
Можна припустити, що дана позиція правління є законною (всі групи мають принаймні одну свободу).
Вихід: рядок, що містить 1 або 0 (або правда / хибність, якщо ви віддаєте перевагу), якщо переміщення є законним чи ні, з наступним (лише у випадку легального переходу) новим положенням дошки у тому ж форматі, що і вхідне.
Оцінка: краща кількість байтів повного вихідного коду, менша. 20% додаткового штрафу за використання символів, що не належать ascii, і 20% додаткового штрафу, якщо ваш код не можна перевірити в Linux за допомогою вільно доступного програмного забезпечення.
Правила: Немає мережевих підключень і немає сторонніх бібліотек. Ваша програма повинна використовувати стандартні потоки введення та виведення або стандартний еквівалент для вашої мови програмування.
Приклади:
1) Input:
2
10
01
1 0 2
Output:
0
2) Input:
2
10
11
1 0 2
Output:
1
02
00
3) Input:
5
22122
22021
11211
02120
00120
2 1 1
Output:
1
00100
00101
11011
02120
00120
4) Input:
6
000000
011221
121121
122221
011110
000000
4 0 1
Output:
1
000010
011221
121121
122221
011110
000000