#include <iostream>
#include <vector>
#include <cmath>
#include <cstdio>

using namespace std;

struct Point2D {
        double x, y;
        Point2D(double _x = 0.0, double _y = 0.0) : x(_x), y(_y) { }
        bool operator==(const Point2D &p) const { return x == p.x && y == p.y; }
        bool operator!=(const Point2D &p) const { return x != p.x || y != p.y; }
        bool operator<(const Point2D &p) const {
                if(x < p.x){ return true; }
                if(x > p.x){ return false; }
                return y < p.y;
        }
};

Point2D operator+(const Point2D &a, const Point2D &b){
        return Point2D(a.x + b.x, a.y + b.y);
}
Point2D operator-(const Point2D &a, const Point2D &b){
        return Point2D(a.x - b.x, a.y - b.y);}

double cross2d(const Point2D &a, const Point2D &b){
        return a.x * b.y - a.y * b.x;
}

double convexArea(const vector<Point2D> &polygon){
        double sum = 0.0;
        for(int i = 1; i < polygon.size(); ++i){
                sum += cross2d(polygon[i - 1], polygon[i]);
        }
        sum += cross2d(polygon.back(), polygon[0]);
        return sum / 2;
}

int main(){
        int caseNum = 0;
        while(true){
                int n;
                cin >> n;
                if(n == 0){ break; }
                vector<Point2D> polygon(n);
                for(int i = 0; i < n; ++i){
                        cin >> polygon[i].x >> polygon[i].y;
                }
                printf("%d %.1lf\n", ++caseNum, abs(convexArea(polygon)));
        }
        return 0;
}