fork download
  1. # Turing Machine simulator
  2. # with a Fibonacci sequence setup to demo
  3. # 25/12/2013 v2
  4. # Andi Fugard
  5.  
  6. newTape = function(initTape = c(" "), pos = 1, state = " ", blank = " ") {
  7. stopifnot(length(initTape) > 0)
  8. list(cells = initTape, pos = pos, state = state, blank = blank)
  9. }
  10.  
  11. tapesEqual = function(t1, t2) {
  12. length(t1$cells) == length(t2$cells) &&
  13. t1$cells == t2$cells &&
  14. t1$pos == t2$pos &&
  15. t1$state == t2$state &&
  16. t1$blank == t2$blank
  17. }
  18.  
  19. runStep = function(tape, quints) {
  20. quint = subset(quints, s1 == tape$state & i == tape$cells[tape$pos])
  21.  
  22. newTape = tape
  23. if (nrow(quint) == 1) { # relax this when we go nondeterministic
  24. newTape = tape
  25. newTape$cells[tape$pos] = quint$o
  26. newTape$state = quint$s2
  27.  
  28. stopifnot(quint$d == "L" || quint$d == "R")
  29. if (quint$d == "R") {
  30. newTape$pos = newTape$pos + 1
  31. if (newTape$pos > length(newTape$cells))
  32. newTape$cells = c(newTape$cells, newTape$blank)
  33. }
  34. else if (quint$d == "L") {
  35. newTape$pos = newTape$pos - 1
  36. if (newTape$pos < 1) {
  37. newTape$cells = c(newTape$blank, newTape$cells)
  38. newTape$pos = 1
  39. }
  40. }
  41. }
  42.  
  43. newTape
  44. }
  45.  
  46. printTape = function(tape, iteration.number = "") {
  47. res = rbind(as.character(tape$cells)
  48. ,rep("", length(tape$cells))
  49. ,rep("", length(tape$cells)))
  50. colnames(res) = rep("", length(tape$cells))
  51. rownames(res) = c(paste("(", iteration.number, ")", sep = ""),"","")
  52.  
  53. res[2,tape$pos] = "^"
  54. res[3,tape$pos] = as.character(tape$state)
  55. print(res, quote = F)
  56. }
  57.  
  58. runProgram = function(startTape, program, maxSteps = 10000) {
  59. printTape(startTape, 0)
  60. tapeRes = runStep(startTape, program)
  61. printTape(tapeRes, 1)
  62.  
  63. i = 2
  64. finished = F
  65. while (i <= maxSteps && !finished) {
  66. tapeRes.prev = tapeRes
  67. tapeRes = runStep(tapeRes.prev, program)
  68.  
  69. if (!tapesEqual(tapeRes, tapeRes.prev)) {
  70. printTape(tapeRes, i)
  71. }
  72. else finished = T
  73.  
  74. i = i + 1
  75. }
  76. }
  77.  
  78. # Fibonaci
  79.  
  80. fibprog = data.frame(
  81. s1 = c("A", "A", "B", "B", "C", "C", "D", "D", "E", "E",
  82. "F", "F", "G", "G", "H", "H", "I", "I", "J",
  83. "J", "K", "K", "L", "L", "M", "M", "N",
  84. "N", "O", "O"),
  85. s2 = c("B", "H", "B", "C", "C", "D", "D", "E", "E", "F",
  86. "F", "G", "G", "A", "I", "M", "I", "J", "J",
  87. "K", "K", "L", "L", "H", "M", "N", "N",
  88. "O", "O", "A"),
  89. i = c("1", "*", "1", "*", "1", "*", "1", "*", "1", "*", "1", "*",
  90. "1", "p", "1", "*", "1", "*", "1", "*", "1", "*", "1", "p",
  91. "p", "*", "p", "*", "1", "*"),
  92. o = c("p", "*", "1", "*", "1", "*", "1", "1", "1", "*", "1", "*",
  93. "1", "p", "p", "*", "1", "*", "1", "1", "1", "*", "1", "p",
  94. "1", "*", "1", "*", "1", "*"),
  95. d = c("R", "R", "R", "R", "R", "R", "R", "L", "L", "L", "L", "L",
  96. "L", "R", "R", "L", "R", "R", "R", "L", "L", "L", "L", "R",
  97. "L", "L", "L", "R", "R", "R"),
  98. stringsAsFactors = F
  99. )
  100. fibprog
  101.  
  102.  
  103. # Run up 1,1,2,3,5,8 (317 steps)
  104. startTape = newTape(as.character(c(1,"*",1))
  105. ,pos = 1
  106. ,state = "A"
  107. ,blank = "*")
  108. runProgram(startTape, fibprog, maxSteps = 317)
  109.  
