import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; class Main { public static void main(String [] args ) { //long st = System.currentTimeMillis(); try{ String str; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedOutputStream bos = new BufferedOutputStream(System.out); String eol = System.getProperty("line.separator"); byte [] eolb = eol.getBytes(); BigInteger [] fact = new BigInteger[5001]; fact[0] = BigInteger.ONE; for(int i = 1 ; i < 5001 ; i++) { fact[i] = fact[i-1].multiply(new BigInteger(new Integer(i).toString())); } str = br.readLine(); int t = Integer.parseInt(str); for(int i = 0 ; i < t ; i++) { str = br.readLine(); int blank = str.indexOf( " "); int n = Integer.parseInt(str.substring(0,blank)); str = str.substring(blank+1); blank = str.indexOf( " "); int k = Integer.parseInt(str.substring(0,blank)); BigInteger m = new BigInteger(str.substring(blank+1)); StringBuilder ans = new StringBuilder(""); int left = n; int ones = k; BigInteger zero = BigInteger.ZERO; if(left!=ones) { zero = fact[left-1].divide(fact[ones]).divide(fact[left-1-ones]); } while(true) { if(m.compareTo(zero)>0) { ans.append("1"); m = m.subtract(zero); ones--; } else { ans.append("0"); } left--; if((left==0)||(left==ones)||(ones==0)) { break; } zero = fact[left-1].divide(fact[ones]).divide(fact[left-1-ones]); } if(ones==0) { while(left>0) { left--; ans.append("0"); } } while(left>0) { left--; ans.append("1"); } bos.write(ans.toString().getBytes()); bos.write(eolb); } bos.flush(); } catch(IOException ioe) { ioe.printStackTrace(); } //long en = System.currentTimeMillis(); ///System.out.println("time = " + (en-st)); } } ; } }