#include #include #include #include #define endl '\n' using namespace std; ifstream fin("alchemy.in"); ofstream fout("alchemy.out"); const int MAXN = 200000; long long x[MAXN + 5], a[MAXN + 5], b[MAXN + 5], c[MAXN + 5]; int main() { ios :: sync_with_stdio(false); fin.tie(NULL); fout.tie(NULL); int T; fin >> T; while (T--) { int N; fin >> N; long long d = 0; for (int i = 1; i <= N; ++ i) { fin >> x[i]; d = __gcd(d, x[i]); } long long sum = 0; for (int i = 1; i <= N; ++ i) { x[i] /= d; sum += x[i]; } bool flag = true; for (int i = 1; i <= N; ++ i) { fin >> a[i] >> b[i]; d = __gcd(b[i], x[i]); if (a[i] < x[i] / d) flag = false; else c[i] = b[i] / d; } if (!flag) { fout << -1 << endl; continue; } long long k = c[1]; for (int i = 2; i <= N; ++ i) { long long mx = a[i] * b[i] / x[i]; d = __gcd(k, c[i]); if (ceil(mx / c[i]) >= k / d) k = k / d * c[i]; else flag = false; } if (!flag) { fout << -1 << endl; continue; } long long k1 = -1; for (int i = 1; i <= N; ++ i) { long long mx = a[i] * b[i] / x[i]; if (mx < k) flag = false; else { if (k1 == -1) k1 = mx / k; else k1 = min(k1, mx / k); } } if (!flag) fout << -1 << endl; else { fout << sum * k << " "; k *= k1; fout << sum * k << endl; } } return 0; }