#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#define M 31271
using namespace std;
long long a[M];
long long s[M];
int lower_bsearch(int value,long long *A,int x,int y) //x初始值为 0 y为 len - 1 value为要查找的值,A查找的数组 (升序排列)
{
int mid,max = y;
while(x < y){
mid = x + (y-x)/2;
if(A[mid] >= value)
y = mid;
else x = mid + 1;
}
return x; // 返回 第一个大于等于value的值的下标
}
void List()
{
a[0] = 0;s[0] = 0;
a[1] = 1;
s[1] = 1;
for(int i = 2;i < M;i++)
{
a[i] = a[i-1] + (long long)(log10((double)i)) + 1;
s[i] = s[i-1] + a[i];
}
}
int Find(int n)
{
int loc;
loc = lower_bsearch(n,s,0,M-1); //查找总和在哪个区间段
int dis = n - s[loc-1];
int i = lower_bsearch(dis,a,0,M-1);//查找位于哪个数
int d = dis - a[i-1];
char ss[100];
sprintf(ss,"%d",i);
return (ss[d-1]-'0');
}
int main()
{
//freopen("in.in","r",stdin);
int T,n;
cin>>T;
List();
while(T--)
{
cin>>n;
cout<<Find(n)<<endl;
}
return 0;
}