Greg Thompson commited on
Commit
d53af6d
1 Parent(s): e5d94ad

Update global state manager with curriculum ingestion functions

Browse files
mathtext_fastapi/curriculum_mapper.py ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import re
4
+
5
+ from pathlib import Path
6
+
7
+
8
+ def read_and_preprocess_spreadsheet():
9
+ # path = list(Path.cwd().glob('Rori_Framework_v1.xlsx'))
10
+ DATA_DIR = Path(__file__).parent.parent / "mathtext_fastapi" / "data" / "Rori_Framework_v1.xlsx"
11
+ script_df = pd.read_excel(DATA_DIR, engine='openpyxl')
12
+ script_df.columns = script_df.columns[:2].tolist() + script_df.columns[2:11].astype(int).astype(str).tolist() + script_df.columns[11:].tolist()
13
+ script_df.fillna('', inplace=True)
14
+ return script_df
15
+
16
+
17
+ def build_horizontal_transitions_by_row(direction, skill_code, row):
18
+ match_arr = []
19
+ sideways_transitions = []
20
+
21
+ second_match = match+1
22
+ if direction == 'left':
23
+ second_match = match-1
24
+
25
+ for i in range(9):
26
+ # Grade column
27
+ current_grade = i+1
28
+ if row[current_grade].lower().strip() == 'x':
29
+ match_arr.append(i)
30
+
31
+ for match in match_arr:
32
+ if match_arr[-1] != match:
33
+ sideways_transitions.append([
34
+ direction,
35
+ f"{skill_code}_G{match}",
36
+ f"{skill_code}_G{second_match}"
37
+ ])
38
+ return sideways_transitions
39
+
40
+
41
+ def extract_skill_code(skill):
42
+ pattern = r'[A-Z][0-9]\.\d+\.\d+'
43
+ result = re.search(pattern, skill)
44
+ return result.group()
45
+
46
+
47
+ def build_horizontal_transitions(script_df):
48
+ horizontal_transitions = []
49
+ for index, row in script_df.iterrows():
50
+ skill_code = extract_skill_code(row['Knowledge or Skill'])
51
+
52
+ rightward_matches = []
53
+ for i in range(9):
54
+ # Grade column
55
+ current_grade = i+1
56
+ if row[current_grade].lower().strip() == 'x':
57
+ rightward_matches.append(i)
58
+
59
+ for match in rightward_matches:
60
+ if rightward_matches[-1] != match:
61
+ horizontal_transitions.append([
62
+ "right",
63
+ f"{skill_code}_G{match}",
64
+ f"{skill_code}_G{match+1}"
65
+ ])
66
+
67
+ leftward_matches = []
68
+ for i in reversed(range(9)):
69
+ current_grade = i
70
+ if row[current_grade].lower().strip() == 'x':
71
+ leftward_matches.append(i)
72
+
73
+ for match in leftward_matches:
74
+ if leftward_matches[0] != match:
75
+ horizontal_transitions.append([
76
+ "left",
77
+ f"{skill_code}_G{match}",
78
+ f"{skill_code}_G{match-1}"
79
+ ])
80
+
81
+ return horizontal_transitions
82
+
83
+
84
+ def gather_all_vertical_matches(script_df):
85
+ all_matches = []
86
+ columns = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
87
+
88
+ for column in columns:
89
+ for index, value in script_df[column].iteritems():
90
+ row_num = index + 1
91
+ if value == 'x':
92
+ # Extract skill code
93
+ skill_code = extract_skill_code(
94
+ script_df['Knowledge or Skill'][row_num-1]
95
+ )
96
+
97
+ all_matches.append([skill_code, column])
98
+ return all_matches
99
+
100
+
101
+ def build_vertical_transitions(script_df):
102
+ vertical_transitions = []
103
+
104
+ all_matches = gather_all_vertical_matches(script_df)
105
+
106
+ # Downward
107
+ for index, match in enumerate(all_matches):
108
+ skill = match[0]
109
+ row_num = match[1]
110
+ if all_matches[-1] != match:
111
+ vertical_transitions.append([
112
+ "down",
113
+ f"{skill}_G{row_num}",
114
+ f"{all_matches[index+1][0]}_G{row_num}"
115
+ ])
116
+
117
+ # Upward
118
+ for index, match in reversed(list(enumerate(all_matches))):
119
+ skill = match[0]
120
+ row_num = match[1]
121
+ if all_matches[0] != match:
122
+ vertical_transitions.append([
123
+ "up",
124
+ f"{skill}_G{row_num}",
125
+ f"{all_matches[index-1][0]}_G{row_num}"
126
+ ])
127
+
128
+ return vertical_transitions
129
+
130
+
131
+ def build_all_states(all_transitions):
132
+ all_states = []
133
+ for transition in all_transitions:
134
+ for index, state in enumerate(transition):
135
+ if index == 0:
136
+ continue
137
+ if state not in all_states:
138
+ all_states.append(state)
139
+ return all_states
140
+
141
+
142
+ def build_curriculum_logic():
143
+ script_df = read_and_preprocess_spreadsheet()
144
+ horizontal_transitions = build_horizontal_transitions(script_df)
145
+ vertical_transitions = build_vertical_transitions(script_df)
146
+ all_transitions = horizontal_transitions + vertical_transitions
147
+ all_states = build_all_states(all_transitions)
148
+ return all_states, all_transitions
mathtext_fastapi/data/Rori_Framework_v1.xlsx ADDED
Binary file (420 kB). View file
 
mathtext_fastapi/global_state_manager.py CHANGED
@@ -1,14 +1,12 @@
1
  from transitions import Machine
 
2
 
 
3
 
4
  class GlobalStateManager(object):
5
- states = [
6
- 'N1.1.1_G1', 'N1.1.1_G2', 'N1.1.1_G3', 'N1.1.1_G4', 'N1.1.1_G5', 'N1.1.1_G6', 'N1.1.2_G1', 'N1.1.2_G2', 'N1.1.2_G3', 'N1.1.2_G4', 'N1.1.2_G5', 'N1.1.2_G6', 'N1.1.3_G2', 'N1.1.3_G3', 'N1.1.3_G4', 'N1.1.3_G5', 'N1.1.3_G6', 'N1.2.1_G1', 'N1.2.1_G2', 'N1.2.1_G3', 'N1.2.2_G2', 'N1.2.2_G3', 'N1.2.2_G4', 'N1.2.2_G5', 'N1.2.2_G6', 'N1.2.3_G5', 'N1.2.3_G6', 'N1.3.1_G1', 'N1.3.1_G2', 'N1.3.1_G3', 'N1.3.1_G4', 'N1.3.1_G5', 'N1.3.1_G6', 'N1.3.2_G1', 'N1.3.2_G2', 'N1.3.3_G3', 'N1.3.3_G4', 'N1.3.3_G5', 'N1.3.3_G6', 'N1.3.6_G5', 'N1.3.6_G6', 'N1.3.7_G2', 'N1.3.7_G3', 'N1.3.7_G4', 'N1.3.7_G5', 'N1.3.7_G6', 'N1.4.1_G1', 'N1.4.1_G2', 'N1.4.1_G3', 'N1.4.1_G4', 'N1.4.1_G5', 'N1.4.2_G4', 'N1.4.2_G5', 'N1.4.2_G6', 'N2.1.1_G3', 'N2.1.1_G4', 'N2.1.2_G4', 'N2.1.2_G5', 'N2.1.2_G6', 'N2.1.2_G7', 'N2.1.3_G5', 'N2.1.3_G6', 'N2.1.3_G7', 'N2.1.4_G4', 'N2.1.4_G5', 'N2.1.4_G6', 'N2.1.4_G7', 'N2.2.1_G4', 'N2.2.1_G5', 'N2.2.1_G6', 'N2.2.2_G5', 'N2.2.2_G6', 'N2.2.2_G7', 'N2.2.3_G5', 'N2.2.3_G6', 'N2.2.3_G7', 'N2.3.1_G4', 'N2.3.1_G5', 'N2.3.1_G6', 'N2.3.1_G7', 'N2.3.2_G5', 'N2.3.2_G6', 'N2.3.2_G7', 'N3.1.1_G5', 'N3.1.1_G6', 'N3.1.1_G7', 'N3.1.2_G5', 'N3.1.2_G6', 'N3.1.2_G7', 'N3.2.1_G5', 'N3.2.1_G6', 'N3.2.1_G7', 'N3.2.1_G8', 'N3.2.2_G5', 'N3.2.2_G6', 'N3.2.2_G7', 'N3.2.2_G8', 'N3.2.3_G6', 'N3.2.3_G7', 'N3.2.3_G8', 'N3.2.4_G7', 'N3.2.4_G8', 'N3.3.1_G5', 'N3.3.1_G6', 'N3.3.1_G7', 'N3.3.1_G8', 'N3.3.2_G7', 'N3.3.2_G8', 'N3.4.1_G6', 'N3.4.1_G7', 'N3.4.1_G8', 'N4.2.1_G7', 'N4.2.1_G8', 'N4.2.3_G7', 'N4.2.3_G8', 'N4.3.1_G7', 'N4.3.1_G8', 'N5.1.1_G7', 'N5.1.1_G8', 'N5.1.2_G7', 'N5.1.2_G8', 'N5.1.3_G7', 'N5.1.3_G8', 'M1.1.1_G1', 'M1.1.1_G2', 'M1.1.1_G3', 'M1.1.1_G4', 'M1.1.2_G2', 'M1.1.2_G3', 'M1.1.2_G4', 'M1.1.2_G5', 'M1.1.3_G4', 'M1.1.3_G5', 'M1.1.3_G6', 'M1.1.3_G7', 'M1.1.3_G8', 'M1.1.4_G5', 'M1.1.4_G6', 'M1.1.4_G7', 'M1.2.1_G4', 'M1.2.1_G5', 'M1.2.1_G6', 'M1.2.1_G7', 'M1.2.1_G8', 'M1.2.3_G4', 'M1.2.3_G5', 'M1.2.3_G6', 'M1.2.3_G7', 'M1.2.4_G7', 'M1.2.4_G8', 'M1.2.7_G7', 'M1.2.7_G8', 'M2.1.1_G1', 'M2.1.1_G2', 'M2.1.2_G1', 'M2.1.2_G2', 'M2.1.2_G3', 'M2.1.2_G4', 'M2.1.2_G5', 'M2.1.3_G4', 'M2.1.3_G5', 'M2.1.4_G1', 'M2.1.4_G2', 'M2.1.4_G3', 'M2.1.4_G4', 'M2.2.1_G2', 'M2.2.1_G3', 'M2.2.1_G4', 'M2.2.2_G3', 'M2.2.2_G4', 'M2.2.2_G5', 'M2.2.2_G6', 'M2.2.3_G5', 'M2.2.3_G6', 'M2.2.3_G7', 'M2.2.3_G8', 'M3.1.1_G1', 'M3.1.1_G2', 'M3.1.1_G3', 'G1.1.1_G1', 'G1.1.1_G2', 'G1.1.1_G3', 'G1.1.1_G4', 'G1.1.2_G3', 'G1.1.2_G4', 'G1.1.2_G5', 'G1.1.2_G6', 'G1.1.2_G7', 'G1.1.3_G6', 'G1.1.3_G7', 'G1.1.3_G8', 'G1.1.4_G1', 'G1.1.4_G2', 'G1.1.4_G3', 'G1.1.5_G4', 'G1.1.5_G5', 'G1.1.5_G6', 'G1.1.5_G7', 'G1.1.6_G7', 'G1.1.6_G8', 'G1.1.7_G4', 'G1.1.7_G5', 'G1.1.7_G6', 'G1.1.7_G7', 'G1.1.7_G8', 'G1.1.8_G7', 'G1.1.8_G8', 'G1.1.9_G1', 'G1.1.9_G2', 'G1.1.9_G3', 'G1.1.10_G2', 'G1.1.10_G3', 'G1.1.10_G4', 'G1.1.11_G3', 'G1.1.11_G4', 'G1.1.11_G5', 'G1.1.13_G7', 'G1.1.13_G8', 'G2.1.1_G1', 'G2.1.1_G2', 'G2.1.1_G3', 'G2.1.1_G4', 'G2.1.2_G4', 'G2.1.2_G5', 'G2.1.2_G6', 'G2.1.2_G7', 'G2.1.2_G8', 'G2.1.3_G5', 'G2.1.3_G6', 'G2.1.3_G7', 'G2.1.3_G8', 'G3.1.1_G1', 'G3.1.1_G2', 'G3.1.1_G3', 'G3.1.1_G4', 'G3.1.2_G3', 'G3.1.2_G4', 'G3.1.2_G5', 'G3.1.2_G6', 'G3.1.3_G6', 'G3.1.3_G7', 'G3.1.3_G8', 'S1.1.1_G1', 'S1.1.1_G2', 'S1.1.2_G2', 'S1.1.2_G3', 'S1.1.2_G4', 'S1.1.2_G5', 'S1.1.3_G4', 'S1.1.3_G5', 'S1.1.4_G4', 'S1.1.4_G5', 'S1.1.4_G6', 'S1.1.5_G4', 'S1.1.5_G5', 'S1.1.5_G6', 'S1.1.5_G7', 'S1.1.6_G6', 'S1.1.6_G7', 'S1.1.6_G8', 'S1.2.1_G7', 'S1.2.1_G8', 'S1.2.2_G7', 'S1.2.2_G8', 'S2.1.1_G5', 'S2.1.1_G6', 'S2.1.1_G7', 'S2.1.2_G6', 'S2.1.2_G7', 'S2.1.2_G8', 'S2.1.3_G7', 'S2.1.3_G8', 'A1.1.1_G1', 'A1.1.1_G2', 'A1.1.1_G3', 'A1.1.1_G4', 'A1.1.2_G3', 'A1.1.2_G4', 'A1.1.2_G5', 'A1.1.2_G6', 'A1.1.3_G5', 'A1.1.3_G6', 'A1.1.3_G7', 'A1.1.4_G6', 'A1.1.4_G7', 'A2.1.1_G7', 'A2.1.1_G8', 'A2.1.2_G7', 'A2.1.2_G8', 'A2.1.3_G7', 'A2.1.3_G8', 'A3.1.1_G6', 'A3.1.1_G7', 'A3.1.1_G8', 'A3.1.2_G7', 'A3.1.2_G8', 'A3.1.3_G7', 'A3.1.3_G8', 'A3.2.1_G2', 'A3.2.1_G3', 'A3.2.1_G4', 'A3.2.1_G5', 'A3.2.2_G3', 'A3.2.2_G4', 'A3.2.2_G5', 'A3.2.2_G6', 'A3.2.3_G2', 'A3.2.3_G3', 'A3.2.3_G4', 'A3.2.3_G5', 'A3.2.3_G6', 'A3.3.1_G7', 'A3.3.1_G8', 'A3.4.2_G124', 'A3.4.1_G123', 'A3.3.5_G122', 'A3.3.4_G121', 'A3.3.3_G120', 'A3.3.2_G119', 'A3.3.1_G118', 'A3.1.3_G114', 'A3.1.2_G113', 'A2.1.4_G111', 'A2.1.3_G110', 'A2.1.1_G108', 'S2.2.2_G103', 'S2.2.1_G102', 'S2.1.4_G101', 'S2.1.3_G100', 'S1.2.4_G97', 'S1.2.3_G96', 'S1.2.2_G95', 'S1.2.1_G94', 'S1.1.8_G93', 'S1.1.6_G91', 'G3.1.4_G85', 'G3.1.3_G84', 'G2.1.3_G81', 'G2.1.2_G80', 'G1.1.13_G78', 'G1.1.12_G77', 'G1.1.8_G73', 'G1.1.6_G71', 'M2.2.3_G64', 'M1.2.9_G57', 'M1.2.7_G55', 'M1.2.6_G54', 'M1.2.5_G53', 'M1.2.4_G52', 'M1.2.2_G50', 'N6.1.1_G44', 'N5.2.1_G43', 'N5.1.3_G42', 'N5.1.2_G41', 'A3.1.1_G112', 'A2.1.2_G109', 'S2.1.2_G99', 'G1.1.7_G72', 'G1.1.3_G68', 'M1.2.1_G49', 'M1.1.3_G47', 'N5.1.1_G40', 'N4.3.1_G39', 'N4.2.3_G38', 'N4.2.2_G37', 'N4.2.1_G36', 'N3.4.1_G34', 'N3.3.2_G33', 'N3.3.1_G32', 'N3.2.4_G31', 'N3.2.3_G30', 'N3.2.2_G29', 'N3.2.1_G28', 'A1.1.4_G107', 'A1.1.3_G106', 'S2.1.1_G98', 'S1.1.5_G90', 'G1.1.5_G70', 'G1.1.2_G67', 'M1.2.3_G51', 'M1.1.4_G48', 'N4.1.1_G35', 'N3.1.2_G27', 'N3.1.1_G26', 'N2.3.2_G25', 'N2.3.1_G24', 'N2.2.3_G23', 'N2.2.2_G22', 'N2.1.4_G20', 'N2.1.3_G19', 'N2.1.2_G18', 'A3.2.3_G117', 'A3.2.2_G116', 'A1.1.2_G105', 'S1.1.4_G89', 'G3.1.2_G83', 'M2.2.2_G63', 'N2.2.1_G21', 'N1.4.2_G16', 'N1.3.7_G14', 'N1.3.6_G13', 'N1.3.3_G10', 'N1.3.1_G8', 'N1.2.3_G7', 'A3.2.1_G115', 'S1.1.3_G88', 'S1.1.2_G87', 'G1.1.11_G76', 'M2.1.3_G60', 'M2.1.2_G59', 'M1.1.2_G46', 'N1.4.1_G15', 'A1.1.1_G104', 'G3.1.1_G82', 'G2.1.1_G79', 'G1.1.10_G75', 'G1.1.1_G66', 'M2.2.1_G62', 'M2.1.4_G61', 'M1.1.1_G45', 'N2.1.1_G17', 'N1.3.5_G12', 'G1.1.9_G74', 'G1.1.4_G69', 'M3.1.1_G65', 'N1.3.4_G11', 'N1.2.1_G5', 'S1.1.1_G86', 'M2.1.1_G58', 'N1.3.2_G9'
7
- ]
8
 
