#define __USE_MINGW_ANSI_STDIO 0
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
template <class T>
using ordered_set = __gnu_pbds::tree<T, __gnu_pbds::null_type, less<T>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update>;
template <class T>
using ordered_multiset = __gnu_pbds::tree<T, __gnu_pbds::null_type, less_equal<T>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update>;

#define PI atan2(0, -1)
#define epsilon 1e-9
#define INF 5e18
#define MOD 1000000007

#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound

int kase, N;
pair<long long, long long> arr [15], mini, maxi, ret;
bool ok;
long long lo, hi;

void updateMini(pair<long long, long long> a){
    if(mini.f == -1){
        mini = a;
        return;
    }
    if(a.f*mini.s > a.s*mini.f) mini = a;
}

void updateMaxi(pair<long long, long long> a){
    if(maxi.f == -1){
        maxi = a;
        return;
    }
    if(a.f*maxi.s < a.s*maxi.f) maxi = a;
}

int main(){
    //freopen("sort.in", "r", stdin); freopen("sort.out", "w", stdout);
    ios_base::sync_with_stdio(0); cin.tie(0); cout << fixed << setprecision(10);
    cin >> kase;
    for(int kk = 1; kk <= kase; kk++){
        cin >> N; assert(N <= 10); mini = mp(-1, -1); maxi = mp(-1, -1); ok = true;
        for(int i = 0; i < N; i++) cin >> arr[i].f >> arr[i].s;
        for(int i = 0; i < N && ok; i++)
            for(int j = i+1; j < N; j++){
                if(arr[j].f >= arr[i].f && arr[j].s >= arr[i].s) continue;
                if(arr[j].f <= arr[i].f && arr[j].s <= arr[i].s){ ok = false; break; }
                long long uno = arr[j].f-arr[i].f, dos = arr[i].s-arr[j].s;
                long long gg = __gcd(abs(uno), abs(dos)); uno /= gg; dos /= gg;
                if(dos > 0) updateMaxi(mp(uno, dos));
                else updateMini(mp(-uno, -dos));
            }
        if(!ok){
            cout << "Case #" << kk << ": IMPOSSIBLE\n";
            continue;
        }
        if(mini.f == -1) mini = mp(1, 2*MOD);
        if(maxi.f == -1) maxi = mp(2*MOD, 1);
        if(mini.f*maxi.s >= mini.s*maxi.f){
            cout << "Case #" << kk << ": IMPOSSIBLE\n";
            continue;
        }
        lo = 1; hi = 2*(mini.s+maxi.s); ret = mp(-1, -1);
        while(lo <= hi){
            long long mid = (lo+hi)/2;
            long long lefty = (mini.f*mid)/mini.s+1;
            long long righty = (maxi.f*mid)/maxi.s;
            if((maxi.f*mid)%maxi.s == 0) righty--;
            if(lefty <= righty){
                hi = mid-1;
                ret = mp(mid, lefty);
            }
            else lo = mid+1;
        }
        assert(ret != mp(-1ll, -1ll));
        cout << "Case #" << kk << ": " << ret.f << ' ' << ret.s << '\n';
    }
    return 0;
}

/******************************
Kateba ii dake no hanashi darou
Success is only a victory away
- No Game No Life Opening
******************************/
