程序应该包含 `library.h` 头文件,你需要实现以下函数。
```cpp
void Solve(int N)
```
对于每一个测试点,这个函数只调用一次,参数 `N` 是书架上书的数量。
你的程序可以调用以下函数:
- `int Query(const std::vector& M)`
- 如果至少 $1$ 本书编号给定,这个函数将返回只取出这些书所用的最少次数。
- 从书架取出书的编号由长度为 $N$ 的向量 $M$ 决定。对于每个 $i$,如果 `M[i-1]=0`,那么书 $i$ 就不从书架取出,如果 `M[i-1]=1`,那么书 $i$ 就从书架取出。如果 $M$ 的大小不等于 $N$,你的程序将被判为 `Wrong Answer [1]`。对于每个 $i$,`M[i-1]` 应该为 $0$ 或 $1$。并且至少有一个为 $1$。如果上述条件至少有一个不满足,你的程序将被判为 `Wrong Answer [2]`。如果函数 `Query` 被调用超过 $20000$ 次,你的程序将被判为 `Wrong Answer [3]`。
- `void Answer(const std::vector& res)`
- 使用这个函数,你的程序应回答书架上书的顺序。不必确定书的摆放方向是从左至右还是从右至左。
- 参数 `res` 是一个长度为 $N$ 的向量。它描述了书架上书的摆放顺序。对于每个 $i$,从左(或右)数第 $i$ 本书的编号为 `res[i-1]`。如果 `res` 的大小不等于 $N$,你的程序将被判为 `Wrong Answer [4]`。`res[i-1]` 应该是一个 $1$ 到 $N$ 的正整数(包括 $1$ 和 $N$)。如果条件不满足,你的程序将被判为 `Wrong Answer [5]`。所有整数 `res[0], res[1], ..., res[N-1]` 应该两两不同。如果条件不满足,你的程序将被判为 `Wrong Answer [6]`。
当函数 `Solve` 停止运行时,如果 `Answer` 函数的调用次数不等于 $1$,你的程序将被判为 `Wrong Answer [7]`。
如果 `Solve` 函数确定的书的顺序不同于书架上书的摆放顺序,你的程序将被判为 `Wrong Answer [8]`。不必考虑书是从左至右放的还是从右至左放的。
#### 重要提示
你的程序可以实现其他函数以供内部使用,或者使用全局变量。
你的程序不能使用标准输入输出,不能以任何方式与其他文件交互。但是,你的程序可以通过标准错误流输出调试信息。