func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 200010;   const int oo = 1e9;   int xm, ym, zm, n, m, k, xmn, xmx, ymn, ymx, zmn, zmx;   struct point {     int x, y, z, idx;     bool operator<(const point &rhs) const { return x < rhs.x; }     void print() { cout << x <<     << y <<     << z << endl; }   };   point pnt[N], q[N], org[N];   set<int> seg[4 * N];   vector<int> f[2];   int l, r, x, y, at, val, ans[N];   void update(int n, int s, int e) {     if (s > at || e < at) return;     seg[n].insert(val);     if (s == e) return;     update(2 * n, s, (s + e) / 2);     update(2 * n + 1, (s + e) / 2 + 1, e);   }   bool get(int n, int s, int e) {     if (s > r || e < l) return 0;     if (s >= l && e <= r) {       return seg[n].lower_bound(x) != seg[n].end() && *seg[n].lower_bound(x) <= y;     }     return get(2 * n, s, (s + e) / 2) || get(2 * n + 1, (s + e) / 2 + 1, e);   }   void clear() {     for (int i = 0; i < 4 * N; ++i) seg[i].clear();   }   pair<point, point> nw(int a, int b, int c) {     point f1, f2;     f1.x = xmn, f1.y = ymn, f1.z = zmn;     f2.x = xmx, f2.y = ymx, f2.z = zmx;     f1.x = min(f1.x, a), f2.x = max(f2.x, a);     f1.y = min(f1.y, b), f2.y = max(f2.y, b);     f1.z = min(f1.z, c), f2.z = max(f2.z, c);     return make_pair(f1, f2);   }   bool inside(point c) {     return c.x >= xmn && c.x <= xmx && c.y >= ymn && c.y <= ymx && c.z >= zmn &&            c.z <= zmx;   }   int main() {     cin >> xm >> ym >> zm >> n >> m >> k;     for (int a, b, c, i = 0; i < n; ++i) {       scanf( %d%d%d , &a, &b, &c);       if (!i) xmn = xmx = a, ymn = ymx = b, zmn = zmx = c;       xmn = min(xmn, a), xmx = max(xmx, a);       ymn = min(ymn, b), ymx = max(ymx, b);       zmn = min(zmn, c), zmx = max(zmx, c);     }     for (int i = 0; i < m; ++i) {       scanf( %d%d%d , &pnt[i].x, &pnt[i].y, &pnt[i].z);       if (inside(pnt[i])) {         puts( INCORRECT );         return 0;       }     }     puts( CORRECT );     sort(pnt, pnt + m);     for (int i = 0; i < k; ++i) {       scanf( %d%d%d , &q[i].x, &q[i].y, &q[i].z);       q[i].idx = i;       org[i] = q[i];     }     sort(q, q + k);     for (int i = 0; i < k; ++i) {       if (q[i].x < xmn) {         f[0].push_back(i);       } else {         f[1].push_back(i);       }     }     int idx = 0;     while (idx < m && pnt[idx].x < xmn) ++idx;     for (int i = 0; i < f[1].size(); ++i) {       int cur = f[1][i];       pair<point, point> w = nw(q[cur].x, q[cur].y, q[cur].z);       l = w.first.y, r = w.second.y;       x = w.first.z, y = w.second.z;       while (idx < m && pnt[idx].x <= w.second.x) {         at = pnt[idx].y;         val = pnt[idx].z;         update(1, 1, ym);         idx++;       }       bool res = get(1, 1, ym);       if (res) {         ans[q[cur].idx] = 1;       } else {         ans[q[cur].idx] = 2;         ;       }     }     clear();     idx = m - 1;     while (idx >= 0 && pnt[idx].x > xmx) --idx;     for (int i = f[0].size() - 1; i >= 0; --i) {       int cur = f[0][i];       pair<point, point> w = nw(q[cur].x, q[cur].y, q[cur].z);       l = w.first.y, r = w.second.y;       x = w.first.z, y = w.second.z;       while (idx >= 0 && pnt[idx].x >= w.first.x) {         at = pnt[idx].y;         val = pnt[idx].z;         update(1, 1, ym);         idx--;       }       bool res = get(1, 1, ym);       if (res) {         ans[q[cur].idx] = 1;       } else {         ans[q[cur].idx] = 2;         ;       }     }     for (int i = 0; i < k; ++i) {       if (inside(org[i])) {         puts( OPEN );       } else {         assert(ans[i] != 0);         if (ans[i] == 1) {           puts( CLOSED );         } else {           puts( UNKNOWN );         }       }     }     return 0;   }   