/* 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); if (s.substr(len-sz) == s.substr(0,sz)){ return stoi(s); } return -1; } 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(); // AYASHII // for (int len = sz; len <= sz*2; len++){ // int v = presuf(s,len); // if (v == -1) continue; // 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 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) * atcoder::internal::safe_mod(-b/g,m/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(); } }