Success #stdin #stdout 0.41s 41164KB
stdin
Standard input is empty
stdout
   s1 s2 i o d
1   A  B 1 p R
2   A  H * * R
3   B  B 1 1 R
4   B  C * * R
5   C  C 1 1 R
6   C  D * * R
7   D  D 1 1 R
8   D  E * 1 L
9   E  E 1 1 L
10  E  F * * L
11  F  F 1 1 L
12  F  G * * L
13  G  G 1 1 L
14  G  A p p R
15  H  I 1 p R
16  H  M * * L
17  I  I 1 1 R
18  I  J * * R
19  J  J 1 1 R
20  J  K * 1 L
21  K  K 1 1 L
22  K  L * * L
23  L  L 1 1 L
24  L  H p p R
25  M  M p 1 L
26  M  N * * L
27  N  N p 1 L
28  N  O * * R
29  O  O 1 1 R
30  O  A * * R
         
(0) 1 * 1
    ^    
    A    
         
(1) p * 1
      ^  
      B  
         
(2) p * 1
        ^
        C
           
(3) p * 1 *
          ^
          C
             
(4) p * 1 * *
            ^
            D
             
(5) p * 1 * 1
          ^  
          E  
             
(6) p * 1 * 1
        ^    
        F    
             
(7) p * 1 * 1
      ^      
      F      
             
(8) p * 1 * 1
    ^        
    G        
             
(9) p * 1 * 1
      ^      
      A      
              
(10) p * 1 * 1
         ^    
         H    
              
(11) p * p * 1
           ^  
           I  
              
(12) p * p * 1
             ^
             J
                
(13) p * p * 1 *
               ^
               J
                
(14) p * p * 1 1
             ^  
             K  
                
(15) p * p * 1 1
           ^    
           K    
                
(16) p * p * 1 1
         ^      
         L      
                
(17) p * p * 1 1
           ^    
           H    
                
(18) p * p * 1 1
         ^      
         M      
                
(19) p * 1 * 1 1
       ^        
       M        
                
(20) p * 1 * 1 1
     ^          
     N          
                  
(21) * 1 * 1 * 1 1
     ^            
     N            
                  
(22) * 1 * 1 * 1 1
       ^          
       O          
                  
(23) * 1 * 1 * 1 1
         ^        
         O        
                  
(24) * 1 * 1 * 1 1
           ^      
           A      
                  
(25) * 1 * p * 1 1
             ^    
             B    
                  
(26) * 1 * p * 1 1
               ^  
               C  
                  
(27) * 1 * p * 1 1
                 ^
                 C
                    
(28) * 1 * p * 1 1 *
                   ^
                   C
                      
(29) * 1 * p * 1 1 * *
                     ^
                     D
                      
(30) * 1 * p * 1 1 * 1
                   ^  
                   E  
                      
(31) * 1 * p * 1 1 * 1
                 ^    
                 F    
                      
(32) * 1 * p * 1 1 * 1
               ^      
               F      
                      
(33) * 1 * p * 1 1 * 1
             ^        
             F        
                      
(34) * 1 * p * 1 1 * 1
           ^          
           G          
                      
(35) * 1 * p * 1 1 * 1
             ^        
             A        
                      
(36) * 1 * p * 1 1 * 1
               ^      
               H      
                      
(37) * 1 * p * p 1 * 1
                 ^    
                 I    
                      
(38) * 1 * p * p 1 * 1
                   ^  
                   I  
                      
(39) * 1 * p * p 1 * 1
                     ^
                     J
                        
