#include <iostream>
#include <cmath>
#include <vector>
#include <stack>
#include <functional>
#include <algorithm>
using namespace std;
void main_func();
bool sort_address(long int *,long int *);
long int ccw(long int,long int,long int,long int,long int,long int );
int main()
{
long n;
cin>>n;
while(n>0)
{
main_func();
n--;
}
}
void main_func()
{
long int vals,i;
vector<long int> coords;
vector<long int *> address;
cin>>vals;
i=0;
while(i<vals)
{
long int temp;
cin>>temp;
coords.push_back(temp);
i++;
}
i=0;
while(i<vals)
{
address.push_back(&coords[i]);
i++;
}
address.pop_back();
sort(address.begin(),address.end(),sort_address);
long int * itr,* end,prev;
end=&coords[vals-1];
i=0;
vector<long int> pnt_coll;
while(i < vals-1)
{
itr=address[i];
if(i!=0)
{
if(prev == *itr)//removes the occurence of the same points
{
i++;
continue;
}
}
pnt_coll.push_back(*itr);
prev=*itr;
itr++;
long int max=*itr;
long int min=*itr;
while(itr!=end)
{
itr++;
if(*itr > max)
max=*itr;
if(*itr<min)
min=*itr;
}
pnt_coll.push_back(min);
pnt_coll.push_back(max);
i++;
}
if(pnt_coll.size()<9)
{
if(pnt_coll[1]==pnt_coll[2] && pnt_coll[4]==pnt_coll[5])
{
cout<<0<<endl;
return;
}
}
long int pivot_x=pnt_coll[0],pivot_y=pnt_coll[1],
final_x=pnt_coll[0],final_y=pnt_coll[2],
final2_x=pnt_coll[0],final2_y=pnt_coll[1];
i=1;
long int tot=pnt_coll.size()/3,area=0;
while(i<tot-1)
{
int flag,flag2;
flag=1;
flag2=1;
for(int j=i+1;j<tot;j++)
{
if(ccw(final_x,final_y,pnt_coll[3*i],pnt_coll[3*i+2],pnt_coll[3*j],pnt_coll[3*j+2])<=0)
{
flag=0;
}
if(ccw(final2_x,final2_y,pnt_coll[3*i],pnt_coll[3*i+1],pnt_coll[3*j],pnt_coll[3*j+1])>=0)
{
flag2=0;
break;
}
if(!(flag+flag2))
break;
}
if(flag)
{
area+=ccw(pivot_x,pivot_y,final_x,final_y,pnt_coll[3*i],pnt_coll[3*i+2]);//CCW
final_x=pnt_coll[3*i];
final_y=pnt_coll[3*i+2];
}
if(flag2)
{
area-=ccw(pivot_x,pivot_y,final2_x,final2_y,pnt_coll[3*i-3],pnt_coll[3*i-2]);//CCW
final2_x=pnt_coll[3*i];
final2_y=pnt_coll[3*i+1];
}
i++;
}
area+=ccw(pivot_x,pivot_y,final_x,final_y,pnt_coll[3*i],pnt_coll[3*i+2]);
//cout<<area<<"......\n";
area-=ccw(pivot_x,pivot_y,final2_x,final2_y,pnt_coll[3*i],pnt_coll[3*i+1]);
if(pnt_coll[3*i+2]-pnt_coll[3*i+1])
area+=(pnt_coll[3*i]-pivot_x)*(pnt_coll[3*i+2]-pnt_coll[3*i+1]);
cout<<area<<endl;
}
bool sort_address(long int *a,long int *b)
{
return *a < *b;
}
long int ccw(long int x1,long int y1,long int a,long int b,long int x2,long int y2)
{
return (a-x1)*(b-y2)-(b-y1)*(a-x2);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIG1haW5fZnVuYygpOwpib29sIHNvcnRfYWRkcmVzcyhsb25nIGludCAqLGxvbmcgaW50ICopOwpsb25nIGludCBjY3cobG9uZyBpbnQsbG9uZyBpbnQsbG9uZyBpbnQsbG9uZyBpbnQsbG9uZyBpbnQsbG9uZyBpbnQgKTsKCmludCBtYWluKCkKewoJbG9uZyBuOwoJY2luPj5uOwoJd2hpbGUobj4wKQoJewoJCW1haW5fZnVuYygpOwoJCW4tLTsKCX0KfQoKdm9pZCBtYWluX2Z1bmMoKQp7Cglsb25nIGludCB2YWxzLGk7Cgl2ZWN0b3I8bG9uZyBpbnQ+IGNvb3JkczsKCXZlY3Rvcjxsb25nIGludCAqPiBhZGRyZXNzOwoJY2luPj52YWxzOwoJaT0wOwoJd2hpbGUoaTx2YWxzKQoJewoJCWxvbmcgaW50IHRlbXA7CgkJY2luPj50ZW1wOwoJCWNvb3Jkcy5wdXNoX2JhY2sodGVtcCk7CgkJaSsrOwoJfQoJaT0wOwoJd2hpbGUoaTx2YWxzKQoJewoJCWFkZHJlc3MucHVzaF9iYWNrKCZjb29yZHNbaV0pOwoJCWkrKzsKCX0KCWFkZHJlc3MucG9wX2JhY2soKTsKCXNvcnQoYWRkcmVzcy5iZWdpbigpLGFkZHJlc3MuZW5kKCksc29ydF9hZGRyZXNzKTsKCWxvbmcgaW50ICogaXRyLCogZW5kLHByZXY7CgllbmQ9JmNvb3Jkc1t2YWxzLTFdOwoJaT0wOwoJdmVjdG9yPGxvbmcgaW50PiBwbnRfY29sbDsKCXdoaWxlKGkgPCB2YWxzLTEpCgl7CgkJaXRyPWFkZHJlc3NbaV07CgkJaWYoaSE9MCkKCQl7CgkJCWlmKHByZXYgPT0gKml0cikvL3JlbW92ZXMgdGhlIG9jY3VyZW5jZSBvZiB0aGUgc2FtZSBwb2ludHMKCQkJewoJCQkJaSsrOwoJCQkJY29udGludWU7CgkJCX0KCQl9CgkJcG50X2NvbGwucHVzaF9iYWNrKCppdHIpOwoJCXByZXY9Kml0cjsKCQlpdHIrKzsKCQlsb25nIGludCBtYXg9Kml0cjsKCQlsb25nIGludCBtaW49Kml0cjsKCQl3aGlsZShpdHIhPWVuZCkKCQl7CgkJCWl0cisrOwoJCQlpZigqaXRyID4gbWF4KQoJCQkJbWF4PSppdHI7CgkJCWlmKCppdHI8bWluKQoJCQkJbWluPSppdHI7CgkJfQoJCXBudF9jb2xsLnB1c2hfYmFjayhtaW4pOwoJCXBudF9jb2xsLnB1c2hfYmFjayhtYXgpOwoJCWkrKzsKCX0KCWlmKHBudF9jb2xsLnNpemUoKTw5KQoJewoJCWlmKHBudF9jb2xsWzFdPT1wbnRfY29sbFsyXSAmJiBwbnRfY29sbFs0XT09cG50X2NvbGxbNV0pCgkJewoJCQljb3V0PDwwPDxlbmRsOwoJCQlyZXR1cm47CgkJfQoJfQoKCWxvbmcgaW50IHBpdm90X3g9cG50X2NvbGxbMF0scGl2b3RfeT1wbnRfY29sbFsxXSwKCQkJIGZpbmFsX3g9cG50X2NvbGxbMF0sZmluYWxfeT1wbnRfY29sbFsyXSwKCQkJIGZpbmFsMl94PXBudF9jb2xsWzBdLGZpbmFsMl95PXBudF9jb2xsWzFdOwoJaT0xOwoJbG9uZyBpbnQgdG90PXBudF9jb2xsLnNpemUoKS8zLGFyZWE9MDsKCXdoaWxlKGk8dG90LTEpCgl7CgkJaW50IGZsYWcsZmxhZzI7CgkJZmxhZz0xOwoJCWZsYWcyPTE7CgkJZm9yKGludCBqPWkrMTtqPHRvdDtqKyspCgkJewoJCQlpZihjY3coZmluYWxfeCxmaW5hbF95LHBudF9jb2xsWzMqaV0scG50X2NvbGxbMyppKzJdLHBudF9jb2xsWzMqal0scG50X2NvbGxbMypqKzJdKTw9MCkKCQkJewoJCQkJZmxhZz0wOwoJCQl9CgkJCWlmKGNjdyhmaW5hbDJfeCxmaW5hbDJfeSxwbnRfY29sbFszKmldLHBudF9jb2xsWzMqaSsxXSxwbnRfY29sbFszKmpdLHBudF9jb2xsWzMqaisxXSk+PTApCgkJCXsKCQkJCWZsYWcyPTA7CgkJCQlicmVhazsKCQkJfQoJCQlpZighKGZsYWcrZmxhZzIpKQoJCQkJYnJlYWs7CgkJfQoJCWlmKGZsYWcpCgkJewoJCQlhcmVhKz1jY3cocGl2b3RfeCxwaXZvdF95LGZpbmFsX3gsZmluYWxfeSxwbnRfY29sbFszKmldLHBudF9jb2xsWzMqaSsyXSk7Ly9DQ1cKCQkJZmluYWxfeD1wbnRfY29sbFszKmldOwoJCQlmaW5hbF95PXBudF9jb2xsWzMqaSsyXTsKCQl9CgkJaWYoZmxhZzIpCgkJewoJCQlhcmVhLT1jY3cocGl2b3RfeCxwaXZvdF95LGZpbmFsMl94LGZpbmFsMl95LHBudF9jb2xsWzMqaS0zXSxwbnRfY29sbFszKmktMl0pOy8vQ0NXCgkJCWZpbmFsMl94PXBudF9jb2xsWzMqaV07CgkJCWZpbmFsMl95PXBudF9jb2xsWzMqaSsxXTsKCQl9CgkJaSsrOwoJfQoJYXJlYSs9Y2N3KHBpdm90X3gscGl2b3RfeSxmaW5hbF94LGZpbmFsX3kscG50X2NvbGxbMyppXSxwbnRfY29sbFszKmkrMl0pOwoJLy9jb3V0PDxhcmVhPDwiLi4uLi4uXG4iOwoJYXJlYS09Y2N3KHBpdm90X3gscGl2b3RfeSxmaW5hbDJfeCxmaW5hbDJfeSxwbnRfY29sbFszKmldLHBudF9jb2xsWzMqaSsxXSk7CglpZihwbnRfY29sbFszKmkrMl0tcG50X2NvbGxbMyppKzFdKQoJCWFyZWErPShwbnRfY29sbFszKmldLXBpdm90X3gpKihwbnRfY29sbFszKmkrMl0tcG50X2NvbGxbMyppKzFdKTsKCWNvdXQ8PGFyZWE8PGVuZGw7Cn0KCmJvb2wgc29ydF9hZGRyZXNzKGxvbmcgaW50ICphLGxvbmcgaW50ICpiKQp7CglyZXR1cm4gKmEgPCAqYjsKfQoKbG9uZyBpbnQgY2N3KGxvbmcgaW50IHgxLGxvbmcgaW50IHkxLGxvbmcgaW50IGEsbG9uZyBpbnQgYixsb25nIGludCB4Mixsb25nIGludCB5MikKewoJcmV0dXJuIChhLXgxKSooYi15MiktKGIteTEpKihhLXgyKTsKfQ==