XYZX 2009
Щорічне змагання з програмування XYZX відоме своїми незвичайними умовами задач. Технічний координатор змагання, відомий як Снусмумрик, навмисно залишає в умовах задач певну вільність тлумачення, щоб учасники самі здогадувалися про упущені умови з наведених тестових даних, передмови задачі або епіграфа, або навіть щось додумували самі. Ця особливість проявилася також і в останньому XYZX-2009 змаганні.
Міша бере участь у Чвертьфіналі Єнісейська і знову стикається з тією ж проблемою: чому його повністю правильна програма не проходить пробні тести. Умови задачі англійською мовою. Йому також відомо, що хибним в умові є лише одне речення. Більше того, йому відомі правила, за якими можна відновити початкову умову, яку мав на увазі автор. Це дуже просто: слово "not" може бути вставлено в тексті після одного зі слів "can", "may", "must", "should"; слово "no" може бути вставлено після фраз "is", "are". Слова "not" і "no" повинні вставлятися точно як пишуться: "Not", "nO" та інші варіанти заборонені. Інші згадані слова не є чутливими до регістру, тому ви можете вставити "not" після "Can", або вставити "no" після "ARE". Якщо після "is" або "are", куди ви вставляєте "no", присутній будь-який артикль ("a" або "the"), то артикль слід прибрати.
Міша хоче отримати список усіх можливих причин, чому його програма не працює на пробних тестах. Причина тут — це речення, де можна застосувати заперечення. Пам'ятайте, що не можна застосовувати одночасно два заперечення, ні в одному реченні, ні в різних реченнях.
Вхідні дані
Вхідний файл містить текст умови задачі, що містить латинські літери, одинарні пробіли та крапки. Кожне речення закінчується крапкою (яка не вважається частиною останнього слова). Слова розділені одним пробілом. Перед жодною крапкою немає пробілу. Після кожної крапки є рівно один пробіл, якщо ця крапка не слідує за останнім реченням; у такому випадку крапка слідує за новим рядком, і тоді вхідний файл закінчується. При вставці слова "not" або "no" після якогось слова, ви повинні спочатку вставити один пробіл, а потім відповідне слово відразу. Розмір вхідного файлу не перевищує 1024 байти.
Вихідні дані
Вихідний файл повинен спочатку містити ціле число k на окремому рядку — кількість способів, якими умову задачі можна зрозуміти по-різному. Потім повинно слідувати k рядків. Кожен рядок повинен містити одне речення з початкового тексту з точно одним застосованим запереченням. Ви повинні перелічити всі можливості (рядки обгорнуті в прикладі виходу лише для кращої видимості; ви повинні вивести одне речення на рядок). Усі варіанти заперечення повинні йти в природному порядку: всі заперечення, які можна вставити в перше речення, потім всі заперечення, які можна вставити в друге речення, і так далі. Усередині одного речення спочатку йде заперечення, яке застосовується після першого слова (якщо можливо), потім те, яке застосовується після другого слова, і так далі.
Ви не повинні змінювати регістр літер у словах, які ви копіюєте з початкових речень. Ваші слова повинні все ще бути розділені одинарними пробілами, і ті ж правила застосовуються до крапок у кінці речень, як і для вхідних речень.