#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int h,int w,int k)
{
vector<int> dig1,dig2;
map<int,vector<int>> sm,sb;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
sm[i+j].push_back(i*w+j);
sm[i-j].push_back(i*w+j);
}
}
for(auto tt:sm)
{
dig1.push_back(add_xor(tt.second));
}
for(auto tt:sb)
{
dig2.push_back(add_xor(tt.second));
}
vector<int> o1=dig1,o2=dig2;
for(int i=dig1.size()-2;i>=0;i--)
dig1[i]=add_or({dig1[i],dig1[i+1]});
for(int i=dig2.size()-2;i>=0;i--)
dig2[i]=add_or({dig2[i],dig2[i+1]});
int gk=0;
for(int i=0;i<dig1.size();i++)
{
if(i+k<dig1.size())
{
if(!gk)gk=add_and({o1[i],dig1[i+k]});
else gk=add_or({add_and({o1[i],dig1[i+k]}),gk});
}
}
for(int i=0;i<dig2.size();i++)
{
if(i+k<dig2.size())
{
if(!gk)gk=add_and({o2[i],dig1[i+k]});
else gk=add_or({add_and({o2[i],dig1[i+k]}),gk});
}
}
k--;
int gkmo=0;
for(int i=0;i<dig1.size();i++)
{
if(i+k<dig1.size())
{
if(!gkmo)gkmo=add_and({o1[i],dig1[i+k]});
else gkmo=add_or({add_and({o1[i],dig1[i+k]}),gkmo});
}
}
for(int i=0;i<dig2.size();i++)
{
if(i+k<dig2.size())
{
if(!gkmo)gkmo=add_and({o2[i],dig1[i+k]});
else gkmo=add_or({add_and({o2[i],dig1[i+k]}),gkmo});
}
}
add_and({gkmo,add_not(gk)});
return;
}