#include <stdio.h>
#include <string.h>
#define OCTAL 8
#define DECIMAL 10
#define HEXADECIMAL 16
// 문자열 처음이 0으로 시작되었을 때
// 0이 아닌 첫 숫자의 인덱스를 반환하는 함수
int start_index(char *num, int len){
for(int i = 0; i < len; i++){
if(num[i] != '0'){
return i;
}
}
return len-1;
}
// 다른 진법을 10진법으로 바꾸는 함수
int base_to_decimal(char *num, int len, int base){
int sum = 0;
int i = start_index(num, len);
for(i; i < len; i++){
int j_len = len - 1 - i;
int multi = 1;
for(int j = 0; j < j_len; j++){
multi *= base;
}
sum += ((int)num[i]-48) * multi;
}
return sum;
}
// 8진수로 해석될 수 있는지 확인하는 함수
int is_octal(char *num, int len){
int is_octal = 1;
for(int i = 0; i < len; i++){
if((num[i]-48) >= OCTAL){
is_octal = 0;
}
}
return is_octal;
}
int main(void){
// 테스트 케이스 입력
int test_case = 0;
scanf("%d", &test_case);
for(int i = 1; i <= test_case; i++){
// 데이터 번호와 문자열(숫자)입력
int index = 0;
char num[10000] = {0};
scanf("%d %s", &index, &num);
int len = strlen(num);
// 8진법, 10진법, 16진법 구하기
int octal = 0;
int decimal = base_to_decimal(num, len, DECIMAL);
int hexadecimal = base_to_decimal(num, len, HEXADECIMAL);
// 8진수로 해석될 수 있으면 8진법으로 구하기
if(is_octal(num, len)){
octal = base_to_decimal(num, len, OCTAL);
}
// 출력
printf("%d %d %d %d\n", index, octal, decimal, hexadecimal);
}
}