#include #include #include #include #include #include #include #include #include #include #include const char* inname = "video.in"; #ifdef TUMTEST #define DBG cerr #else #define DBG if (0) cerr #endif ifstream in(inname); #define out cout FILE* fin; template T min(T a, T b) { return (a < b) ? a : b; } template T max(T a, T b) { return (a > b) ? a : b; } #define MAXL 50 template class List { public: int first, last; T buffer[MAXL]; List() : first(0), last(0) { } void clear() { first = last = 0; } int count() { return (last - first + MAXL) % MAXL; } int append(const T &t) { int i = last; buffer[last] = t; last = (last + 1) %MAXL; return i; } void remove(int i) { int j = (first + i) % MAXL, k = (j + 1) % MAXL; while(k != last) { buffer[j] = buffer[k]; j = (j + 1) % MAXL; k = (k + 1) % MAXL; } last = (last - 1 + MAXL) % MAXL; } T &operator[](int i) { return buffer[(first + i) % MAXL]; } int index(const T &t) { for(int i = first; i != last; i = (i + 1) % MAXL) if(buffer[i] == t) return i; return -1; } }; int n; bool checkSurv() { bool fail=false; double minX, minY; minX = minY = -INT_MAX; double maxX, maxY; maxX = maxY = INT_MAX; double x1, y1, x2, y2; double xs, ys; in >> x1 >> y1; xs = x1; ys = y1; for (int i = 1; i <= n; i++) { if (i == n) { x2 = xs; y2 = ys; } else { in >> x2 >> y2; } if (x1 == x2) { if (y1 < y2) { minX = max(minX, x1); } else { maxX = min(maxX, x1); } } else { if (x1 < x2) { maxY = min(maxY, y1); } else { minY = max(minY, y1); } } if (minY > maxY || minX > maxX) { fail = true; } x1 = x2; y1 = y2; } DBG << "** " << minX << " " << maxX << " " << minY << " " << maxY << endl; return !fail; } int main() { int cnt = 1; fin = fopen(inname, "r"); while (1) { in >> n; DBG << n << endl; if (n ==0) break; out << "Floor #" << cnt++ << endl; out << "Surveillance is "; if (checkSurv()) { out << "possible." << endl; } else { out << "impossible." << endl; } } return 0; }