#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=2e5+10;
bool vis[N];
vector<int> ma[N];
bool check(int x,int y)
{
// cout<<"solving "<<x<<' '<<y<<endl;
for(int i=0;i<=n;i++)vis[i]=0;
queue<int> q;
q.push(x);
vis[x]=1;
while(q.size())
{
int t=q.front();
// cout<<"at "<<t<<endl;
q.pop();
for(auto z:ma[t])
{
if(!vis[z])
{
vis[z]=1;
q.push(z);
}
}
}
return vis[y];
}
void init(int k, std::vector<int> r) {
n=r.size();
for(int i=0;i<n;i++)
ma[i].clear();
// for(int i=0;i<n;i++)
// {
// if(r[i]==0)
// {
// cout<<"Add "<<i<<endl;
// for(int j=1;j<=k-1;j++)
// {
// cout<<i<<' '<<(i+j)%n<<endl;
// ma[i].push_back((i+j)%n);
// }
// }
// if(r[i]==k-1)
// {
// for(int j=1;j<=k-1;j++)
// {
// cout<<(i+j)%n<<' '<<i<<endl;
// ma[(i+j)%n].push_back(i);
// }
// }
// }
for(int it=0;it<n+100;it++)
{
for(int i=0;i<n;i++)
{
set<int> cr,ct;
int gr=0,ls=0;
for(int j=1;j<=k-1;j++)
{
if(check((i+j)%n,i))
{
gr++;
cr.insert(j);
}
if(check(i,(i+j)%n))
{
ls++;
ct.insert(j);
}
}
if(r[i]==gr)
{
for(int j=1;j<=k-1;j++)
{
if(cr.find(j)==cr.end())
{
ma[i].push_back((i+j)%n);
}
}
}
if(k-1-r[i] == ls)
{
for(int j=1;j<=k-1;j++)
{
if(ct.find(j)==ct.end())
{
ma[(i+j)%n].push_back(i);
}
}
}
}
}
return;
}
int compare_plants(int x, int y) {
if(check(x,y))
{
return 1;
}
else if(check(y,x))
{
return -1;
}
else
{
return 0;
}
return 0;
}