#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define bl ' '
#define endl '\n'
#define all(v) (v).begin(), (v).end()
#define comp(v) (v).erase(unique(all(v)), (v).end())
#define lbd(v,x) lower_bound(all(v), (x))-(v).begin()
#define ubd(v,x) upper_bound(all(v), (x))-(v).begin()
#define sz(v) ((int)(v).size())
typedef long long ll;
typedef pair<int, int> pi;
typedef pair<pi, int> pii;
typedef pair<int, pi> ipi;
typedef pair<pi, pi> pipi;
typedef pair<ll, ll> pll;
const int MAXN = 100100*2;
const ll MOD = 1e9+7;
const ll INF = 2e9;
vector<int> adj[MAXN];
int lev[MAXN], n;
void init(int k, std::vector<int> r) {
n = r.size(); int cnt=0;
vector<int> v={};
while(1) {
for(int i=0;i<n;i++) {
if(lev[i]>0) continue;
if(r[i]>0) continue;
bool flag=1;
for(int j=(i+n-1)%n,t=1;t<k;t++, j=(j+n-1)%n) {
if(lev[j]>0) continue;
if(r[j]==0) {
flag=0; break;
}
}
if(flag) v.push_back(i);
}
if(v.empty()) break;
cnt++;
for(int x:v) {
lev[x] = cnt;
for(int j=(x+n-1)%n,t=1;t<k;t++,j=(j+n-1)%n) if(lev[j]==0) r[j]--;
} v.clear();
}
for(int i=0;i<n;i++) {//cout<<lev[i]<<bl;
for(int j=(i+1)%n,t=1;t<k;t++,j=(j+1)%n) {
if(lev[i] < lev[j]) adj[i].push_back(j);
else if(lev[i]>lev[j]) adj[j].push_back(i);
}
}//cout<<endl;
}
bool vst[MAXN];
bool dfs(int x, int y) {
vst[x]=1;
if(x==y) return 1;
for(int nx:adj[x]) {
if(vst[nx]) continue;
if(dfs(nx,y)) return 1;
} return 0;
}
int compare_plants(int x, int y) {
if(lev[x] == lev[y]) return 0;
int res=1;
if(lev[x] > lev[y]) swap(x,y),res=-1;
for(int i=0;i<n;i++) vst[i]=0;
if(!dfs(x,y)) res=0;
return res;
}