(40) * 1 * p * p 1 * 1 *
                       ^
                       J
                        
(41) * 1 * p * p 1 * 1 1
                     ^  
                     K  
                        
(42) * 1 * p * p 1 * 1 1
                   ^    
                   K    
                        
(43) * 1 * p * p 1 * 1 1
                 ^      
                 L      
                        
(44) * 1 * p * p 1 * 1 1
               ^        
               L        
                        
(45) * 1 * p * p 1 * 1 1
                 ^      
                 H      
                        
(46) * 1 * p * p p * 1 1
                   ^    
                   I    
                        
(47) * 1 * p * p p * 1 1
                     ^  
                     J  
                        
(48) * 1 * p * p p * 1 1
                       ^
                       J
                          
(49) * 1 * p * p p * 1 1 *
                         ^
                         J
                          
(50) * 1 * p * p p * 1 1 1
                       ^  
                       K  
                          
(51) * 1 * p * p p * 1 1 1
                     ^    
                     K    
                          
(52) * 1 * p * p p * 1 1 1
                   ^      
                   K      
                          
(53) * 1 * p * p p * 1 1 1
                 ^        
                 L        
                          
(54) * 1 * p * p p * 1 1 1
                   ^      
                   H      
                          
(55) * 1 * p * p p * 1 1 1
                 ^        
                 M        
                          
(56) * 1 * p * p 1 * 1 1 1
               ^          
               M          
                          
(57) * 1 * p * 1 1 * 1 1 1
             ^            
             M            
                          
(58) * 1 * p * 1 1 * 1 1 1
           ^              
           N              
                          
(59) * 1 * 1 * 1 1 * 1 1 1
         ^                
         N                
                          
(60) * 1 * 1 * 1 1 * 1 1 1
           ^              
           O              
                          
(61) * 1 * 1 * 1 1 * 1 1 1
             ^            
             O            
                          
(62) * 1 * 1 * 1 1 * 1 1 1
               ^          
               A          
                          
(63) * 1 * 1 * p 1 * 1 1 1
                 ^        
                 B        
                          
(64) * 1 * 1 * p 1 * 1 1 1
                   ^      
                   B      
                          
(65) * 1 * 1 * p 1 * 1 1 1
                     ^    
                     C    
                          
(66) * 1 * 1 * p 1 * 1 1 1
                       ^  
                       C  
                          
(67) * 1 * 1 * p 1 * 1 1 1
                         ^
                         C
                            
(68) * 1 * 1 * p 1 * 1 1 1 *
                           ^
                           C
                              
(69) * 1 * 1 * p 1 * 1 1 1 * *
                             ^
                             D
                              
(70) * 1 * 1 * p 1 * 1 1 1 * 1
                           ^  
                           E  
                              
(71) * 1 * 1 * p 1 * 1 1 1 * 1
                         ^    
                         F    
                              
(72) * 1 * 1 * p 1 * 1 1 1 * 1
                       ^      
                       F      
                              
(73) * 1 * 1 * p 1 * 1 1 1 * 1
                     ^        
                     F        
                              
(74) * 1 * 1 * p 1 * 1 1 1 * 1
                   ^          
                   F          
                              
(75) * 1 * 1 * p 1 * 1 1 1 * 1
                 ^            
                 G            
                              
(76) * 1 * 1 * p 1 * 1 1 1 * 1
               ^              
               G              
                              
(77) * 1 * 1 * p 1 * 1 1 1 * 1
                 ^            
                 A            
                              
(78) * 1 * 1 * p p * 1 1 1 * 1
                   ^          
                   B          
                              
(79) * 1 * 1 * p p * 1 1 1 * 1
                     ^        
                     C        
                              
(80) * 1 * 1 * p p * 1 1 1 * 1
                       ^      
                       C      
                              
(81) * 1 * 1 * p p * 1 1 1 * 1
                         ^    
                         C    
                              
(82) * 1 * 1 * p p * 1 1 1 * 1
                           ^  
                           C  
                              
(83) * 1 * 1 * p p * 1 1 1 * 1
                             ^
                             D
                                
