#include #include using namespace std; using isize = size_t; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; using i128 = __int128_t; using u128 = __uint128_t; using f64 = long double; using p2 = pair; using el = tuple; using mint = atcoder::modint998244353; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(18); _main(); } void solve(string s, i64 m) { vector ten(20, 1); for (i64 i = 1; i < ten.size(); i++) ten[i] = ten[i - 1] * 10 % m; for (i64 i = 0; i < s.size(); i++) { bool ok = true; for (i64 j = 0; i + j < s.size(); j++) { ok &= s[i + j] == s[j]; } if (!ok) continue; i64 x = 0; for (i64 j = 0; j < s.size(); j++) x = x * 10 + s[j] - '0'; for (i64 j = s.size() - i; j < s.size(); j++) x = x * 10 + s[j] - '0'; if (x % m == 0) { cout << x << "\n"; return; } } i64 B = 1; for (i64 i = 0; i < s.size(); i++) B *= 10; for (i64 d = 1; d + s.size() * 2 <= 18; d++) { i64 p = 0; for (i64 i = s.size() - 1; i >= 0; i--) { p += (s[s.size() - i - 1] - '0') * ten[i + d + s.size()] % m; p += (s[s.size() - i - 1] - '0') * ten[i] % m; p %= m; } p = (m - p) % m; vector rrr = {0, p}, mmm = {B, m}; auto [R, M] = atcoder::crt(rrr, mmm); if (M == 0) continue; if (R == 0) { cout << s; for (i64 c = 0; c < d; c++) cout << "0"; cout << s; cout << "\n"; return; } for (i64 c = 0; c < s.size(); c++) { assert(R % 10 == 0); R /= 10; } string t = to_string(R); if (t.size() > d) continue; reverse(t.begin(), t.end()); while (t.size() < d) t += '0'; reverse(t.begin(), t.end()); cout << s << t << s << "\n"; return; } cout << "-1\n"; } void _main() { i64 ttt; cin >> ttt; for (;ttt--;) { string s; i64 m; cin >> s >> m; solve(s, m); } }