#include <stdio.h>  /*Nombre :Ricardo J. Barrientos Rojel*/
#define N 10
int cont1,i,j;
char L[N][N];
void func(char x,char y);
int tipo();
int contR();
main()
{
  int cont3=0,p[50],q[50],d=0,e=0;
  for (i=0;i<N;i++)
  {
    for (j=0;j<N;j++)
      L[i][j]=getchar();
    getchar();
  }
  printf ("\nLaberinto :\n");
  for (i=0;i<N;i++)
  {
    printf ("\n");
    for (j=0;j<N;j++)
      printf ("%c",L[i][j]);
  }
  i=0;j=0;
  do
  {
  cont1=0;cont3=0;
  if (i!=0)
    if (L[i-1][j]==' ')
      cont3++;
  if (i!=N-1)
    if (L[i+1][j]==' ')
      cont3++;
  if (j!=0)
    if (L[i][j-1]==' ')
      cont3++;
  if (j!=N-1)
    if (L[i][j+1]==' ')
      cont3++;
  if (cont3>1)
    L[i][j]='B';
  func('S','S');
  if (cont1==1)
    break;
  func(' ','O');
  if (cont1==0)
  {
    if (L[i][j]!='B')
      L[i][j]='R';
    func('O','R');
  }
  if (cont1==0)
    func('B','B');
  if (L[i][j]=='B')
  {
    d=tipo();/*tipo entrega el numero de caminos menos 1 que tengo alrededor de donde estoy*/
    e=contR();/*contR entrega el numero de R que tengo alrededor */
    if (d==e)
    {
      L[i][j]='R';
      printf("\nL[2][0]=%c\nL[2][1]=%c\nd=%d\ne=%d\nL[3][0]=%c\nL[1][0]=%c",L[2][0],L[2][1],d,e,L[3][0],L[1][0]);
       printf ("\nlala");
    }
    /*printf ("%c",L[6][7]);*/
  }
  }while (i>=0);
  printf ("\nLaberinto Recorrido (O: Camino Recorrido  R: Camino de regreso  B:bifurcacion)\n");
  for (i=0;i<N;i++)
  {
    printf ("\n");
    for (j=0;j<N;j++)
      printf ("%c",L[i][j]);
  }
  return 0;
}

void func(char x,char y)
{
  if (i!=N-1)
    if (L[i+1][j]==x)
    {
      i=i+1;
      cont1=1;
      if (L[i][j]!='B')
	L[i][j]=y;
    }
  if (cont1==0)
    if (i!=0)
      if (L[i-1][j]==x)
      {
        i=i-1;
        cont1=1;
	if (L[i][j]!='B')
	  L[i][j]=y;
      }
  if (cont1==0)
    if (j!=(N-1))
    {
      if (L[i][j+1]==x)
      {
        j=j+1;
        cont1=1;
        if (L[i][j]!='B')
	  L[i][j]=y;
      }
    } 
  if (cont1==0)
      if (j!=0)
	if (L[i][j-1]==x)
	{
	  j=j-1;
	  cont1=1;
	  if (L[i][j]!='B')
	    L[i][j]=y;
	}
}

int tipo()
{
  int cont6=0;
  if (i!=0)
    if (L[i-1][j]!='x')
      cont6++;
  if (i!=N-1)
    if (L[i+1][j]!='x')
      cont6++;
  if (j!=0)
    if (L[i][j-1]!='x')
      cont6++;
  if (j!=N-1)
    if (L[i][j+1]!='x')
      cont6++;
  return (cont6-1);
}

int contR()
{
  int cont5=0;
  if (i!=0)
    if (L[i-1][j]=='R')
      cont5++;
  if (i!=N-1)
    if (L[i+1][j]=='R')
      cont5++;
  if (j!=0)
    if (L[i][j-1]=='R')
      cont5++;
  if (j!=N-1)
    if (L[i][j+1]=='R')
      cont5++;
  return cont5;
}

  




