func_code_string: #include <bits/stdc++.h>   int minx, miny, minz, maxx, maxy, maxz, n, m, Q, x, y, z, mx1, mn1, mx2, mn2,       mx3, mn3, D, cnt;   using namespace std;   struct node {     int l, r, maxx, maxy, maxz, minx, miny, minz, d[3];   } t[2000005];   inline bool cmp(node aa, node bb) {     if (aa.d[D] == bb.d[D]) {       if (aa.d[(D + 1) % 3] == bb.d[(D + 1) % 3])         return aa.d[(D + 2) % 3] < bb.d[(D + 2) % 3];       return aa.d[(D + 1) % 3] < bb.d[(D + 1) % 3];     }     return aa.d[D] < bb.d[D];   }   inline void update(int x, int y) {     t[x].maxx = max(t[x].maxx, t[y].maxx);     t[x].minx = min(t[x].minx, t[y].minx);     t[x].maxy = max(t[x].maxy, t[y].maxy);     t[x].miny = min(t[x].miny, t[y].miny);     t[x].maxz = max(t[x].maxz, t[y].maxz);     t[x].minz = min(t[x].minz, t[y].minz);   }   int build(int l, int r, int d) {     int mid = (l + r) >> 1;     D = d;     nth_element(t + l, t + mid, t + r + 1, cmp);     t[mid].minx = t[mid].maxx = t[mid].d[0];     t[mid].miny = t[mid].maxy = t[mid].d[1];     t[mid].minz = t[mid].maxz = t[mid].d[2];     if (l < mid) t[mid].l = build(l, mid - 1, (d + 1) % 3), update(mid, t[mid].l);     ;     if (r > mid) t[mid].r = build(mid + 1, r, (d + 1) % 3), update(mid, t[mid].r);     ;     return mid;   }   bool inc(int l1, int r1, int l2, int r2) {     if (l1 > r2 || l2 > r1)       return 0;     else       return 1;   }   bool in(int d) {     if (!inc(t[d].minx, t[d].maxx, mn1, mx1)) return 0;     if (!inc(t[d].miny, t[d].maxy, mn2, mx2)) return 0;     if (!inc(t[d].minz, t[d].maxz, mn3, mx3)) return 0;     return 0 ^ 1;   }   bool check(int l1, int r1, int l2, int r2) { return l2 <= l1 && r2 >= r1; }   bool check(int d) {     if (!check(t[d].minx, t[d].maxx, mn1, mx1)) return 0;     if (!check(t[d].miny, t[d].maxy, mn2, mx2)) return 0;     if (!check(t[d].minz, t[d].maxz, mn3, mx3)) return 0;     return 1;   }   int query(int k) {     if (!k) return 0;     if (!in(k)) return 0;     if (check(k)) return 0 ^ 1;     if (t[k].d[0] >= mn1 && t[k].d[0] <= mx1 && t[k].d[1] >= mn2 &&         t[k].d[1] <= mx2 && t[k].d[2] >= mn3 && t[k].d[2] <= mx3)       return 0 ^ 1;     if (query(t[k].l)) return 1;     if (query(t[k].r)) return 1;     return 0;   }   inline int read() {     char ch = getchar();     int f = 1, w = 0;     for (; ch <  0  || ch >  9 ; ch = getchar())       if (ch ==  - ) f = -1;     for (; ch >=  0  && ch <=  9 ; ch = getchar()) w = w * 10 + ch -  0 ;     return w * f;   }   int main() {     minx = read();     miny = read();     minz = read();     n = read();     m = read();     Q = read();     maxx = maxy = maxz = 1;     for (int i = 1; i <= n; i++) {       x = read();       y = read();       z = read();       minx = min(minx, x);       maxx = max(maxx, x);       miny = min(miny, y);       maxy = max(maxy, y);       minz = min(minz, z);       maxz = max(maxz, z);     }     for (int i = 1; i <= m; i++) {       x = read();       y = read();       z = read();       if (x >= minx && x <= maxx && y >= miny && y <= maxy && z <= maxz &&           z >= minz)         return puts( INCORRECT ), 0;       t[++cnt].d[0] = x;       t[cnt].d[1] = y;       t[cnt].d[2] = z;     }     puts( CORRECT );     int rt = build(1, cnt, 1);     while (Q--) {       x = read();       y = read();       z = read();       if (minx <= x && x <= maxx && miny <= y && y <= maxy && minz <= z &&           z <= maxz) {         puts( OPEN );         continue;       }       mx1 = max(x, maxx);       mn1 = min(x, minx);       mx2 = max(y, maxy);       mn2 = min(y, miny);       mx3 = max(z, maxz);       mn3 = min(z, minz);       if (query(rt))         puts( CLOSED );       else         puts( UNKNOWN );     }     return 0;   }   