Фон
Ваш друг, лінгвіст, записав і проаналізував кілька простих фрагментів розмови на різних мовах. Будучи цілком необізнаними, вони забули, на якій мові знаходився кожен фрагмент. Ви повинні допомогти їм, створивши програму, яка аналізує структури речень та виключає неможливі випадки.
Вхідні дані
Ваш вхід - це не порожня рядок, що містить символи SVO
, які стоять за темою , дієсловом та об’єктом . Він являє собою фрагмент розмови, проаналізований лінгвістом.
Вихідні дані
Ваше завдання - розбити рядок на речення та ввести крапку .
після кожного речення. Речення містить або дієслово, АБО дієслово і предмет, АБО дієслово, предмет і предмет. Однак ви не знаєте, який порядок слів використовує мова оригіналу; Англійська використовує предмет-дієслово-об’єкт , але інші мови, як-от латинська, використовують предмет-об’єкт-дієслово . Насправді всі шість перестановок існують природними мовами, тому ви повинні перевірити кожну з них.
Вихідні дані повинні містити в рядку, розділеному новим рядком, кожен застосований порядок слів, двокрапку :
та рядок введення, розбитий на речення відповідно до цього порядку. Якщо рядок неможливо проаналізувати у певному порядку слів, відповідний рядок буде опущено. Порядок рядків не має значення, і гарантується, що принаймні один порядок слів можна розібрати.
Приклад
Розглянемо вхідні дані
VSVOSV
У VOS
порядку, фрагмент може бути проаналізований як VS.VOS.V.
, і в SVO
порядку, він може бути проаналізований як V.SVO.SV.
. Замовлення OSV
також працює, і повний вихід є
VOS:VS.VOS.V.
SVO:V.SVO.SV.
OSV:V.SV.OSV.
Правила та оцінка
Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені. Регулярні вирази та всі вбудовані дозволені.
Тестові справи
Input:
V
Output:
VSO:V.
VOS:V.
SVO:V.
OVS:V.
SOV:V.
OSV:V.
Input:
SVV
Output:
SVO:SV.V.
SOV:SV.V.
OSV:SV.V.
Input:
VSVOV
Output:
SVO:V.SVO.V.
Input:
VSOVS
Output:
VSO:VSO.VS.
OVS:VS.OVS.
Input:
SVOSV
Output:
SVO:SVO.SV.
OSV:SV.OSV.
Input:
VSVOSV
Output:
VOS:VS.VOS.V.
SVO:V.SVO.SV.
OSV:V.SV.OSV.
Input:
VSVVSOVSV
Output:
VSO:VS.V.VSO.VS.V.
OVS:VS.V.VS.OVS.V.
SOV:V.SV.V.SOV.SV.
Input:
SVVSVSOVSVV
Output:
SOV:SV.V.SV.SOV.SV.V.
Input:
VSOVSVSOVSVVS
Output:
VSO:VSO.VS.VSO.VS.V.VS.
OVS:VS.OVS.VS.OVS.V.VS.