9
- transitions = [
10
- ['right', 'N1.1.1_G1', 'N1.1.1_G2'], ['right', 'N1.1.1_G2', 'N1.1.1_G3'], ['right', 'N1.1.1_G3', 'N1.1.1_G4'], ['right', 'N1.1.1_G4', 'N1.1.1_G5'], ['right', 'N1.1.1_G5', 'N1.1.1_G6'], ['left', 'N1.1.1_G6', 'N1.1.1_G5'], ['left', 'N1.1.1_G5', 'N1.1.1_G4'], ['left', 'N1.1.1_G4', 'N1.1.1_G3'], ['left', 'N1.1.1_G3', 'N1.1.1_G2'], ['left', 'N1.1.1_G2', 'N1.1.1_G1'], ['right', 'N1.1.2_G1', 'N1.1.2_G2'], ['right', 'N1.1.2_G2', 'N1.1.2_G3'], ['right', 'N1.1.2_G3', 'N1.1.2_G4'], ['right', 'N1.1.2_G4', 'N1.1.2_G5'], ['right', 'N1.1.2_G5', 'N1.1.2_G6'], ['left', 'N1.1.2_G6', 'N1.1.2_G5'], ['left', 'N1.1.2_G5', 'N1.1.2_G4'], ['left', 'N1.1.2_G4', 'N1.1.2_G3'], ['left', 'N1.1.2_G3', 'N1.1.2_G2'], ['left', 'N1.1.2_G2', 'N1.1.2_G1'], ['right', 'N1.1.3_G2', 'N1.1.3_G3'], ['right', 'N1.1.3_G3', 'N1.1.3_G4'], ['right', 'N1.1.3_G4', 'N1.1.3_G5'], ['right', 'N1.1.3_G5', 'N1.1.3_G6'], ['left', 'N1.1.3_G6', 'N1.1.3_G5'], ['left', 'N1.1.3_G5', 'N1.1.3_G4'], ['left', 'N1.1.3_G4', 'N1.1.3_G3'], ['left', 'N1.1.3_G3', 'N1.1.3_G2'], ['right', 'N1.2.1_G1', 'N1.2.1_G2'], ['right', 'N1.2.1_G2', 'N1.2.1_G3'], ['left', 'N1.2.1_G3', 'N1.2.1_G2'], ['left', 'N1.2.1_G2', 'N1.2.1_G1'], ['right', 'N1.2.2_G2', 'N1.2.2_G3'], ['right', 'N1.2.2_G3', 'N1.2.2_G4'], ['right', 'N1.2.2_G4', 'N1.2.2_G5'], ['right', 'N1.2.2_G5', 'N1.2.2_G6'], ['left', 'N1.2.2_G6', 'N1.2.2_G5'], ['left', 'N1.2.2_G5', 'N1.2.2_G4'], ['left', 'N1.2.2_G4', 'N1.2.2_G3'], ['left', 'N1.2.2_G3', 'N1.2.2_G2'], ['right', 'N1.2.3_G5', 'N1.2.3_G6'], ['left', 'N1.2.3_G6', 'N1.2.3_G5'], ['right', 'N1.3.1_G1', 'N1.3.1_G2'], ['right', 'N1.3.1_G2', 'N1.3.1_G3'], ['right', 'N1.3.1_G3', 'N1.3.1_G4'], ['right', 'N1.3.1_G4', 'N1.3.1_G5'], ['right', 'N1.3.1_G5', 'N1.3.1_G6'], ['left', 'N1.3.1_G6', 'N1.3.1_G5'], ['left', 'N1.3.1_G5', 'N1.3.1_G4'], ['left', 'N1.3.1_G4', 'N1.3.1_G3'], ['left', 'N1.3.1_G3', 'N1.3.1_G2'], ['left', 'N1.3.1_G2', 'N1.3.1_G1'], ['right', 'N1.3.2_G1', 'N1.3.2_G2'], ['left', 'N1.3.2_G2', 'N1.3.2_G1'], ['right', 'N1.3.3_G3', 'N1.3.3_G4'], ['right', 'N1.3.3_G4', 'N1.3.3_G5'], ['right', 'N1.3.3_G5', 'N1.3.3_G6'], ['left', 'N1.3.3_G6', 'N1.3.3_G5'], ['left', 'N1.3.3_G5', 'N1.3.3_G4'], ['left', 'N1.3.3_G4', 'N1.3.3_G3'], ['right', 'N1.3.6_G5', 'N1.3.6_G6'], ['left', 'N1.3.6_G6', 'N1.3.6_G5'], ['right', 'N1.3.7_G2', 'N1.3.7_G3'], ['right', 'N1.3.7_G3', 'N1.3.7_G4'], ['right', 'N1.3.7_G4', 'N1.3.7_G5'], ['right', 'N1.3.7_G5', 'N1.3.7_G6'], ['left', 'N1.3.7_G6', 'N1.3.7_G5'], ['left', 'N1.3.7_G5', 'N1.3.7_G4'], ['left', 'N1.3.7_G4', 'N1.3.7_G3'], ['left', 'N1.3.7_G3', 'N1.3.7_G2'], ['right', 'N1.4.1_G1', 'N1.4.1_G2'], ['right', 'N1.4.1_G2', 'N1.4.1_G3'], ['right', 'N1.4.1_G3', 'N1.4.1_G4'], ['right', 'N1.4.1_G4', 'N1.4.1_G5'], ['left', 'N1.4.1_G5', 'N1.4.1_G4'], ['left', 'N1.4.1_G4', 'N1.4.1_G3'], ['left', 'N1.4.1_G3', 'N1.4.1_G2'], ['left', 'N1.4.1_G2', 'N1.4.1_G1'], ['right', 'N1.4.2_G4', 'N1.4.2_G5'], ['right', 'N1.4.2_G5', 'N1.4.2_G6'], ['left', 'N1.4.2_G6', 'N1.4.2_G5'], ['left', 'N1.4.2_G5', 'N1.4.2_G4'], ['right', 'N2.1.1_G3', 'N2.1.1_G4'], ['left', 'N2.1.1_G4', 'N2.1.1_G3'], ['right', 'N2.1.2_G4', 'N2.1.2_G5'], ['right', 'N2.1.2_G5', 'N2.1.2_G6'], ['right', 'N2.1.2_G6', 'N2.1.2_G7'], ['left', 'N2.1.2_G7', 'N2.1.2_G6'], ['left', 'N2.1.2_G6', 'N2.1.2_G5'], ['left', 'N2.1.2_G5', 'N2.1.2_G4'], ['right', 'N2.1.3_G5', 'N2.1.3_G6'], ['right', 'N2.1.3_G6', 'N2.1.3_G7'], ['left', 'N2.1.3_G7', 'N2.1.3_G6'], ['left', 'N2.1.3_G6', 'N2.1.3_G5'], ['right', 'N2.1.4_G4', 'N2.1.4_G5'], ['right', 'N2.1.4_G5', 'N2.1.4_G6'], ['right', 'N2.1.4_G6', 'N2.1.4_G7'], ['left', 'N2.1.4_G7', 'N2.1.4_G6'], ['left', 'N2.1.4_G6', 'N2.1.4_G5'], ['left', 'N2.1.4_G5', 'N2.1.4_G4'], ['right', 'N2.2.1_G4', 'N2.2.1_G5'], ['right', 'N2.2.1_G5', 'N2.2.1_G6'], ['left', 'N2.2.1_G6', 'N2.2.1_G5'], ['left', 'N2.2.1_G5', 'N2.2.1_G4'], ['right', 'N2.2.2_G5', 'N2.2.2_G6'], ['right', 'N2.2.2_G6', 'N2.2.2_G7'], ['left', 'N2.2.2_G7', 'N2.2.2_G6'], ['left', 'N2.2.2_G6', 'N2.2.2_G5'], ['right', 'N2.2.3_G5', 'N2.2.3_G6'], ['right', 'N2.2.3_G6', 'N2.2.3_G7'], ['left', 'N2.2.3_G7', 'N2.2.3_G6'], ['left', 'N2.2.3_G6', 'N2.2.3_G5'], ['right', 'N2.3.1_G4', 'N2.3.1_G5'], ['right', 'N2.3.1_G5', 'N2.3.1_G6'], ['right', 'N2.3.1_G6', 'N2.3.1_G7'], ['left', 'N2.3.1_G7', 'N2.3.1_G6'], ['left', 'N2.3.1_G6', 'N2.3.1_G5'], ['left', 'N2.3.1_G5', 'N2.3.1_G4'], ['right', 'N2.3.2_G5', 'N2.3.2_G6'], ['right', 'N2.3.2_G6', 'N2.3.2_G7'], ['left', 'N2.3.2_G7', 'N2.3.2_G6'], ['left', 'N2.3.2_G6', 'N2.3.2_G5'], ['right', 'N3.1.1_G5', 'N3.1.1_G6'], ['right', 'N3.1.1_G6', 'N3.1.1_G7'], ['left', 'N3.1.1_G7', 'N3.1.1_G6'], ['left', 'N3.1.1_G6', 'N3.1.1_G5'], ['right', 'N3.1.2_G5', 'N3.1.2_G6'], ['right', 'N3.1.2_G6', 'N3.1.2_G7'], ['left', 'N3.1.2_G7', 'N3.1.2_G6'], ['left', 'N3.1.2_G6', 'N3.1.2_G5'], ['right', 'N3.2.1_G5', 'N3.2.1_G6'], ['right', 'N3.2.1_G6', 'N3.2.1_G7'], ['right', 'N3.2.1_G7', 'N3.2.1_G8'], ['left', 'N3.2.1_G7', 'N3.2.1_G6'], ['left', 'N3.2.1_G6', 'N3.2.1_G5'], ['right', 'N3.2.2_G5', 'N3.2.2_G6'], ['right', 'N3.2.2_G6', 'N3.2.2_G7'], ['right', 'N3.2.2_G7', 'N3.2.2_G8'], ['left', 'N3.2.2_G7', 'N3.2.2_G6'], ['left', 'N3.2.2_G6', 'N3.2.2_G5'], ['right', 'N3.2.3_G6', 'N3.2.3_G7'], ['right', 'N3.2.3_G7', 'N3.2.3_G8'], ['left', 'N3.2.3_G7', 'N3.2.3_G6'], ['right', 'N3.2.4_G7', 'N3.2.4_G8'], ['right', 'N3.3.1_G5', 'N3.3.1_G6'], ['right', 'N3.3.1_G6', 'N3.3.1_G7'], ['right', 'N3.3.1_G7', 'N3.3.1_G8'], ['left', 'N3.3.1_G7', 'N3.3.1_G6'], ['left', 'N3.3.1_G6', 'N3.3.1_G5'], ['right', 'N3.3.2_G7', 'N3.3.2_G8'], ['right', 'N3.4.1_G6', 'N3.4.1_G7'], ['right', 'N3.4.1_G7', 'N3.4.1_G8'], ['left', 'N3.4.1_G7', 'N3.4.1_G6'], ['right', 'N4.2.1_G7', 'N4.2.1_G8'], ['right', 'N4.2.3_G7', 'N4.2.3_G8'], ['right', 'N4.3.1_G7', 'N4.3.1_G8'], ['right', 'N5.1.1_G7', 'N5.1.1_G8'], ['right', 'N5.1.2_G7', 'N5.1.2_G8'], ['right', 'N5.1.3_G7', 'N5.1.3_G8'], ['right', 'M1.1.1_G1', 'M1.1.1_G2'], ['right', 'M1.1.1_G2', 'M1.1.1_G3'], ['right', 'M1.1.1_G3', 'M1.1.1_G4'], ['left', 'M1.1.1_G4', 'M1.1.1_G3'], ['left', 'M1.1.1_G3', 'M1.1.1_G2'], ['left', 'M1.1.1_G2', 'M1.1.1_G1'], ['right', 'M1.1.2_G2', 'M1.1.2_G3'], ['right', 'M1.1.2_G3', 'M1.1.2_G4'], ['right', 'M1.1.2_G4', 'M1.1.2_G5'], ['left', 'M1.1.2_G5', 'M1.1.2_G4'], ['left', 'M1.1.2_G4', 'M1.1.2_G3'], ['left', 'M1.1.2_G3', 'M1.1.2_G2'], ['right', 'M1.1.3_G4', 'M1.1.3_G5'], ['right', 'M1.1.3_G5', 'M1.1.3_G6'], ['right', 'M1.1.3_G6', 'M1.1.3_G7'], ['right', 'M1.1.3_G7', 'M1.1.3_G8'], ['left', 'M1.1.3_G7', 'M1.1.3_G6'], ['left', 'M1.1.3_G6', 'M1.1.3_G5'], ['left', 'M1.1.3_G5', 'M1.1.3_G4'], ['right', 'M1.1.4_G5', 'M1.1.4_G6'], ['right', 'M1.1.4_G6', 'M1.1.4_G7'], ['left', 'M1.1.4_G7', 'M1.1.4_G6'], ['left', 'M1.1.4_G6', 'M1.1.4_G5'], ['right', 'M1.2.1_G4', 'M1.2.1_G5'], ['right', 'M1.2.1_G5', 'M1.2.1_G6'], ['right', 'M1.2.1_G6', 'M1.2.1_G7'], ['right', 'M1.2.1_G7', 'M1.2.1_G8'], ['left', 'M1.2.1_G7', 'M1.2.1_G6'], ['left', 'M1.2.1_G6', 'M1.2.1_G5'], ['left', 'M1.2.1_G5', 'M1.2.1_G4'], ['right', 'M1.2.3_G4', 'M1.2.3_G5'], ['right', 'M1.2.3_G5', 'M1.2.3_G6'], ['right', 'M1.2.3_G6', 'M1.2.3_G7'], ['left', 'M1.2.3_G7', 'M1.2.3_G6'], ['left', 'M1.2.3_G6', 'M1.2.3_G5'], ['left', 'M1.2.3_G5', 'M1.2.3_G4'], ['right', 'M1.2.4_G7', 'M1.2.4_G8'], ['right', 'M1.2.7_G7', 'M1.2.7_G8'], ['right', 'M2.1.1_G1', 'M2.1.1_G2'], ['left', 'M2.1.1_G2', 'M2.1.1_G1'], ['right', 'M2.1.2_G1', 'M2.1.2_G2'], ['right', 'M2.1.2_G2', 'M2.1.2_G3'], ['right', 'M2.1.2_G3', 'M2.1.2_G4'], ['right', 'M2.1.2_G4', 'M2.1.2_G5'], ['left', 'M2.1.2_G5', 'M2.1.2_G4'], ['left', 'M2.1.2_G4', 'M2.1.2_G3'], ['left', 'M2.1.2_G3', 'M2.1.2_G2'], ['left', 'M2.1.2_G2', 'M2.1.2_G1'], ['right', 'M2.1.3_G4', 'M2.1.3_G5'], ['left', 'M2.1.3_G5', 'M2.1.3_G4'], ['right', 'M2.1.4_G1', 'M2.1.4_G2'], ['right', 'M2.1.4_G2', 'M2.1.4_G3'], ['right', 'M2.1.4_G3', 'M2.1.4_G4'], ['left', 'M2.1.4_G4', 'M2.1.4_G3'], ['left', 'M2.1.4_G3', 'M2.1.4_G2'], ['left', 'M2.1.4_G2', 'M2.1.4_G1'], ['right', 'M2.2.1_G2', 'M2.2.1_G3'], ['right', 'M2.2.1_G3', 'M2.2.1_G4'], ['left', 'M2.2.1_G4', 'M2.2.1_G3'], ['left', 'M2.2.1_G3', 'M2.2.1_G2'], ['right', 'M2.2.2_G3', 'M2.2.2_G4'], ['right', 'M2.2.2_G4', 'M2.2.2_G5'], ['right', 'M2.2.2_G5', 'M2.2.2_G6'], ['left', 'M2.2.2_G6', 'M2.2.2_G5'], ['left', 'M2.2.2_G5', 'M2.2.2_G4'], ['left', 'M2.2.2_G4', 'M2.2.2_G3'], ['right', 'M2.2.3_G5', 'M2.2.3_G6'], ['right', 'M2.2.3_G6', 'M2.2.3_G7'], ['right', 'M2.2.3_G7', 'M2.2.3_G8'], ['left', 'M2.2.3_G7', 'M2.2.3_G6'], ['left', 'M2.2.3_G6', 'M2.2.3_G5'], ['right', 'M3.1.1_G1', 'M3.1.1_G2'], ['right', 'M3.1.1_G2', 'M3.1.1_G3'], ['left', 'M3.1.1_G3', 'M3.1.1_G2'], ['left', 'M3.1.1_G2', 'M3.1.1_G1'], ['right', 'G1.1.1_G1', 'G1.1.1_G2'], ['right', 'G1.1.1_G2', 'G1.1.1_G3'], ['right', 'G1.1.1_G3', 'G1.1.1_G4'], ['left', 'G1.1.1_G4', 'G1.1.1_G3'], ['left', 'G1.1.1_G3', 'G1.1.1_G2'], ['left', 'G1.1.1_G2', 'G1.1.1_G1'], ['right', 'G1.1.2_G3', 'G1.1.2_G4'], ['right', 'G1.1.2_G4', 'G1.1.2_G5'], ['right', 'G1.1.2_G5', 'G1.1.2_G6'], ['right', 'G1.1.2_G6', 'G1.1.2_G7'], ['left', 'G1.1.2_G7', 'G1.1.2_G6'], ['left', 'G1.1.2_G6', 'G1.1.2_G5'], ['left', 'G1.1.2_G5', 'G1.1.2_G4'], ['left', 'G1.1.2_G4', 'G1.1.2_G3'], ['right', 'G1.1.3_G6', 'G1.1.3_G7'], ['right', 'G1.1.3_G7', 'G1.1.3_G8'], ['left', 'G1.1.3_G7', 'G1.1.3_G6'], ['right', 'G1.1.4_G1', 'G1.1.4_G2'], ['right', 'G1.1.4_G2', 'G1.1.4_G3'], ['left', 'G1.1.4_G3', 'G1.1.4_G2'], ['left', 'G1.1.4_G2', 'G1.1.4_G1'], ['right', 'G1.1.5_G4', 'G1.1.5_G5'], ['right', 'G1.1.5_G5', 'G1.1.5_G6'], ['right', 'G1.1.5_G6', 'G1.1.5_G7'], ['left', 'G1.1.5_G7', 'G1.1.5_G6'], ['left', 'G1.1.5_G6', 'G1.1.5_G5'], ['left', 'G1.1.5_G5', 'G1.1.5_G4'], ['right', 'G1.1.6_G7', 'G1.1.6_G8'], ['right', 'G1.1.7_G4', 'G1.1.7_G5'], ['right', 'G1.1.7_G5', 'G1.1.7_G6'], ['right', 'G1.1.7_G6', 'G1.1.7_G7'], ['right', 'G1.1.7_G7', 'G1.1.7_G8'], ['left', 'G1.1.7_G7', 'G1.1.7_G6'], ['left', 'G1.1.7_G6', 'G1.1.7_G5'], ['left', 'G1.1.7_G5', 'G1.1.7_G4'], ['right', 'G1.1.8_G7', 'G1.1.8_G8'], ['right', 'G1.1.9_G1', 'G1.1.9_G2'], ['right', 'G1.1.9_G2', 'G1.1.9_G3'], ['left', 'G1.1.9_G3', 'G1.1.9_G2'], ['left', 'G1.1.9_G2', 'G1.1.9_G1'], ['right', 'G1.1.10_G2', 'G1.1.10_G3'], ['right', 'G1.1.10_G3', 'G1.1.10_G4'], ['left', 'G1.1.10_G4', 'G1.1.10_G3'], ['left', 'G1.1.10_G3', 'G1.1.10_G2'], ['right', 'G1.1.11_G3', 'G1.1.11_G4'], ['right', 'G1.1.11_G4', 'G1.1.11_G5'], ['left', 'G1.1.11_G5', 'G1.1.11_G4'], ['left', 'G1.1.11_G4', 'G1.1.11_G3'], ['right', 'G1.1.13_G7', 'G1.1.13_G8'], ['right', 'G2.1.1_G1', 'G2.1.1_G2'], ['right', 'G2.1.1_G2', 'G2.1.1_G3'], ['right', 'G2.1.1_G3', 'G2.1.1_G4'], ['left', 'G2.1.1_G4', 'G2.1.1_G3'], ['left', 'G2.1.1_G3', 'G2.1.1_G2'], ['left', 'G2.1.1_G2', 'G2.1.1_G1'], ['right', 'G2.1.2_G4', 'G2.1.2_G5'], ['right', 'G2.1.2_G5', 'G2.1.2_G6'], ['right', 'G2.1.2_G6', 'G2.1.2_G7'], ['right', 'G2.1.2_G7', 'G2.1.2_G8'], ['left', 'G2.1.2_G7', 'G2.1.2_G6'], ['left', 'G2.1.2_G6', 'G2.1.2_G5'], ['left', 'G2.1.2_G5', 'G2.1.2_G4'], ['right', 'G2.1.3_G5', 'G2.1.3_G6'], ['right', 'G2.1.3_G6', 'G2.1.3_G7'], ['right', 'G2.1.3_G7', 'G2.1.3_G8'], ['left', 'G2.1.3_G7', 'G2.1.3_G6'], ['left', 'G2.1.3_G6', 'G2.1.3_G5'], ['right', 'G3.1.1_G1', 'G3.1.1_G2'], ['right', 'G3.1.1_G2', 'G3.1.1_G3'], ['right', 'G3.1.1_G3', 'G3.1.1_G4'], ['left', 'G3.1.1_G4', 'G3.1.1_G3'], ['left', 'G3.1.1_G3', 'G3.1.1_G2'], ['left', 'G3.1.1_G2', 'G3.1.1_G1'], ['right', 'G3.1.2_G3', 'G3.1.2_G4'], ['right', 'G3.1.2_G4', 'G3.1.2_G5'], ['right', 'G3.1.2_G5', 'G3.1.2_G6'], ['left', 'G3.1.2_G6', 'G3.1.2_G5'], ['left', 'G3.1.2_G5', 'G3.1.2_G4'], ['left', 'G3.1.2_G4', 'G3.1.2_G3'], ['right', 'G3.1.3_G6', 'G3.1.3_G7'], ['right', 'G3.1.3_G7', 'G3.1.3_G8'], ['left', 'G3.1.3_G7', 'G3.1.3_G6'], ['right', 'S1.1.1_G1', 'S1.1.1_G2'], ['left', 'S1.1.1_G2', 'S1.1.1_G1'], ['right', 'S1.1.2_G2', 'S1.1.2_G3'], ['right', 'S1.1.2_G3', 'S1.1.2_G4'], ['right', 'S1.1.2_G4', 'S1.1.2_G5'], ['left', 'S1.1.2_G5', 'S1.1.2_G4'], ['left', 'S1.1.2_G4', 'S1.1.2_G3'], ['left', 'S1.1.2_G3', 'S1.1.2_G2'], ['right', 'S1.1.3_G4', 'S1.1.3_G5'], ['left', 'S1.1.3_G5', 'S1.1.3_G4'], ['right', 'S1.1.4_G4', 'S1.1.4_G5'], ['right', 'S1.1.4_G5', 'S1.1.4_G6'], ['left', 'S1.1.4_G6', 'S1.1.4_G5'], ['left', 'S1.1.4_G5', 'S1.1.4_G4'], ['right', 'S1.1.5_G4', 'S1.1.5_G5'], ['right', 'S1.1.5_G5', 'S1.1.5_G6'], ['right', 'S1.1.5_G6', 'S1.1.5_G7'], ['left', 'S1.1.5_G7', 'S1.1.5_G6'], ['left', 'S1.1.5_G6', 'S1.1.5_G5'], ['left', 'S1.1.5_G5', 'S1.1.5_G4'], ['right', 'S1.1.6_G6', 'S1.1.6_G7'], ['right', 'S1.1.6_G7', 'S1.1.6_G8'], ['left', 'S1.1.6_G7', 'S1.1.6_G6'], ['right', 'S1.2.1_G7', 'S1.2.1_G8'], ['right', 'S1.2.2_G7', 'S1.2.2_G8'], ['right', 'S2.1.1_G5', 'S2.1.1_G6'], ['right', 'S2.1.1_G6', 'S2.1.1_G7'], ['left', 'S2.1.1_G7', 'S2.1.1_G6'], ['left', 'S2.1.1_G6', 'S2.1.1_G5'], ['right', 'S2.1.2_G6', 'S2.1.2_G7'], ['right', 'S2.1.2_G7', 'S2.1.2_G8'], ['left', 'S2.1.2_G7', 'S2.1.2_G6'], ['right', 'S2.1.3_G7', 'S2.1.3_G8'], ['right', 'A1.1.1_G1', 'A1.1.1_G2'], ['right', 'A1.1.1_G2', 'A1.1.1_G3'], ['right', 'A1.1.1_G3', 'A1.1.1_G4'], ['left', 'A1.1.1_G4', 'A1.1.1_G3'], ['left', 'A1.1.1_G3', 'A1.1.1_G2'], ['left', 'A1.1.1_G2', 'A1.1.1_G1'], ['right', 'A1.1.2_G3', 'A1.1.2_G4'], ['right', 'A1.1.2_G4', 'A1.1.2_G5'], ['right', 'A1.1.2_G5', 'A1.1.2_G6'], ['left', 'A1.1.2_G6', 'A1.1.2_G5'], ['left', 'A1.1.2_G5', 'A1.1.2_G4'], ['left', 'A1.1.2_G4', 'A1.1.2_G3'], ['right', 'A1.1.3_G5', 'A1.1.3_G6'], ['right', 'A1.1.3_G6', 'A1.1.3_G7'], ['left', 'A1.1.3_G7', 'A1.1.3_G6'], ['left', 'A1.1.3_G6', 'A1.1.3_G5'], ['right', 'A1.1.4_G6', 'A1.1.4_G7'], ['left', 'A1.1.4_G7', 'A1.1.4_G6'], ['right', 'A2.1.1_G7', 'A2.1.1_G8'], ['right', 'A2.1.2_G7', 'A2.1.2_G8'], ['right', 'A2.1.3_G7', 'A2.1.3_G8'], ['right', 'A3.1.1_G6', 'A3.1.1_G7'], ['right', 'A3.1.1_G7', 'A3.1.1_G8'], ['left', 'A3.1.1_G7', 'A3.1.1_G6'], ['right', 'A3.1.2_G7', 'A3.1.2_G8'], ['right', 'A3.1.3_G7', 'A3.1.3_G8'], ['right', 'A3.2.1_G2', 'A3.2.1_G3'], ['right', 'A3.2.1_G3', 'A3.2.1_G4'], ['right', 'A3.2.1_G4', 'A3.2.1_G5'], ['left', 'A3.2.1_G5', 'A3.2.1_G4'], ['left', 'A3.2.1_G4', 'A3.2.1_G3'], ['left', 'A3.2.1_G3', 'A3.2.1_G2'], ['right', 'A3.2.2_G3', 'A3.2.2_G4'], ['right', 'A3.2.2_G4', 'A3.2.2_G5'], ['right', 'A3.2.2_G5', 'A3.2.2_G6'], ['left', 'A3.2.2_G6', 'A3.2.2_G5'], ['left', 'A3.2.2_G5', 'A3.2.2_G4'], ['left', 'A3.2.2_G4', 'A3.2.2_G3'], ['right', 'A3.2.3_G2', 'A3.2.3_G3'], ['right', 'A3.2.3_G3', 'A3.2.3_G4'], ['right', 'A3.2.3_G4', 'A3.2.3_G5'], ['right', 'A3.2.3_G5', 'A3.2.3_G6'], ['left', 'A3.2.3_G6', 'A3.2.3_G5'], ['left', 'A3.2.3_G5', 'A3.2.3_G4'], ['left', 'A3.2.3_G4', 'A3.2.3_G3'], ['left', 'A3.2.3_G3', 'A3.2.3_G2'], ['right', 'A3.3.1_G7', 'A3.3.1_G8'], ['down', 'N1.1.1_G1', 'N1.1.2_G1'], ['down', 'N1.1.2_G1', 'N1.2.1_G1'], ['down', 'N1.2.1_G1', 'N1.3.1_G1'], ['down', 'N1.3.1_G1', 'N1.3.2_G1'], ['down', 'N1.3.2_G1', 'N1.4.1_G1'], ['down', 'N1.4.1_G1', 'M1.1.1_G1'], ['down', 'M1.1.1_G1', 'M2.1.1_G1'], ['down', 'M2.1.1_G1', 'M2.1.2_G1'], ['down', 'M2.1.2_G1', 'M2.1.4_G1'], ['down', 'M2.1.4_G1', 'M3.1.1_G1'], ['down', 'M3.1.1_G1', 'G1.1.1_G1'], ['down', 'G1.1.1_G1', 'G1.1.4_G1'], ['down', 'G1.1.4_G1', 'G1.1.9_G1'], ['down', 'G1.1.9_G1', 'G2.1.1_G1'], ['down', 'G2.1.1_G1', 'G3.1.1_G1'], ['down', 'G3.1.1_G1', 'S1.1.1_G1'], ['down', 'S1.1.1_G1', 'A1.1.1_G1'], ['down', 'A1.1.1_G1', 'N1.1.1_G1'], ['down', 'N1.1.1_G2', 'N1.1.2_G2'], ['down', 'N1.1.2_G2', 'N1.1.3_G2'], ['down', 'N1.1.3_G2', 'N1.2.1_G2'], ['down', 'N1.2.1_G2', 'N1.2.2_G2'], ['down', 'N1.2.2_G2', 'N1.3.1_G2'], ['down', 'N1.3.1_G2', 'N1.3.2_G2'], ['down', 'N1.3.2_G2', 'N1.3.7_G2'], ['down', 'N1.3.7_G2', 'N1.4.1_G2'], ['down', 'N1.4.1_G2', 'M1.1.1_G2'], ['down', 'M1.1.1_G2', 'M1.1.2_G2'], ['down', 'M1.1.2_G2', 'M2.1.1_G2'], ['down', 'M2.1.1_G2', 'M2.1.2_G2'], ['down', 'M2.1.2_G2', 'M2.1.4_G2'], ['down', 'M2.1.4_G2', 'M2.2.1_G2'], ['down', 'M2.2.1_G2', 'M3.1.1_G2'], ['down', 'M3.1.1_G2', 'G1.1.1_G2'], ['down', 'G1.1.1_G2', 'G1.1.4_G2'], ['down', 'G1.1.4_G2', 'G1.1.9_G2'], ['down', 'G1.1.9_G2', 'G1.1.10_G2'], ['down', 'G1.1.10_G2', 'G2.1.1_G2'], ['down', 'G2.1.1_G2', 'G3.1.1_G2'], ['down', 'G3.1.1_G2', 'S1.1.1_G2'], ['down', 'S1.1.1_G2', 'S1.1.2_G2'], ['down', 'S1.1.2_G2', 'A1.1.1_G2'], ['down', 'A1.1.1_G2', 'A3.2.1_G2'], ['down', 'A3.2.1_G2', 'A3.2.3_G2'], ['down', 'A3.2.3_G2', 'N1.1.1_G2'], ['down', 'N1.1.1_G3', 'N1.1.2_G3'], ['down', 'N1.1.2_G3', 'N1.1.3_G3'], ['down', 'N1.1.3_G3', 'N1.2.1_G3'], ['down', 'N1.2.1_G3', 'N1.2.2_G3'], ['down', 'N1.2.2_G3', 'N1.3.1_G3'], ['down', 'N1.3.1_G3', 'N1.3.3_G3'], ['down', 'N1.3.3_G3', 'N1.3.4_G3'], ['down', 'N1.3.4_G3', 'N1.3.7_G3'], ['down', 'N1.3.7_G3', 'N1.4.1_G3'], ['down', 'N1.4.1_G3', 'N2.1.1_G3'], ['down', 'N2.1.1_G3', 'M1.1.1_G3'], ['down', 'M1.1.1_G3', 'M1.1.2_G3'], ['down', 'M1.1.2_G3', 'M2.1.2_G3'], ['down', 'M2.1.2_G3', 'M2.1.4_G3'], ['down', 'M2.1.4_G3', 'M2.2.1_G3'], ['down', 'M2.2.1_G3', 'M2.2.2_G3'], ['down', 'M2.2.2_G3', 'M3.1.1_G3'], ['down', 'M3.1.1_G3', 'G1.1.1_G3'], ['down', 'G1.1.1_G3', 'G1.1.2_G3'], ['down', 'G1.1.2_G3', 'G1.1.4_G3'], ['down', 'G1.1.4_G3', 'G1.1.9_G3'], ['down', 'G1.1.9_G3', 'G1.1.10_G3'], ['down', 'G1.1.10_G3', 'G1.1.11_G3'], ['down', 'G1.1.11_G3', 'G2.1.1_G3'], ['down', 'G2.1.1_G3', 'G3.1.1_G3'], ['down', 'G3.1.1_G3', 'G3.1.2_G3'], ['down', 'G3.1.2_G3', 'S1.1.2_G3'], ['down', 'S1.1.2_G3', 'A1.1.1_G3'], ['down', 'A1.1.1_G3', 'A1.1.2_G3'], ['down', 'A1.1.2_G3', 'A3.2.1_G3'], ['down', 'A3.2.1_G3', 'A3.2.2_G3'], ['down', 'A3.2.2_G3', 'A3.2.3_G3'], ['down', 'A3.2.3_G3', 'N1.1.1_G3'], ['down', 'N1.1.1_G4', 'N1.1.2_G4'], ['down', 'N1.1.2_G4', 'N1.1.3_G4'], ['down', 'N1.1.3_G4', 'N1.2.2_G4'], ['down', 'N1.2.2_G4', 'N1.3.1_G4'], ['down', 'N1.3.1_G4', 'N1.3.3_G4'], ['down', 'N1.3.3_G4', 'N1.3.5_G4'], ['down', 'N1.3.5_G4', 'N1.3.7_G4'], ['down', 'N1.3.7_G4', 'N1.4.1_G4'], ['down', 'N1.4.1_G4', 'N1.4.2_G4'], ['down', 'N1.4.2_G4', 'N2.1.1_G4'], ['down', 'N2.1.1_G4', 'N2.1.2_G4'], ['down', 'N2.1.2_G4', 'N2.1.4_G4'], ['down', 'N2.1.4_G4', 'N2.2.1_G4'], ['down', 'N2.2.1_G4', 'N2.3.1_G4'], ['down', 'N2.3.1_G4', 'M1.1.1_G4'], ['down', 'M1.1.1_G4', 'M1.1.2_G4'], ['down', 'M1.1.2_G4', 'M1.1.3_G4'], ['down', 'M1.1.3_G4', 'M1.2.1_G4'], ['down', 'M1.2.1_G4', 'M1.2.3_G4'], ['down', 'M1.2.3_G4', 'M2.1.2_G4'], ['down', 'M2.1.2_G4', 'M2.1.3_G4'], ['down', 'M2.1.3_G4', 'M2.1.4_G4'], ['down', 'M2.1.4_G4', 'M2.2.1_G4'], ['down', 'M2.2.1_G4', 'M2.2.2_G4'], ['down', 'M2.2.2_G4', 'G1.1.1_G4'], ['down', 'G1.1.1_G4', 'G1.1.2_G4'], ['down', 'G1.1.2_G4', 'G1.1.5_G4'], ['down', 'G1.1.5_G4', 'G1.1.7_G4'], ['down', 'G1.1.7_G4', 'G1.1.10_G4'], ['down', 'G1.1.10_G4', 'G1.1.11_G4'], ['down', 'G1.1.11_G4', 'G2.1.1_G4'], ['down', 'G2.1.1_G4', 'G2.1.2_G4'], ['down', 'G2.1.2_G4', 'G3.1.1_G4'], ['down', 'G3.1.1_G4', 'G3.1.2_G4'], ['down', 'G3.1.2_G4', 'S1.1.2_G4'], ['down', 'S1.1.2_G4', 'S1.1.3_G4'], ['down', 'S1.1.3_G4', 'S1.1.4_G4'], ['down', 'S1.1.4_G4', 'S1.1.5_G4'], ['down', 'S1.1.5_G4', 'A1.1.1_G4'], ['down', 'A1.1.1_G4', 'A1.1.2_G4'], ['down', 'A1.1.2_G4', 'A3.2.1_G4'], ['down', 'A3.2.1_G4', 'A3.2.2_G4'], ['down', 'A3.2.2_G4', 'A3.2.3_G4'], ['down', 'A3.2.3_G4', 'N1.1.1_G4'], ['down', 'N1.1.1_G5', 'N1.1.2_G5'], ['down', 'N1.1.2_G5', 'N1.1.3_G5'], ['down', 'N1.1.3_G5', 'N1.2.2_G5'], ['down', 'N1.2.2_G5', 'N1.2.3_G5'], ['down', 'N1.2.3_G5', 'N1.3.1_G5'], ['down', 'N1.3.1_G5', 'N1.3.3_G5'], ['down', 'N1.3.3_G5', 'N1.3.6_G5'], ['down', 'N1.3.6_G5', 'N1.3.7_G5'], ['down', 'N1.3.7_G5', 'N1.4.1_G5'], ['down', 'N1.4.1_G5', 'N1.4.2_G5'], ['down', 'N1.4.2_G5', 'N2.1.2_G5'], ['down', 'N2.1.2_G5', 'N2.1.3_G5'], ['down', 'N2.1.3_G5', 'N2.1.4_G5'], ['down', 'N2.1.4_G5', 'N2.2.1_G5'], ['down', 'N2.2.1_G5', 'N2.2.2_G5'], ['down', 'N2.2.2_G5', 'N2.2.3_G5'], ['down', 'N2.2.3_G5', 'N2.3.1_G5'], ['down', 'N2.3.1_G5', 'N2.3.2_G5'], ['down', 'N2.3.2_G5', 'N3.1.1_G5'], ['down', 'N3.1.1_G5', 'N3.1.2_G5'], ['down', 'N3.1.2_G5', 'N3.2.1_G5'], ['down', 'N3.2.1_G5', 'N3.2.2_G5'], ['down', 'N3.2.2_G5', 'N3.3.1_G5'], ['down', 'N3.3.1_G5', 'M1.1.2_G5'], ['down', 'M1.1.2_G5', 'M1.1.3_G5'], ['down', 'M1.1.3_G5', 'M1.1.4_G5'], ['down', 'M1.1.4_G5', 'M1.2.1_G5'], ['down', 'M1.2.1_G5', 'M1.2.3_G5'], ['down', 'M1.2.3_G5', 'M2.1.2_G5'], ['down', 'M2.1.2_G5', 'M2.1.3_G5'], ['down', 'M2.1.3_G5', 'M2.2.2_G5'], ['down', 'M2.2.2_G5', 'M2.2.3_G5'], ['down', 'M2.2.3_G5', 'G1.1.2_G5'], ['down', 'G1.1.2_G5', 'G1.1.5_G5'], ['down', 'G1.1.5_G5', 'G1.1.7_G5'], ['down', 'G1.1.7_G5', 'G1.1.11_G5'], ['down', 'G1.1.11_G5', 'G2.1.2_G5'], ['down', 'G2.1.2_G5', 'G2.1.3_G5'], ['down', 'G2.1.3_G5', 'G3.1.2_G5'], ['down', 'G3.1.2_G5', 'S1.1.2_G5'], ['down', 'S1.1.2_G5', 'S1.1.3_G5'], ['down', 'S1.1.3_G5', 'S1.1.4_G5'], ['down', 'S1.1.4_G5', 'S1.1.5_G5'], ['down', 'S1.1.5_G5', 'S2.1.1_G5'], ['down', 'S2.1.1_G5', 'A1.1.2_G5'], ['down', 'A1.1.2_G5', 'A1.1.3_G5'], ['down', 'A1.1.3_G5', 'A3.2.1_G5'], ['down', 'A3.2.1_G5', 'A3.2.2_G5'], ['down', 'A3.2.2_G5', 'A3.2.3_G5'], ['down', 'A3.2.3_G5', 'N1.1.1_G5'], ['down', 'N1.1.1_G6', 'N1.1.2_G6'], ['down', 'N1.1.2_G6', 'N1.1.3_G6'], ['down', 'N1.1.3_G6', 'N1.2.2_G6'], ['down', 'N1.2.2_G6', 'N1.2.3_G6'], ['down', 'N1.2.3_G6', 'N1.3.1_G6'], ['down', 'N1.3.1_G6', 'N1.3.3_G6'], ['down', 'N1.3.3_G6', 'N1.3.6_G6'], ['down', 'N1.3.6_G6', 'N1.3.7_G6'], ['down', 'N1.3.7_G6', 'N1.4.2_G6'], ['down', 'N1.4.2_G6', 'N2.1.2_G6'], ['down', 'N2.1.2_G6', 'N2.1.3_G6'], ['down', 'N2.1.3_G6', 'N2.1.4_G6'], ['down', 'N2.1.4_G6', 'N2.2.1_G6'], ['down', 'N2.2.1_G6', 'N2.2.2_G6'], ['down', 'N2.2.2_G6', 'N2.2.3_G6'], ['down', 'N2.2.3_G6', 'N2.3.1_G6'], ['down', 'N2.3.1_G6', 'N2.3.2_G6'], ['down', 'N2.3.2_G6', 'N3.1.1_G6'], ['down', 'N3.1.1_G6', 'N3.1.2_G6'], ['down', 'N3.1.2_G6', 'N3.2.1_G6'], ['down', 'N3.2.1_G6', 'N3.2.2_G6'], ['down', 'N3.2.2_G6', 'N3.2.3_G6'], ['down', 'N3.2.3_G6', 'N3.3.1_G6'], ['down', 'N3.3.1_G6', 'N3.4.1_G6'], ['down', 'N3.4.1_G6', 'M1.1.3_G6'], ['down', 'M1.1.3_G6', 'M1.1.4_G6'], ['down', 'M1.1.4_G6', 'M1.2.1_G6'], ['down', 'M1.2.1_G6', 'M1.2.3_G6'], ['down', 'M1.2.3_G6', 'M2.2.2_G6'], ['down', 'M2.2.2_G6', 'M2.2.3_G6'], ['down', 'M2.2.3_G6', 'G1.1.2_G6'], ['down', 'G1.1.2_G6', 'G1.1.3_G6'], ['down', 'G1.1.3_G6', 'G1.1.5_G6'], ['down', 'G1.1.5_G6', 'G1.1.7_G6'], ['down', 'G1.1.7_G6', 'G2.1.2_G6'], ['down', 'G2.1.2_G6', 'G2.1.3_G6'], ['down', 'G2.1.3_G6', 'G3.1.2_G6'], ['down', 'G3.1.2_G6', 'G3.1.3_G6'], ['down', 'G3.1.3_G6', 'S1.1.4_G6'], ['down', 'S1.1.4_G6', 'S1.1.5_G6'], ['down', 'S1.1.5_G6', 'S1.1.6_G6'], ['down', 'S1.1.6_G6', 'S2.1.1_G6'], ['down', 'S2.1.1_G6', 'S2.1.2_G6'], ['down', 'S2.1.2_G6', 'A1.1.2_G6'], ['down', 'A1.1.2_G6', 'A1.1.3_G6'], ['down', 'A1.1.3_G6', 'A1.1.4_G6'], ['down', 'A1.1.4_G6', 'A3.1.1_G6'], ['down', 'A3.1.1_G6', 'A3.2.2_G6'], ['down', 'A3.2.2_G6', 'A3.2.3_G6'], ['down', 'A3.2.3_G6', 'N2.1.2_G6'], ['down', 'N2.1.2_G7', 'N2.1.3_G7'], ['down', 'N2.1.3_G7', 'N2.1.4_G7'], ['down', 'N2.1.4_G7', 'N2.2.2_G7'], ['down', 'N2.2.2_G7', 'N2.2.3_G7'], ['down', 'N2.2.3_G7', 'N2.3.1_G7'], ['down', 'N2.3.1_G7', 'N2.3.2_G7'], ['down', 'N2.3.2_G7', 'N3.1.1_G7'], ['down', 'N3.1.1_G7', 'N3.1.2_G7'], ['down', 'N3.1.2_G7', 'N3.2.1_G7'], ['down', 'N3.2.1_G7', 'N3.2.2_G7'], ['down', 'N3.2.2_G7', 'N3.2.3_G7'], ['down', 'N3.2.3_G7', 'N3.2.4_G7'], ['down', 'N3.2.4_G7', 'N3.3.1_G7'], ['down', 'N3.3.1_G7', 'N3.3.2_G7'], ['down', 'N3.3.2_G7', 'N3.4.1_G7'], ['down', 'N3.4.1_G7', 'N4.1.1_G7'], ['down', 'N4.1.1_G7', 'N4.2.1_G7'], ['down', 'N4.2.1_G7', 'N4.2.3_G7'], ['down', 'N4.2.3_G7', 'N4.3.1_G7'], ['down', 'N4.3.1_G7', 'N5.1.1_G7'], ['down', 'N5.1.1_G7', 'N5.1.2_G7'], ['down', 'N5.1.2_G7', 'N5.1.3_G7'], ['down', 'N5.1.3_G7', 'M1.1.3_G7'], ['down', 'M1.1.3_G7', 'M1.1.4_G7'], ['down', 'M1.1.4_G7', 'M1.2.1_G7'], ['down', 'M1.2.1_G7', 'M1.2.3_G7'], ['down', 'M1.2.3_G7', 'M1.2.4_G7'], ['down', 'M1.2.4_G7', 'M1.2.7_G7'], ['down', 'M1.2.7_G7', 'M2.2.3_G7'], ['down', 'M2.2.3_G7', 'G1.1.2_G7'], ['down', 'G1.1.2_G7', 'G1.1.3_G7'], ['down', 'G1.1.3_G7', 'G1.1.5_G7'], ['down', 'G1.1.5_G7', 'G1.1.6_G7'], ['down', 'G1.1.6_G7', 'G1.1.7_G7'], ['down', 'G1.1.7_G7', 'G1.1.8_G7'], ['down', 'G1.1.8_G7', 'G1.1.13_G7'], ['down', 'G1.1.13_G7', 'G2.1.2_G7'], ['down', 'G2.1.2_G7', 'G2.1.3_G7'], ['down', 'G2.1.3_G7', 'G3.1.3_G7'], ['down', 'G3.1.3_G7', 'S1.1.5_G7'], ['down', 'S1.1.5_G7', 'S1.1.6_G7'], ['down', 'S1.1.6_G7', 'S1.2.1_G7'], ['down', 'S1.2.1_G7', 'S1.2.2_G7'], ['down', 'S1.2.2_G7', 'S2.1.1_G7'], ['down', 'S2.1.1_G7', 'S2.1.2_G7'], ['down', 'S2.1.2_G7', 'S2.1.3_G7'], ['down', 'S2.1.3_G7', 'A1.1.3_G7'], ['down', 'A1.1.3_G7', 'A1.1.4_G7'], ['down', 'A1.1.4_G7', 'A2.1.1_G7'], ['down', 'A2.1.1_G7', 'A2.1.2_G7'], ['down', 'A2.1.2_G7', 'A2.1.3_G7'], ['down', 'A2.1.3_G7', 'A3.1.1_G7'], ['down', 'A3.1.1_G7', 'A3.1.2_G7'], ['down', 'A3.1.2_G7', 'A3.1.3_G7'], ['down', 'A3.1.3_G7', 'A3.3.1_G7'], ['down', 'A3.3.1_G7', 'N3.2.1_G7'], ['down', 'N3.2.1_G8', 'N3.2.2_G8'], ['down', 'N3.2.2_G8', 'N3.2.3_G8'], ['down', 'N3.2.3_G8', 'N3.2.4_G8'], ['down', 'N3.2.4_G8', 'N3.3.1_G8'], ['down', 'N3.3.1_G8', 'N3.3.2_G8'], ['down', 'N3.3.2_G8', 'N3.4.1_G8'], ['down', 'N3.4.1_G8', 'N4.2.1_G8'], ['down', 'N4.2.1_G8', 'N4.2.2_G8'], ['down', 'N4.2.2_G8', 'N4.2.3_G8'], ['down', 'N4.2.3_G8', 'N4.3.1_G8'], ['down', 'N4.3.1_G8', 'N5.1.1_G8'], ['down', 'N5.1.1_G8', 'N5.1.2_G8'], ['down', 'N5.1.2_G8', 'N5.1.3_G8'], ['down', 'N5.1.3_G8', 'N5.2.1_G8'], ['down', 'N5.2.1_G8', 'N6.1.1_G8'], ['down', 'N6.1.1_G8', 'M1.1.3_G8'], ['down', 'M1.1.3_G8', 'M1.2.1_G8'], ['down', 'M1.2.1_G8', 'M1.2.2_G8'], ['down', 'M1.2.2_G8', 'M1.2.4_G8'], ['down', 'M1.2.4_G8', 'M1.2.5_G8'], ['down', 'M1.2.5_G8', 'M1.2.6_G8'], ['down', 'M1.2.6_G8', 'M1.2.7_G8'], ['down', 'M1.2.7_G8', 'M2.2.3_G8'], ['down', 'M2.2.3_G8', 'G1.1.3_G8'], ['down', 'G1.1.3_G8', 'G1.1.6_G8'], ['down', 'G1.1.6_G8', 'G1.1.7_G8'], ['down', 'G1.1.7_G8', 'G1.1.8_G8'], ['down', 'G1.1.8_G8', 'G1.1.13_G8'], ['down', 'G1.1.13_G8', 'G2.1.2_G8'], ['down', 'G2.1.2_G8', 'G2.1.3_G8'], ['down', 'G2.1.3_G8', 'G3.1.3_G8'], ['down', 'G3.1.3_G8', 'G3.1.4_G8'], ['down', 'G3.1.4_G8', 'S1.1.6_G8'], ['down', 'S1.1.6_G8', 'S1.2.1_G8'], ['down', 'S1.2.1_G8', 'S1.2.2_G8'], ['down', 'S1.2.2_G8', 'S1.2.3_G8'], ['down', 'S1.2.3_G8', 'S2.1.2_G8'], ['down', 'S2.1.2_G8', 'S2.1.3_G8'], ['down', 'S2.1.3_G8', 'S2.2.1_G8'], ['down', 'S2.2.1_G8', 'A2.1.1_G8'], ['down', 'A2.1.1_G8', 'A2.1.2_G8'], ['down', 'A2.1.2_G8', 'A2.1.3_G8'], ['down', 'A2.1.3_G8', 'A2.1.4_G8'], ['down', 'A2.1.4_G8', 'A3.1.1_G8'], ['down', 'A3.1.1_G8', 'A3.1.2_G8'], ['down', 'A3.1.2_G8', 'A3.1.3_G8'], ['down', 'A3.1.3_G8', 'A3.3.1_G8'], ['down', 'A3.3.1_G8', 'A3.3.2_G8'], ['down', 'A3.3.2_G8', 'A3.3.3_G8'], ['down', 'A3.3.3_G8', 'N5.1.2_G8'], ['down', 'N5.1.2_G9', 'N5.1.3_G9'], ['down', 'N5.1.3_G9', 'N5.2.1_G9'], ['down', 'N5.2.1_G9', 'N6.1.1_G9'], ['down', 'N6.1.1_G9', 'M1.2.2_G9'], ['down', 'M1.2.2_G9', 'M1.2.4_G9'], ['down', 'M1.2.4_G9', 'M1.2.5_G9'], ['down', 'M1.2.5_G9', 'M1.2.6_G9'], ['down', 'M1.2.6_G9', 'M1.2.7_G9'], ['down', 'M1.2.7_G9', 'M1.2.9_G9'], ['down', 'M1.2.9_G9', 'M2.2.3_G9'], ['down', 'M2.2.3_G9', 'G1.1.6_G9'], ['down', 'G1.1.6_G9', 'G1.1.8_G9'], ['down', 'G1.1.8_G9', 'G1.1.12_G9'], ['down', 'G1.1.12_G9', 'G1.1.13_G9'], ['down', 'G1.1.13_G9', 'G2.1.2_G9'], ['down', 'G2.1.2_G9', 'G2.1.3_G9'], ['down', 'G2.1.3_G9', 'G3.1.3_G9'], ['down', 'G3.1.3_G9', 'G3.1.4_G9'], ['down', 'G3.1.4_G9', 'S1.1.6_G9'], ['down', 'S1.1.6_G9', 'S1.1.8_G9'], ['down', 'S1.1.8_G9', 'S1.2.1_G9'], ['down', 'S1.2.1_G9', 'S1.2.2_G9'], ['down', 'S1.2.2_G9', 'S1.2.3_G9'], ['down', 'S1.2.3_G9', 'S1.2.4_G9'], ['down', 'S1.2.4_G9', 'S2.1.3_G9'], ['down', 'S2.1.3_G9', 'S2.1.4_G9'], ['down', 'S2.1.4_G9', 'S2.2.1_G9'], ['down', 'S2.2.1_G9', 'S2.2.2_G9'], ['down', 'S2.2.2_G9', 'A2.1.1_G9'], ['down', 'A2.1.1_G9', 'A2.1.3_G9'], ['down', 'A2.1.3_G9', 'A2.1.4_G9'], ['down', 'A2.1.4_G9', 'A3.1.2_G9'], ['down', 'A3.1.2_G9', 'A3.1.3_G9'], ['down', 'A3.1.3_G9', 'A3.3.1_G9'], ['down', 'A3.3.1_G9', 'A3.3.2_G9'], ['down', 'A3.3.2_G9', 'A3.3.3_G9'], ['down', 'A3.3.3_G9', 'A3.3.4_G9'], ['down', 'A3.3.4_G9', 'A3.3.5_G9'], ['down', 'A3.3.5_G9', 'A3.4.1_G9'], ['down', 'A3.4.1_G9', 'A3.4.2_G9'], ['up', 'A3.4.2_G9', 'A3.4.1_G9'], ['up', 'A3.4.1_G9', 'A3.3.5_G9'], ['up', 'A3.3.5_G9', 'A3.3.4_G9'], ['up', 'A3.3.4_G9', 'A3.3.3_G9'], ['up', 'A3.3.3_G9', 'A3.3.2_G9'], ['up', 'A3.3.2_G9', 'A3.3.1_G9'], ['up', 'A3.3.1_G9', 'A3.1.3_G9'], ['up', 'A3.1.3_G9', 'A3.1.2_G9'], ['up', 'A3.1.2_G9', 'A2.1.4_G9'], ['up', 'A2.1.4_G9', 'A2.1.3_G9'], ['up', 'A2.1.3_G9', 'A2.1.1_G9'], ['up', 'A2.1.1_G9', 'S2.2.2_G9'], ['up', 'S2.2.2_G9', 'S2.2.1_G9'], ['up', 'S2.2.1_G9', 'S2.1.4_G9'], ['up', 'S2.1.4_G9', 'S2.1.3_G9'], ['up', 'S2.1.3_G9', 'S1.2.4_G9'], ['up', 'S1.2.4_G9', 'S1.2.3_G9'], ['up', 'S1.2.3_G9', 'S1.2.2_G9'], ['up', 'S1.2.2_G9', 'S1.2.1_G9'], ['up', 'S1.2.1_G9', 'S1.1.8_G9'], ['up', 'S1.1.8_G9', 'S1.1.6_G9'], ['up', 'S1.1.6_G9', 'G3.1.4_G9'], ['up', 'G3.1.4_G9', 'G3.1.3_G9'], ['up', 'G3.1.3_G9', 'G2.1.3_G9'], ['up', 'G2.1.3_G9', 'G2.1.2_G9'], ['up', 'G2.1.2_G9', 'G1.1.13_G9'], ['up', 'G1.1.13_G9', 'G1.1.12_G9'], ['up', 'G1.1.12_G9', 'G1.1.8_G9'], ['up', 'G1.1.8_G9', 'G1.1.6_G9'], ['up', 'G1.1.6_G9', 'M2.2.3_G9'], ['up', 'M2.2.3_G9', 'M1.2.9_G9'], ['up', 'M1.2.9_G9', 'M1.2.7_G9'], ['up', 'M1.2.7_G9', 'M1.2.6_G9'], ['up', 'M1.2.6_G9', 'M1.2.5_G9'], ['up', 'M1.2.5_G9', 'M1.2.4_G9'], ['up', 'M1.2.4_G9', 'M1.2.2_G9'], ['up', 'M1.2.2_G9', 'N6.1.1_G9'], ['up', 'N6.1.1_G9', 'N5.2.1_G9'], ['up', 'N5.2.1_G9', 'N5.1.3_G9'], ['up', 'N5.1.3_G9', 'N5.1.2_G9'], ['up', 'N5.1.2_G9', 'A3.3.3_G9'], ['up', 'A3.3.3_G8', 'A3.3.2_G8'], ['up', 'A3.3.2_G8', 'A3.3.1_G8'], ['up', 'A3.3.1_G8', 'A3.1.3_G8'], ['up', 'A3.1.3_G8', 'A3.1.2_G8'], ['up', 'A3.1.2_G8', 'A3.1.1_G8'], ['up', 'A3.1.1_G8', 'A2.1.4_G8'], ['up', 'A2.1.4_G8', 'A2.1.3_G8'], ['up', 'A2.1.3_G8', 'A2.1.2_G8'], ['up', 'A2.1.2_G8', 'A2.1.1_G8'], ['up', 'A2.1.1_G8', 'S2.2.1_G8'], ['up', 'S2.2.1_G8', 'S2.1.3_G8'], ['up', 'S2.1.3_G8', 'S2.1.2_G8'], ['up', 'S2.1.2_G8', 'S1.2.3_G8'], ['up', 'S1.2.3_G8', 'S1.2.2_G8'], ['up', 'S1.2.2_G8', 'S1.2.1_G8'], ['up', 'S1.2.1_G8', 'S1.1.6_G8'], ['up', 'S1.1.6_G8', 'G3.1.4_G8'], ['up', 'G3.1.4_G8', 'G3.1.3_G8'], ['up', 'G3.1.3_G8', 'G2.1.3_G8'], ['up', 'G2.1.3_G8', 'G2.1.2_G8'], ['up', 'G2.1.2_G8', 'G1.1.13_G8'], ['up', 'G1.1.13_G8', 'G1.1.8_G8'], ['up', 'G1.1.8_G8', 'G1.1.7_G8'], ['up', 'G1.1.7_G8', 'G1.1.6_G8'], ['up', 'G1.1.6_G8', 'G1.1.3_G8'], ['up', 'G1.1.3_G8', 'M2.2.3_G8'], ['up', 'M2.2.3_G8', 'M1.2.7_G8'], ['up', 'M1.2.7_G8', 'M1.2.6_G8'], ['up', 'M1.2.6_G8', 'M1.2.5_G8'], ['up', 'M1.2.5_G8', 'M1.2.4_G8'], ['up', 'M1.2.4_G8', 'M1.2.2_G8'], ['up', 'M1.2.2_G8', 'M1.2.1_G8'], ['up', 'M1.2.1_G8', 'M1.1.3_G8'], ['up', 'M1.1.3_G8', 'N6.1.1_G8'], ['up', 'N6.1.1_G8', 'N5.2.1_G8'], ['up', 'N5.2.1_G8', 'N5.1.3_G8'], ['up', 'N5.1.3_G8', 'N5.1.2_G8'], ['up', 'N5.1.2_G8', 'N5.1.1_G8'], ['up', 'N5.1.1_G8', 'N4.3.1_G8'], ['up', 'N4.3.1_G8', 'N4.2.3_G8'], ['up', 'N4.2.3_G8', 'N4.2.2_G8'], ['up', 'N4.2.2_G8', 'N4.2.1_G8'], ['up', 'N4.2.1_G8', 'N3.4.1_G8'], ['up', 'N3.4.1_G8', 'N3.3.2_G8'], ['up', 'N3.3.2_G8', 'N3.3.1_G8'], ['up', 'N3.3.1_G8', 'N3.2.4_G8'], ['up', 'N3.2.4_G8', 'N3.2.3_G8'], ['up', 'N3.2.3_G8', 'N3.2.2_G8'], ['up', 'N3.2.2_G8', 'N3.2.1_G8'], ['up', 'N3.2.1_G8', 'A3.3.1_G8'], ['up', 'A3.3.1_G7', 'A3.1.3_G7'], ['up', 'A3.1.3_G7', 'A3.1.2_G7'], ['up', 'A3.1.2_G7', 'A3.1.1_G7'], ['up', 'A3.1.1_G7', 'A2.1.3_G7'], ['up', 'A2.1.3_G7', 'A2.1.2_G7'], ['up', 'A2.1.2_G7', 'A2.1.1_G7'], ['up', 'A2.1.1_G7', 'A1.1.4_G7'], ['up', 'A1.1.4_G7', 'A1.1.3_G7'], ['up', 'A1.1.3_G7', 'S2.1.3_G7'], ['up', 'S2.1.3_G7', 'S2.1.2_G7'], ['up', 'S2.1.2_G7', 'S2.1.1_G7'], ['up', 'S2.1.1_G7', 'S1.2.2_G7'], ['up', 'S1.2.2_G7', 'S1.2.1_G7'], ['up', 'S1.2.1_G7', 'S1.1.6_G7'], ['up', 'S1.1.6_G7', 'S1.1.5_G7'], ['up', 'S1.1.5_G7', 'G3.1.3_G7'], ['up', 'G3.1.3_G7', 'G2.1.3_G7'], ['up', 'G2.1.3_G7', 'G2.1.2_G7'], ['up', 'G2.1.2_G7', 'G1.1.13_G7'], ['up', 'G1.1.13_G7', 'G1.1.8_G7'], ['up', 'G1.1.8_G7', 'G1.1.7_G7'], ['up', 'G1.1.7_G7', 'G1.1.6_G7'], ['up', 'G1.1.6_G7', 'G1.1.5_G7'], ['up', 'G1.1.5_G7', 'G1.1.3_G7'], ['up', 'G1.1.3_G7', 'G1.1.2_G7'], ['up', 'G1.1.2_G7', 'M2.2.3_G7'], ['up', 'M2.2.3_G7', 'M1.2.7_G7'], ['up', 'M1.2.7_G7', 'M1.2.4_G7'], ['up', 'M1.2.4_G7', 'M1.2.3_G7'], ['up', 'M1.2.3_G7', 'M1.2.1_G7'], ['up', 'M1.2.1_G7', 'M1.1.4_G7'], ['up', 'M1.1.4_G7', 'M1.1.3_G7'], ['up', 'M1.1.3_G7', 'N5.1.3_G7'], ['up', 'N5.1.3_G7', 'N5.1.2_G7'], ['up', 'N5.1.2_G7', 'N5.1.1_G7'], ['up', 'N5.1.1_G7', 'N4.3.1_G7'], ['up', 'N4.3.1_G7', 'N4.2.3_G7'], ['up', 'N4.2.3_G7', 'N4.2.1_G7'], ['up', 'N4.2.1_G7', 'N4.1.1_G7'], ['up', 'N4.1.1_G7', 'N3.4.1_G7'], ['up', 'N3.4.1_G7', 'N3.3.2_G7'], ['up', 'N3.3.2_G7', 'N3.3.1_G7'], ['up', 'N3.3.1_G7', 'N3.2.4_G7'], ['up', 'N3.2.4_G7', 'N3.2.3_G7'], ['up', 'N3.2.3_G7', 'N3.2.2_G7'], ['up', 'N3.2.2_G7', 'N3.2.1_G7'], ['up', 'N3.2.1_G7', 'N3.1.2_G7'], ['up', 'N3.1.2_G7', 'N3.1.1_G7'], ['up', 'N3.1.1_G7', 'N2.3.2_G7'], ['up', 'N2.3.2_G7', 'N2.3.1_G7'], ['up', 'N2.3.1_G7', 'N2.2.3_G7'], ['up', 'N2.2.3_G7', 'N2.2.2_G7'], ['up', 'N2.2.2_G7', 'N2.1.4_G7'], ['up', 'N2.1.4_G7', 'N2.1.3_G7'], ['up', 'N2.1.3_G7', 'N2.1.2_G7'], ['up', 'N2.1.2_G7', 'A3.2.3_G7'], ['up', 'A3.2.3_G6', 'A3.2.2_G6'], ['up', 'A3.2.2_G6', 'A3.1.1_G6'], ['up', 'A3.1.1_G6', 'A1.1.4_G6'], ['up', 'A1.1.4_G6', 'A1.1.3_G6'], ['up', 'A1.1.3_G6', 'A1.1.2_G6'], ['up', 'A1.1.2_G6', 'S2.1.2_G6'], ['up', 'S2.1.2_G6', 'S2.1.1_G6'], ['up', 'S2.1.1_G6', 'S1.1.6_G6'], ['up', 'S1.1.6_G6', 'S1.1.5_G6'], ['up', 'S1.1.5_G6', 'S1.1.4_G6'], ['up', 'S1.1.4_G6', 'G3.1.3_G6'], ['up', 'G3.1.3_G6', 'G3.1.2_G6'], ['up', 'G3.1.2_G6', 'G2.1.3_G6'], ['up', 'G2.1.3_G6', 'G2.1.2_G6'], ['up', 'G2.1.2_G6', 'G1.1.7_G6'], ['up', 'G1.1.7_G6', 'G1.1.5_G6'], ['up', 'G1.1.5_G6', 'G1.1.3_G6'], ['up', 'G1.1.3_G6', 'G1.1.2_G6'], ['up', 'G1.1.2_G6', 'M2.2.3_G6'], ['up', 'M2.2.3_G6', 'M2.2.2_G6'], ['up', 'M2.2.2_G6', 'M1.2.3_G6'], ['up', 'M1.2.3_G6', 'M1.2.1_G6'], ['up', 'M1.2.1_G6', 'M1.1.4_G6'], ['up', 'M1.1.4_G6', 'M1.1.3_G6'], ['up', 'M1.1.3_G6', 'N3.4.1_G6'], ['up', 'N3.4.1_G6', 'N3.3.1_G6'], ['up', 'N3.3.1_G6', 'N3.2.3_G6'], ['up', 'N3.2.3_G6', 'N3.2.2_G6'], ['up', 'N3.2.2_G6', 'N3.2.1_G6'], ['up', 'N3.2.1_G6', 'N3.1.2_G6'], ['up', 'N3.1.2_G6', 'N3.1.1_G6'], ['up', 'N3.1.1_G6', 'N2.3.2_G6'], ['up', 'N2.3.2_G6', 'N2.3.1_G6'], ['up', 'N2.3.1_G6', 'N2.2.3_G6'], ['up', 'N2.2.3_G6', 'N2.2.2_G6'], ['up', 'N2.2.2_G6', 'N2.2.1_G6'], ['up', 'N2.2.1_G6', 'N2.1.4_G6'], ['up', 'N2.1.4_G6', 'N2.1.3_G6'], ['up', 'N2.1.3_G6', 'N2.1.2_G6'], ['up', 'N2.1.2_G6', 'N1.4.2_G6'], ['up', 'N1.4.2_G6', 'N1.3.7_G6'], ['up', 'N1.3.7_G6', 'N1.3.6_G6'], ['up', 'N1.3.6_G6', 'N1.3.3_G6'], ['up', 'N1.3.3_G6', 'N1.3.1_G6'], ['up', 'N1.3.1_G6', 'N1.2.3_G6'], ['up', 'N1.2.3_G6', 'N1.2.2_G6'], ['up', 'N1.2.2_G6', 'N1.1.3_G6'], ['up', 'N1.1.3_G6', 'N1.1.2_G6'], ['up', 'N1.1.2_G6', 'N1.1.1_G6'], ['up', 'N1.1.1_G6', 'A3.2.3_G6'], ['up', 'A3.2.3_G5', 'A3.2.2_G5'], ['up', 'A3.2.2_G5', 'A3.2.1_G5'], ['up', 'A3.2.1_G5', 'A1.1.3_G5'], ['up', 'A1.1.3_G5', 'A1.1.2_G5'], ['up', 'A1.1.2_G5', 'S2.1.1_G5'], ['up', 'S2.1.1_G5', 'S1.1.5_G5'], ['up', 'S1.1.5_G5', 'S1.1.4_G5'], ['up', 'S1.1.4_G5', 'S1.1.3_G5'], ['up', 'S1.1.3_G5', 'S1.1.2_G5'], ['up', 'S1.1.2_G5', 'G3.1.2_G5'], ['up', 'G3.1.2_G5', 'G2.1.3_G5'], ['up', 'G2.1.3_G5', 'G2.1.2_G5'], ['up', 'G2.1.2_G5', 'G1.1.11_G5'], ['up', 'G1.1.11_G5', 'G1.1.7_G5'], ['up', 'G1.1.7_G5', 'G1.1.5_G5'], ['up', 'G1.1.5_G5', 'G1.1.2_G5'], ['up', 'G1.1.2_G5', 'M2.2.3_G5'], ['up', 'M2.2.3_G5', 'M2.2.2_G5'], ['up', 'M2.2.2_G5', 'M2.1.3_G5'], ['up', 'M2.1.3_G5', 'M2.1.2_G5'], ['up', 'M2.1.2_G5', 'M1.2.3_G5'], ['up', 'M1.2.3_G5', 'M1.2.1_G5'], ['up', 'M1.2.1_G5', 'M1.1.4_G5'], ['up', 'M1.1.4_G5', 'M1.1.3_G5'], ['up', 'M1.1.3_G5', 'M1.1.2_G5'], ['up', 'M1.1.2_G5', 'N3.3.1_G5'], ['up', 'N3.3.1_G5', 'N3.2.2_G5'], ['up', 'N3.2.2_G5', 'N3.2.1_G5'], ['up', 'N3.2.1_G5', 'N3.1.2_G5'], ['up', 'N3.1.2_G5', 'N3.1.1_G5'], ['up', 'N3.1.1_G5', 'N2.3.2_G5'], ['up', 'N2.3.2_G5', 'N2.3.1_G5'], ['up', 'N2.3.1_G5', 'N2.2.3_G5'], ['up', 'N2.2.3_G5', 'N2.2.2_G5'], ['up', 'N2.2.2_G5', 'N2.2.1_G5'], ['up', 'N2.2.1_G5', 'N2.1.4_G5'], ['up', 'N2.1.4_G5', 'N2.1.3_G5'], ['up', 'N2.1.3_G5', 'N2.1.2_G5'], ['up', 'N2.1.2_G5', 'N1.4.2_G5'], ['up', 'N1.4.2_G5', 'N1.4.1_G5'], ['up', 'N1.4.1_G5', 'N1.3.7_G5'], ['up', 'N1.3.7_G5', 'N1.3.6_G5'], ['up', 'N1.3.6_G5', 'N1.3.3_G5'], ['up', 'N1.3.3_G5', 'N1.3.1_G5'], ['up', 'N1.3.1_G5', 'N1.2.3_G5'], ['up', 'N1.2.3_G5', 'N1.2.2_G5'], ['up', 'N1.2.2_G5', 'N1.1.3_G5'], ['up', 'N1.1.3_G5', 'N1.1.2_G5'], ['up', 'N1.1.2_G5', 'N1.1.1_G5'], ['up', 'N1.1.1_G5', 'A3.2.3_G5'], ['up', 'A3.2.3_G4', 'A3.2.2_G4'], ['up', 'A3.2.2_G4', 'A3.2.1_G4'], ['up', 'A3.2.1_G4', 'A1.1.2_G4'], ['up', 'A1.1.2_G4', 'A1.1.1_G4'], ['up', 'A1.1.1_G4', 'S1.1.5_G4'], ['up', 'S1.1.5_G4', 'S1.1.4_G4'], ['up', 'S1.1.4_G4', 'S1.1.3_G4'], ['up', 'S1.1.3_G4', 'S1.1.2_G4'], ['up', 'S1.1.2_G4', 'G3.1.2_G4'], ['up', 'G3.1.2_G4', 'G3.1.1_G4'], ['up', 'G3.1.1_G4', 'G2.1.2_G4'], ['up', 'G2.1.2_G4', 'G2.1.1_G4'], ['up', 'G2.1.1_G4', 'G1.1.11_G4'], ['up', 'G1.1.11_G4', 'G1.1.10_G4'], ['up', 'G1.1.10_G4', 'G1.1.7_G4'], ['up', 'G1.1.7_G4', 'G1.1.5_G4'], ['up', 'G1.1.5_G4', 'G1.1.2_G4'], ['up', 'G1.1.2_G4', 'G1.1.1_G4'], ['up', 'G1.1.1_G4', 'M2.2.2_G4'], ['up', 'M2.2.2_G4', 'M2.2.1_G4'], ['up', 'M2.2.1_G4', 'M2.1.4_G4'], ['up', 'M2.1.4_G4', 'M2.1.3_G4'], ['up', 'M2.1.3_G4', 'M2.1.2_G4'], ['up', 'M2.1.2_G4', 'M1.2.3_G4'], ['up', 'M1.2.3_G4', 'M1.2.1_G4'], ['up', 'M1.2.1_G4', 'M1.1.3_G4'], ['up', 'M1.1.3_G4', 'M1.1.2_G4'], ['up', 'M1.1.2_G4', 'M1.1.1_G4'], ['up', 'M1.1.1_G4', 'N2.3.1_G4'], ['up', 'N2.3.1_G4', 'N2.2.1_G4'], ['up', 'N2.2.1_G4', 'N2.1.4_G4'], ['up', 'N2.1.4_G4', 'N2.1.2_G4'], ['up', 'N2.1.2_G4', 'N2.1.1_G4'], ['up', 'N2.1.1_G4', 'N1.4.2_G4'], ['up', 'N1.4.2_G4', 'N1.4.1_G4'], ['up', 'N1.4.1_G4', 'N1.3.7_G4'], ['up', 'N1.3.7_G4', 'N1.3.5_G4'], ['up', 'N1.3.5_G4', 'N1.3.3_G4'], ['up', 'N1.3.3_G4', 'N1.3.1_G4'], ['up', 'N1.3.1_G4', 'N1.2.2_G4'], ['up', 'N1.2.2_G4', 'N1.1.3_G4'], ['up', 'N1.1.3_G4', 'N1.1.2_G4'], ['up', 'N1.1.2_G4', 'N1.1.1_G4'], ['up', 'N1.1.1_G4', 'A3.2.3_G4'], ['up', 'A3.2.3_G3', 'A3.2.2_G3'], ['up', 'A3.2.2_G3', 'A3.2.1_G3'], ['up', 'A3.2.1_G3', 'A1.1.2_G3'], ['up', 'A1.1.2_G3', 'A1.1.1_G3'], ['up', 'A1.1.1_G3', 'S1.1.2_G3'], ['up', 'S1.1.2_G3', 'G3.1.2_G3'], ['up', 'G3.1.2_G3', 'G3.1.1_G3'], ['up', 'G3.1.1_G3', 'G2.1.1_G3'], ['up', 'G2.1.1_G3', 'G1.1.11_G3'], ['up', 'G1.1.11_G3', 'G1.1.10_G3'], ['up', 'G1.1.10_G3', 'G1.1.9_G3'], ['up', 'G1.1.9_G3', 'G1.1.4_G3'], ['up', 'G1.1.4_G3', 'G1.1.2_G3'], ['up', 'G1.1.2_G3', 'G1.1.1_G3'], ['up', 'G1.1.1_G3', 'M3.1.1_G3'], ['up', 'M3.1.1_G3', 'M2.2.2_G3'], ['up', 'M2.2.2_G3', 'M2.2.1_G3'], ['up', 'M2.2.1_G3', 'M2.1.4_G3'], ['up', 'M2.1.4_G3', 'M2.1.2_G3'], ['up', 'M2.1.2_G3', 'M1.1.2_G3'], ['up', 'M1.1.2_G3', 'M1.1.1_G3'], ['up', 'M1.1.1_G3', 'N2.1.1_G3'], ['up', 'N2.1.1_G3', 'N1.4.1_G3'], ['up', 'N1.4.1_G3', 'N1.3.7_G3'], ['up', 'N1.3.7_G3', 'N1.3.4_G3'], ['up', 'N1.3.4_G3', 'N1.3.3_G3'], ['up', 'N1.3.3_G3', 'N1.3.1_G3'], ['up', 'N1.3.1_G3', 'N1.2.2_G3'], ['up', 'N1.2.2_G3', 'N1.2.1_G3'], ['up', 'N1.2.1_G3', 'N1.1.3_G3'], ['up', 'N1.1.3_G3', 'N1.1.2_G3'], ['up', 'N1.1.2_G3', 'N1.1.1_G3'], ['up', 'N1.1.1_G3', 'A3.2.3_G3'], ['up', 'A3.2.3_G2', 'A3.2.1_G2'], ['up', 'A3.2.1_G2', 'A1.1.1_G2'], ['up', 'A1.1.1_G2', 'S1.1.2_G2'], ['up', 'S1.1.2_G2', 'S1.1.1_G2'], ['up', 'S1.1.1_G2', 'G3.1.1_G2'], ['up', 'G3.1.1_G2', 'G2.1.1_G2'], ['up', 'G2.1.1_G2', 'G1.1.10_G2'], ['up', 'G1.1.10_G2', 'G1.1.9_G2'], ['up', 'G1.1.9_G2', 'G1.1.4_G2'], ['up', 'G1.1.4_G2', 'G1.1.1_G2'], ['up', 'G1.1.1_G2', 'M3.1.1_G2'], ['up', 'M3.1.1_G2', 'M2.2.1_G2'], ['up', 'M2.2.1_G2', 'M2.1.4_G2'], ['up', 'M2.1.4_G2', 'M2.1.2_G2'], ['up', 'M2.1.2_G2', 'M2.1.1_G2'], ['up', 'M2.1.1_G2', 'M1.1.2_G2'], ['up', 'M1.1.2_G2', 'M1.1.1_G2'], ['up', 'M1.1.1_G2', 'N1.4.1_G2'], ['up', 'N1.4.1_G2', 'N1.3.7_G2'], ['up', 'N1.3.7_G2', 'N1.3.2_G2'], ['up', 'N1.3.2_G2', 'N1.3.1_G2'], ['up', 'N1.3.1_G2', 'N1.2.2_G2'], ['up', 'N1.2.2_G2', 'N1.2.1_G2'], ['up', 'N1.2.1_G2', 'N1.1.3_G2'], ['up', 'N1.1.3_G2', 'N1.1.2_G2'], ['up', 'N1.1.2_G2', 'N1.1.1_G2'], ['up', 'N1.1.1_G2', 'A1.1.1_G2'], ['up', 'A1.1.1_G1', 'S1.1.1_G1'], ['up', 'S1.1.1_G1', 'G3.1.1_G1'], ['up', 'G3.1.1_G1', 'G2.1.1_G1'], ['up', 'G2.1.1_G1', 'G1.1.9_G1'], ['up', 'G1.1.9_G1', 'G1.1.4_G1'], ['up', 'G1.1.4_G1', 'G1.1.1_G1'], ['up', 'G1.1.1_G1', 'M3.1.1_G1'], ['up', 'M3.1.1_G1', 'M2.1.4_G1'], ['up', 'M2.1.4_G1', 'M2.1.2_G1'], ['up', 'M2.1.2_G1', 'M2.1.1_G1'], ['up', 'M2.1.1_G1', 'M1.1.1_G1'], ['up', 'M1.1.1_G1', 'N1.4.1_G1'], ['up', 'N1.4.1_G1', 'N1.3.2_G1'], ['up', 'N1.3.2_G1', 'N1.3.1_G1'], ['up', 'N1.3.1_G1', 'N1.2.1_G1'], ['up', 'N1.2.1_G1', 'N1.1.2_G1'], ['up', 'N1.1.2_G1', 'N1.1.1_G1']
11
- ]
12
 
13
  def __init__(
14
  self,
 
1
  from transitions import Machine
2
+ from mathtext_fastapi.curriculum_mapper import build_curriculum_logic
3
 
4
+ all_states, all_transitions = build_curriculum_logic()
5
 
6
  class GlobalStateManager(object):
7
+ states = all_states
 
 
8
 
9
+ transitions = all_transitions
 
 
10
 
11
  def __init__(
12
  self,