autoMikasa(){ ll k, n = 0, m; cin >> k >> m; const ll Mod = 10007 * m; vector<ll> Rpow2(55); // 111..111; len = 2^k vector<ll> suffix(k + 1); vector<pair<ll, ll>> cl(k + 1);
Rpow2[0] = 1; for (ll i = 1; i < Rpow2.size(); ++i) { const ll pra = (1 + fastpow(10, 1ll << (i - 1), Mod)) % Mod; (Rpow2[i] = pra * Rpow2[i - 1]) %= Mod; }
for (ll i = 1; i <= k; ++i) cin >> cl[i].first >> cl[i].second; for (ll i = k - 1; i >= 1; --i) suffix[i] = suffix[i + 1] + cl[i + 1].second;
auto getR = [&](ll pownum)->ll { ll ans = 0; for (ll h = 50; h >= 0; --h) { if ((pownum >> h) & 1) { (ans *= fastpow(10, 1ll << h, Mod)) %= Mod; (ans += Rpow2[h]) %= Mod; } } return ans; };
for (ll i = 1; i <= k; ++i) { (n += cl[i].first * getR(cl[i].second) % Mod * fastpow(10, suffix[i], Mod) % Mod) %= Mod; } cout << n / m << endl; }