Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

timeout in allocator for programs w/ too many vars

also added some tests and tweaked makefile
  • Loading branch information...
commit fe46865893e762badd6c4d3aa517bdcafc60df2a 1 parent 23a8b4e
cantora authored
6  README
@@ -5,3 +5,9 @@ to compile on 64 bit:
5 5
 		-on ubuntu:
6 6
 			sudo apt-get install gcc-multilib libc6-i386 libc6-dev-i386
7 7
 
  8
+
  9
+BAD TESTS:
  10
+	Everest_Testy.py		no input file?
  11
+	starcroce_test0.py		undefined var
  12
+	wonder_test02.py		undefined var
  13
+	
5  makefile
... ...
@@ -1,7 +1,10 @@
1 1
 
2 2
 TMPDIR := /tmp/pyc
3 3
 SRCS	= $(filter-out ./parsetab.py, $(wildcard ./*.py) )
4  
-TESTS	= $(wildcard ./grader_tests/*.py) #$(wildcard ./test/*.py) 
  4
+TESTS	= $(wildcard ./grader_tests/*.py) \
  5
+			$(filter-out %stack_test.py, $(wildcard ./test/*.py) ) \
  6
+			$(wildcard ./student_tests/*.py)
  7
+			
5 8
 
6 9
 .PHONY: pkg
7 10
 pkg: hw.zip
24  pyc
@@ -10,6 +10,7 @@ import pyc_asm_nodes
10 10
 
11 11
 from pyc_log import *
12 12
 import os.path
  13
+import time
13 14
 
14 15
 def opt_parser():
15 16
 	parser = argparse.ArgumentParser(description='compile python to x86 assembly.')
@@ -57,6 +58,7 @@ def run(options):
57 58
 	log( lambda : repr(as_tree))
58 59
 	log( lambda : pyc_ast.str(as_tree))
59 60
 
  61
+	t0 = time.time()
60 62
 	ss_list = pyc_ast.to_ss_list(as_tree)
61 63
 	log("se list: ")
62 64
 	log(lambda : "\n".join([repr(ss) for ss in ss_list]) )
@@ -66,17 +68,31 @@ def run(options):
66 68
 
67 69
 	asm_list = reduce(lambda a,b: a + b, asm_list, [])
68 70
 	log( lambda : "\n".join([repr(n) for n in asm_list]) )	
69  
-
  71
+	t_flatten = time.time()
  72
+	#print "flatten time: %d" % (t_flatten - t0) 
  73
+	
70 74
 	more_alloc_needed = 1
71 75
 	adjusted_asm_list = asm_list
72 76
 	symtbl = pyc_reg_allocator.SymTable()
  77
+	alloc_timeout = 10
73 78
 
74 79
 	while more_alloc_needed:
75 80
 		log("analyze asm nodes and assign memory locations")
  81
+		t0 = time.time()
76 82
 		live_list, graph = pyc_var_analyzer.interference_graph(adjusted_asm_list)
77  
-	
78  
-		pyc_reg_allocator.alloc(live_list, graph, symtbl)
79  
-	
  83
+		t_graph = time.time()
  84
+		#print "graph time: %d" % (t_graph - t0) 
  85
+
  86
+		t0 = time.time()
  87
+		pyc_reg_allocator.alloc(live_list, graph, symtbl, alloc_timeout)
  88
+		t_alloc = time.time()
  89
+		#print "alloc time: %d" % (t_alloc - t0) 
  90
+
  91
+		#we only want to restrict the time of the first pass
  92
+		#because the subsequent passes may have vars which need
  93
+		#registers
  94
+		alloc_timeout = 0
  95
+
80 96
 		log( lambda : "mem allocation offsets:\n\t%s" % str(symtbl) )
81 97
 	
82 98
 		(more_alloc_needed, adjusted_asm_list) = pyc_reg_allocator.adjust(adjusted_asm_list, symtbl) 
32  pyc_reg_allocator.py
... ...
@@ -1,8 +1,10 @@
1 1
 from pyc_var_analyzer import IntfGraph
2 2
 from pyc_log import *
3 3
 from pyc_asm_nodes import *
  4
+
4 5
 import random
5 6
 import copy
  7
+import time
6 8
 
7 9
 reg_index_map = {}
8 10
 for i in range(0, len(Register.registers) ):
@@ -51,8 +53,11 @@ def swap_map(self, node, loc):
51 53
 	def get(self, node):
52 54
 		return self.mem_map.get(node, None)
53 55
 
  56
+	def high_index(self):
  57
+		return max(self.mem_map.values())
  58
+
54 59
 	def stack(self):
55  
-		return (max(self.mem_map.values()) - 6)*4 + 4
  60
+		return (self.high_index() - 6)*4 + 4
56 61
 
57 62
 	#throws key error if the arg isnt mapped
58 63
 	def __getitem__(self, arg):
@@ -83,12 +88,13 @@ def __getitem__(self, arg):
83 88
 """
84 89
 
85 90
 class Allocator:
86  
-	def __init__(self, live_list, graph, symtbl):
  91
+	def __init__(self, live_list, graph, symtbl, timeout=0):
87 92
 		self.live_list = live_list
88 93
 		self.graph = graph
89 94
 		self.symtbl = symtbl
90 95
 		self.symtbl.boot_reg_dwellers()
91 96
 		self.constraints = {}
  97
+		self.timeout = timeout
92 98
 
93 99
 		reg_nodes = [Register(x) for x in Register.registers]
94 100
 		self.todo = set(self.graph.keys()) - set(self.symtbl.mem_map.keys()) - set(reg_nodes)
@@ -151,19 +157,37 @@ def next(self):
151 157
 
152 158
 		return sorted_items[0][0]
153 159
 
  160
+	def throw_the_rest_on_the_stack(self):
  161
+		i = self.symtbl.high_index() + 1
  162
+		for node in self.todo:
  163
+			if node.needs_reg and i > (len(Register.registers) - 1):
  164
+				raise Exception("%s needs a reg!" % repr(node))
  165
+	
  166
+			self.symtbl.map(node, i)
  167
+			i = i+1
  168
+
  169
+		self.constraints.clear()
  170
+		self.todo.clear()
  171
+				
154 172
 
155 173
 	def run(self):
  174
+		t0 = time.time()
  175
+
156 176
 		while len(self.todo) > 0:
157 177
 			log("todo: %s" % repr(self.todo))
158 178
 			log("constraints: %s" % repr(self.constraints) )
159 179
 			
160 180
 			self.allocate_mem(self.next())
  181
+			if self.timeout > 0 and (time.time() - t0) > self.timeout:
  182
+				self.throw_the_rest_on_the_stack()
  183
+				break
  184
+
161 185
 
162 186
 		return self.symtbl
163 187
 
164 188
 
165  
-def alloc(live_list, graph, symtbl):
166  
-	al = Allocator(live_list, graph, symtbl)
  189
+def alloc(live_list, graph, symtbl, timeout=0):
  190
+	al = Allocator(live_list, graph, symtbl, timeout)
167 191
 
168 192
 	return al.run()
169 193
 
2  student_tests/Symphony_test_tempvar4.in
... ...
@@ -0,0 +1,2 @@
  1
+1000
  2
+707
2,000  student_tests/Symphony_test_tempvar4.py
... ...
@@ -0,0 +1,2000 @@
  1
+
  2
+tmp0 = input()
  3
+tmp1=input()
  4
+tmp2 = tmp1 +- tmp0
  5
+print tmp2
  6
+tmp3 = tmp2 +- tmp1
  7
+print tmp3
  8
+tmp4 = tmp3 +- tmp2
  9
+print tmp4
  10
+tmp5 = tmp4 +- tmp3
  11
+print tmp5
  12
+tmp6 = tmp5 +- tmp4
  13
+print tmp6
  14
+tmp7 = tmp6 +- tmp5
  15
+print tmp7
  16
+tmp8 = tmp7 +- tmp6
  17
+print tmp8
  18
+tmp9 = tmp8 +- tmp7
  19
+print tmp9
  20
+tmp10 = tmp9 +- tmp8
  21
+print tmp10
  22
+tmp11 = tmp10 +- tmp9
  23
+print tmp11
  24
+tmp12 = tmp11 +- tmp10
  25
+print tmp12
  26
+tmp13 = tmp12 +- tmp11
  27
+print tmp13
  28
+tmp14 = tmp13 +- tmp12
  29
+print tmp14
  30
+tmp15 = tmp14 +- tmp13
  31
+print tmp15
  32
+tmp16 = tmp15 +- tmp14
  33
+print tmp16
  34
+tmp17 = tmp16 +- tmp15
  35
+print tmp17
  36
+tmp18 = tmp17 +- tmp16
  37
+print tmp18
  38
+tmp19 = tmp18 +- tmp17
  39
+print tmp19
  40
+tmp20 = tmp19 +- tmp18
  41
+print tmp20
  42
+tmp21 = tmp20 +- tmp19
  43
+print tmp21
  44
+tmp22 = tmp21 +- tmp20
  45
+print tmp22
  46
+tmp23 = tmp22 +- tmp21
  47
+print tmp23
  48
+tmp24 = tmp23 +- tmp22
  49
+print tmp24
  50
+tmp25 = tmp24 +- tmp23
  51
+print tmp25
  52
+tmp26 = tmp25 +- tmp24
  53
+print tmp26
  54
+tmp27 = tmp26 +- tmp25
  55
+print tmp27
  56
+tmp28 = tmp27 +- tmp26
  57
+print tmp28
  58
+tmp29 = tmp28 +- tmp27
  59
+print tmp29
  60
+tmp30 = tmp29 +- tmp28
  61
+print tmp30
  62
+tmp31 = tmp30 +- tmp29
  63
+print tmp31
  64
+tmp32 = tmp31 +- tmp30
  65
+print tmp32
  66
+tmp33 = tmp32 +- tmp31
  67
+print tmp33
  68
+tmp34 = tmp33 +- tmp32
  69
+print tmp34
  70
+tmp35 = tmp34 +- tmp33
  71
+print tmp35
  72
+tmp36 = tmp35 +- tmp34
  73
+print tmp36
  74
+tmp37 = tmp36 +- tmp35
  75
+print tmp37
  76
+tmp38 = tmp37 +- tmp36
  77
+print tmp38
  78
+tmp39 = tmp38 +- tmp37
  79
+print tmp39
  80
+tmp40 = tmp39 +- tmp38
  81
+print tmp40
  82
+tmp41 = tmp40 +- tmp39
  83
+print tmp41
  84
+tmp42 = tmp41 +- tmp40
  85
+print tmp42
  86
+tmp43 = tmp42 +- tmp41
  87
+print tmp43
  88
+tmp44 = tmp43 +- tmp42
  89
+print tmp44
  90
+tmp45 = tmp44 +- tmp43
  91
+print tmp45
  92
+tmp46 = tmp45 +- tmp44
  93
+print tmp46
  94
+tmp47 = tmp46 +- tmp45
  95
+print tmp47
  96
+tmp48 = tmp47 +- tmp46
  97
+print tmp48
  98
+tmp49 = tmp48 +- tmp47
  99
+print tmp49
  100
+tmp50 = tmp49 +- tmp48
  101
+print tmp50
  102
+tmp51 = tmp50 +- tmp49
  103
+print tmp51
  104
+tmp52 = tmp51 +- tmp50
  105
+print tmp52
  106
+tmp53 = tmp52 +- tmp51
  107
+print tmp53
  108
+tmp54 = tmp53 +- tmp52
  109
+print tmp54
  110
+tmp55 = tmp54 +- tmp53
  111
+print tmp55
  112
+tmp56 = tmp55 +- tmp54
  113
+print tmp56
  114
+tmp57 = tmp56 +- tmp55
  115
+print tmp57
  116
+tmp58 = tmp57 +- tmp56
  117
+print tmp58
  118
+tmp59 = tmp58 +- tmp57
  119
+print tmp59
  120
+tmp60 = tmp59 +- tmp58
  121
+print tmp60
  122
+tmp61 = tmp60 +- tmp59
  123
+print tmp61
  124
+tmp62 = tmp61 +- tmp60
  125
+print tmp62
  126
+tmp63 = tmp62 +- tmp61
  127
+print tmp63
  128
+tmp64 = tmp63 +- tmp62
  129
+print tmp64
  130
+tmp65 = tmp64 +- tmp63
  131
+print tmp65
  132
+tmp66 = tmp65 +- tmp64
  133
+print tmp66
  134
+tmp67 = tmp66 +- tmp65
  135
+print tmp67
  136
+tmp68 = tmp67 +- tmp66
  137
+print tmp68
  138
+tmp69 = tmp68 +- tmp67
  139
+print tmp69
  140
+tmp70 = tmp69 +- tmp68
  141
+print tmp70
  142
+tmp71 = tmp70 +- tmp69
  143
+print tmp71
  144
+tmp72 = tmp71 +- tmp70
  145
+print tmp72
  146
+tmp73 = tmp72 +- tmp71
  147
+print tmp73
  148
+tmp74 = tmp73 +- tmp72
  149
+print tmp74
  150
+tmp75 = tmp74 +- tmp73
  151
+print tmp75
  152
+tmp76 = tmp75 +- tmp74
  153
+print tmp76
  154
+tmp77 = tmp76 +- tmp75
  155
+print tmp77
  156
+tmp78 = tmp77 +- tmp76
  157
+print tmp78
  158
+tmp79 = tmp78 +- tmp77
  159
+print tmp79
  160
+tmp80 = tmp79 +- tmp78
  161
+print tmp80
  162
+tmp81 = tmp80 +- tmp79
  163
+print tmp81
  164
+tmp82 = tmp81 +- tmp80
  165
+print tmp82
  166
+tmp83 = tmp82 +- tmp81
  167
+print tmp83
  168
+tmp84 = tmp83 +- tmp82
  169
+print tmp84
  170
+tmp85 = tmp84 +- tmp83
  171
+print tmp85
  172
+tmp86 = tmp85 +- tmp84
  173
+print tmp86
  174
+tmp87 = tmp86 +- tmp85
  175
+print tmp87
  176
+tmp88 = tmp87 +- tmp86
  177
+print tmp88
  178
+tmp89 = tmp88 +- tmp87
  179
+print tmp89
  180
+tmp90 = tmp89 +- tmp88
  181
+print tmp90
  182
+tmp91 = tmp90 +- tmp89
  183
+print tmp91
  184
+tmp92 = tmp91 +- tmp90
  185
+print tmp92
  186
+tmp93 = tmp92 +- tmp91
  187
+print tmp93
  188
+tmp94 = tmp93 +- tmp92
  189
+print tmp94
  190
+tmp95 = tmp94 +- tmp93
  191
+print tmp95
  192
+tmp96 = tmp95 +- tmp94
  193
+print tmp96
  194
+tmp97 = tmp96 +- tmp95
  195
+print tmp97
  196
+tmp98 = tmp97 +- tmp96
  197
+print tmp98
  198
+tmp99 = tmp98 +- tmp97
  199
+print tmp99
  200
+tmp100 = tmp99 +- tmp98
  201
+print tmp100
  202
+tmp101 = tmp100 +- tmp99
  203
+print tmp101
  204
+tmp102 = tmp101 +- tmp100
  205
+print tmp102
  206
+tmp103 = tmp102 +- tmp101
  207
+print tmp103
  208
+tmp104 = tmp103 +- tmp102
  209
+print tmp104
  210
+tmp105 = tmp104 +- tmp103
  211
+print tmp105
  212
+tmp106 = tmp105 +- tmp104
  213
+print tmp106
  214
+tmp107 = tmp106 +- tmp105
  215
+print tmp107
  216
+tmp108 = tmp107 +- tmp106
  217
+print tmp108
  218
+tmp109 = tmp108 +- tmp107
  219
+print tmp109
  220
+tmp110 = tmp109 +- tmp108
  221
+print tmp110
  222
+tmp111 = tmp110 +- tmp109
  223
+print tmp111
  224
+tmp112 = tmp111 +- tmp110
  225
+print tmp112
  226
+tmp113 = tmp112 +- tmp111
  227
+print tmp113
  228
+tmp114 = tmp113 +- tmp112
  229
+print tmp114
  230
+tmp115 = tmp114 +- tmp113
  231
+print tmp115
  232
+tmp116 = tmp115 +- tmp114
  233
+print tmp116
  234
+tmp117 = tmp116 +- tmp115
  235
+print tmp117
  236
+tmp118 = tmp117 +- tmp116
  237
+print tmp118
  238
+tmp119 = tmp118 +- tmp117
  239
+print tmp119
  240
+tmp120 = tmp119 +- tmp118
  241
+print tmp120
  242
+tmp121 = tmp120 +- tmp119
  243
+print tmp121
  244
+tmp122 = tmp121 +- tmp120
  245
+print tmp122
  246
+tmp123 = tmp122 +- tmp121
  247
+print tmp123
  248
+tmp124 = tmp123 +- tmp122
  249
+print tmp124
  250
+tmp125 = tmp124 +- tmp123
  251
+print tmp125
  252
+tmp126 = tmp125 +- tmp124
  253
+print tmp126
  254
+tmp127 = tmp126 +- tmp125
  255
+print tmp127
  256
+tmp128 = tmp127 +- tmp126
  257
+print tmp128
  258
+tmp129 = tmp128 +- tmp127
  259
+print tmp129
  260
+tmp130 = tmp129 +- tmp128
  261
+print tmp130
  262
+tmp131 = tmp130 +- tmp129
  263
+print tmp131
  264
+tmp132 = tmp131 +- tmp130
  265
+print tmp132
  266
+tmp133 = tmp132 +- tmp131
  267
+print tmp133
  268
+tmp134 = tmp133 +- tmp132
  269
+print tmp134
  270
+tmp135 = tmp134 +- tmp133
  271
+print tmp135
  272
+tmp136 = tmp135 +- tmp134
  273
+print tmp136
  274
+tmp137 = tmp136 +- tmp135
  275
+print tmp137
  276
+tmp138 = tmp137 +- tmp136
  277
+print tmp138
  278
+tmp139 = tmp138 +- tmp137
  279
+print tmp139
  280
+tmp140 = tmp139 +- tmp138
  281
+print tmp140
  282
+tmp141 = tmp140 +- tmp139
  283
+print tmp141
  284
+tmp142 = tmp141 +- tmp140
  285
+print tmp142
  286
+tmp143 = tmp142 +- tmp141
  287
+print tmp143
  288
+tmp144 = tmp143 +- tmp142
  289
+print tmp144
  290
+tmp145 = tmp144 +- tmp143
  291
+print tmp145
  292
+tmp146 = tmp145 +- tmp144
  293
+print tmp146
  294
+tmp147 = tmp146 +- tmp145
  295
+print tmp147
  296
+tmp148 = tmp147 +- tmp146
  297
+print tmp148
  298
+tmp149 = tmp148 +- tmp147
  299
+print tmp149
  300
+tmp150 = tmp149 +- tmp148
  301
+print tmp150
  302
+tmp151 = tmp150 +- tmp149
  303
+print tmp151
  304
+tmp152 = tmp151 +- tmp150
  305
+print tmp152
  306
+tmp153 = tmp152 +- tmp151
  307
+print tmp153
  308
+tmp154 = tmp153 +- tmp152
  309
+print tmp154
  310
+tmp155 = tmp154 +- tmp153
  311
+print tmp155
  312
+tmp156 = tmp155 +- tmp154
  313
+print tmp156
  314
+tmp157 = tmp156 +- tmp155
  315
+print tmp157
  316
+tmp158 = tmp157 +- tmp156
  317
+print tmp158
  318
+tmp159 = tmp158 +- tmp157
  319
+print tmp159
  320
+tmp160 = tmp159 +- tmp158
  321
+print tmp160
  322
+tmp161 = tmp160 +- tmp159
  323
+print tmp161
  324
+tmp162 = tmp161 +- tmp160
  325
+print tmp162
  326
+tmp163 = tmp162 +- tmp161
  327
+print tmp163
  328
+tmp164 = tmp163 +- tmp162
  329
+print tmp164
  330
+tmp165 = tmp164 +- tmp163
  331
+print tmp165
  332
+tmp166 = tmp165 +- tmp164
  333
+print tmp166
  334
+tmp167 = tmp166 +- tmp165
  335
+print tmp167
  336
+tmp168 = tmp167 +- tmp166
  337
+print tmp168
  338
+tmp169 = tmp168 +- tmp167
  339
+print tmp169
  340
+tmp170 = tmp169 +- tmp168
  341
+print tmp170
  342
+tmp171 = tmp170 +- tmp169
  343
+print tmp171
  344
+tmp172 = tmp171 +- tmp170
  345
+print tmp172
  346
+tmp173 = tmp172 +- tmp171
  347
+print tmp173
  348
+tmp174 = tmp173 +- tmp172
  349
+print tmp174
  350
+tmp175 = tmp174 +- tmp173
  351
+print tmp175
  352
+tmp176 = tmp175 +- tmp174
  353
+print tmp176
  354
+tmp177 = tmp176 +- tmp175
  355
+print tmp177
  356
+tmp178 = tmp177 +- tmp176
  357
+print tmp178
  358
+tmp179 = tmp178 +- tmp177
  359
+print tmp179
  360
+tmp180 = tmp179 +- tmp178
  361
+print tmp180
  362
+tmp181 = tmp180 +- tmp179
  363
+print tmp181
  364
+tmp182 = tmp181 +- tmp180
  365
+print tmp182
  366
+tmp183 = tmp182 +- tmp181
  367
+print tmp183
  368
+tmp184 = tmp183 +- tmp182
  369
+print tmp184
  370
+tmp185 = tmp184 +- tmp183
  371
+print tmp185
  372
+tmp186 = tmp185 +- tmp184
  373
+print tmp186
  374
+tmp187 = tmp186 +- tmp185
  375
+print tmp187
  376
+tmp188 = tmp187 +- tmp186
  377
+print tmp188
  378
+tmp189 = tmp188 +- tmp187
  379
+print tmp189
  380
+tmp190 = tmp189 +- tmp188
  381
+print tmp190
  382
+tmp191 = tmp190 +- tmp189
  383
+print tmp191
  384
+tmp192 = tmp191 +- tmp190
  385
+print tmp192
  386
+tmp193 = tmp192 +- tmp191
  387
+print tmp193
  388
+tmp194 = tmp193 +- tmp192
  389
+print tmp194
  390
+tmp195 = tmp194 +- tmp193
  391
+print tmp195
  392
+tmp196 = tmp195 +- tmp194
  393
+print tmp196
  394
+tmp197 = tmp196 +- tmp195
  395
+print tmp197
  396
+tmp198 = tmp197 +- tmp196
  397
+print tmp198
  398
+tmp199 = tmp198 +- tmp197
  399
+print tmp199
  400
+tmp200 = tmp199 +- tmp198
  401
+print tmp200
  402
+tmp201 = tmp200 +- tmp199
  403
+print tmp201
  404
+tmp202 = tmp201 +- tmp200
  405
+print tmp202
  406
+tmp203 = tmp202 +- tmp201
  407
+print tmp203
  408
+tmp204 = tmp203 +- tmp202
  409
+print tmp204
  410
+tmp205 = tmp204 +- tmp203
  411
+print tmp205
  412
+tmp206 = tmp205 +- tmp204
  413
+print tmp206
  414
+tmp207 = tmp206 +- tmp205
  415
+print tmp207
  416
+tmp208 = tmp207 +- tmp206
  417
+print tmp208
  418
+tmp209 = tmp208 +- tmp207
  419
+print tmp209
  420
+tmp210 = tmp209 +- tmp208
  421
+print tmp210
  422
+tmp211 = tmp210 +- tmp209
  423
+print tmp211
  424
+tmp212 = tmp211 +- tmp210
  425
+print tmp212
  426
+tmp213 = tmp212 +- tmp211
  427
+print tmp213
  428
+tmp214 = tmp213 +- tmp212
  429
+print tmp214
  430
+tmp215 = tmp214 +- tmp213
  431
+print tmp215
  432
+tmp216 = tmp215 +- tmp214
  433
+print tmp216
  434
+tmp217 = tmp216 +- tmp215
  435
+print tmp217
  436
+tmp218 = tmp217 +- tmp216
  437
+print tmp218
  438
+tmp219 = tmp218 +- tmp217
  439
+print tmp219
  440
+tmp220 = tmp219 +- tmp218
  441
+print tmp220
  442
+tmp221 = tmp220 +- tmp219
  443
+print tmp221
  444
+tmp222 = tmp221 +- tmp220
  445
+print tmp222
  446
+tmp223 = tmp222 +- tmp221
  447
+print tmp223
  448
+tmp224 = tmp223 +- tmp222
  449
+print tmp224
  450
+tmp225 = tmp224 +- tmp223
  451
+print tmp225
  452
+tmp226 = tmp225 +- tmp224
  453
+print tmp226
  454
+tmp227 = tmp226 +- tmp225
  455
+print tmp227
  456
+tmp228 = tmp227 +- tmp226
  457
+print tmp228
  458
+tmp229 = tmp228 +- tmp227
  459
+print tmp229
  460
+tmp230 = tmp229 +- tmp228
  461
+print tmp230
  462
+tmp231 = tmp230 +- tmp229
  463
+print tmp231
  464
+tmp232 = tmp231 +- tmp230
  465
+print tmp232
  466
+tmp233 = tmp232 +- tmp231
  467
+print tmp233
  468
+tmp234 = tmp233 +- tmp232
  469
+print tmp234
  470
+tmp235 = tmp234 +- tmp233
  471
+print tmp235
  472
+tmp236 = tmp235 +- tmp234
  473
+print tmp236
  474
+tmp237 = tmp236 +- tmp235
  475
+print tmp237
  476
+tmp238 = tmp237 +- tmp236
  477
+print tmp238
  478
+tmp239 = tmp238 +- tmp237
  479
+print tmp239
  480
+tmp240 = tmp239 +- tmp238
  481
+print tmp240
  482
+tmp241 = tmp240 +- tmp239
  483
+print tmp241
  484
+tmp242 = tmp241 +- tmp240
  485
+print tmp242
  486
+tmp243 = tmp242 +- tmp241
  487
+print tmp243
  488
+tmp244 = tmp243 +- tmp242
  489
+print tmp244
  490
+tmp245 = tmp244 +- tmp243
  491
+print tmp245
  492
+tmp246 = tmp245 +- tmp244
  493
+print tmp246
  494
+tmp247 = tmp246 +- tmp245
  495
+print tmp247
  496
+tmp248 = tmp247 +- tmp246
  497
+print tmp248
  498
+tmp249 = tmp248 +- tmp247
  499
+print tmp249
  500
+tmp250 = tmp249 +- tmp248
  501
+print tmp250
  502
+tmp251 = tmp250 +- tmp249
  503
+print tmp251
  504
+tmp252 = tmp251 +- tmp250
  505
+print tmp252
  506
+tmp253 = tmp252 +- tmp251
  507
+print tmp253
  508
+tmp254 = tmp253 +- tmp252
  509
+print tmp254
  510
+tmp255 = tmp254 +- tmp253
  511
+print tmp255
  512
+tmp256 = tmp255 +- tmp254
  513
+print tmp256
  514
+tmp257 = tmp256 +- tmp255
  515
+print tmp257
  516
+tmp258 = tmp257 +- tmp256
  517
+print tmp258
  518
+tmp259 = tmp258 +- tmp257
  519
+print tmp259
  520
+tmp260 = tmp259 +- tmp258
  521
+print tmp260
  522
+tmp261 = tmp260 +- tmp259
  523
+print tmp261
  524
+tmp262 = tmp261 +- tmp260
  525
+print tmp262
  526
+tmp263 = tmp262 +- tmp261
  527
+print tmp263
  528
+tmp264 = tmp263 +- tmp262
  529
+print tmp264
  530
+tmp265 = tmp264 +- tmp263
  531
+print tmp265
  532
+tmp266 = tmp265 +- tmp264
  533
+print tmp266
  534
+tmp267 = tmp266 +- tmp265
  535
+print tmp267
  536
+tmp268 = tmp267 +- tmp266
  537
+print tmp268
  538
+tmp269 = tmp268 +- tmp267
  539
+print tmp269
  540
+tmp270 = tmp269 +- tmp268
  541
+print tmp270
  542
+tmp271 = tmp270 +- tmp269
  543
+print tmp271
  544
+tmp272 = tmp271 +- tmp270
  545
+print tmp272
  546
+tmp273 = tmp272 +- tmp271
  547
+print tmp273
  548
+tmp274 = tmp273 +- tmp272
  549
+print tmp274
  550
+tmp275 = tmp274 +- tmp273
  551
+print tmp275
  552
+tmp276 = tmp275 +- tmp274
  553
+print tmp276
  554
+tmp277 = tmp276 +- tmp275
  555
+print tmp277
  556
+tmp278 = tmp277 +- tmp276
  557
+print tmp278
  558
+tmp279 = tmp278 +- tmp277
  559
+print tmp279
  560
+tmp280 = tmp279 +- tmp278
  561
+print tmp280
  562
+tmp281 = tmp280 +- tmp279
  563
+print tmp281
  564
+tmp282 = tmp281 +- tmp280
  565
+print tmp282
  566
+tmp283 = tmp282 +- tmp281
  567
+print tmp283
  568
+tmp284 = tmp283 +- tmp282
  569
+print tmp284
  570
+tmp285 = tmp284 +- tmp283
  571
+print tmp285
  572
+tmp286 = tmp285 +- tmp284
  573
+print tmp286
  574
+tmp287 = tmp286 +- tmp285
  575
+print tmp287
  576
+tmp288 = tmp287 +- tmp286
  577
+print tmp288
  578
+tmp289 = tmp288 +- tmp287
  579
+print tmp289
  580
+tmp290 = tmp289 +- tmp288
  581
+print tmp290
  582
+tmp291 = tmp290 +- tmp289
  583
+print tmp291
  584
+tmp292 = tmp291 +- tmp290
  585
+print tmp292
  586
+tmp293 = tmp292 +- tmp291
  587
+print tmp293
  588
+tmp294 = tmp293 +- tmp292
  589
+print tmp294
  590
+tmp295 = tmp294 +- tmp293
  591
+print tmp295
  592
+tmp296 = tmp295 +- tmp294
  593
+print tmp296
  594
+tmp297 = tmp296 +- tmp295
  595
+print tmp297
  596
+tmp298 = tmp297 +- tmp296
  597
+print tmp298
  598
+tmp299 = tmp298 +- tmp297
  599
+print tmp299
  600
+tmp300 = tmp299 +- tmp298
  601
+print tmp300
  602
+tmp301 = tmp300 +- tmp299
  603
+print tmp301
  604
+tmp302 = tmp301 +- tmp300
  605
+print tmp302
  606
+tmp303 = tmp302 +- tmp301
  607
+print tmp303
  608
+tmp304 = tmp303 +- tmp302
  609
+print tmp304
  610
+tmp305 = tmp304 +- tmp303
  611
+print tmp305
  612
+tmp306 = tmp305 +- tmp304
  613
+print tmp306
  614
+tmp307 = tmp306 +- tmp305
  615
+print tmp307
  616
+tmp308 = tmp307 +- tmp306
  617
+print tmp308
  618
+tmp309 = tmp308 +- tmp307
  619
+print tmp309
  620
+tmp310 = tmp309 +- tmp308
  621
+print tmp310
  622
+tmp311 = tmp310 +- tmp309
  623
+print tmp311
  624
+tmp312 = tmp311 +- tmp310
  625
+print tmp312
  626
+tmp313 = tmp312 +- tmp311
  627
+print tmp313
  628
+tmp314 = tmp313 +- tmp312
  629
+print tmp314
  630
+tmp315 = tmp314 +- tmp313
  631
+print tmp315
  632
+tmp316 = tmp315 +- tmp314
  633
+print tmp316
  634
+tmp317 = tmp316 +- tmp315
  635
+print tmp317
  636
+tmp318 = tmp317 +- tmp316
  637
+print tmp318
  638
+tmp319 = tmp318 +- tmp317
  639
+print tmp319
  640
+tmp320 = tmp319 +- tmp318
  641
+print tmp320
  642
+tmp321 = tmp320 +- tmp319
  643
+print tmp321
  644
+tmp322 = tmp321 +- tmp320
  645
+print tmp322
  646
+tmp323 = tmp322 +- tmp321
  647
+print tmp323
  648
+tmp324 = tmp323 +- tmp322
  649
+print tmp324
  650
+tmp325 = tmp324 +- tmp323
  651
+print tmp325
  652
+tmp326 = tmp325 +- tmp324
  653
+print tmp326
  654
+tmp327 = tmp326 +- tmp325
  655
+print tmp327
  656
+tmp328 = tmp327 +- tmp326
  657
+print tmp328
  658
+tmp329 = tmp328 +- tmp327
  659
+print tmp329
  660
+tmp330 = tmp329 +- tmp328
  661
+print tmp330
  662
+tmp331 = tmp330 +- tmp329
  663
+print tmp331
  664
+tmp332 = tmp331 +- tmp330
  665
+print tmp332
  666
+tmp333 = tmp332 +- tmp331
  667
+print tmp333
  668
+tmp334 = tmp333 +- tmp332
  669
+print tmp334
  670
+tmp335 = tmp334 +- tmp333
  671
+print tmp335
  672
+tmp336 = tmp335 +- tmp334
  673
+print tmp336
  674
+tmp337 = tmp336 +- tmp335
  675
+print tmp337
  676
+tmp338 = tmp337 +- tmp336
  677
+print tmp338
  678
+tmp339 = tmp338 +- tmp337
  679
+print tmp339
  680
+tmp340 = tmp339 +- tmp338
  681
+print tmp340
  682
+tmp341 = tmp340 +- tmp339
  683
+print tmp341
  684
+tmp342 = tmp341 +- tmp340
  685
+print tmp342
  686
+tmp343 = tmp342 +- tmp341
  687
+print tmp343
  688
+tmp344 = tmp343 +- tmp342
  689
+print tmp344
  690
+tmp345 = tmp344 +- tmp343
  691
+print tmp345
  692
+tmp346 = tmp345 +- tmp344
  693
+print tmp346
  694
+tmp347 = tmp346 +- tmp345
  695
+print tmp347
  696
+tmp348 = tmp347 +- tmp346
  697
+print tmp348
  698
+tmp349 = tmp348 +- tmp347
  699
+print tmp349
  700
+tmp350 = tmp349 +- tmp348
  701
+print tmp350
  702
+tmp351 = tmp350 +- tmp349
  703
+print tmp351
  704
+tmp352 = tmp351 +- tmp350
  705
+print tmp352
  706
+tmp353 = tmp352 +- tmp351
  707
+print tmp353
  708
+tmp354 = tmp353 +- tmp352
  709
+print tmp354
  710
+tmp355 = tmp354 +- tmp353
  711
+print tmp355
  712
+tmp356 = tmp355 +- tmp354
  713
+print tmp356
  714
+tmp357 = tmp356 +- tmp355
  715
+print tmp357
  716
+tmp358 = tmp357 +- tmp356
  717
+print tmp358
  718
+tmp359 = tmp358 +- tmp357
  719
+print tmp359
  720
+tmp360 = tmp359 +- tmp358
  721
+print tmp360
  722
+tmp361 = tmp360 +- tmp359
  723
+print tmp361
  724
+tmp362 = tmp361 +- tmp360
  725
+print tmp362
  726
+tmp363 = tmp362 +- tmp361
  727
+print tmp363
  728
+tmp364 = tmp363 +- tmp362
  729
+print tmp364
  730
+tmp365 = tmp364 +- tmp363
  731
+print tmp365
  732
+tmp366 = tmp365 +- tmp364
  733
+print tmp366
  734
+tmp367 = tmp366 +- tmp365
  735
+print tmp367
  736
+tmp368 = tmp367 +- tmp366
  737
+print tmp368
  738
+tmp369 = tmp368 +- tmp367
  739
+print tmp369
  740
+tmp370 = tmp369 +- tmp368
  741
+print tmp370
  742
+tmp371 = tmp370 +- tmp369
  743
+print tmp371
  744
+tmp372 = tmp371 +- tmp370
  745
+print tmp372
  746
+tmp373 = tmp372 +- tmp371
  747
+print tmp373
  748
+tmp374 = tmp373 +- tmp372
  749
+print tmp374
  750
+tmp375 = tmp374 +- tmp373
  751
+print tmp375
  752
+tmp376 = tmp375 +- tmp374
  753
+print tmp376
  754
+tmp377 = tmp376 +- tmp375
  755
+print tmp377
  756
+tmp378 = tmp377 +- tmp376
  757
+print tmp378
  758
+tmp379 = tmp378 +- tmp377
  759
+print tmp379
  760
+tmp380 = tmp379 +- tmp378
  761
+print tmp380
  762
+tmp381 = tmp380 +- tmp379
  763
+print tmp381
  764
+tmp382 = tmp381 +- tmp380
  765
+print tmp382
  766
+tmp383 = tmp382 +- tmp381
  767
+print tmp383
  768
+tmp384 = tmp383 +- tmp382
  769
+print tmp384
  770
+tmp385 = tmp384 +- tmp383
  771
+print tmp385
  772
+tmp386 = tmp385 +- tmp384
  773
+print tmp386
  774
+tmp387 = tmp386 +- tmp385
  775
+print tmp387
  776
+tmp388 = tmp387 +- tmp386
  777
+print tmp388
  778
+tmp389 = tmp388 +- tmp387
  779
+print tmp389
  780
+tmp390 = tmp389 +- tmp388
  781
+print tmp390
  782
+tmp391 = tmp390 +- tmp389
  783
+print tmp391
  784
+tmp392 = tmp391 +- tmp390
  785
+print tmp392
  786
+tmp393 = tmp392 +- tmp391
  787
+print tmp393
  788
+tmp394 = tmp393 +- tmp392
  789
+print tmp394
  790
+tmp395 = tmp394 +- tmp393
  791
+print tmp395
  792
+tmp396 = tmp395 +- tmp394
  793
+print tmp396
  794
+tmp397 = tmp396 +- tmp395
  795
+print tmp397
  796
+tmp398 = tmp397 +- tmp396
  797
+print tmp398
  798
+tmp399 = tmp398 +- tmp397
  799
+print tmp399
  800
+tmp400 = tmp399 +- tmp398
  801
+print tmp400
  802
+tmp401 = tmp400 +- tmp399
  803
+print tmp401
  804
+tmp402 = tmp401 +- tmp400
  805
+print tmp402
  806
+tmp403 = tmp402 +- tmp401
  807
+print tmp403
  808
+tmp404 = tmp403 +- tmp402
  809
+print tmp404
  810
+tmp405 = tmp404 +- tmp403
  811
+print tmp405
  812
+tmp406 = tmp405 +- tmp404
  813
+print tmp406
  814
+tmp407 = tmp406 +- tmp405
  815
+print tmp407
  816
+tmp408 = tmp407 +- tmp406
  817
+print tmp408
  818
+tmp409 = tmp408 +- tmp407
  819
+print tmp409
  820
+tmp410 = tmp409 +- tmp408
  821
+print tmp410
  822
+tmp411 = tmp410 +- tmp409
  823
+print tmp411
  824
+tmp412 = tmp411 +- tmp410
  825
+print tmp412
  826
+tmp413 = tmp412 +- tmp411
  827
+print tmp413
  828
+tmp414 = tmp413 +- tmp412
  829
+print tmp414
  830
+tmp415 = tmp414 +- tmp413
  831
+print tmp415
  832
+tmp416 = tmp415 +- tmp414
  833
+print tmp416
  834
+tmp417 = tmp416 +- tmp415
  835
+print tmp417
  836
+tmp418 = tmp417 +- tmp416
  837
+print tmp418
  838
+tmp419 = tmp418 +- tmp417
  839
+print tmp419
  840
+tmp420 = tmp419 +- tmp418
  841
+print tmp420
  842
+tmp421 = tmp420 +- tmp419
  843
+print tmp421
  844
+tmp422 = tmp421 +- tmp420
  845
+print tmp422
  846
+tmp423 = tmp422 +- tmp421
  847
+print tmp423
  848
+tmp424 = tmp423 +- tmp422
  849
+print tmp424
  850
+tmp425 = tmp424 +- tmp423
  851
+print tmp425
  852
+tmp426 = tmp425 +- tmp424
  853
+print tmp426
  854
+tmp427 = tmp426 +- tmp425
  855
+print tmp427
  856
+tmp428 = tmp427 +- tmp426
  857
+print tmp428
  858
+tmp429 = tmp428 +- tmp427
  859
+print tmp429
  860
+tmp430 = tmp429 +- tmp428
  861
+print tmp430
  862
+tmp431 = tmp430 +- tmp429
  863
+print tmp431
  864
+tmp432 = tmp431 +- tmp430
  865
+print tmp432
  866
+tmp433 = tmp432 +- tmp431
  867
+print tmp433
  868
+tmp434 = tmp433 +- tmp432
  869
+print tmp434
  870
+tmp435 = tmp434 +- tmp433
  871
+print tmp435
  872
+tmp436 = tmp435 +- tmp434
  873
+print tmp436
  874
+tmp437 = tmp436 +- tmp435
  875
+print tmp437
  876
+tmp438 = tmp437 +- tmp436
  877
+print tmp438
  878
+tmp439 = tmp438 +- tmp437
  879
+print tmp439
  880
+tmp440 = tmp439 +- tmp438
  881
+print tmp440
  882
+tmp441 = tmp440 +- tmp439
  883
+print tmp441
  884
+tmp442 = tmp441 +- tmp440
  885
+print tmp442
  886
+tmp443 = tmp442 +- tmp441
  887
+print tmp443
  888
+tmp444 = tmp443 +- tmp442
  889
+print tmp444
  890
+tmp445 = tmp444 +- tmp443
  891
+print tmp445
  892
+tmp446 = tmp445 +- tmp444
  893
+print tmp446
  894
+tmp447 = tmp446 +- tmp445
  895
+print tmp447
  896
+tmp448 = tmp447 +- tmp446
  897
+print tmp448
  898
+tmp449 = tmp448 +- tmp447
  899
+print tmp449
  900
+tmp450 = tmp449 +- tmp448
  901
+print tmp450
  902
+tmp451 = tmp450 +- tmp449
  903
+print tmp451
  904
+tmp452 = tmp451 +- tmp450
  905
+print tmp452
  906
+tmp453 = tmp452 +- tmp451
  907
+print tmp453
  908
+tmp454 = tmp453 +- tmp452
  909
+print tmp454
  910
+tmp455 = tmp454 +- tmp453
  911
+print tmp455
  912
+tmp456 = tmp455 +- tmp454
  913
+print tmp456
  914
+tmp457 = tmp456 +- tmp455
  915
+print tmp457
  916
+tmp458 = tmp457 +- tmp456
  917
+print tmp458
  918
+tmp459 = tmp458 +- tmp457
  919
+print tmp459
  920
+tmp460 = tmp459 +- tmp458
  921
+print tmp460
  922
+tmp461 = tmp460 +- tmp459
  923
+print tmp461
  924
+tmp462 = tmp461 +- tmp460
  925
+print tmp462
  926
+tmp463 = tmp462 +- tmp461
  927
+print tmp463
  928
+tmp464 = tmp463 +- tmp462
  929
+print tmp464
  930
+tmp465 = tmp464 +- tmp463
  931
+print tmp465
  932
+tmp466 = tmp465 +- tmp464
  933
+print tmp466
  934
+tmp467 = tmp466 +- tmp465
  935
+print tmp467
  936
+tmp468 = tmp467 +- tmp466
  937
+print tmp468
  938
+tmp469 = tmp468 +- tmp467
  939
+print tmp469
  940
+tmp470 = tmp469 +- tmp468
  941
+print tmp470
  942
+tmp471 = tmp470 +- tmp469
  943
+print tmp471
  944
+tmp472 = tmp471 +- tmp470
  945
+print tmp472
  946
+tmp473 = tmp472 +- tmp471
  947
+print tmp473
  948
+tmp474 = tmp473 +- tmp472
  949
+print tmp474
  950
+tmp475 = tmp474 +- tmp473
  951
+print tmp475
  952
+tmp476 = tmp475 +- tmp474
  953
+print tmp476
  954
+tmp477 = tmp476 +- tmp475
  955
+print tmp477
  956
+tmp478 = tmp477 +- tmp476
  957
+print tmp478
  958
+tmp479 = tmp478 +- tmp477
  959
+print tmp479
  960
+tmp480 = tmp479 +- tmp478
  961
+print tmp480
  962
+tmp481 = tmp480 +- tmp479
  963
+print tmp481
  964
+tmp482 = tmp481 +- tmp480
  965
+print tmp482
  966
+tmp483 = tmp482 +- tmp481
  967
+print tmp483
  968
+tmp484 = tmp483 +- tmp482
  969
+print tmp484
  970
+tmp485 = tmp484 +- tmp483
  971
+print tmp485
  972
+tmp486 = tmp485 +- tmp484
  973
+print tmp486
  974
+tmp487 = tmp486 +- tmp485
  975
+print tmp487
  976
+tmp488 = tmp487 +- tmp486
  977
+print tmp488
  978
+tmp489 = tmp488 +- tmp487
  979
+print tmp489
  980
+tmp490 = tmp489 +- tmp488
  981
+print tmp490
  982
+tmp491 = tmp490 +- tmp489
  983
+print tmp491
  984
+tmp492 = tmp491 +- tmp490
  985
+print tmp492
  986
+tmp493 = tmp492 +- tmp491
  987
+print tmp493
  988
+tmp494 = tmp493 +- tmp492
  989
+print tmp494
  990
+tmp495 = tmp494 +- tmp493