#include #include #include #include using namespace std; struct point { double x, y, z; point (double x, double y, double z) : x(x), y(y), z(z) {} point operator- (const point &p){ return point (x-p.x, y-p.y, z-p.z); } point cross (const point &p){ return point (y*p.z-z*p.y, z*p.x-x*p.z, x*p.y-y*p.x); } double dot (const point &p){ return x*p.x+y*p.y+z*p.z; } double length(){ return sqrt(x*x+y*y+z*z); } }; vector X; int main (){ int n; while (cin >> n){ if (n == 0) break; X.clear(); for (int i = 0; i < n; i++){ double x, y, z; cin >> x >> y >> z; X.push_back (point(x,y,z)); } double area = 0; for (int i = 0; i < n; i++){ for (int j = i+1; j < n; j++){ for (int k = j+1; k < n; k++){ point direction = (X[j] - X[i]).cross (X[k] - X[i]); int sign = 0; bool good = true; for (int m = 0; good && m < X.size(); m++) if (m != i && m != j && m != k){ double dot = direction.dot (X[m] - X[i]); int newsign = 0; if (dot > 0) newsign = 1; else if (dot < 0) newsign = -1; else continue; if (sign == 0) sign = newsign; else { if (newsign != sign) good = false; } } if (good){ area += direction.length()/2; } } } } cout << (int)(area + 0.5) << endl; } }