Consider the following process. You have a binary string (a string where each character is either 0 or 1) w of length n and an integer x. You build a new binary string s consisting of n characters. The i-th character of s is chosen as follows:

  * if the character w_{i-x} exists and is equal to 1, then s_i is 1 (formally, if i > x and w_{i-x} =  1, then s_i =  1); 
  * if the character w_{i+x} exists and is equal to 1, then s_i is 1 (formally, if i + x ≤ n and w_{i+x} =  1, then s_i =  1); 
  * if both of the aforementioned conditions are false, then s_i is 0. 



You are given the integer x and the resulting string s. Reconstruct the original string w.

Input

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

Each test case consists of two lines. The first line contains the resulting string s (2 ≤ |s| ≤ 10^5, each character of s is either 0 or 1). The second line contains one integer x (1 ≤ x ≤ |s| - 1).

The total length of all strings s in the input does not exceed 10^5.

Output

For each test case, print the answer on a separate line as follows:

  * if no string w can produce the string s at the end of the process, print -1; 
  * otherwise, print the binary string w consisting of |s| characters. If there are multiple answers, print any of them. 

Example

Input


3
101110
2
01
1
110
1


Output


111011
10
-1
import java.io.*;
import java.util.*;

public class C {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static FastReader s = new FastReader();
    static PrintWriter out = new PrintWriter(System.out);

    private static int[] rai(int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextInt();
        }
        return arr;
    }

    private static int[][] rai(int n, int m) {
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextInt();
            }
        }
        return arr;
    }

    private static long[] ral(int n) {
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextLong();
        }
        return arr;
    }

    private static long[][] ral(int n, int m) {
        long[][] arr = new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextLong();
            }
        }
        return arr;
    }

    private static int ri() {
        return s.nextInt();
    }

    private static long rl() {
        return s.nextLong();
    }

    private static String rs() {
        return s.next();
    }

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

    static boolean isPrime(int n) {
        //check if n is a multiple of 2
        if (n % 2 == 0) return false;
        //if not, then just check the odds
        for (int i = 3; i <= Math.sqrt(n); i += 2) {
            if (n % i == 0)
                return false;
        }
        return true;
    }

    static int onesComp(int val)
    {
        String str=Integer.toBinaryString(val);
        int newval=0;
        int pow=0;
        for(int i=str.length()-1;i>=0;i--)
        {
            if(str.charAt(i)=='0')
            {
                newval+=Math.pow(2,pow);
            }
            pow++;
        }
        return newval;
    }

    public static void main(String[] args) {
        StringBuilder ans = new StringBuilder();
        int t = ri();
//        int t = 1;
        while (t-- > 0)
        {
            char[] arr=rs().toCharArray();
            int x=ri();
            int n=arr.length;
            char[] res=new char[n];

            Arrays.fill(res,'_');
            for(int i=0;i<n;i++)
            {
                if(arr[i]=='0')
                {
                    if(i+x<n)
                    {
                        res[i+x]='0';
                    }
                    if(i-x>=0)
                    {
                        res[i-x]='0';
                    }
                }
            }
//            for(char b:res)
//            {
//                System.out.print(b+" ");
//            }
//            System.out.println();
            int flag=0;
            for(int i=0;i<n;i++)
            {
                if(arr[i]=='1')
                {
                    boolean b=false;
                    if(i+x<n)
                    {
                        if(res[i+x]=='_' ||  res[i+x]=='1')
                        {
                            res[i+x]='1';
                            b=true;
                        }
                    }
                    if(i-x>=0)
                    {
                        if(res[i-x]=='_' || res[i-x]=='1')
                        {
                            res[i-x]='1';
                            b=true;
                        }

                    }
//                    System.out.println(i+" "+b);
                    if(!b)
                    {
                        flag=1;
                        break;
                    }
                }
//                System.out.println(i+" "+c1+" "+c2);

            }
            if(flag==1)
            {
                ans.append("-1\n");
            }
            else {
                for(char c:res)
                {
                    if(c=='_')
                    {
                        ans.append('0');
                    }
                    else {
                        ans.append(c);
                    }
                }
                ans.append("\n");
            }
        }



        out.print(ans.toString());
        out.flush();

    }


}



