Problem: Ashish has n elements arranged in a line. 

These elements are represented by two integers a_i — the value of the element and b_i — the type of the element (there are only two possible types: 0 and 1). He wants to sort the elements in non-decreasing values of a_i.

He can perform the following operation any number of times: 

  * Select any two elements i and j such that b_i ≠ b_j and swap them. That is, he can only swap two elements of different types in one move. 



Tell him if he can sort the elements in non-decreasing values of a_i after performing any number of operations.

Input

The first line contains one integer t (1 ≤ t ≤ 100) — the number of test cases. The description of the test cases follows.

The first line of each test case contains one integer n (1 ≤ n ≤ 500) — the size of the arrays.

The second line contains n integers a_i (1 ≤ a_i ≤ 10^5) — the value of the i-th element.

The third line containts n integers b_i (b_i ∈ \{0, 1\}) — the type of the i-th element.

Output

For each test case, print "Yes" or "No" (without quotes) depending on whether it is possible to sort elements in non-decreasing order of their value.

You may print each letter in any case (upper or lower).

Example

Input


5
4
10 20 20 30
0 1 0 1
3
3 1 2
0 1 1
4
2 2 4 8
1 1 1 1
3
5 15 4
0 0 0
4
20 10 100 50
1 0 0 1


Output


Yes
Yes
Yes
No
Yes

Note

For the first case: The elements are already in sorted order.

For the second case: Ashish may first swap elements at positions 1 and 2, then swap elements at positions 2 and 3.

For the third case: The elements are already in sorted order.

For the fourth case: No swap operations may be performed as there is no pair of elements i and j such that b_i ≠ b_j. The elements cannot be sorted.

For the fifth case: Ashish may swap elements at positions 3 and 4, then elements at positions 1 and 2.

Solution (in JAVA):

Solution:
import java.util.*;
import java.io.*;
import java.lang.*;

public class B {

    private static void swap(Pair arr[],int i,int j){
        Pair temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) throws Exception {
        try {

            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);

            int t = getInt(br.readLine());

            while (t-- > 0) {
                int n = getInt(br.readLine());
                String s1[] = br.readLine().split(" ");
                String s2[] = br.readLine().split(" ");
                Pair arr[] = new Pair[n];
                for (int i = 0; i <n ; i++) {
                    arr[i] = new Pair(getInt(s1[i]),getInt(s2[i]));
                }
                int i=0;
                for (i = 0; i <n-1 ; i++) {
                    if(arr[i].a > arr[i+1].a){
                        break;
                    }
                }

                if(i==n-1){
                    System.out.println("Yes");
                    continue;
                }
                int cnt0=0,cnt1=0;
                for (int j = 0; j <n ; j++) {
                    if(arr[j].b==0){
                        cnt0++;
                    }else{
                       cnt1++;
                    }
                }
                if(cnt0!=0 && cnt1!=0){
                    System.out.println("Yes");
                }else{
                    System.out.println("No");
                }

//                for (int i = 0; i <n ; i++) {
//                    boolean isSwap= false;
//                    for(int j=i+1; j<n; j++){
//                        if(arr[i].a<arr[j].a){
//                            isSwap = true;
//                            swap(arr,i,j);
//                        }
//                    }
//                    if(!isSwap){
//                        break;
//                    }
//                }

            }

        } catch (
                Exception e) {
            e.printStackTrace();
        }

    }


    private static int getInt(String str) {
        return Integer.parseInt(str);
    }

    private static long getLong(String str) {
        return Long.parseLong(str);
    }

    private static double getDouble(String str) {
        return Double.parseDouble(str);
    }

    private static long gcd(long a, long b) {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }

    private static long lcm(long a, long b) {
        return (a * b) / gcd(a, b);
    }

    private static ArrayList<Long> allfactorsofn(long n) {
        ArrayList<Long> a = new ArrayList<>();
        ArrayList<Long> b = new ArrayList<>();
        for (long i = 1; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                if (n / i == i)
                    a.add(i);

                else {
                    a.add(i);
                    b.add(n / i);
                }
            }
        }

        for (int i = b.size() - 1; i >= 0; i--) {
            a.add(b.get(i));
        }

        return a;
    }
}
class Pair{
    int a,b;

    public Pair(int a, int b) {
        this.a = a;
        this.b = b;
    }
}