#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
struct point
{
double x,y;
};
int n,i;
point a[1000];
double xmult(double x1,double y1,double x2,double y2)
{
return (x1*y2-y1*x2);
}
double min(double a,double b)
{
return a<=b?a:b;
}
double max(double a,double b)
{
return a>=b?a:b;
}
bool between(point i,point m,point n)
{
if(i.x>=min(m.x,n.x)
&&i.y>=min(m.y,n.y)
&&i.x<=max(m.x,n.x)
&&i.y<=max(m.y,n.y))
return true;
return false;
}
double same_side(point i, point j, point m, point n)
{
double mnx=n.x-m.x;
double mny=n.y-m.y;
double imx=m.x-i.x;
double imy=m.y-i.y;
double jmx=m.x-j.x;
double jmy=m.y-j.y;
double t1=xmult(imx,imy,mnx,mny);
double t2=xmult(jmx,jmy,mnx,mny);
if(t1==0 && between(i,m,n))
return -1;
if(t2==0 && between(j,m,n))
return -1;
return t1*t2;
}
// bool same_side(point p1,point p2,point p3,point p4)
// {
// double dx,dy,dx1,dy1,dx2,dy2;
// dx = p4.x-p3.x, dy = p4.y-p3.y;
// dx1 = p1.x-p3.x, dy1 = p1.y-p3.y;
// dx2 = p2.x-p4.x, dy2 = p2.y-p4.y;
// return xmult(dx,dy,dx1,dy1)*xmult(dx,dy,dx2,dy2)>0.0;
// }
//判p1p2与p3p4相交
// bool intersect(point p1,point p2,point p3,point p4)
// {
// return (!same_side(p1,p2,p3,p4) && !same_side(p3,p4,p1,p2));
// }
bool intersect(point i,point j,point m, point n)
{
if(same_side(i,j,m,n)<0.0 && same_side(m,n,i,j)<0.0)
return true;
else
return false;
}
double area_polygon()
{
double s1=0;
for(int i=0;i<n;i++)
{
s1+=xmult(a[i].x,a[i].y,a[(i+1)%n].x,a[(i+1)%n].y);
}
return fabs(s1/2);
}
void solve()
{
if(n<3)
{
cout<<"Impossible"<<endl;
return;
}
for(int i=0;i<=n-1;i++)
{
int k=(i+1)%n;
for(int j=(i+1)/n;j<=i-2;j++)
{
if(intersect(a[i],a[k],a[j],a[j+1]))
{
cout<<"Impossible"<<endl;
return;
}
}
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<area_polygon()<<endl;
}
int main()
{
int i;
int cs=0;
#ifdef ONLINE_JUDGE
#else
ifstream cin("1.txt");
#endif
while(cin>>n && n)
{
for(i=0;i<n;i++)
cin>>a[i].x>>a[i].y;
cout<<"Figure "<<++cs<<": ";
solve();
}
return 0;
}