(84) * 1 * 1 * p p * 1 1 1 * 1 *
                               ^
                               D
                                
(85) * 1 * 1 * p p * 1 1 1 * 1 1
                             ^  
                             E  
                                
(86) * 1 * 1 * p p * 1 1 1 * 1 1
                           ^    
                           E    
                                
(87) * 1 * 1 * p p * 1 1 1 * 1 1
                         ^      
                         F      
                                
(88) * 1 * 1 * p p * 1 1 1 * 1 1
                       ^        
                       F        
                                
(89) * 1 * 1 * p p * 1 1 1 * 1 1
                     ^          
                     F          
                                
(90) * 1 * 1 * p p * 1 1 1 * 1 1
                   ^            
                   F            
                                
(91) * 1 * 1 * p p * 1 1 1 * 1 1
                 ^              
                 G              
                                
(92) * 1 * 1 * p p * 1 1 1 * 1 1
                   ^            
                   A            
                                
(93) * 1 * 1 * p p * 1 1 1 * 1 1
                     ^          
                     H          
                                
(94) * 1 * 1 * p p * p 1 1 * 1 1
                       ^        
                       I        
                                
(95) * 1 * 1 * p p * p 1 1 * 1 1
                         ^      
                         I      
                                
(96) * 1 * 1 * p p * p 1 1 * 1 1
                           ^    
                           I    
                                
(97) * 1 * 1 * p p * p 1 1 * 1 1
                             ^  
                             J  
                                
(98) * 1 * 1 * p p * p 1 1 * 1 1
                               ^
                               J
                                  
(99) * 1 * 1 * p p * p 1 1 * 1 1 *
                                 ^
                                 J
                                   
(100) * 1 * 1 * p p * p 1 1 * 1 1 1
                                ^  
                                K  
                                   
(101) * 1 * 1 * p p * p 1 1 * 1 1 1
                              ^    
                              K    
                                   
(102) * 1 * 1 * p p * p 1 1 * 1 1 1
                            ^      
                            K      
                                   
(103) * 1 * 1 * p p * p 1 1 * 1 1 1
                          ^        
                          L        
                                   
(104) * 1 * 1 * p p * p 1 1 * 1 1 1
                        ^          
                        L          
                                   
(105) * 1 * 1 * p p * p 1 1 * 1 1 1
                      ^            
                      L            
                                   
(106) * 1 * 1 * p p * p 1 1 * 1 1 1
                        ^          
                        H          
                                   
(107) * 1 * 1 * p p * p p 1 * 1 1 1
                          ^        
                          I        
                                   
(108) * 1 * 1 * p p * p p 1 * 1 1 1
                            ^      
                            I      
                                   
(109) * 1 * 1 * p p * p p 1 * 1 1 1
                              ^    
                              J    
                                   
(110) * 1 * 1 * p p * p p 1 * 1 1 1
                                ^  
                                J  
                                   
(111) * 1 * 1 * p p * p p 1 * 1 1 1
                                  ^
                                  J
                                     
(112) * 1 * 1 * p p * p p 1 * 1 1 1 *
                                    ^
                                    J
                                     
(113) * 1 * 1 * p p * p p 1 * 1 1 1 1
                                  ^  
                                  K  
                                     
(114) * 1 * 1 * p p * p p 1 * 1 1 1 1
                                ^    
                                K    
                                     
(115) * 1 * 1 * p p * p p 1 * 1 1 1 1
                              ^      
                              K      
                                     
(116) * 1 * 1 * p p * p p 1 * 1 1 1 1
                            ^        
                            K        
                                     
(117) * 1 * 1 * p p * p p 1 * 1 1 1 1
                          ^          
                          L          
                                     
(118) * 1 * 1 * p p * p p 1 * 1 1 1 1
                        ^            
                        L            
                                     
(119) * 1 * 1 * p p * p p 1 * 1 1 1 1
                          ^          
                          H          
                                     
(120) * 1 * 1 * p p * p p p * 1 1 1 1
                            ^        
                            I        
                                     
(121) * 1 * 1 * p p * p p p * 1 1 1 1
                              ^      
                              J      
                                     
