Aiuto con cabala

Buonasera a tutti.
Stavo cercando di ottimizzare il codice di cabala e sono arrivato a questo codice, che funziona con gli esempi e con i primi 3 testcase, ma il resto è tutto errato, dandomi un punteggio di 10/100. Qualcuno mi aiuterebbe?
Il codice in questione:

#include <stdio.h>
#include <assert.h>
#include<vector>
#include<cmath>
using namespace std;

long long to_int(vector<int> &numarr, int dim){
    long long temp=0, molt=1;
    for(int i=0; i<dim; i++){
        temp+=numarr[i]*molt;
        molt*=10;
    }
    return temp;
}

long long occulta(int N, int M,int dim, vector<int> numarr, int pn){
    if(N==dim){
        return to_int(numarr, dim+1)%M;
    }
    long long r=0, gr=0, temp;
    for(int i=1; i<=3; i++){
        numarr[dim]=i*3;
        if(pn!=i*3){
            r=occulta(N,M,dim+1,numarr,i*3);
            if(gr<r){
                gr=r;
            }
            temp=to_int(numarr, dim+1)%M;
            if(gr<temp){
                gr=temp;
            }
        }
    }
    
    return gr;
}


int main() {
    FILE *fr, *fw;
    int T, N, M, i;
    vector<int> numarr;

    long long p=0, r=0;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &T));
    for (i=0; i<T; i++) {
        assert(2 == fscanf(fr, "%d %d", &N, &M));
        numarr.clear();
        numarr.resize(N,0);

        fprintf(fw, "%lld ", occulta(N, M,0, numarr,0));
    }

    fprintf(fw, "\n");
    fclose(fr);
    fclose(fw);
    return 0;
}

in quel ciclo dim non va bene,
prova a mettere i<dim-1!

Grazie mille della risposta, funziona perfettamente, comunque avevo già risolto utilizzando un ciclo while. Mi scuso per non aver chiuso subito il thread.