#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int n, int m, int k)
{
vector<int> v[2];
for (int i=n-1;i>0;i--)
{
vector<int> q;
for (int j=0;i+j<n && j<m;j++)
q.push_back((i+j)*m+j);
v[0].push_back(add_or(q)), q.clear();
for (int j=m-1;i+m-j-1<n && j>=0;j--)
q.push_back((i+m-j-1)*m+j);
v[1].push_back(add_or(q));
}
for (int j=0;j<m;j++)
{
vector<int> q;
for (int i=0;i+j<m && i<n;i++)
q.push_back(i*m+i+j);
v[0].push_back(add_or(q)), q.clear();
for (int i=0;i<n && m-1-j-i>=0;i++)
q.push_back((m-1-j-i)*m+m-1-j-i);
v[1].push_back(add_or(q));
}
vector<int> a[2], c[2];
c[0]={add_and({v[0][0],v[0][k]})}, c[1]={add_and({v[1][0],v[1][k]})};
for (int i=0;i+k+1<v[0].size();i++)
{
vector<int> b[2];
for (int j=i+k+1;j<v[0].size();j++)
b[0].push_back(v[0][j]), b[1].push_back(v[1][j]);
int x=add_or(b[0]), y=add_or(b[1]);
a[0].push_back(add_and({v[0][i],x})),
a[1].push_back(add_and({v[1][i],y}));
c[0].push_back(add_and({v[0][i+1],v[0][i+1+k]})),
c[1].push_back(add_and({v[1][i+1],v[1][i+1+k]}));
}
if (a[0].size())
{
int x=add_not(add_or(a[0])), y=add_not(add_or(a[1]));
int o=add_or(c[0]), p=add_or(c[1]);
add_or({add_and({o,y}),add_and({x,p})});
}
else
add_or({add_or(c[0]),add_or(c[1])});
}