(122) * 1 * 1 * p p * p p p * 1 1 1 1
                                ^    
                                J    
                                     
(123) * 1 * 1 * p p * p p p * 1 1 1 1
                                  ^  
                                  J  
                                     
(124) * 1 * 1 * p p * p p p * 1 1 1 1
                                    ^
                                    J
                                       
(125) * 1 * 1 * p p * p p p * 1 1 1 1 *
                                      ^
                                      J
                                       
(126) * 1 * 1 * p p * p p p * 1 1 1 1 1
                                    ^  
                                    K  
                                       
(127) * 1 * 1 * p p * p p p * 1 1 1 1 1
                                  ^    
                                  K    
                                       
(128) * 1 * 1 * p p * p p p * 1 1 1 1 1
                                ^      
                                K      
                                       
(129) * 1 * 1 * p p * p p p * 1 1 1 1 1
                              ^        
                              K        
                                       
(130) * 1 * 1 * p p * p p p * 1 1 1 1 1
                            ^          
                            K          
                                       
(131) * 1 * 1 * p p * p p p * 1 1 1 1 1
                          ^            
                          L            
                                       
(132) * 1 * 1 * p p * p p p * 1 1 1 1 1
                            ^          
                            H          
                                       
(133) * 1 * 1 * p p * p p p * 1 1 1 1 1
                          ^            
                          M            
                                       
(134) * 1 * 1 * p p * p p 1 * 1 1 1 1 1
                        ^              
                        M              
                                       
(135) * 1 * 1 * p p * p 1 1 * 1 1 1 1 1
                      ^                
                      M                
                                       
(136) * 1 * 1 * p p * 1 1 1 * 1 1 1 1 1
                    ^                  
                    M                  
                                       
(137) * 1 * 1 * p p * 1 1 1 * 1 1 1 1 1
                  ^                    
                  N                    
                                       
(138) * 1 * 1 * p 1 * 1 1 1 * 1 1 1 1 1
                ^                      
                N                      
                                       
(139) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1
              ^                        
              N                        
                                       
(140) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1
                ^                      
                O                      
                                       
(141) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1
                  ^                    
                  O                    
                                       
(142) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1
                    ^                  
                    O                  
                                       
(143) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1
                      ^                
                      A                
                                       
(144) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                        ^              
                        B              
                                       
(145) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                          ^            
                          B            
                                       
(146) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                            ^          
                            B          
                                       
(147) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                              ^        
                              C        
                                       
(148) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                                ^      
                                C      
                                       
(149) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                                  ^    
                                  C    
                                       
(150) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                                    ^  
                                    C  
                                       
(151) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1
                                      ^
                                      C
                                         
(152) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 *
                                        ^
                                        C
                                           
(153) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * *
                                          ^
                                          D
                                           
(154) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                                        ^  
                                        E  
                                           
(155) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                                      ^    
                                      F    
                                           
(156) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                                    ^      
                                    F      
                                           
(157) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                                  ^        
                                  F        
                                           
(158) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                                ^          
                                F          
                                           
(159) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                              ^            
                              F            
                                           
(160) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                            ^              
                            F              
                                           
(161) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                          ^                
                          G                
                                           
(162) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                        ^                  
                        G                  
                                           
(163) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                      ^                    
                      G                    
                                           
(164) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1
                        ^                  
                        A                  
                                           
(165) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                          ^                
                          B                
                                           
(166) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                            ^              
                            B              
                                           
(167) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                              ^            
                              C            
                                           
(168) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                ^          
                                C          
                                           
(169) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                  ^        
                                  C        
                                           
(170) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                    ^      
                                    C      
                                           
(171) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                      ^    
                                      C    
                                           
(172) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                        ^  
                                        C  
                                           
(173) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1
                                          ^
                                          D
                                             
(174) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 *
                                            ^
                                            D
                                             
(175) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                          ^  
                                          E  
                                             
(176) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                        ^    
                                        E    
                                             
(177) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                      ^      
                                      F      
                                             
(178) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                    ^        
                                    F        
                                             
(179) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                  ^          
                                  F          
                                             
