                         Logic In Maze Solving


                            Matthew Probert
                           Servile  Software



The code below illustrates a simple way to solve a maze using logical 
deduction. As it stands the program is not as intelligent as it might 
be. (Indeed this was the forerunner of "AMAZE", which uses slightly 
more than just logic to solve a maze).



-----------------------------Cut Here-----------------------------
/*
    Solving a maze

    Written by Matthew Probert
    (c)1994 Servile Software
*/

#include <stdio.h>
#include <dos.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

unsigned char MAZE[]=
{
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F"
   "\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F"
   " \x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F \x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F \x0F\x0F \x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F\x0F \x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F \x0F"
   "\x0F \x0F\x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   " \x0F \x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F \x0F \x0F \x0F \x0F\x0F"
   "\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F \x0F \x0F"
   " \x0F \x0F\x0F\x0F \x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F"
   " \x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   " \x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   " \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   "\x0F\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F"
   " \x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F\x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F \x0F\x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F\x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F \x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F\x0F\x0F \x0F \x0F"
   "\x0F\x0F \x0F \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   "\x0F \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F"
   "\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F \x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   " \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F"
   " \x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F \x0F \x0F \x0F \x0F\x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F"
   " \x0F \x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F"
   "\x0F\x0F\x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F\x0F\x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F \x0F\x0F\x0F\x0F \x0F \x0F \x0F \x0F\x0F\x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F \x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F"
   " \x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F \x0F"
   " \x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F \x0F \x0F \x0F \x0F"
   " \x0F \x0F \x0F \x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F \x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
   "\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F\x0F"
};

typedef struct
{
    int left;
    int right;
    int forward;
    int backward;
}
BRANCH;

BRANCH tree[2000];


unsigned vram;
unsigned far *video_port;
char far *video;


void SOLVE(void);

main()
{
    struct time start;
    struct time finish;
    int n;

    /*
        Determine type of video card, mono or colour
    */

    video_port = MK_FP(0x40,0x63);

    if (*video_port == 0x3B4)
    {
        video = MK_FP(0xB000,0);

        /*
            Set image attribute to light grey on black
        */
        for(n = 1; n < 4000; n += 2)
            MAZE[n] = 7;
    }
    else
    {
        video = MK_FP(0xB800,0);
    }

    _fmemcpy(video,MAZE,4000);

    gettime(&start);
    SOLVE();
    gettime(&finish);
    n = finish.ti_min * 60 + finish.ti_sec;
    n -= (start.ti_min * 60 + start.ti_sec);
    printf("\n\nMaze solved in %d seconds",n);
}


void SOLVE()
{
    int x;
    int y;
    int pos;
    int dead_end;

    x = 39;
    y = 0;
    pos = y * 80 + x;


    while(y < 24)
    {
        video[y * 160 + x * 2] = 32;

        if (y == 0)
            tree[pos].backward = -1;
        else
        if (video[(y-1) * 160 + x * 2] != 32)
            tree[pos].backward = -1;

        if (video[(y+1) * 160 + x * 2] != 32)
            tree[pos].forward = -1;

        if (video[y * 160 + (x - 1) * 2] != 32)
            tree[pos].left = -1;

        if (video[y * 160 + (x + 1) * 2] != 32)
            tree[pos].right = -1;


        dead_end = 1;
        if (tree[pos].forward == 0 && tree[pos+80].backward != pos )
        {
            y++;
            tree[pos].forward = y * 80 + x;
            dead_end = 0;
        }
        else
        if (tree[pos].left == 0 && tree[pos-1].right != pos)
        {
            x--;
            tree[pos].left = y * 80 + x;
            dead_end = 0;
        }
        else
        if (tree[pos].right == 0 && tree[pos+1].left != pos)
        {
            x++;
            tree[pos].right = y * 80 + x;
            dead_end = 0;
        }
        else
        if (tree[pos].backward == 0 && tree[pos-80].forward != pos)
        {
            y--;
            tree[pos].backward = y * 80 + x;
            dead_end = 0;
        }
        pos = y * 80 + x;

        if (dead_end)
        {
            /* Need to backtrack */
            /* First try backwards */
            if (tree[pos - 80].forward == pos)
            {
                /* Move back */
                y--;
                pos -= 80;
                /* Prevent retracing of this direction */
                tree[pos].forward = -1;
            }
            else
            /* try forwards */
            if (tree[pos + 80].backward == pos)
            {
                /* Move forward */
                y++;
                pos += 80;
                /* Prevent retracing of this direction */
                tree[pos].backward = -1;
            }
            else
            /* try left */
            if (tree[pos - 1].right == pos)
            {
                /* Move left */
                x--;
                pos--;
                /* Prevent retracing of this direction */
                tree[pos].right = -1;
            }
            else
            /* try right */
            if (tree[pos + 1].left == pos)
            {
                /* Move right */
                x++;
                pos++;
                /* Prevent retracing of this direction */
                tree[pos].left = -1;
            }
        }

        video[y * 160 + x * 2] = 1;
        delay(100);

    }
}
-----------------------------Cut Here-----------------------------

