Problem:
Area of Polygons

Polygons are the most fundamental objects in geometric processing.
Complex figures are often represented and handled as polygons
with many short sides.
If you are interested in the processing of geometric data,
you'd better try some programming exercises about basic
operations on polygons.

Your job in this problem is to write a program that computes the area of polygons.

A polygon is represented by a sequence of points that are its vertices.
If the vertices p1, p2, ..., pn are given, line segments connecting
pi and pi+1 (1 <= i <= n-1) are sides of the polygon.
The line segment connecting pn and p1 is also a side of the polygon.

You can assume that the polygon is not degenerate.
Namely, the following facts can be assumed without any input data checking.

No point will occur as a vertex more than once.

Two sides can intersect only at a common endpoint (vertex).

The polygon has at least 3 vertices.

Note that the polygon is not necessarily convex.
In other words, an inner angle may be larger than 180 degrees.

Input

The input contains multiple data sets, each representing a polygon.
A data set is given in the following format.

n
x1 y1
x2 y2
...
xn yn

The first integer n is the number of vertices,
such that 3 <= n <= 50.
The coordinate of a vertex pi is given by (xi, yi).
xi and yi are integers between 0 and 1000 inclusive.
The coordinates of vertices are given in the order
of clockwise visit of them.

The end of input is indicated by a data set with 0 as the value of n.

Output

For each data set, your program should output its sequence number
(1 for the first data set, 2 for the second, etc.) and the area of the polygon separated by a single space. The area should be printed with one digit to the right of the decimal point.

The sequence number and the area should be printed on the same line.
Since your result is checked by an automatic grading program,
you should not insert any extra characters nor lines on the output.

Sample Input

3
1 1
3 4
6 0

7
0 0
10 10
0 20
10 30
0 40
100 40
100 0

0

Output for the Sample Input

1 8.5
2 3800.0

Solution in C# (judge verdict: Wrong Answer)

using System;
using System.Collections;
using System.Collections.Generic;
 
class TEST{
	static void Main(){
		int cnt=0;
		while(true){
			String s="";
			while(String.IsNullOrEmpty(s))s=Console.ReadLine();
			cnt++;
			int N=int.Parse(s);
			if(N==0)break;
			Sol mySol =new Sol(N);
			Console.WriteLine("{0} {1}",cnt,mySol.Solve());
		}
	}
}

class Sol{
	public double Solve(){
		 return area(L);
	}
	int N;
	List<Pair> L;
	public Sol(int n){
		N=n;
		L=new List<Pair>();
		for(int i=0;i<N;i++)L.Add(new Pair(ria()));
	}

	static double area(List<Pair> L) {
		// trapezium method
		double s = 0;
		int n=L.Count;
		for (int i = 0; i < L.Count; i++)
			s += (L[(i + 1) % n].Y + L[i].Y) * (L[(i + 1) % n].X - L[i].X) / 2.0;
		return Math.Abs(s);
	}


	struct Pair{
		public int X;
		public int Y;
		public Pair(int x,int y){
			X=x;Y=y;
		}
		public Pair(int[] xy){
			X=xy[0];Y=xy[1];
		}
		public static Pair operator-(Pair p,Pair q){
			return new Pair(p.X-q.X,p.Y-q.Y);
		}
		public static int det(Pair p,Pair q){
			return (p.X*q.Y-p.Y*q.X);
		}
		public static int dot(Pair p,Pair q){
			return (p.X*q.X+p.Y*q.Y);
		}
		public override String ToString(){
			return "(\t"+X.ToString()+"\t"+Y.ToString()+")";
		}
		public int L2(){
			return X*X+Y*Y;
		}
		public double L(){
			return Math.Sqrt(X*X+Y*Y);
		}
		public static bool eqCo(Pair p,Pair q){
			return p.X==q.X&&p.Y==q.Y;
		}
	}


	static String rs(){return Console.ReadLine();}
	static int ri(){return int.Parse(Console.ReadLine());}
	static long rl(){return long.Parse(Console.ReadLine());}
	static double rd(){return double.Parse(Console.ReadLine());}
	static String[] rsa(){return Console.ReadLine().Split(' ');}
	static int[] ria(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>int.Parse(e));}
	static long[] rla(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>long.Parse(e));}
	static double[] rda(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>double.Parse(e));}
}