#include <stdio.h>
#include <string.h>
//콤비네이션 함수를 "동적 계획법"으로 짜볼까요
long com[201][101];
long combi(int n, int r){
if(com[n][r] != -1 ) return com[n][r];
else if(n == 0) return 0;
else if(r== n || r == 0){ com[n][r] = 1; return 1; }
else{ com[n][r] = combi(n-1,r-1) + combi(n-1,r); return com[n][r];}
}
void make_temp_result(int m_temp, int k_temp);
void make_result();
char result[201] = { 0, }; //null을 위한 한칸
char temp_result[201] = { 0, }; //조합이 너무 커지는 경우가 발생할 경우 앞 부분이 '-'가 연속해서 나오므로 처음 나온 'o'부터의 문자열을 '거꾸로 순서로'!! 여기에 저장
int n,m,k;
int num_of_maketempresult; //함수 실행 횟수
int main(){
for(int i=0;i<201;i++){for(int j=0;j<101;j++) com[i][j] = -1;}
int tc;
scanf("%d",&tc);
for(int i=0;i<tc;i++){
//memset으로 초기화!!를 해줘야되용
memset(result,0,m+n);
memset(temp_result,0,m+n);
num_of_maketempresult = 0;
scanf("%d%d%d", &n,&m,&k);
make_result();
printf("%s\n",result);
}
return 0;
}
void make_result(){
make_temp_result(m,k);
for(int i=0;i<m+n - strlen(temp_result);i++) result[i] = 45;
for(int i=0;i<strlen(temp_result);i++) result[m+n-1-i] = temp_result[i];
}
void make_temp_result(int m_temp, int k_temp){
int i;
for(i=m_temp;k_temp>combi(i,m_temp);i++);
temp_result[i-1] = 111;
if(num_of_maketempresult == 0){ for(int j=0;j<i-1;j++) temp_result[j] = 45; } //해당 줄은 앞을 전부 '-'로 만들어줍니다!
num_of_maketempresult++;
if(num_of_maketempresult < m) make_temp_result(m_temp-1, k_temp - combi(i-1,m_temp));
}