#include<algorithm>
#include<bitset>
#include<cmath>
#include<complex>
#include<deque>
#include<functional>
#include<iomanip>
#include<iostream>
#include<iterator>
#include<map>
#include<numeric>
#include<queue>
#include<set>
#include<stack>
#include<string>
#include<unordered_map>
#include<unordered_set>
#include<utility>
#include<vector>
#include<chrono>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define FOR(i,x,n) for(int i=x; i<(n); i++)
#define vint(a,n) vint a(n); rep(i, n) cin >> a[i];
#define vll(a,n) vll a(n); rep(i, n) cin >> a[i];
#define ALL(n) begin(n),end(n)
#define RALL(n) rbegin(n),rend(n)
#define MOD (1000000007)
// #define MOD (998244353)
#define INF (1e9+7)
#define INFL (2e18)

typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
using vint=vector<int>;
using vll=vector<ll>;
using vbool=vector<bool>;
template<class T>using arr=vector<vector<T>>;
template<class T>int popcount(T &a){int c=0; rep(i, 8*(int)sizeof(a)){if((a>>i)&1) c++;} return c;}
template<class T>void pl(T x){cout << x << " ";}
template<class T>void pr(T x){cout << x << endl;}
template<class T>void prvec(vector<T>& a){rep(i, (int)a.size()-1){pl(a[i]);} pr(a.back());}
template<class T>void prarr(arr<T>& a){rep(i, (int)a.size()) if(a[i].empty()) pr(""); else prvec(a[i]);}
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

ll modpow(ll a, ll n, ll p) {
    if (n == 1) return a % p;
    if (n % 2 == 1) return (a * modpow(a, n - 1, p)) % p;
    long long t = modpow(a, n / 2, p);
    return (t * t) % p;
    }

int main()
{
    ll n, m;
    cin >> n >> m;
    ll t = modpow(10, n, m*m);
    // modpow(10, 2, 2);
    pr((t/m)%m);
    return 0;}
#include<bits/stdc++.h>
#define int long long       
using namespace std;
int mod=998244353;
const int sz=5e3+1;
int fac[sz];
int inv[sz];
int fpow(int a,int b)
{
    int ans=1;
    while(b)
    {
        if(b&1)
        {
            ans*=a;
            ans%=mod;
        }
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ans;
}
int combo(int n,int r)
{
    if(n<r)
    {
        return 0;
    }
    return (((fac[n]*inv[r])%mod)*inv[n-r])%mod;
}
void precomp(int n)
{
    fac[0]=1;
    for(int i=1;i<=n;i++)
    {
        fac[i]=(fac[i-1]*i)%mod;
    }
    inv[0]=1;
    for(int i=1;i<=n;i++)
    {
        inv[i]=fpow(fac[i],mod-2);
    }
}
int dp[5001][5001];
int solve(int m,int k,int &n)
{
    if(m==0)
    {
        return 1;
    }
    if(m<k||m%k)
    {
        return 0;
    }
    if(dp[m][k])
    {
        return dp[m][k];
    }
    int ans=0;
    for(int i=0;i<=m;i+=k)
    {
        int te=solve(m-i,2*k,n)*combo(n,i/k*2);
        ans+=te;
        if(ans>mod)
        {
           ans%=mod;
        }
    }
    return dp[m][k]=ans;
}
signed main()
{
    int n,m;
    cin>>n>>m;
    precomp(n);
    if(n==1)
    {
        cout<<0;
    }
    else
    {
        cout<<solve(m,2,n);
    }
    return 0;
}