#include <bits/stdc++.h>
using namespace std;

#define MX 100050
int a[MX], c[MX];
pair<int, int> p[MX], b[MX];
bool vis[MX];

int main() {
	int n; scanf("%d", &n);
	for(int i = 1; i <= n; i++) {
		scanf("%d", a + i);
		p[i] = make_pair(a[i], i);
	}
	for(int i = 1; i <= n; i++) {
		scanf("%d", &b[i].first);
		b[i].second = i;
	}
	sort(b + 1, b + n + 1);
	sort(p + 1, p + n + 1);
	bool ans = true;
	for(int i = 1; i <= n; i++)
		if(p[i].first > b[i].first) {
			ans = false;
			break;
		}
	if(!ans) {
		puts("No");
		return 0;
	}
	bool flag = false;
	for(int i = 1; i < n; i++) {
		if(b[i].first >= p[i + 1].first) flag = true;
	}
	if(flag) {
		puts("Yes");
		return 0;
	}
	int cnt = 0;
	for(int i = 1; i <= n; i++) c[p[i].second] = b[i].second;
	for(int i = 1; i <= n; i++) {
		if(vis[i]) continue;
		int cur = i;
		do {
			vis[cur] = true;
			cur = c[cur];
		} while(!vis[cur]);
		cnt++;
	}
	puts(cnt != 1 ? "Yes" : "No");
	return 0;
}
### Prompt

Please formulate a Cpp solution to the following problem:

Given are two integer sequences of N elements each: A_1,...,A_N and B_1,...,B_N. Determine if it is possible to do the following operation at most N-2 times (possibly zero) so that, for every integer i from 1 to N, A_i \leq B_i holds:

* Choose two distinct integers x and y between 1 and N (inclusive), and swap the values of A_x and A_y.

Constraints

* 2 \leq N \leq 10^5
* 1 \leq A_i,B_i \leq 10^9

Input

Input is given from Standard Input in the following format:


N
A_1 A_2 ... A_N
B_1 B_2 ... B_N


Output

If the objective is achievable, print `Yes`; if it is not, print `No`.

Examples

Input

3
1 3 2
1 2 3


Output

Yes


Input

3
1 2 3
2 2 2


Output

No


Input

6
3 1 2 6 3 4
2 2 8 3 4 3


Output

Yes

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;

#define MX 100050
int a[MX], c[MX];
pair<int, int> p[MX], b[MX];
bool vis[MX];

int main() {
	int n; scanf("%d", &n);
	for(int i = 1; i <= n; i++) {
		scanf("%d", a + i);
		p[i] = make_pair(a[i], i);
	}
	for(int i = 1; i <= n; i++) {
		scanf("%d", &b[i].first);
		b[i].second = i;
	}
	sort(b + 1, b + n + 1);
	sort(p + 1, p + n + 1);
	bool ans = true;
	for(int i = 1; i <= n; i++)
		if(p[i].first > b[i].first) {
			ans = false;
			break;
		}
	if(!ans) {
		puts("No");
		return 0;
	}
	bool flag = false;
	for(int i = 1; i < n; i++) {
		if(b[i].first >= p[i + 1].first) flag = true;
	}
	if(flag) {
		puts("Yes");
		return 0;
	}
	int cnt = 0;
	for(int i = 1; i <= n; i++) c[p[i].second] = b[i].second;
	for(int i = 1; i <= n; i++) {
		if(vis[i]) continue;
		int cur = i;
		do {
			vis[cur] = true;
			cur = c[cur];
		} while(!vis[cur]);
		cnt++;
	}
	puts(cnt != 1 ? "Yes" : "No");
	return 0;
}
```