#include int isK(int a, int b, int c) { return ( (a < b && b > c && a != c) || (a > b && b < c && a != c) ); } long long int dp[15][10][10]; int main() { int d, i, j, k, l; for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { if(i != j) { dp[2][i][j] = 1; } } } for(d = 3; d <= 14; d++) { for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { for(k = 0; k < 10; k++) { if( isK(i, j, k) ) { dp[d][i][j] += dp[d - 1][j][k]; } } } } } int t; scanf("%d", &t); for(i = 0; i < t; i++) { long long int x; scanf("%lld", &x); int ans[14], len; long long int count = 0; for(d = 3; d <= 14; d++) { for(j = 1; j < 10; j++) { for(k = 0; k < 10; k++) { if(count + dp[d][j][k] >= x) { ans[d - 1] = j; ans[d - 2] = k; len = d; d = j = k = 15; // 3重ループ脱出 } else { count += dp[d][j][k]; } } } } for(d = len - 1; 2 <= d; d--) { j = ans[d ]; k = ans[d - 1]; for(l = 0; l < 10; l++) { if( isK(j, k, l) ) { if(count + dp[d][k][l] >= x) { ans[d - 2] = l; break; } else { count += dp[d][k][l]; } } } } for(d = len - 1; 0 <= d; d--) { printf("%d", ans[d]); } printf("\n"); } return 0; }