#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include //#include #include #include #include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, -1, 0, 1}; using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef vector vll; typedef pair pii; const int MAXA = 100001; const int MAXN = 100001; vector pos[MAXA]; int B[MAXN]; int main() { cin.tie(0); ios::sync_with_stdio(false); int N; cin >> N; for (int i = 0; i < N; i++) { int a; cin >> a; pos[a].push_back(i); } for (int i = 0; i < N; i++) cin >> B[i]; bitset<2*MAXN> b; for (int i = 0; i < N; i++) if (B[i]) b.set(i); bitset<2*MAXN> ans; for (int i = 0; i < MAXA; i++) if (pos[i].size()) { bitset<2*MAXN> memo; for (int j : pos[i]) { memo |= b<