#include #include #include using namespace std; using lint = long long; #define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i IStream &operator>>(IStream &is, std::vector &vec) { for (auto &v : vec) is >> v; return is; } #include using mint = atcoder::modint998244353; int main() { cin.tie(nullptr), ios::sync_with_stdio(false); int N; cin >> N; vector A(N); cin >> A; vector<__int128> pow10s(20, 1); FOR(i, 1, 20) pow10s[i] = pow10s[i - 1] * 10; sort(A.begin(), A.end(), [&](lint l, lint r) { const int lsz = to_string(l).size(), rsz = to_string(r).size(); return pow10s.at(lsz) * r + l > pow10s.at(rsz) * l + r; // return (pow10s.at(lsz) * l) * pow10s.at(rsz) + r < (pow10s.at(rsz) * r) * pow10s.at(lsz) + l; // if (lsz < rsz) return false; // return l < r; // if (to_string(l).size() == to_string(r).size()) return l < r; }); mint ret = 0; for (lint a : A) { int sz = to_string(a).size(); ret = ret * mint(10).pow(sz) + a; } cout << ret.val() << '\n'; }