Припустимо, одного дня ви копаєте велику коробку невикористаних комп'ютерних шнурів та адаптерів (USB до USB mini, VGA до DVI тощо). Скріплені шнури скрізь роблять безлад, і вам цікаво, чи не могли б ви спростити речі, з'єднавши всі шнури разом в одну довгу нитку, а потім просто згорнувши її.
Питання полягає в тому, чи можливо з'єднати всі ваші шнури та адаптери одним довгим рядком? Це, очевидно, не завжди можливо, наприклад, якщо у вас були лише два шнура з абсолютно різними вилками, їх не можна було з'єднати разом. Але якщо у вас був третій шнур, який може підключитися до обох, то ви могли зв'язати всі шнури разом.
Вам не байдуже, який тип штепсельних вилок на кінцях шнура. Їм не потрібно підключатися один до одного, щоб утворити цикл. Ви хочете лише знати, чи можливо виготовлення шнура з усією шнуркою, і якщо це можливо, як це зробити.
Виклик
Напишіть програму або функцію, яка містить багаторядковий рядок, де кожен рядок зображує один із ваших шнурів. Шнур складається з однієї або декількох тире ( -), з вилкою на будь-якому кінці. Плагін завжди є одним із 8 символів ()[]{}<>.
Отже, це кілька дійсних шнурів:
>->
(--[
}-{
<-----]
(---)
Але це не такі:
-->
(--
)--
[{
---
При підключенні шнурів, разом можуть бути з'єднані тільки штекери з таким самим типом кронштейнів.
Отож, це кілька дійсних кабельних з'єднань:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
І це недійсні:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
Якщо всі шнури, що знаходяться на вході, можуть бути переставлені та з'єднані між собою в одну довгу нитку, то виведіть цю нитку для викреслювання на одній лінії (з необов'язковою лінією нового рядка). Якщо є кілька рішень, ви можете вибрати будь-яке з них для виведення. Якщо зробити одну нитку неможливо, не виведіть нічого (або виведіть порожню рядок із необов'язковим новим рядком).
Наприклад, якщо вхід є
[-->
{---]
>----{
вихід може бути
[-->>----{{---]
де всі шнури нанизані між собою.
Однак якби вхід був
[-->
{---]
шнури не можна підключити, щоб не було виводу.
Зауважте, що шнури можна обертати навколо стільки, скільки необхідно для з'єднання. наприклад, [-->і <--]фактично є одним і тим же шнуром, оскільки вони можуть здійснювати однотипні з'єднання. Деякі виходи можуть залежати від гортання вхідних шнурів.
Наприклад
(-[
}--]
може мати вихід
(-[[--{
де другий шнур перевернутий, або
}--]]-)
де перевернутий перший шнур.
(Зверніть увагу, що загалом гортання всього виводу є дійсним, оскільки воно таке саме, як спочатку гортати кожен шнур окремо.)
Довжина шнурів у висновку повинна, звичайно, відповідати довжинам відповідних вхідних шнурів. Але шнури можуть бути впорядковані та обернені навколо стільки, скільки ви хочете, щоб зробити пасмо з шнура. Вхід завжди буде містити принаймні один шнур.
Виграє найкоротший код у байтах.
Випробування
Випадки з виходом:
[-->
{---]
>----{
gives
[-->>----{{---]
or
[---}}----<<--]
(-[
}--]
gives
(-[[--{
or
}--]]-)
(-)
gives
(-)
[--{
gives
[--{
or
}--]
[-]
]-[
gives
[-]]-[
or
]-[[-]
[----->
)------------[
{--<
}---)
could give
[----->>--}}---))------------[
or
>--}}---))------------[[----->
or
}---))------------[[----->>--}
or
{--<<-----]]------------((---{
etc.
>-->
>->
>--->
could give
>-->>->>--->
or
>--->>-->>->
or
>->>-->>--->
or
<--<<---<<-<
etc.
(-]
]->
>-}
}-)
)-[
[-<
<-{
{-(
could give
(-]]->>-}}-))-[[-<<-{{-(
or
{-((-]]->>-}}-))-[[-<<-{
or
<-{{-((-]]->>-}}-))-[[->
etc.
Випадки без виходу:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}
