#include <cstdio>
#include <cstring>
#include <cstdlib>

#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define NINF 0xc0c0c0c0
struct _device
{
    int b,p;
};
_device info[105][205];
int infocnt[105];

int GlobalMin=INF;
int GlobalLinerMin;

int LinerMax[105];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        /// Input & Find Global Min
        for(int i=0;i<n;i++)
        {
            scanf("%d",&infocnt[i]);
            LinerMax[i]=NINF;
            for(int j=0;j<infocnt[i];j++)
            {
                scanf("%d %d",&info[i][j].b,&info[i][j].p);
                GlobalMin=min(GlobalMin,info[i][j].b);
                LinerMax[i]=max(LinerMax[i],info[i][j].b);
            }
        }
        /// Find GlobalLinerMin in LinerMax
        GlobalLinerMin=INF;
        for(int i=0;i<n;i++)
        {
            GlobalLinerMin=min(GlobalLinerMin,LinerMax[i]);
        }

        /// Enumerate B from GlobalMin to GlobalLinerMin
        double MaxRate=-1;
        for(int B=GlobalMin;B<=GlobalLinerMin;B++)
        {
            int PSUM=0;
            int BMIN=INF;
            /// Enumerate in each type
            for(int i=0;i<n;i++)
            {
                /// Find A Device whose Bi > B and P is the min.
                int minp=INF;
                int minb=INF;
                for(int j=0;j<infocnt[i];j++)
                {
                    if(info[i][j].b>=B)
                    {
                        if(minp>info[i][j].p)
                        {
                            minp=info[i][j].p;
                            minb=min(minb,info[i][j].b);
                        }
                    }
                }
                PSUM+=minp;
                BMIN=min(BMIN,minb);
            }
            MaxRate=max(MaxRate,(double)BMIN/PSUM);
        }
        printf("%.3f\n",MaxRate);
    }
    return 0;
}