recursive back tracker