#include <iostream>
#include <vector>
#include "mushrooms.h"
using namespace std;
vector<int> v1 = {0}, v2;
int count_mushrooms(int n){
for (int i : {1, 2}){
if (i == n)
return v1.size();
if (use_machine({0, i}) == 0)
v1.push_back(i);
else
v2.push_back(i);
}
for (int i=3;i < n and i<100;i+=2){
if (i + 1 == n){
if (use_machine({0, i}))
v2.push_back(i);
else
v1.push_back(i);
}
else if (v1.size() > 1){
int x = use_machine({i, v1[0], i+1, v1[1]});
if ((x & 1) == 0)
v1.push_back(i);
else
v2.push_back(i);
if ((x & 2) == 0)
v1.push_back(i+1);
else
v2.push_back(i+1);
}
else{
int x = use_machine({i, v2[0], i+1, v2[1]});
if ((x & 1) == 0)
v2.push_back(i);
else
v1.push_back(i);
if ((x & 2) == 0)
v2.push_back(i+1);
else
v1.push_back(i+1);
}
}
int A = v1.size(), B = v2.size();
for (int i=max(v1.back(), v2.back())+1;i<n;){
int k = 0;
if (v1.size() > v2.size()){
vector<int> v = {v1[0]};
for (int j=1;i+j <= n and j < v1.size();j++){
v.push_back(i+j-1);
v.push_back(v1[j]);
k++;
}
int x = use_machine(v);
A += k - x / 2;
}
else{
vector<int> v = {v2[0]};
for (int j=1;i+j <= n and j < v2.size();j++){
v.push_back(i+j-1);
v.push_back(v2[j]);
k++;
}
int x = use_machine(v);
A += x / 2;
}
i += k;
}
return A;
}