#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void construct_network(int n, int m, int K) {
vector<int> Q, d1(n+m-1), d2(n+m-1), d1_2(n+m-1), d2_2(n+m-1);
vector<vector<int>> all1(n+m-1), all2(n+m-1);
for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) all1[i+j].push_back(i*m+j), all2[i+m-j-1].push_back(i*m+j);
for (int i = 0; i < n+m-1; i++) {
Q.clear();
for (int id : all1[i]) Q.push_back(id);
d1[i] = add_or(Q);
d1_2[i] = add_not(add_xor(Q));
Q = {d1[i], d1_2[i]};
d1_2[i] = add_and(Q);
}
for (int i = 0; i < n+m-1; i++) {
Q.clear();
for (int id : all2[i]) Q.push_back(id);
d2[i] = add_or(Q);
d2_2[i] = add_not(add_xor(Q));
Q = {d2[i], d2_2[i]};
d2_2[i] = add_and(Q);
}
auto check = [&](int k, vector<int> d, vector<int> d2) -> int {
vector<int> all;
for (int i = 0; i+k < n+m-1; i++) {
Q.clear();
for (int j = i; j <= i+k; j++) Q.push_back(d[j]);
int one = add_or(Q);
int two = add_not(add_xor(Q));
Q = {one, two};
two = add_and(Q);
all.push_back(two);
}
for (int i = 0; i < n+m-1; i++) all.push_back(d2[i]);
return add_or(all);
};
add_and({
add_and({check(K, d1, d1_2), check(K, d2, d2_2)}),
add_not(add_and({check(K-1, d1, d1_2), check(K-1, d2, d2_2)}))
});
}