edit distance memoriziation mistake

this code is giving wrong output can you help by pointing out why it fails

this the code for memorized version of

qstn:Edit Distance | DP-5 - GeeksforGeeks

#define lli long long int
lli arr[100][100];

char buf[1000],buf1[1000];
lli add=1,del=1,rep=1,k,k1;

lli oprtn(char *buff,char *buff1,lli m,lli n)

{

lli left,right,corner;

if(m==0 && n==0)
return 0;

if(m==0)
return n*add;

if(n==0)
    return m*add;

if(arr[m][n]!=-1)
  return arr[m][n];





  if(arr[m-1][n]!=-1)
    left=arr[m-1][n];
  else
  {
    left=oprtn(buff,buff1,m-1,n)+add;
    arr[m-1][n]=left;
  }



  if(arr[m][n-1]!=-1)
    right=arr[m][n-1];
  else
  {
    right=oprtn(buff,buff1,m,n-1)+del;
    arr[m][n-1]=right;
  }



  if(arr[m-1][n-1]!=-1)
    corner=arr[m-1][n-1];
  else
  {
    corner=oprtn(buff,buff1,m-1,n-1)+rep*(buff[m-1]!=buff1[n-1]);
    arr[m-1][n-1]=corner;
  }



  arr[m][n]=min(corner,min(left,right));
  return arr[m][n];

return arr[m][n];
}

int main()
{

for(i=0;i<100;i++)
{

        for(j=0;j<100;j++)

           arr[i][j]=-1;

}

lli ans=oprtn(“abab”,acac,strlen(“abab”),strlen(“acac”));

cout<<ans;
}

output:
//ans==3