排列
题号:NC15140
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小月是个无聊时就去刷题的人,有一次他刷到一个题如下:
 给三个1~ N 的排列(permutation) A, B, C,现在要你对A 做一些操作,每次操作可以交换A 中的相邻两个数,请使用最少操作次数把A 变成B,请问过程中有没有可能经过C (C 若等于A 或B 也算是经过)。

举例来说:当A = `2,3,1`, B = `1,2,3` 时,那么用最少操作次数把A 变成B 只有一种方法:`2 ,3,1` → `2,1,3` `1,2,3`,所以当C = `2,3,1`, `2,1,3 ` 或`1,2,3` 时,答案为`Possible`;反之,当C = `1,3,2`, `3,1,2` 或`3,2,1` 时,答案为`Impossible`。



 由于小月是按照 AC 人数由多至小在刷题,所以没有多想就写了一个拿到 WA 的作法如下:


 判断对于 1~N 的每个数字 x,是否 x 在 C 中出现的位置都夹在 x 在 A 及 B 中出现的位置之间。

也就是说,对于所有x,其中Ai = Bj = Ck = x,若min(i,j)≤k≤max(i,j)总是成立则答案为`Possible`。



小月获得WA 以后觉得很懊恼,开始认真研究这个解法错的有多离谱,他想要知道给定两个排列A B1 ~ N里有哪些整数x 会满足:存在一个排列C,其中Ai = Bj = Ck = x,排列A,B,C 在该题答案为`Possible` k<min(i,j) 或 max(i,j)<k



输入描述:

测试数据共有三行。

第一行有一个正整数N,第二行有一个排列A1, A2,..., AN,第三行也有一个排列B1, B2,..., BN。A, B为给定的两个排列。

输出描述:

输出一个长度为N的字串。若存在一个排列C,其中Ai = Bj = Ck = x,排列A,B,C在该题答案为`Possible`但k<min(i,j) 或 max(i,j)<k,则输出的字串的第x个字元为`'1'`,否则为`'0'`。

示例1

输入

复制
3
1 2 3
3 2 1

输出

复制
010
示例2

输入

复制
3
1 2 3
1 3 2

输出

复制
000

备注:

2≤N≤106
A 和 B 是 1∼N 的一個排列