这是一道交互题。
你和 OJ 君在玩取石子游戏。
有两堆石子,第一堆有 $a$ 个,第二堆有 $b$ 个($a \neq b$)。由你开始,你和 OJ 君轮流从中取石子。
每次取石子时,当前玩家可以选择剩余石子数量大于 $0$ 一堆,从中取走至少一个石子。
如果某个玩家取完石子后,两堆石子剩余的数量均为 $0$,则这个玩家获胜。
你的任务是在这个游戏中获胜。
时间和空间限制指你的程序的限制,交互器的限制会另外计算。如果你在程序中使用有条件退出的循环,可能会因为输出格式错误导致交互器直接退出,你的所有输入尝试都会失败(如同从文件读入时文件已经读完),从而导致退出循环的条件始终不满足,成为无限循环。
输入输出格式
这是一道交互题。你的程序的输出会用来生成接下来的输入。
- 首先,你的程序会读入一行以空格分隔的两个非负整数 $a$ 和 $b$,表示两堆石子开始时的数量。
- 由你开始,你需要输出一行两个值 $pos$ 和 $value$ 并以空格分隔,其中 $pos$ 是一个字符,可以是
a
或者b
,表示你准备取哪一堆石子;$value$ 是一个正整数,表示你准备取的数量。 - 当你输出一行后,如果两堆石子剩余数量均为 $0$,你的程序应该退出,这样你就通过了这个测试点,测试结束。
- 否则 OJ 君会进行他的操作,即你可以读入同样格式的一行,包含 $pos$ 和 $value$,表示 OJ 君如何取石子。
- 如果 OJ 君取完后,两堆石子剩余数量均为 $0$,你将得不到这个测试点的分数。
- 否则回到第 2 步,取石子游戏继续。
样例
possible input
3 5 a 2 b 1
possible output
b 2 b 2 a 1
explanation
开始时,第一堆有 $3$ 颗石子,第二堆有 $5$ 颗石子。
你先从第二堆(b
)取走 $2$ 颗石子。作为回应,OJ 君从第一堆取走 $2$ 颗。接着,你继续从第二堆取走 $2$ 颗。OJ 君也从第二堆取走 $1$ 颗。现在只剩下第一堆有 $1$ 颗石子,你取走这颗石子取得胜利。
注意事项
除了开始时的输入,后续输入均为你提供对应输出后才能取得。由于输出会有缓存,你需要在每次结束输出后清除缓存,具体做法如下:
// 你的输出
// printf("Hello, world! ");
fflush(stdout);
或者
// 你的输出
// cout << "Hello, world! ";
cout << flush;
如果你使用 cout,endl 也会自动清除缓存,即你可以认为
cout << "Hello, world! \n" << flush;
和
cout << "Hello, world! " << endl;
是等价的。
这道题的一个随机取石子的提交可参见这里(当然,如果你随机取石子,聪明的 OJ 君很容易获胜)。
限制与约定
$0 \leq a, b \leq 1000$,$a \neq b$
时间限制:$1\texttt{s}$
空间限制:$512\texttt{MB}$