#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int T; ll N,K; const ll mo=998244353; ll p10[20]; void solve() { int i,j,k,l,r,x,y; string s; p10[0]=1; FOR(i,19) p10[i+1]=p10[i]*10; cin>>T; while(T--) { cin>>N>>K; ll U=N/p10[K]; ll L=N%p10[K]; // 奇数 ll o=((U+1)/2-(U%2))%mo; //偶数 ll e=(U/2-(U%2==0))%mo; // Zの上位桁がNと不一致 ll U1=(o*(o-1)+e*(e+1))/2%mo; // Zの上位桁がNと一致 ll U2=U/2%mo; // Zの上位桁がN以上 o=(p10[K]/2-L/2)%mo; e=(p10[K]/2-(L+1)/2)%mo; ll L2=(o*(o-1)+e*(e-1))/2%mo; // 奇数と偶数を2つ選ぶ ll L1=((p10[K]/2)%mo*((p10[K]/2-1)%mo)%mo+mo-L2)%mo; ll ret=U1*L1+U1*L2+U2*L1; cout<