#include "vision.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
bool in(int x, int y, int H, int W){
return 0<=x&&x<H&&0<=y&&y<W;
}
map<pii,int>mp;
void construct_network(int H, int W, int K){
mp.clear();
vector<int>ret;
for(int j=0;j<H*W;j++){
int x=j/W, y=j%W;
for(int i=-H;i<=H;i++){
int nx=x+i, ny=y+(K-i);
if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
ret.push_back(add_and({j,nx*W+ny}));
mp[{j,nx*W+ny}]++;
// cerr << j << ' ' << nx*W+ny << '\n';
}
nx=x-i, ny=y+(K-i);
if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
ret.push_back(add_and({j,nx*W+ny}));
mp[{j,nx*W+ny}]++;
// cerr << j << ' ' << nx*W+ny << '\n';
}
nx=x+i, ny=y-(K-i);
if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
ret.push_back(add_and({j,nx*W+ny}));
mp[{j,nx*W+ny}]++;
// cerr << j << ' ' << nx*W+ny << '\n';
}
nx=x-i, ny=y-(K-i);
if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
ret.push_back(add_and({j,nx*W+ny}));
mp[{j,nx*W+ny}]++;
// cerr << j << ' ' << nx*W+ny << '\n';
}
}
}
int ult=add_or(ret);
}