Problem: Let's say string s has period k if s_i = s_{i + k} for all i from 1 to |s| - k (|s| means length of string s) and k is the minimum positive integer with this property.

Some examples of a period: for s="0101" the period is k=2, for s="0000" the period is k=1, for s="010" the period is k=2, for s="0011" the period is k=4.

You are given string t consisting only of 0's and 1's and you need to find such string s that:

  1. String s consists only of 0's and 1's; 
  2. The length of s doesn't exceed 2 ⋅ |t|; 
  3. String t is a subsequence of string s; 
  4. String s has smallest possible period among all strings that meet conditions 1—3. 



Let us recall that t is a subsequence of s if t can be derived from s by deleting zero or more elements (any) without changing the order of the remaining elements. For example, t="011" is a subsequence of s="10101".

Input

The first line contains single integer T (1 ≤ T ≤ 100) — the number of test cases.

Next T lines contain test cases — one per line. Each line contains string t (1 ≤ |t| ≤ 100) consisting only of 0's and 1's.

Output

Print one string for each test case — string s you needed to find. If there are multiple solutions print any one of them.

Example

Input


4
00
01
111
110


Output


00
01
11111
1010

Note

In the first and second test cases, s = t since it's already one of the optimal solutions. Answers have periods equal to 1 and 2, respectively.

In the third test case, there are shorter optimal solutions, but it's okay since we don't need to minimize the string s. String s has period equal to 1.

Solution (in JAVA):

Solution:
import java.util.*;
import java.io.*;
 
/** Class for buffered reading int and double values */
 
 public class gfg {
    
    static ArrayList<Integer>[] graph;
    static boolean[] vis;
    static int verts=0;
    static long edges=0;
    //static int flag=0;

    public static void main(String[] args) throws IOException{
        Reader r = new Reader();
        Reader.init(System.in);
        int t = r.nextInt();
        while(t-->0){
            String s = r.next();
            System.out.println(solve(s));

        }

    }

    static String solve(String s){
        String ans="";
        int count1 =0;
        int count0 =0;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='1')
                count1++;
            else 
                count0++;
        }
        if(count1==0 | count0==0)
            return s;

        if(s.charAt(0)=='0'){
            for(int i=0;i<2*s.length();i++){
                if(i%2==0)
                    ans+="0";
                else
                    ans+="1";
            }
        }
        if(s.charAt(0)=='1'){
            for(int i=0;i<2*s.length();i++){
                if(i%2==0)
                    ans+="1";
                else
                    ans+="0";
            }
        }
        return ans;
        
    } 

    


    static long fastpow(long a, long n){
        //System.out.println("ssdf");
        if(n>0){
            long half = fastpow(a,n/2);
            if(n%2==0){
                return half*half;
            } 
            else
                return a*half*half;
        }
        return 1;
    }

    
}


class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;

    /** call this method to initialize reader for InputStream */
    static void init(InputStream input) {
        reader = new BufferedReader(
                     new InputStreamReader(input) );
        tokenizer = new StringTokenizer("");
    }

    /** get next word */
    static String next() throws IOException {
        while ( ! tokenizer.hasMoreTokens() ) {
            //TODO add check for eof if necessary
            tokenizer = new StringTokenizer(
                   reader.readLine() );
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException {
        return Integer.parseInt( next() );
    }
    static long nextLong() throws IOException {
        return Long.parseLong( next() );
    }
    
    static double nextDouble() throws IOException {
        return Double.parseDouble( next() );
    }
}

class node {
    int a;
    int b;// cost to rreach\
    int dif =0;
    node(int v,int va){
        a=v;
        b=va;
        dif = Math.abs(b) - Math.abs(a);
    }
}
class mergesort{
    static void sort(int l, int h, int[] arr){
        if(l<h){
            int mid = (l+h)/2;
            
            sort(l,mid,arr);
            sort(mid+1,h,arr);
            merge(l,mid,h,arr);
        }
    }
    static void merge(int l, int m , int h , int [] arr){

        int[] left = new int[m-l+1];
        int[] right = new int[h-m];
        for(int i= 0 ;i< m-l+1;i++){
            left[i] = arr[l+i];
        }
        for(int i=0;i<h-m;i++){
            right[i] = arr[m+1+i];
        }
        //now left and right arrays are assumed to be sorted and we have tp merge them together 
        // int the original aaray.
        int i=l;
        int lindex = 0;
        int rindex =  0;
        
        while(lindex<m-l+1 && rindex<h-m){
            if(left[lindex]<=right[rindex]){
                arr[i]=left[lindex];
                lindex++;
                i++;
            }
            else{
                arr[i]=right[rindex];
                rindex++;
                i++;
            }
        }
        while(lindex<m-l+1){
            arr[i]=left[lindex];
            lindex++;
            i++;
        }
        while(rindex<h-m){
            arr[i]=right[rindex];
            rindex++;
            i++;
        }
    }
    
}