iniciar-programa
 define-nueva-instruccion a(aa) como
  inicio
   si (no si-es-cero(precede(aa))) y junto-a-zumbador entonces
    inicio
     coge-zumbador;
     a(precede(aa));
     deja-zumbador;
    fin
   sino
     si no-junto-a-zumbador entonces
         gira-izquierda;
  fin;
 define-nueva-instruccion divide(k) como
  inicio
   si junto-a-zumbador entonces
    inicio
      si orientado-al-este o orientado-al-oeste entonces
       inicio
        a(k);
        si orientado-al-este o orientado-al-oeste entonces
         inicio
           repetir k veces
               coge-zumbador;
           divide(k);
           repetir k veces
               deja-zumbador;
         fin;
       fin
      sino
       inicio
        a(k);
        si orientado-al-norte o orientado-al-sur entonces
         inicio
           repetir k veces
               coge-zumbador;
           divide(k);
           repetir k veces
               deja-zumbador;
         fin;
       fin;
    fin;
  fin;
 define-nueva-instruccion dfs(n) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     dfs(n);
     deja-zumbador;
    fin
   sino
    inicio
     repetir 4 veces
      inicio
       si frente-libre entonces
        inicio
         avanza;
         si izquierda-bloqueada y frente-bloqueado y derecha-bloqueada entonces
          inicio
           si no-junto-a-zumbador entonces
            inicio
             repetir sucede(n) veces
                 deja-zumbador;
            fin
           sino
            inicio
           si orientado-al-este o orientado-al-oeste entonces
            inicio
             a(sucede(n));
             si orientado-al-este o orientado-al-oeste entonces
              inicio
               mientras junto-a-zumbador hacer
                   coge-zumbador;
               deja-zumbador;
               repetir n veces
                   deja-zumbador;
              fin
             sino
              inicio
               repetir 3 veces
                   gira-izquierda;
              fin;
            fin
           sino
            inicio
             a(sucede(n));
             si orientado-al-norte o orientado-al-sur entonces
              inicio
               mientras junto-a-zumbador hacer
                   coge-zumbador;
               deja-zumbador;
               repetir n veces
                   deja-zumbador;
              fin
             sino
              inicio
               repetir 3 veces
                   gira-izquierda;
              fin;
            fin;
           fin;
          fin
         sino
          inicio
           si junto-a-zumbador entonces
            inicio
               si orientado-al-este o orientado-al-oeste entonces
                inicio
                 divide(sucede(n));
                 si orientado-al-este o orientado-al-oeste entonces
                  inicio
                     dfs(sucede(n));
                  fin
                 sino
                     repetir 3 veces
                         gira-izquierda;
                fin
               sino
                inicio
                 divide(sucede(n));
                 si orientado-al-norte o orientado-al-sur entonces
                  inicio
                     dfs(sucede(n));
                  fin
                 sino
                     repetir 3 veces
                         gira-izquierda;
                fin;
            fin;
          fin;
         gira-izquierda;
         gira-izquierda;
         avanza;
         gira-izquierda;
         gira-izquierda;
        fin;
       gira-izquierda;
      fin;
    fin;
  fin;
    inicia-ejecucion
     dfs(0);
        apagate;
    termina-ejecucion
finalizar-programa
