#include "vision.h"
#include "bits/stdc++.h"
using namespace std;
void construct_network(int H, int W, int K)
{
vector<vector<int>>ri,le;
int ctr=H*W;
for (int i=0;i<H;i++)
{
for (int j=0;j<W;j++)
{
if (i==0||j==0)
{
vector<int>vec;
for (int k=0;i+k<H&&j+k<W;k++)
vec.push_back((i+k)*W+j+k);
add_or(vec);
le.push_back({i-j,ctr++});
vec.push_back(ctr-1);
add_xor(vec);
le.push_back({i-j,ctr++});
}
if (i==0||j==W-1)
{
vector<int>vec;
for (int k=0;i+k<H&&j-k>=0;k++)
{
vec.push_back((i+k)*W+j-k);
}
add_or(vec);
ri.push_back({i+j,ctr++});
vec.push_back(ctr-1);
add_xor(vec);
ri.push_back({i+j,ctr++});
}
}
}
// cout<<le.size()<<' '<<ri.size()<<endl;
sort(begin(le),end(le));
sort(begin(ri),end(ri));
vector<int>les,ris;
for (int i=0;i+2*(K+1)-1<le.size();i+=2)
{
vector<int>f;
for(int j=i;j<=i+2*K+1;j++)
f.push_back(le[j][1]);
add_or(f);
ctr++;
add_xor(f);ctr++;
les.push_back(ctr);
add_xor({ctr-2,ctr-1});
ctr++;
}
int rl=ctr;
add_or(les);
ctr++;
for (int i=0;i+2*K+1<ri.size();i+=2)
{
vector<int>f;
for(int j=i;j<=i+2*K+1;j++)
f.push_back(ri[j][1]);
add_or(f);
ctr++;
add_xor(f);ctr++;
ris.push_back(ctr);
add_xor({ctr-2,ctr-1});
ctr++;
}
int rr=ctr;
add_or(ris);
ctr++;
int tlr=ctr;
add_and({rr,rl});
ctr++;
{
vector<int>les,ris;
for (int i=0;i+2*K-1<le.size();i++)
{
vector<int>f;
for(int j=i;j<=i+2*K-1;j++)
f.push_back(le[j][1]);
add_or(f);
ctr++;
add_xor(f);ctr++;
les.push_back(ctr);
add_xor({ctr-2,ctr-1});
ctr++;
}
int rl1=ctr;
add_or(les);
ctr++;
for (int i=0;i+2*K-1<ri.size();i++)
{
vector<int>f;
for(int j=i;j<=i+2*K-1;j++)
f.push_back(ri[j][1]);
add_or(f);
ctr++;
add_xor(f);ctr++;
ris.push_back(ctr);
add_xor({ctr-2,ctr-1});
ctr++;
}
int rr1=ctr;
add_or(ris);
ctr++;
int tlr1=ctr;
add_and({rr1,rl1});
ctr++;
int ttl=ctr;
add_xor({tlr,tlr1});
add_and({tlr,ttl});
}
}