(180) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                                ^            
                                F            
                                             
(181) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                              ^              
                              F              
                                             
(182) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                            ^                
                            F                
                                             
(183) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                          ^                  
                          G                  
                                             
(184) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                        ^                    
                        G                    
                                             
(185) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1
                          ^                  
                          A                  
                                             
(186) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                            ^                
                            B                
                                             
(187) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                              ^              
                              C              
                                             
(188) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                ^            
                                C            
                                             
(189) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                  ^          
                                  C          
                                             
(190) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                    ^        
                                    C        
                                             
(191) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                      ^      
                                      C      
                                             
(192) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                        ^    
                                        C    
                                             
(193) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                          ^  
                                          D  
                                             
(194) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1
                                            ^
                                            D
                                               
(195) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 *
                                              ^
                                              D
                                               
(196) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                            ^  
                                            E  
                                               
(197) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                          ^    
                                          E    
                                               
(198) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                        ^      
                                        E      
                                               
(199) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                      ^        
                                      F        
                                               
(200) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                    ^          
                                    F          
                                               
(201) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                  ^            
                                  F            
                                               
(202) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                                ^              
                                F              
                                               
(203) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                              ^                
                              F                
                                               
(204) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                            ^                  
                            F                  
                                               
(205) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                          ^                    
                          G                    
                                               
(206) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                            ^                  
                            A                  
                                               
(207) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1
                              ^                
                              H                
                                               
(208) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                ^              
                                I              
                                               
(209) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                  ^            
                                  I            
                                               
(210) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                    ^          
                                    I          
                                               
(211) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                      ^        
                                      I        
                                               
(212) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                        ^      
                                        I      
                                               
(213) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                          ^    
                                          J    
                                               
(214) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                            ^  
                                            J  
                                               
(215) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1
                                              ^
                                              J
                                                 
(216) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 *
                                                ^
                                                J
                                                 
(217) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                              ^  
                                              K  
                                                 
(218) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                            ^    
                                            K    
                                                 
(219) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                          ^      
                                          K      
                                                 
(220) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                        ^        
                                        K        
                                                 
(221) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                      ^          
                                      L          
                                                 
(222) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                    ^            
                                    L            
                                                 
(223) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                  ^              
                                  L              
                                                 
(224) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                ^                
                                L                
                                                 
(225) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                              ^                  
                              L                  
                                                 
(226) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1
                                ^                
                                H                
                                                 
(227) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                  ^              
                                  I              
                                                 
(228) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                    ^            
                                    I            
                                                 
(229) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                      ^          
                                      I          
                                                 
(230) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                        ^        
                                        I        
                                                 
(231) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                          ^      
                                          J      
                                                 
(232) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                            ^    
                                            J    
                                                 
(233) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                              ^  
                                              J  
                                                 
(234) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1
                                                ^
                                                J
                                                   
(235) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 *
                                                  ^
                                                  J
                                                   
(236) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                                ^  
                                                K  
                                                   
(237) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                              ^    
                                              K    
                                                   
(238) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                            ^      
                                            K      
                                                   
(239) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                          ^        
                                          K        
                                                   
(240) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                        ^          
                                        K          
                                                   
(241) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                      ^            
                                      L            
                                                   
(242) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                    ^              
                                    L              
                                                   
(243) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                  ^                
                                  L                
                                                   
(244) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                ^                  
                                L                  
                                                   
(245) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1
                                  ^                
                                  H                
                                                   
(246) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                    ^              
                                    I              
                                                   
(247) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                      ^            
                                      I            
                                                   
(248) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                        ^          
                                        I          
                                                   
(249) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                          ^        
                                          J        
                                                   
(250) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                            ^      
                                            J      
                                                   
(251) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                              ^    
                                              J    
                                                   
(252) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                                ^  
                                                J  
                                                   
(253) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1
                                                  ^
                                                  J
                                                     
(254) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 *
                                                    ^
                                                    J
                                                     
(255) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                                  ^  
                                                  K  
                                                     
(256) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                                ^    
                                                K    
                                                     
(257) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                              ^      
                                              K      
                                                     
(258) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                            ^        
                                            K        
                                                     
