#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
double bez(double x)
{
if(x<0)
{
return x*-1;
}
else
{
return x;
}
}
double Pole(double x,double y,double x1,double y1)
{
double p;
p=((x*y1)-(x1*y))/2;
return bez(p);
}
int main()
{
int ile,a,b,c,d;
double pole,p2,x=-1;
vector <double> wx;
vector <double> wy;
cin>>ile;
for(int i=0;i<ile*2;i++)
{
x+=2;
cin>>a;
cin>>b;
cin>>c;
cin>>d;
wx.push_back(c-a);
wy.push_back(d-b);
cin>>c;
cin>>d;
wx.push_back(c-a);
wy.push_back(d-b);
pole=Pole(wx[x-1],wy[x-1],wx[x],wy[x]);
while((c!=a)||(d!=b))
{
x++;
cin>>c;
cin>>d;
wx.push_back(c-a);
wy.push_back(d-b);
if((wy[x]/wx[x])>(wy[x-1]/wx[x-1])&&wx[x]>=0||(wy[x]/wx[x])<(wy[x-1]/wx[x-1])&&wx[x]<0)
{
pole+=Pole(wy[x],wx[x],wy[x-1],wx[x-1]);;
}
else
{
pole-=Pole(wy[x],wx[x],wy[x-1],wx[x-1]);
}
}
pole=bez(pole);
if(i%2==0)
{
p2=pole;
}
else
{
cout<<setprecision(1000);
if(pole>p2)
cout<<(p2*10)+(pole-p2)*6<<endl;
else
cout<<(pole*10)+(p2-pole)*6<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSAgPGlvbWFuaXA+CiAKIAogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRvdWJsZSBiZXooZG91YmxlIHgpCnsKICAgIGlmKHg8MCkKICAgIHsKICAgICAgICByZXR1cm4geCotMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICByZXR1cm4geDsKICAgIH0KfQogCmRvdWJsZSBQb2xlKGRvdWJsZSB4LGRvdWJsZSB5LGRvdWJsZSB4MSxkb3VibGUgeTEpCnsKICAgIGRvdWJsZSBwOwogICAgcD0oKHgqeTEpLSh4MSp5KSkvMjsKICAgcmV0dXJuIGJleihwKTsKfQogCiAKaW50IG1haW4oKQp7CiAKICAgIGludCBpbGUsYSxiLGMsZDsKICAgIGRvdWJsZSBwb2xlLHAyLHg9LTE7CiAgICB2ZWN0b3IgPGRvdWJsZT4gd3g7CiAgICB2ZWN0b3IgPGRvdWJsZT4gd3k7CiAKICAgIGNpbj4+aWxlOwogICAgZm9yKGludCBpPTA7aTxpbGUqMjtpKyspCiAgICB7CiAgICAgICAgeCs9MjsKICAgICAgICBjaW4+PmE7CiAgICAgICAgY2luPj5iOwogICAgICAgIGNpbj4+YzsKICAgICAgICBjaW4+PmQ7CiAgICAgICAgd3gucHVzaF9iYWNrKGMtYSk7CiAgICAgICAgd3kucHVzaF9iYWNrKGQtYik7CiAgICAgICAgY2luPj5jOwogICAgICAgIGNpbj4+ZDsKICAgICAgICB3eC5wdXNoX2JhY2soYy1hKTsKICAgICAgICB3eS5wdXNoX2JhY2soZC1iKTsKICAgICAgICBwb2xlPVBvbGUod3hbeC0xXSx3eVt4LTFdLHd4W3hdLHd5W3hdKTsKICAgICAgICB3aGlsZSgoYyE9YSl8fChkIT1iKSkKICAgICAgICB7CiAgICAgICAgICAgIHgrKzsKICAgICAgICAgICAgY2luPj5jOwogICAgICAgICAgICBjaW4+PmQ7CiAgICAgICAgICAgIHd4LnB1c2hfYmFjayhjLWEpOwogICAgICAgICAgICB3eS5wdXNoX2JhY2soZC1iKTsKICAgICAgICAgIGlmKCh3eVt4XS93eFt4XSk+KHd5W3gtMV0vd3hbeC0xXSkmJnd4W3hdPj0wfHwod3lbeF0vd3hbeF0pPCh3eVt4LTFdL3d4W3gtMV0pJiZ3eFt4XTwwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb2xlKz1Qb2xlKHd5W3hdLHd4W3hdLHd5W3gtMV0sd3hbeC0xXSk7OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG9sZS09UG9sZSh3eVt4XSx3eFt4XSx3eVt4LTFdLHd4W3gtMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHBvbGU9YmV6KHBvbGUpOwogICAgICAgICBpZihpJTI9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHAyPXBvbGU7CiAKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY291dDw8c2V0cHJlY2lzaW9uKDEwMDApOwogICAgICAgICAgICAgICAgICAgIGlmKHBvbGU+cDIpCiAgICAgICAgICAgICAgICAgICAgY291dDw8KHAyKjEwKSsocG9sZS1wMikqNjw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgY291dDw8KHBvbGUqMTApKyhwMi1wb2xlKSo2PDxlbmRsOwogICAgICAgICAgICAgICAgfQogCiAgICB9CiAgICByZXR1cm4gMDsKfQ==