#include using namespace std; using ll = long long; using i128 = __int128; using pll = pair; using vll = vector; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; constexpr ll INF = (1LL << 60); ll ALPHABET_N = 26; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define rrep(i, n) for (ll i = (ll)(n) - 1; i >= 0; i--) #define all(a) a.begin(), a.end() #define sum_(a) accumulate(a.begin(), a.end(), 0LL) template bool chmax(T &a, const T &b) { if (a < b) { a = b; return true; } return false; } template bool chmin(T &a, const T &b) { if (a > b) { a = b; return true; } return false; } #include using namespace atcoder; using mint = modint998244353; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, p; cin>>n>>p; modint::set_mod(p); set st; rep(i1, 10) rep(i2, 10) rep_(i3, 1, 10) { string s; s += to_string(i3); s += to_string(i3); s += to_string(i1); s += to_string(i2); s += to_string(i2); s += to_string(i1); ll val = stoll(s); ll mul = 1; while(abs(-val * mul) <= n) { st.insert(-val * mul); mul++; } } modint ans = 0; for(auto val: st) { ans += val; } cout<