Ограничения: время – 250ms/500ms, память – 256MiB Ввод: интерактивная задача Вывод: интерактивная задача
Послать решение Blockly Посылки Темы Где Обсудить (0)
Так как Золушка менее чем за секунду справилась с математической задачей, мачеха дала ей еще одно
задание -- отобрать несколько спелых помидоров для салата из корзины в кладовке.
Зашла Золушка в кладовку и молвила так:
-- Вы, мыши домовые, вы, программисты умные, приходите, помогите мне выбрать помидоры!
Спелые -- в первую корзинку, зеленые -- во вторую.
К сожалению, мыши не различают зеленый и красный цвета,
поэтому они набирают помидоры в пустую корзинку и спрашивают у Золушки, есть ли среди них красные.
Первоначально все помидоры находятся в первой корзине, и в кладовке есть еще три пустых корзины,
которые имеют номера от 2 до 4.
Напишите программу, которая поможет мышам отобрать все спелые помидоры, при этом общее количество
команд мышам не должно превышать 500. Гарантируется, что количество спелых помидоров не превышает 10.
*Протокол взаимодействия*
Программа первоначально получает целое число `N` (`1<=N<=1000`) -- количество помидоров в первой корзине.
Далее программа должна давать одну из двух команд мышам, пока процесс выбора не будет завершен:
* ``@`` `a \ b \ k` -- переместить `k` случайных помидоров из корзины с номером `a` в корзину с номером `b` (`a!=b`);
* ``?`` `a` -- узнать у Золушки, есть ли в корзине `a` спелые помидоры, программа получает число 1 в случае утвердительного ответа или 0 -- в случае отрицательного;
После вывода команды программа должна сделать принудительную запись буфера вывода (в C++ это делает endl,
в C нужно использовать fflush(stdout), в Pascal – flush(output)).
После завершения выбора (в этот момент в первой корзине должны находиться только спелые помидоры, во второй -- зеленые, остальные корзины пусты)
программа должна вывести команду ``!``.
```sample Пример ввода
3
1
1
0
```
```sample Пример вывода
@ 1 3 1
? 3
@ 3 4 1
@ 1 3 1
? 3
@ 3 4 1
@ 1 3 1
? 3
@ 3 2 1
@ 4 1 2
!
```
В 30% тестов `N<=150`.