#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma comment(linker, "/stack:200000000") #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef pair pii; typedef pair pll; typedef pair pdd; #define X first #define Y second //#include //using namespace boost; /* #include #include using namespace __gnu_pbds; typedef tree, rb_tree_tag, tree_order_statistics_node_update> rbtree; rbtree T; */ using i32 = int; using i64 = long long; using u8 = unsigned char; using u32 = unsigned; using u64 = unsigned long long; using f64 = double; using f80 = long double; //using i128 = __int128_t; //using u128 = __uint128_t; //using i128 = i64; //using u128 = u64; ll power(ll a, ll b, ll p) { if (!b) return 1; ll t = power(a, b/2, p); t = t*t%p; if (b&1) t = t*a%p; return t; } ll exgcd(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return a; } ll px, py; ll d = exgcd(b, a%b, px, py); x = py; y = px-a/b*py; return d; } template inline void freshmin(T &a, const T &b) { if (a > b) a = b; } template inline void freshmax(T &a, const T &b) { if (a < b) a = b; } template void print(const T &a) { for (auto x : a) printf("%d ", x); puts(""); } const int MAXN = 5010; const int INF = 1000000000; //const int MOD = 998244353; const int MOD = 2520; const int INV2 = (MOD+1)/2; int n; int f[MAXN], g[MAXN]; int main() { int T; scanf("%d", &T); while (T --) { scanf("%d", &n); for (int i = 0; i < n; ++ i) scanf("%d", &f[i]); for (int i = 0; i < n; ++ i) scanf("%d", &g[i]); int fn = n-1, gn = n-1; while (!f[fn]) -- fn; while (!g[gn]) -- gn; if (fn < gn) puts("0/1"); else if (fn > gn) puts("1/0"); else { int a = f[fn], b = g[gn]; int d = __gcd(a, b); printf("%d/%d\n", a/d, b/d); } } return 0; }