#include "vision.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
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<pii>aux;
vector<int>ret;
for(int j=0;j<H*W;j++){
vector<int>ask;
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){
ask.push_back(nx*W+ny);
mp[{j,nx*W+ny}]++;
}
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){
ask.push_back(nx*W+ny);
mp[{j,nx*W+ny}]++;
}
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){
ask.push_back(nx*W+ny);
mp[{j,nx*W+ny}]++;
}
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){
ask.push_back(nx*W+ny);
mp[{j,nx*W+ny}]++;
}
}
if(ask.empty()) continue;
ask.push_back(j);
int a=add_or(ask);
ask.push_back(a);
int b=add_xor(ask);
ask.pop_back();
if(ask.size()==2){
ret.push_back(b);
continue;
}
ask.pop_back();
int c=add_or(ask);
ask.push_back(c);
int d=add_xor(ask);
ask.pop_back();
aux.push_back({b,d});
}
for(pii p : aux) ret.push_back(add_xor({p.fi,p.se}));
int ult=add_or(ret);
}