Problema con il grader

Buongiorno stavo cercando di risolvere taglialegna e non riesco a sottoporre il mio codice il problema è la funzione “Abbatti” e il paradosso e che se non la sottopongo con il codice mi dice che la funzione non è stata dichiarata (giustamente) ma se la sottopongo mi dice che è stata gia dichiarata mi potreste aiutare a risolvere, vi lascio qui il codice che mando in sottoposizione grazie in anticipo!

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
void Abbatti(int indice, int direzione){
   cout<<indice<<" "<<direzione<<"\n";
}
void Pianifica(int N, int altezza[]){
   vector<int>left(N);
   vector<int>right(N);
   for (int i=N-1;i>=0;i--) {
   	right[i]=i;
   	for (int j=i;j<i+altezza[i] && j<N;j++)
   		right[i]=max(right[i],right[j]);
   }
   for (int i=0;i<N;i++) {
   	left[i]=i;
   	for (int j=i;j>i-altezza[i] && j>=0;j--)
   		left[i]=min(left[i],left[j]);
   }
   /*for(int i=0;i<N;i++){
   	cout<<left[i]<<" ";
   }
   cout<<"\n";
   for(int i=0;i<N;i++){
   	cout<<right[i]<<" ";
   }
   cout<<"\n";*/
   int i=0;
   while(i<N){
   	int imax=i;
   	for(int j=i+1;j<N;j++){
   		if(left[j]<=i){
   			imax=max(imax,j);
   		}
   	}
   	if(imax>right[i]){
   		Abbatti(imax,0);
   		i=imax+1;
   	}
   	else{
   		Abbatti(i,1);
   		i=right[i]+1;
   	}
   }
}

Per le funzioni già definite devi lasciare il prototipo.

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;

void Abbatti(int indice, int direzione);

void Pianifica(int N, int altezza[]){
   vector<int>left(N);
   vector<int>right(N);
   for (int i=N-1;i>=0;i--) {
   	right[i]=i;
   	for (int j=i;j<i+altezza[i] && j<N;j++)
   		right[i]=max(right[i],right[j]);
   }
   for (int i=0;i<N;i++) {
   	left[i]=i;
   	for (int j=i;j>i-altezza[i] && j>=0;j--)
   		left[i]=min(left[i],left[j]);
   }
   /*for(int i=0;i<N;i++){
   	cout<<left[i]<<" ";
   }
   cout<<"\n";
   for(int i=0;i<N;i++){
   	cout<<right[i]<<" ";
   }
   cout<<"\n";*/
   int i=0;
   while(i<N){
   	int imax=i;
   	for(int j=i+1;j<N;j++){
   		if(left[j]<=i){
   			imax=max(imax,j);
   		}
   	}
   	if(imax>right[i]){
   		Abbatti(imax,0);
   		i=imax+1;
   	}
   	else{
   		Abbatti(i,1);
   		i=right[i]+1;
   	}
   }
}

Grazie mille ora sottopone solo che prende 5/100 qualche hint da darmi?