Предположим, однажды вы копаете большую коробку неиспользуемых компьютерных шнуров и адаптеров (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.
Случаи без выхода:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}