/* 1. x が接尾辞と接頭辞として被るケース 2. 被らないケース */ #include #include using namespace std; using ll = long long; int presuf(string s, int len){ int sz = s.size(); assert(sz <= len && len <= sz * 2); s += s.substr(sz*2-len); return stoi(s); } ll ten(int e){ ll ret = 1; while (e--){ ret *= 10; } return ret; } void solve(){ int x; cin >> x; int m; cin >> m; string s = to_string(x); int sz = s.size(); for (int len = sz; len <= sz*2; len++){ int v = presuf(s,len); if (v % m == 0){ cout << v << '\n'; return ; } } for (int len = sz*2+1; len <= 18; len++){ ll a = ten(sz); ll b = (ten(len-sz)+1)*x; // an + b == mk a %= m; b %= m; ll g = gcd(a, m); if (b % g != 0) continue; // a/g n + b/g == m/g k ll n = atcoder::internal::safe_mod(atcoder::inv_mod(a/g,m/g) * (-b/g), m/g); if (n < ten(len-2*sz)){ ll v = a * n + b; cout << v << '\n'; return ; } } cout << -1 << '\n'; } int main(){ cin.tie(0)->sync_with_stdio(0); int t; cin >> t; while (t--){ solve(); } }