#include <stdio.h>
#include <stdlib.h>


#define MAX_LENTOS_DYDIS 60

typedef struct _TLangelis
{
  char cTurinys ;   /* 'J'(juoda žažk‚), 'B'(balta), ' '(tuž‡ias) */
  int  maxKirtimu ; /* kiek daugiausia juod— žažki— gali b–ti nukirsta                        */
                    /* einant iž žio langelio; reikžme -1 reižkia, kad langelis neŤvertintas  */
} TLangelis ;

typedef TLangelis TLenta[MAX_LENTOS_DYDIS][MAX_LENTOS_DYDIS] ;

int lentosDydis = 0 ;
TLenta lenta ;


void inicializuotiLenta(
                         int *pxK, int *pyK    /* kertan‡iosios žažkes koordinat‚s */
                       )
/* Galim— skaitymo ar pradini— duomen— klaid— neapdorojame */
{
   FILE *fpPrDuom = NULL ;
   int skSaskiu = 0, s = 0 ;
   int x = 0 , y = 0 ;

   fpPrDuom = fopen( "LENTA.DAT", "r" ) ;
   fscanf( fpPrDuom, " %d ", &lentosDydis ) ;
   fscanf( fpPrDuom, " %d ", &skSaskiu ) ;

   for ( x = 0 ; x < lentosDydis ; x ++ )
    for ( y = 0 ; y < lentosDydis ; y ++ )
      {
        lenta[x][y].cTurinys = ' ' ;
        lenta[x][y].maxKirtimu = -1 ;
      }

   for ( s = 1 ; s <= skSaskiu ; s ++ )
    {
      int nusk = 0 ;
      char cTurinys = 0 ;

      nusk = fscanf( fpPrDuom, " %c %d %d ", &cTurinys, &x, &y ) ;
      x -- ; y -- ;

      if ( cTurinys == 'P' )
       {
         *pxK = x ;
         *pyK = y ;
         /* Kertan‡iosios žažk‚s ant lentos nestatom */
       }
      else
       {
         lenta[x][y].cTurinys = cTurinys ;
       }
    }

   fclose( fpPrDuom ) ;
}


void isvestiRezultata( int maxKirtimu )
{
   FILE *fpRezDuom = NULL ;

   fpRezDuom = fopen( "LENTA.REZ", "w" ) ;

   fprintf( fpRezDuom, "%d", maxKirtimu ) ;

   fclose( fpRezDuom ) ;
}


int ivertintiLangeli( int x, int y )
{
   if ( lenta[x][y].maxKirtimu != -1 )
     return lenta[x][y].maxKirtimu ;

   if ( y >= lentosDydis - 2 )
    {
      lenta[x][y].maxKirtimu = 0 ;
    }
   else
    {
      int kertamKairen = 0 , kertamDesinen = 0 ;

      if ( x > 1 &&
           lenta[x-1][y+1].cTurinys == 'J' &&
           lenta[x-2][y+2].cTurinys == ' ' )
        kertamKairen = ivertintiLangeli( x - 2, y + 2 ) + 1 ; /* kertam i kaire */
      else
        kertamKairen = 0 ;

      if ( x < lentosDydis - 2 &&
           lenta[x+1][y+1].cTurinys == 'J' &&
           lenta[x+2][y+2].cTurinys == ' ' )
        kertamDesinen = ivertintiLangeli( x + 2, y + 2 ) + 1 ;   /* kertam i desne */
      else
        kertamDesinen = 0 ;

      if ( kertamKairen > kertamDesinen )
        lenta[x][y].maxKirtimu = kertamKairen ;
      else
        lenta[x][y].maxKirtimu = kertamDesinen ;
    }

   return lenta[x][y].maxKirtimu ;
}




void main()
{
   int xK = 0, yK = 0 ;
   int maxKirtimu = 0 ;

   inicializuotiLenta( &xK, &yK ) ;

   maxKirtimu = ivertintiLangeli( xK, yK ) ;

   isvestiRezultata( maxKirtimu ) ;

}

