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.
import java.math.*;
import java.io.*;
import java.awt.*;
import java.util.*;
public class Solution{
    static Helper hp;
    final static int MAXN = 1000_006;
    final static long MOD = (long) 1000000007;
    final static long MOD1 = (long) 998244353;
    public static void debug(Object s)throws Exception{
        if(hp.debugger)System.out.println(s.toString());
    }
    public static void debug(int a[])throws Exception{
        if(hp.debugger)System.out.println(Arrays.toString(a));
    }
    public static void main(String []args)throws Exception
    {
        hp=new Helper(MOD,MAXN);
        //hp.initIO("input.txt","output.txt");
        hp.initIO(System.in,System.out);
        solve();
    }
    static void solve()throws Exception{
        boolean testCases = true;
        int tc =testCases?hp.nextInt():1;
        for (int tce = 1; tce <= tc; tce++) {
            int n=hp.nextInt();
            int vals[]=new int[n];
            int type[]=new int[n];
            int flag=0,count=0;
            for(int i=0;i<n;i++)
            {
                vals[i]=hp.nextInt();
                if(i-1>=0 && vals[i]<vals[i-1])
                    flag=1;
            }
            for(int j=0;j<n;j++)
            {
                type[j]=hp.nextInt();
                if(type[j]==1)
                    count++;
            }
            if(flag==0)
                hp.println("Yes");
            else
            {
                if(count==n || count==0)
                    hp.println("No");
                else
                    hp.println("Yes");
            }


        }
        hp.flush();
    }
}
class Helper {
    final long MOD;
    final int MAXN;
    final Random rnd;
    boolean debugger;
    public Helper(long mod, int maxn) {
        MOD = mod;
        MAXN = maxn;
        rnd = new Random();
    }


    public static int[] sieve;
    public static ArrayList<Integer> primes;

    public void setSieve() {
        primes = new ArrayList<>();
        sieve = new int[MAXN];
        int i, j;
        for(i=0;i<MAXN;i++) sieve[i]=i;
        for (i = 2; i*i< MAXN; ++i)
        {
            if (sieve[i] == i) {
                for (j = i*i;j < MAXN; j += i) {
                    if(sieve[j]==j)
                    sieve[j] = i;
                }
            }
        }
        for(i=2;i<MAXN;i++)if(sieve[i]==i)primes.add(i);
    }

    public static long[] factorial;

    public void setFactorial() {
        factorial = new long[MAXN];
        factorial[0] = 1;
        for (int i = 1; i < MAXN; ++i) factorial[i] = factorial[i - 1] * i % MOD;
    }

    public long getFactorial(int n) {
        if (factorial == null) setFactorial();
        if(n<0)
            return 1;
        return factorial[n];
    }

    public long ncr(int n, int r) {
        if (r > n) return 0;
        if (factorial == null) setFactorial();
        long numerator = factorial[n];
        long denominator = factorial[r] * factorial[n - r] % MOD;
        return numerator * pow(denominator, MOD - 2, MOD) % MOD;
    }


    public Long[] getLongArray(int size) throws Exception {
        Long[] ar = new Long[size];
        for (int i = 0; i < size; ++i) ar[i] = new Long(nextLong());
        return ar;
    }

    public Integer[] getIntArray(int size) throws Exception {
        Integer[] ar = new Integer[size];
        for (int i = 0; i < size; ++i) ar[i] = new Integer(nextInt());
        return ar;
    }

    public String[] getStringArray(int size) throws Exception {
        String[] ar = new String[size];
        for (int i = 0; i < size; ++i) ar[i] = next();
        return ar;
    }

    public String joinElements(long... ar) {
        StringBuilder sb = new StringBuilder();
        for (long itr : ar) sb.append(itr).append(" ");
        return sb.toString().trim();
    }


    public String joinElements(int... ar) {
        StringBuilder sb = new StringBuilder();
        for (int itr : ar) sb.append(itr).append(" ");
        return sb.toString().trim();
    }

    public String joinElements(String... ar) {
        StringBuilder sb = new StringBuilder();
        for (String itr : ar) sb.append(itr).append(" ");
        return sb.toString().trim();
    }

    public String joinElements(Object... ar) {
        StringBuilder sb = new StringBuilder();
        for (Object itr : ar) sb.append(itr).append(" ");
        return sb.toString().trim();
    }


    public long gcd(long a, long b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    public int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
    public int max(int ... ar)
    {
        int max=ar[0];
        for(int itr:ar)
            max=Math.max(max,itr);
        return max;
    }
    public long max(long ... ar){
        long max=ar[0];
        for(long itr:ar)max=Math.max(max,itr);
        return max;
    }
    public <T extends Comparable<T>> T max(T ... ar)
    {
        T max=ar[0];
        for(T itr:ar) max=itr.compareTo(max)>0?itr:max;
        return max;
    }
    public <T extends Comparable<T>> T min(T ... ar)
    {
        T min=ar[0];
        for(T itr:ar) min=itr.compareTo(min)<0?itr:min;
        return min; 
    }
    public Long sum(Long... arr)
    {
        Long sum=new Long(0);
        for(Long itr:arr)sum+=itr;
        return sum;
    }
    public Long sum(Integer ... arr)
    {
        Long sum=new Long(0);
        for(Integer itr:arr)sum+=itr;
        return sum;
    }
    public long sum(long... ar) {
        long sum = 0;
        for (long itr : ar) sum += itr;
        return sum;
    }

    public long sum(int... ar) {
        long sum = 0;
        for (int itr : ar) sum += itr;
        return sum;
    }

    public long pow(long base, long exp, long MOD) {
        base %= MOD;
        long ret = 1;
        while (exp > 0) {
            if ((exp & 1) == 1) ret = ret * base % MOD;
            base = base * base % MOD;
            exp >>= 1;
        }
        return ret;
    }


    static final int BUFSIZE = 1 << 20;
    static byte[] buf;
    static int index, total;
    static InputStream in;
    static BufferedWriter bw;


    public void initIO(InputStream is, OutputStream os) {
        try {
            debugger=false;
            in = is;
            bw = new BufferedWriter(new OutputStreamWriter(os));
            buf = new byte[BUFSIZE];
        } catch (Exception e) {
        }
    }

    public void initIO(String inputFile, String outputFile) {
        try {
            debugger=true;
            in = new FileInputStream(inputFile);
            bw = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(outputFile)));
            buf = new byte[BUFSIZE];
        } catch (Exception e) {
        }
    }

    private int scan() throws Exception {
        if (index >= total) {
            index = 0;
            total = in.read(buf);
            if (total <= 0)
                return -1;
        }
        return buf[index++];
    }

    public String next() throws Exception {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c > 32; c = scan())
            sb.append((char) c);
        return sb.toString();
    }

    public int nextInt() throws Exception {
        int c, val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+')
            c = scan();
        for (; c >= '0' && c <= '9'; c = scan())
            val = (val << 3) + (val << 1) + (c & 15);
        return neg ? -val : val;
    }

    public long nextLong() throws Exception {
        int c;
        long val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+')
            c = scan();
        for (; c >= '0' && c <= '9'; c = scan())
            val = (val << 3) + (val << 1) + (c & 15);
        return neg ? -val : val;
    }

    public void print(Object a) throws Exception {
        bw.write(a.toString());
    }

    public void printsp(Object a) throws Exception {
        print(a);
        print(" ");
    }

    public void println() throws Exception {
        bw.write("\n");
    }

    public void println(Object a) throws Exception {
        print(a);
        println();
    }

    public void flush() throws Exception {
        bw.flush();
    }
}