真巧!在确定了最有价值的当代艺术收藏品后,你发现它似乎位于吕贝克(Lübeck)附近。由于你不知道它的确切位置,你想收集更多的信息。幸运的是,在你抵达今年 BOI 的当天,当地艺术界举办了 $N$ 场关于当代艺术的活动。这似乎正是你一直在等待的机会。
为了规划你的活动行程,你将它们编号为 $1$ 到 $N$,其中第 $i$ 场活动在时间 $S_i$ 开始,在时间 $E_i$ 结束。你希望从某场活动 $s$ 开始,并在某场活动 $e$ 结束你的行程。只要你不在参加活动 $e$,你总是会参加当前的活动直到结束*,然后立即切换到另一场正在进行的活动。这意味着你可以从活动 $i$ 切换到活动 $j$,当且仅当 $S_j \le E_i \le E_j$。
显然,切换活动过于频繁会让你看起来很可疑。因此,你希望确定如果你从活动 $s$ 开始并在活动 $e$ 结束,所需要的最少活动切换次数。此外,由于你还不知道何时抵达吕贝克,也不知道何时必须离开去参加晚上的 BOI 注册,你希望针对 $Q$ 组不同的起始活动 $s$ 和结束活动 $e$ 对此进行计算。
输入格式
第一行包含两个整数,活动的数量 $N$ 和你需要确定最少切换次数的查询对数 $Q$。
接下来 $N$ 行描述这些活动。第 $i$ 行包含两个整数 $S_i$ 和 $E_i$,表示活动 $i$ 的开始时间和结束时间。
接下来 $Q$ 行描述查询。第 $i$ 行包含两个整数 $s_i$ 和 $e_i$,表示你希望确定从活动 $s_i$ 开始并以活动 $e_i$ 结束行程所需的最少切换次数。
输出格式
你的程序应输出 $Q$ 行。第 $i$ 行应包含一个整数,表示从活动 $s_i$ 开始并以活动 $e_i$ 结束行程所需的最少切换次数;如果无法实现,则输出 impossible。
数据范围
始终满足 $1 \le N, Q \le 100\,000$,$1 \le S_i < E_i \le 10^9$,以及 $1 \le s_i, e_i \le N$。
- 子任务 1(10 分):对于每场活动,你最多只能切换到另一场活动。
- 子任务 2(10 分):$N \le 1\,000$ 且 $Q \le 100$。
- 子任务 3(15 分):$N \le 5\,000$。
- 子任务 4(15 分):$Q \le 100$。
- 子任务 5(20 分):没有活动完全包含在另一场活动中,即不存在两个 $i \neq j$ 满足 $S_j \le S_i < E_i \le E_j$。
- 子任务 6(30 分):无附加限制。
* 提前离开是不礼貌的——尽管没有人会抱怨你迟到,因为你显然是一位重要且忙碌的艺术评论家。
样例
输入 1
5 2 1 3 2 4 4 7 7 9 3 7 1 4 3 2
输出 1
2 impossible
说明 1
在第一个样例中,可以通过从活动 1 切换到活动 5,再切换到活动 4 来从活动 1 开始并以活动 4 结束,这导致了两次活动切换。然而,无法从活动 3 开始并以活动 2 结束,因为活动 2 在活动 3 之前结束。
输入 2
8 5 1 2 3 4 1 5 6 7 5 10 10 20 15 20 999999999 1000000000 1 6 1 7 2 4 3 3 5 8
输出 2
3 4 impossible 0 impossible