#include "vision.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
void construct_network(int H, int W, int K){
cerr << H << ' ' << W << ' ' << K << '\n';
vector<int>vdiagr[H+W], vdiagl[H+W], diagr(H+W), diagl(H+W);
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
int atr=i+j, atl=i-j+(W-1);
vdiagr[atr].push_back({i*W+j});
vdiagl[atl].push_back({i*W+j});
}
}
// cerr << H+W << '\n';
for(int i=0;i<H+W-1;i++){
// cerr << "! " << i << '\n';
diagr[i]=add_or(vdiagr[i]);
diagl[i]=add_or(vdiagl[i]);
// cerr << "!!!\n";
}
auto get=[&](vector<int> x){
int a=add_or(x), b=add_xor(x);
return add_xor({a,b});
};
vector<int>and_dps, or_dps;
for(int i=0;i+K<H+W-1;i++){
vector<int>atl, atr;
for(int j=i;j<=i+K;j++) atl.push_back(diagl[j]), atr.push_back(diagr[j]);
// cerr << "? " << i << '\n';
and_dps.push_back(get(atl)); and_dps.push_back(get(atr));
or_dps.push_back(get({atl[i],atl[i+K]})); or_dps.push_back(get({atr[i],atr[i+K]}));
}
int x=add_and(and_dps), y=add_or(or_dps);
int last=add_and({x,y});
}