(259) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                          ^          
                                          K          
                                                     
(260) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                        ^            
                                        K            
                                                     
(261) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                      ^              
                                      L              
                                                     
(262) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                    ^                
                                    L                
                                                     
(263) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                  ^                  
                                  L                  
                                                     
(264) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1
                                    ^                
                                    H                
                                                     
(265) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                      ^              
                                      I              
                                                     
(266) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                        ^            
                                        I            
                                                     
(267) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                          ^          
                                          J          
                                                     
(268) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                            ^        
                                            J        
                                                     
(269) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                              ^      
                                              J      
                                                     
(270) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                                ^    
                                                J    
                                                     
(271) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                                  ^  
                                                  J  
                                                     
(272) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1
                                                    ^
                                                    J
                                                       
(273) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 *
                                                      ^
                                                      J
                                                       
(274) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                                    ^  
                                                    K  
                                                       
(275) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                                  ^    
                                                  K    
                                                       
(276) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                                ^      
                                                K      
                                                       
(277) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                              ^        
                                              K        
                                                       
(278) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                            ^          
                                            K          
                                                       
(279) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                          ^            
                                          K            
                                                       
(280) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                        ^              
                                        K              
                                                       
(281) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                      ^                
                                      L                
                                                       
(282) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                    ^                  
                                    L                  
                                                       
(283) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1
                                      ^                
                                      H                
                                                       
(284) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                        ^              
                                        I              
                                                       
(285) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                          ^            
                                          J            
                                                       
(286) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                            ^          
                                            J          
                                                       
(287) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                              ^        
                                              J        
                                                       
(288) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                                ^      
                                                J      
                                                       
(289) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                                  ^    
                                                  J    
                                                       
(290) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                                    ^  
                                                    J  
                                                       
(291) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1
                                                      ^
                                                      J
                                                         
(292) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 *
                                                        ^
                                                        J
                                                         
(293) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                                      ^  
                                                      K  
                                                         
(294) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                                    ^    
                                                    K    
                                                         
(295) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                                  ^      
                                                  K      
                                                         
(296) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                                ^        
                                                K        
                                                         
(297) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                              ^          
                                              K          
                                                         
(298) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                            ^            
                                            K            
                                                         
(299) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                          ^              
                                          K              
                                                         
(300) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                        ^                
                                        K                
                                                         
(301) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                      ^                  
                                      L                  
                                                         
(302) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                        ^                
                                        H                
                                                         
(303) * 1 * 1 * 1 1 * p p p * p p p p p * 1 1 1 1 1 1 1 1
                                      ^                  
                                      M                  
                                                         
(304) * 1 * 1 * 1 1 * p p p * p p p p 1 * 1 1 1 1 1 1 1 1
                                    ^                    
                                    M                    
                                                         
(305) * 1 * 1 * 1 1 * p p p * p p p 1 1 * 1 1 1 1 1 1 1 1
                                  ^                      
                                  M                      
                                                         
(306) * 1 * 1 * 1 1 * p p p * p p 1 1 1 * 1 1 1 1 1 1 1 1
                                ^                        
                                M                        
                                                         
(307) * 1 * 1 * 1 1 * p p p * p 1 1 1 1 * 1 1 1 1 1 1 1 1
                              ^                          
                              M                          
                                                         
(308) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                            ^                            
                            M                            
                                                         
(309) * 1 * 1 * 1 1 * p p p * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                          ^                              
                          N                              
                                                         
(310) * 1 * 1 * 1 1 * p p 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                        ^                                
                        N                                
                                                         
(311) * 1 * 1 * 1 1 * p 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                      ^                                  
                      N                                  
                                                         
(312) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                    ^                                    
                    N                                    
                                                         
(313) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                      ^                                  
                      O                                  
                                                         
(314) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                        ^                                
                        O                                
                                                         
(315) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                          ^                              
                          O                              
                                                         
(316) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                            ^                            
                            O                            
                                                         
(317) * 1 * 1 * 1 1 * 1 1 1 * 1 1 1 1 1 * 1 1 1 1 1 1 1 1
                              ^                          
                              A