#include #include #include using namespace std; #define MAX 250 int p[MAX][MAX]; int m[MAX][MAX]; int x[MAX]; int y[MAX]; double prunik(int p, int dx, int dy, int x0, int y0) { return dx*(p-y0)/(double) dy + x0; } int main() { int N; while (1) { scanf("%d", &N); if (N == 0) break; for (int i = 0; i < N; i++) { scanf("%d %d", &x[i], &y[i]); x[i] += 101; y[i] += 101; } x[N] = x[0]; y[N] = y[0]; for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { p[i][j] = m[i][j] = 0; } } for (int i = 0; i < N; i++) { int dx = x[i] - x[i+1]; int dy = y[i] - y[i+1]; int x0 = min(x[i], x[i+1]); int y0 = x[i] < x[i+1] ? y[i] : y[i+1]; int y1 = x[i] < x[i+1] ? y[i+1] : y[i]; int smer = (y0 < y1) ? +1 : -1; int ymin = min(y[i], y[i+1]); int ymax = max(y[i], y[i+1]); if (dx < 0) { dx *= -1; dy *= -1; } if (dy == 0) continue; if (dx == 0) { for (int j = ymin; j < ymax; j++) { p[j][x0]++; m[j][x0]++; } continue; } for (int j = ymin; j < ymax; j++) { double a; double b; int ra, rb; a = prunik(j, dx, dy, x0, y0); b = prunik(j+1, dx, dy, x0, y0); if (a - round(a) < 0.0001 && a - round(a) > -0.0001) a = round(a); if (b - round(b) < 0.0001 && b - round(b) > -0.0001) b = round(b); if (smer == 1) { ra = floor(a); rb = ceil(b); p[j][ra]++; m[j][rb]++; } else { ra = ceil(a); rb = floor(b); p[j][rb]++; m[j][ra]++; } } } /*for (int i = 90; i <= 110; i++) { for (int j = 110; j >= 90; j--) { if (p[i][j]) printf("%d ", p[i][j]); else printf(". "); } printf("\n"); } printf("\n\n"); for (int i = 90; i <= 110; i++) { for (int j = 110; j >= 90; j--) { if (m[i][j]) printf("%d ", m[i][j]); else printf(". "); } printf("\n"); }*/ int sum = 0; for (int i = 0; i < MAX; i++) { int to = 0; int done = 0; for (int j = 0; j < MAX; j++) { to += p[i][j]; done += m[i][j]; to -= m[i][j]; if (to == 0 && done % 2 == 1) sum++; } } printf("%d\n", sum); } return 0; }