declare -A links=([A]="c b end" [d]="b" [c]="A" [b]="A d end" [start]="A b" ) declare -A __previous_points=([start]="1" ) declare -A __previous_points=([A]="1" [start]="1" ) declare -A __previous_points=([A]="1" [c]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [start]="1" ) Can't do c on start A c A declare -A __previous_points=([A]="2" [c]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) Can't do c on start A c A b A declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) Can't do b on start A c A b A declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [d]="1" [c]="1" [b]="1" [start]="1" ) Can't do b on start A c A b d declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [start]="1" ) declare -A __previous_points=([A]="1" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) Can't do c on start A b A c A declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) Can't do b on start A b A c A declare -A __previous_points=([A]="3" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [b]="1" [start]="1" ) Can't do b on start A b A declare -A __previous_points=([A]="2" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [d]="1" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="3" [d]="1" [c]="1" [b]="2" [start]="1" ) Can't do c on start A b d b A c A declare -A __previous_points=([A]="3" [d]="1" [c]="1" [b]="2" [start]="1" ) Can't do b on start A b d b A c A declare -A __previous_points=([A]="3" [d]="1" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [d]="1" [b]="2" [start]="1" ) Can't do b on start A b d b A declare -A __previous_points=([A]="2" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) Can't do d on start A b d b declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [start]="1" ) declare -A __previous_points=([start]="1" ) declare -A __previous_points=([b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) Can't do c on start b A c A declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) Can't do b on start b A c A declare -A __previous_points=([A]="2" [c]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([A]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="3" [c]="1" [b]="2" [start]="1" ) Can't do c on start b A b A c A declare -A __previous_points=([A]="3" [c]="1" [b]="2" [start]="1" ) Can't do b on start b A b A c A declare -A __previous_points=([A]="3" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [b]="2" [start]="1" ) Can't do b on start b A b A declare -A __previous_points=([A]="2" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) Can't do b on start b A b d declare -A __previous_points=([A]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [b]="1" [start]="1" ) declare -A __previous_points=([b]="1" [start]="1" ) declare -A __previous_points=([d]="1" [b]="1" [start]="1" ) declare -A __previous_points=([d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="2" [d]="1" [c]="1" [b]="2" [start]="1" ) Can't do c on start b d b A c A declare -A __previous_points=([A]="2" [d]="1" [c]="1" [b]="2" [start]="1" ) Can't do b on start b d b A c A declare -A __previous_points=([A]="2" [d]="1" [c]="1" [b]="2" [start]="1" ) declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) Can't do b on start b d b A declare -A __previous_points=([A]="1" [d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([d]="1" [b]="2" [start]="1" ) Can't do d on start b d b declare -A __previous_points=([d]="1" [b]="2" [start]="1" ) declare -A __previous_points=([b]="1" [start]="1" ) Got path: start A b end Got path: start b A b end Got path: start A c A b A end Got path: start b A end Got path: start b end Got path: start b d b A end Got path: start A c A b end Got path: start A b d b end Got path: start A b d b A c A end Got path: start A b d b A end Got path: start A c A end Got path: start b A b A end Got path: start b A b A c A end Got path: start A b A c A end Got path: start b d b A c A end Got path: start b d b end Got path: start A b A end Got path: start b A c A end Got path: start A end Total paths: 19