ashutosh1919 commited on
Commit
4da8a9d
1 Parent(s): 2b9363f

Added code to generate data and train model

Browse files
.DS_Store ADDED
Binary file (6.15 kB). View file
 
TrainPerceptron.ipynb ADDED
@@ -0,0 +1,348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "9f3fb515-747d-4e93-bf07-de5553a6e958",
7
+ "metadata": {
8
+ "tags": []
9
+ },
10
+ "outputs": [],
11
+ "source": [
12
+ "import numpy as np\n",
13
+ "from quantum_perceptron.utils import plot_img_from_data, get_vector_from_int, get_int_from_vector\n",
14
+ "from quantum_perceptron.train import generate_dataset, PerceptronTrainer\n",
15
+ "from quantum_perceptron import Perceptron"
16
+ ]
17
+ },
18
+ {
19
+ "cell_type": "markdown",
20
+ "id": "681740ed-ea82-428e-a5c8-9d44cfe92b2e",
21
+ "metadata": {},
22
+ "source": [
23
+ "# Generate Dataset\n",
24
+ "\n",
25
+ "Generate dataset to train 4 qubit perceptron."
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "code",
30
+ "execution_count": 2,
31
+ "id": "eba68da3-013e-4501-bdaa-67c82cef393d",
32
+ "metadata": {
33
+ "tags": []
34
+ },
35
+ "outputs": [
36
+ {
37
+ "data": {
38
+ "image/png": "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\n",
39
+ "text/plain": [
40
+ "<Figure size 640x480 with 1 Axes>"
41
+ ]
42
+ },
43
+ "metadata": {},
44
+ "output_type": "display_data"
45
+ }
46
+ ],
47
+ "source": [
48
+ "fixed_weight = 626\n",
49
+ "num_qubits = 4\n",
50
+ "plot_img_from_data(fixed_weight, num_qubits)"
51
+ ]
52
+ },
53
+ {
54
+ "cell_type": "code",
55
+ "execution_count": 3,
56
+ "id": "18e6cc2b-51be-4d83-8e3a-4bbd4078bcf7",
57
+ "metadata": {
58
+ "tags": []
59
+ },
60
+ "outputs": [
61
+ {
62
+ "name": "stderr",
63
+ "output_type": "stream",
64
+ "text": [
65
+ "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [19:38<00:00, 55.59it/s]"
66
+ ]
67
+ },
68
+ {
69
+ "name": "stdout",
70
+ "output_type": "stream",
71
+ "text": [
72
+ "Number of positive samples: 274\n",
73
+ "Number of negative samples: 65262\n",
74
+ "Saved data to ./data/sample_space_qubits_4_fweight_626.txt\n",
75
+ "Saved training data to ./data/train_space_qubits_4_fweight_626.txt\n"
76
+ ]
77
+ },
78
+ {
79
+ "name": "stderr",
80
+ "output_type": "stream",
81
+ "text": [
82
+ "\n"
83
+ ]
84
+ }
85
+ ],
86
+ "source": [
87
+ "generate_dataset(num_qubits=num_qubits, fixed_weight=fixed_weight)"
88
+ ]
89
+ },
90
+ {
91
+ "cell_type": "markdown",
92
+ "id": "ecd46307-eb53-46b4-809a-4493b1661d62",
93
+ "metadata": {},
94
+ "source": [
95
+ "# Perceptron Training\n",
96
+ "\n",
97
+ "Train generated dataset with 4 qubit perceptron. We will initialize random weight and will train perceptron so that it gradually updates the weight to the `fixed_weight` with which the dataset is generated."
98
+ ]
99
+ },
100
+ {
101
+ "cell_type": "code",
102
+ "execution_count": 4,
103
+ "id": "b6081742-8913-4d46-a6bc-d62bc2eb715b",
104
+ "metadata": {
105
+ "tags": []
106
+ },
107
+ "outputs": [
108
+ {
109
+ "name": "stderr",
110
+ "output_type": "stream",
111
+ "text": [
112
+ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mashutosh1919\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n"
113
+ ]
114
+ },
115
+ {
116
+ "data": {
117
+ "text/html": [
118
+ "Tracking run with wandb version 0.14.2"
119
+ ],
120
+ "text/plain": [
121
+ "<IPython.core.display.HTML object>"
122
+ ]
123
+ },
124
+ "metadata": {},
125
+ "output_type": "display_data"
126
+ },
127
+ {
128
+ "data": {
129
+ "text/html": [
130
+ "Run data is saved locally in <code>/Users/ashutosh1919/Documents/IUB/QuantumProgramming/quantum-perceptron/wandb/run-20230415_181130-p665sffu</code>"
131
+ ],
132
+ "text/plain": [
133
+ "<IPython.core.display.HTML object>"
134
+ ]
135
+ },
136
+ "metadata": {},
137
+ "output_type": "display_data"
138
+ },
139
+ {
140
+ "data": {
141
+ "text/html": [
142
+ "Syncing run <strong><a href='https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu' target=\"_blank\">vivid-lake-5</a></strong> to <a href='https://wandb.ai/ashutosh1919/quantum-perceptron' target=\"_blank\">Weights & Biases</a> (<a href='https://wandb.me/run' target=\"_blank\">docs</a>)<br/>"
143
+ ],
144
+ "text/plain": [
145
+ "<IPython.core.display.HTML object>"
146
+ ]
147
+ },
148
+ "metadata": {},
149
+ "output_type": "display_data"
150
+ },
151
+ {
152
+ "data": {
153
+ "text/html": [
154
+ " View project at <a href='https://wandb.ai/ashutosh1919/quantum-perceptron' target=\"_blank\">https://wandb.ai/ashutosh1919/quantum-perceptron</a>"
155
+ ],
156
+ "text/plain": [
157
+ "<IPython.core.display.HTML object>"
158
+ ]
159
+ },
160
+ "metadata": {},
161
+ "output_type": "display_data"
162
+ },
163
+ {
164
+ "data": {
165
+ "text/html": [
166
+ " View run at <a href='https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu' target=\"_blank\">https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu</a>"
167
+ ],
168
+ "text/plain": [
169
+ "<IPython.core.display.HTML object>"
170
+ ]
171
+ },
172
+ "metadata": {},
173
+ "output_type": "display_data"
174
+ }
175
+ ],
176
+ "source": [
177
+ "trainer = PerceptronTrainer(\n",
178
+ " num_qubits=num_qubits,\n",
179
+ " fixed_weight=fixed_weight,\n",
180
+ " dataset_path=\"./data/train_space_qubits_4_fweight_626.txt\"\n",
181
+ ")"
182
+ ]
183
+ },
184
+ {
185
+ "cell_type": "code",
186
+ "execution_count": 5,
187
+ "id": "c07e3adf-43e8-4f70-9f53-4b7367d7df8f",
188
+ "metadata": {
189
+ "tags": []
190
+ },
191
+ "outputs": [
192
+ {
193
+ "name": "stdout",
194
+ "output_type": "stream",
195
+ "text": [
196
+ "Randomly initialized weight before training:\n"
197
+ ]
198
+ },
199
+ {
200
+ "data": {
201
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGFCAYAAAASI+9IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAFx0lEQVR4nO3ZsWobSwCG0VnhVlIvrPd/MIN6a3vNre5XhDjZgMSG+JzWi/mr+RjNMuecAwDGGIe9BwDw9xAFACIKAEQUAIgoABBRACCiAEDetnz0eDzG7XYbx+NxLMvy6k0APNmcc6zrOi6Xyzgcvr4PbIrC7XYb1+v1aeMA2MfHx8d4f3//8u+bonA8Hvtnp9PpOcv4pfP5vPcEeKnPz8+9J3wr9/t9XK/XzvOvbIrC/z8ZnU4nUQCewlmyj989AXhoBiCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoA5G3vAfzcnHPvCfBSy7LsPYGfcFMAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAvP3Jx+fz+VU7+MGcc+8J386yLHtPgN25KQAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEDetnw053z1Dn5wv9/3ngD8g353nm+KwrquTxnDdufzee8JwD9oXddfni/L3HANeDwe43a7jePxOJZleepAAF5vzjnWdR2Xy2UcDl+/HGyKAgDfg4dmACIKAEQUAIgoABBRACCiAEBEAYD8B/mjS+1sJXdtAAAAAElFTkSuQmCC\n",
202
+ "text/plain": [
203
+ "<Figure size 640x480 with 1 Axes>"
204
+ ]
205
+ },
206
+ "metadata": {},
207
+ "output_type": "display_data"
208
+ }
209
+ ],
210
+ "source": [
211
+ "print(\"Randomly initialized weight before training:\")\n",
212
+ "plot_img_from_data(trainer.weight_variable, num_qubits)"
213
+ ]
214
+ },
215
+ {
216
+ "cell_type": "code",
217
+ "execution_count": 6,
218
+ "id": "92be5fcf-e82a-45a6-8e26-3b5bb89101c7",
219
+ "metadata": {
220
+ "tags": []
221
+ },
222
+ "outputs": [
223
+ {
224
+ "name": "stderr",
225
+ "output_type": "stream",
226
+ "text": [
227
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:56<00:00, 26.25it/s]\n",
228
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:57<00:00, 26.03it/s]\n",
229
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:55<00:00, 26.41it/s]\n",
230
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:52<00:00, 27.15it/s]\n",
231
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:49<00:00, 27.81it/s]\n",
232
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:56<00:00, 26.14it/s]\n",
233
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:58<00:00, 25.78it/s]\n",
234
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:48<00:00, 27.99it/s]\n",
235
+ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:54<00:00, 26.72it/s]\n",
236
+ " 32%|████████████████████████████████████▋ | 963/3050 [00:35<01:17, 26.77it/s]"
237
+ ]
238
+ },
239
+ {
240
+ "name": "stdout",
241
+ "output_type": "stream",
242
+ "text": [
243
+ "Training converged at step: 28414\n"
244
+ ]
245
+ },
246
+ {
247
+ "name": "stderr",
248
+ "output_type": "stream",
249
+ "text": [
250
+ "\n"
251
+ ]
252
+ }
253
+ ],
254
+ "source": [
255
+ "trainer.train(num_epochs=10)"
256
+ ]
257
+ },
258
+ {
259
+ "cell_type": "code",
260
+ "execution_count": 7,
261
+ "id": "84c72b42-e18c-456f-b5a4-f41b577cb50b",
262
+ "metadata": {
263
+ "tags": []
264
+ },
265
+ "outputs": [
266
+ {
267
+ "name": "stdout",
268
+ "output_type": "stream",
269
+ "text": [
270
+ "Final weight after training:\n"
271
+ ]
272
+ },
273
+ {
274
+ "data": {
275
+ "image/png": "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\n",
276
+ "text/plain": [
277
+ "<Figure size 640x480 with 1 Axes>"
278
+ ]
279
+ },
280
+ "metadata": {},
281
+ "output_type": "display_data"
282
+ }
283
+ ],
284
+ "source": [
285
+ "print(\"Final weight after training:\")\n",
286
+ "plot_img_from_data(trainer.weight_variable, num_qubits)"
287
+ ]
288
+ },
289
+ {
290
+ "cell_type": "code",
291
+ "execution_count": 11,
292
+ "id": "fbecdf4f-68c8-4d4d-9a6f-9ef66bd182f0",
293
+ "metadata": {
294
+ "tags": []
295
+ },
296
+ "outputs": [
297
+ {
298
+ "data": {
299
+ "text/plain": [
300
+ "Text(0, 0.5, 'Fidelity Similarity with Actual Weight')"
301
+ ]
302
+ },
303
+ "execution_count": 11,
304
+ "metadata": {},
305
+ "output_type": "execute_result"
306
+ },
307
+ {
308
+ "data": {
309
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABPzklEQVR4nO3deVxU5f4H8M/swzqA7IjgiuW+ImYuSaKVS9rNW91c6trV8lph3qRUyq6iXrcWyza17i0tu2pW5u96UW6aprngkoobhgugiDCssz6/P5DRiaUZmGFg+LxfL14y5zznzPecgPn0PM85RyKEECAiIiJyE1JXF0BERETkSAw3RERE5FYYboiIiMitMNwQERGRW2G4ISIiIrfCcENERERuheGGiIiI3Irc1QU0NLPZjKtXr8LHxwcSicTV5RAREZENhBAoKipCeHg4pNLa+2aaXbi5evUqIiMjXV0GERER1cGlS5fQsmXLWts0u3Dj4+MDoOLk+Pr6urgaIiIisoVWq0VkZKTlc7w2zS7cVA5F+fr6MtwQERE1MbZMKeGEYiIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVlwabn744QeMHDkS4eHhkEgk2LJly+9uk5aWhp49e0KlUqFdu3ZYt26d0+skIiKipsOl4aakpATdunXDqlWrbGqfmZmJBx98EEOGDEF6ejpeeOEF/PnPf8b//d//OblSIiIiaipc+uDMESNGYMSIETa3X716NVq3bo1ly5YBAO666y7s2bMHK1asQEJCgrPKJCIiIhuU6U24UaKDUi5FsI/aZXU0qTk3+/btQ3x8vNWyhIQE7Nu3r8ZtdDodtFqt1RcRERE53g9nr2PA4l2Y9q/DLq2jSYWbnJwchISEWC0LCQmBVqtFWVlZtdukpKRAo9FYviIjIxuiVCIiInKRJhVu6iIpKQmFhYWWr0uXLrm6JCIiInIil865sVdoaChyc3OtluXm5sLX1xceHh7VbqNSqaBSqRqiPCIiImoEmlTPTVxcHFJTU62W7dixA3FxcS6qiIiIiBobl4ab4uJipKenIz09HUDFpd7p6enIysoCUDGkNGHCBEv7qVOn4sKFC/jb3/6G06dP491338WXX36JF1980RXlExERUSPk0nBz8OBB9OjRAz169AAAJCYmokePHpg3bx4AIDs72xJ0AKB169b47rvvsGPHDnTr1g3Lli3DRx99xMvAiYiIyMKlc24GDx4MIUSN66u7+/DgwYNx5MgRJ1ZFRERETVmTmnNDRERE9HsYboiIiMitMNwQERGRW2G4ISIiIrfCcENERERuheGGiIiI3ArDDREREbkVhhsiIiJyKww3RERE5FYYboiIiMitMNwQERGRQ9TyRKUGxXBDREREDiVx8fsz3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIiBxGuLgAAww0RERE5mETi2vdnuCEiIiK3wnBDREREboXhhoiIiNwKww0RERG5FbvDzaeffgqdTldluV6vx6effuqQooiIiIjqyu5wM3nyZBQWFlZZXlRUhMmTJzukKCIiIqK6sjvcCCEgqeYar8uXL0Oj0TikKCIiIqK6ktvasEePHpBIJJBIJBg6dCjk8tubmkwmZGZmYvjw4U4pkoiIiMhWNoebMWPGAADS09ORkJAAb29vyzqlUono6GiMGzfO4QUSERER2cPmcJOcnAwAiI6Oxvjx46FWq51WFBEREVFd2RxuKk2cOBFAxdVR165dg9lstlrfqlUrx1RGREREVAd2h5uzZ8/iqaeewt69e62WV040NplMDiuOiIiIyF52h5tJkyZBLpfj22+/RVhYWLVXThERERG5it3hJj09HYcOHULHjh2dUQ8RERFRvdh9n5u7774beXl5zqiFiIiIqN5sCjdardbytXjxYvztb39DWloabty4YbVOq9U6u14iIiKiWtk0LOXn52c1t0YIgaFDh1q14YRiIiKi5k0IV1dQwaZws2vXLmfXQURERG5CAtdebGRTuBk0aJCz6yAiIiJyCLuvljp27Fi1yyUSCdRqNVq1agWVSlXvwoiIiIjqwu5w071791rvbaNQKDB+/Hi8//77fEQDERERNTi7LwXfvHkz2rdvjw8++ADp6elIT0/HBx98gJiYGHz++ef4+OOPsXPnTsyZM8cZ9RIRERHVyu6emwULFuDNN99EQkKCZVmXLl3Q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/fs7vkIiIiJqMMINJt3YHG40Gg2AioP28fGBh4eHZZ1SqUS/fv0wZcoUx1dIREREDaYy2jThjhvbw83atWsBVDxbatasWfD09HRaUURERORaTflScLvn3EyYMAFXrlypsvzs2bO4ePGiI2oiIiIiV2n6o1L2h5tJkyZh7969VZbv378fkyZNckRNRERE5GJNt9+mDuHmyJEjuOeee6os79evH9LT0x1RExEREbmIOzxbyu5wI5FIUFRUVGV5YWEhTCaTQ4oiIiIi12rCU27sDzcDBw5ESkqKVZAxmUxISUnBgAEDHFocERERNSw3uBLc/scvLF68GAMHDkRMTAzuvfdeAMDu3buh1Wqxc+dOhxdIREREDed2tmm6XTd299zcfffdOHbsGB599FFcu3YNRUVFmDBhAk6fPo3OnTs7o0YiIiIim9XpMd7h4eFYuHCh1bKCggK88847mD59ukMKIyIiooZXOSzVrObc/FZqaioef/xxhIWFITk52RE1ERERkYs14WxTt3Bz6dIlzJ8/H61bt8awYcMAAJs3b0ZOTo7d+1q1ahWio6OhVqsRGxuLAwcO1Nq+oKAAzz33HMLCwqBSqdChQwds27atLodBREREv9GsLgU3GAzYuHEjEhISEBMTg/T0dPzjH/+AVCrFnDlzMHz4cCgUCrve/IsvvkBiYiKSk5Nx+PBhdOvWDQkJCbh27Vq17fV6Pe6//35cvHgRX331FTIyMvDhhx8iIiLCrvclIiKi2jXlYSmb59xERESgY8eO+NOf/oQNGzbA398fAPDYY4/V+c2XL1+OKVOmYPLkyQCA1atX47vvvsOaNWswe/bsKu3XrFmD/Px87N271xKkoqOja30PnU4HnU5nea3VautcLxERkbtzh0vBbe65MRqNkEgkkEgkkMlk9X5jvV6PQ4cOIT4+/nYxUini4+Oxb9++arfZunUr4uLi8NxzzyEkJASdO3fGwoULa715YEpKCjQajeUrMjKy3rUTERG5O0kTnnVjc7i5evUqnnnmGaxfvx6hoaEYN24cNm/eXOenhubl5cFkMiEkJMRqeUhISI1zdy5cuICvvvoKJpMJ27Ztw9y5c7Fs2TL8/e9/r/F9kpKSUFhYaPm6dOlSneolIiJqDtyg48b2cKNWq/HEE09g586dOH78OO666y7MmDEDRqMRCxYswI4dO5z++AWz2Yzg4GB88MEH6NWrF8aPH49XX30Vq1evrnEblUoFX19fqy8iIiKqwa1xqaY856ZOV0u1bdsWf//73/Hrr7/iu+++g06nw0MPPVSlF6Y2gYGBkMlkyM3NtVqem5uL0NDQarcJCwtDhw4drIbF7rrrLuTk5ECv19flUIiIiKgazS7cWDaWSjFixAh89dVXuHz5Ml555RWbt1UqlejVqxdSU1Mty8xmM1JTUxEXF1ftNvfccw/OnTsHs9lsWXbmzBmEhYVBqVTW/UCIiIgIQDMblvo9QUFBSExMtGubxMREfPjhh/jkk09w6tQpTJs2DSUlJZarpyZMmICkpCRL+2nTpiE/Px/PP/88zpw5g++++w4LFy7Ec88956jDICIiIjTtCcV1evyCo4wfPx7Xr1/HvHnzkJOTg+7du2P79u2W4a2srCxIpbfzV2RkJP7v//4PL774Irp27YqIiAg8//zzePnll111CERERG7FYKrou5FKm264kQjhDle0206r1UKj0aCwsJCTi4mIiH5j2X8y8PbOc3g8thUWPtzF1eVY2PP57bBhKSIiImrabhTrsPHgZQBAx1AfF1dTdy4dliIiIiLXMprMOJmtReqpa9jwcxZytToEeisxulvTfbSR3eHGZDJh3bp1SE1NxbVr16yuXAKAnTt3Oqw4IiIichyjyYxLN8twMa8Ex68U4kBmPo5eKkCRzmhpE+qrxvtP9oLG077nRTYmdoeb559/HuvWrcODDz6Izp071/kOxUREROQcxTojLlwvxpncYpzO1uJCXgnO5BbhakEZzNXMtPVSyhDXNhDDOoVgZNdweCjr/5glV7I73GzYsAFffvklHnjgAWfUQ0RERDYoN5iQlV+KC9dLkJFThLPXinCloAyX8kuRV1zzjW1VcimiW3ihXYg3erbyR59of9wd5gu5zH2m4dodbpRKJdq1a+eMWoiIiKgaBpMZxy4X4ODFm/jlqhanc7Q4d6242l6YSoHeSrQN8sZdYb5oF+yNtkHeaBPkhSBvVZO+zNsWdoebmTNn4s0338Q777zDISkiIiInEUIg9dQ1fHHwEvaey0OJvurzG31UckQHeqFdsDc6hvogMsATkf6eaNXCExqPpjtnpr5sCjdjx461er1z5058//336NSpExQK65O3adMmx1VHRETUDBlMZry08Si+Tr9qWearliO2TQt0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IOTk5FgFHEfem+ann36yfG80GnHo0CHcddddACo+zH/55RdER0ejXbt2Vl/2BBpfX1+Eh4dbXa4NAD/++CPuvvvueh/D3XffjZKSEstrhUIBk8lk1aZnz57IyMiochzt2rWz6vG683xUvq48H5XHMn78eHz44Yf44osv8O9//xv5+fn1PgYid8WeG6JmrEuXLnjiiSfw1ltvWS0fPHgwrl+/jiVLluCRRx7B9u3b8f3338PX19ch77tq1Sq0b98ed911F1asWIGbN2/iqaeeAgA899xz+PDDD/HYY4/hb3/7GwICAnDu3Dls2LABH330EWQymc3vM2vWLCQnJ6Nt27bo3r071q5di/T0dHz22Wc27+PGjRv4wx/+gKeeegpdu3aFj48PDh48iCVLlmD06NGWdtHR0UhNTcU999wDlUoFf39/zJs3Dw899BBatWqFRx55BFKpFEePHsWJEyfw97//3bLtxo0b0bt3bwwYMACfffYZDhw4gI8//hgAsHz5coSFhaFHjx6QSqXYuHEjQkND4efnZ/MxEDU37Lkhaubmz59fZdjorrvuwrvvvotVq1ahW7duOHDgQLVXEtXVokWLsGjRInTr1g179uzB1q1bERgYCACW3haTyYRhw4ahS5cueOGFF+Dn52fV22GLGTNmIDExETNnzkSXLl2wfft2bN26Fe3bt7d5H97e3oiNjcWKFSswcOBAdO7cGXPnzsWUKVPwzjvvWNotW7YMO3bsQGRkJHr06AEASEhIwLfffov//Oc/6NOnD/r164cVK1YgKirK6j1ef/11bNiwAV27dsWnn36K9evXW3qXfHx8sGTJEvTu3Rt9+vTBxYsXsW3bNrvPBVFzIhG/HVgnIqIGI5FIsHnzZowZM8bVpRC5DUZ/IiIicisMN0RERORWOKGYiMiFODOAyPHYc0NERERuheGGiIiI3ArDDREREbkVhhsiIiJyKww3RERE5FYYboiIiMitMNwQERGRW2G4ISIiIrfy/yibqvQU92b9AAAAAElFTkSuQmCC\n",
310
+ "text/plain": [
311
+ "<Figure size 640x480 with 1 Axes>"
312
+ ]
313
+ },
314
+ "metadata": {},
315
+ "output_type": "display_data"
316
+ }
317
+ ],
318
+ "source": [
319
+ "import matplotlib.pyplot as plt\n",
320
+ "\n",
321
+ "plt.plot(list(range(trainer.num_steps)), sorted(trainer.accumulate_loss))\n",
322
+ "plt.xlabel(\"Number of Steps\")\n",
323
+ "plt.ylabel(\"Fidelity Similarity with Actual Weight\")"
324
+ ]
325
+ }
326
+ ],
327
+ "metadata": {
328
+ "kernelspec": {
329
+ "display_name": "quantum",
330
+ "language": "python",
331
+ "name": "quantum"
332
+ },
333
+ "language_info": {
334
+ "codemirror_mode": {
335
+ "name": "ipython",
336
+ "version": 3
337
+ },
338
+ "file_extension": ".py",
339
+ "mimetype": "text/x-python",
340
+ "name": "python",
341
+ "nbconvert_exporter": "python",
342
+ "pygments_lexer": "ipython3",
343
+ "version": "3.8.16"
344
+ }
345
+ },
346
+ "nbformat": 4,
347
+ "nbformat_minor": 5
348
+ }
data/sample_space_qubits_4_fweight_626.txt ADDED
The diff for this file is too large to render. See raw diff
 
data/train_space_qubits_4_fweight_626.txt ADDED
@@ -0,0 +1,3050 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 16510,0
2
+ 25308,0
3
+ 45953,0
4
+ 55467,0
5
+ 21450,0
6
+ 35992,0
7
+ 62900,0
8
+ 61310,0
9
+ 49398,0
10
+ 18979,0
11
+ 26701,0
12
+ 20136,0
13
+ 56331,0
14
+ 37822,0
15
+ 15238,0
16
+ 2152,0
17
+ 63244,0
18
+ 5432,0
19
+ 414,0
20
+ 45749,0
21
+ 3544,0
22
+ 44728,0
23
+ 21722,0
24
+ 9115,0
25
+ 3807,0
26
+ 53311,0
27
+ 3787,0
28
+ 61967,0
29
+ 4452,0
30
+ 18964,0
31
+ 59893,0
32
+ 2811,0
33
+ 29521,0
34
+ 13007,0
35
+ 29106,0
36
+ 23412,0
37
+ 27383,0
38
+ 1983,0
39
+ 165,0
40
+ 40881,0
41
+ 45338,0
42
+ 22596,0
43
+ 40586,0
44
+ 19972,0
45
+ 32613,0
46
+ 4480,0
47
+ 32157,1
48
+ 36179,0
49
+ 25427,0
50
+ 22474,0
51
+ 32506,0
52
+ 8218,0
53
+ 24510,0
54
+ 4788,0
55
+ 29550,0
56
+ 11340,0
57
+ 53316,0
58
+ 13535,0
59
+ 49919,0
60
+ 32083,0
61
+ 34868,0
62
+ 1282,0
63
+ 11218,0
64
+ 40575,0
65
+ 25965,0
66
+ 17983,0
67
+ 2715,0
68
+ 57126,0
69
+ 57445,0
70
+ 45625,0
71
+ 24164,0
72
+ 51804,0
73
+ 49918,0
74
+ 4279,0
75
+ 36585,0
76
+ 42160,0
77
+ 43284,0
78
+ 19469,0
79
+ 51251,0
80
+ 51532,0
81
+ 17484,0
82
+ 37128,0
83
+ 50201,0
84
+ 60642,0
85
+ 35273,0
86
+ 58605,0
87
+ 17795,0
88
+ 56139,0
89
+ 15794,0
90
+ 52954,0
91
+ 38035,0
92
+ 37477,0
93
+ 34246,0
94
+ 64976,0
95
+ 35765,0
96
+ 57960,0
97
+ 21443,0
98
+ 31474,0
99
+ 18717,0
100
+ 54265,0
101
+ 1736,0
102
+ 30864,0
103
+ 64128,0
104
+ 880,1
105
+ 44013,0
106
+ 39883,0
107
+ 24324,0
108
+ 42620,0
109
+ 23920,0
110
+ 32829,0
111
+ 57315,0
112
+ 45024,0
113
+ 30414,0
114
+ 33029,0
115
+ 31875,0
116
+ 46026,0
117
+ 9429,0
118
+ 47739,0
119
+ 13833,0
120
+ 9974,0
121
+ 41709,0
122
+ 15136,0
123
+ 63614,0
124
+ 50054,0
125
+ 1626,0
126
+ 35713,0
127
+ 44095,0
128
+ 11994,0
129
+ 33886,0
130
+ 44770,0
131
+ 10772,0
132
+ 54569,0
133
+ 24835,0
134
+ 13961,0
135
+ 55835,0
136
+ 28015,0
137
+ 58129,0
138
+ 17213,0
139
+ 55715,0
140
+ 53067,0
141
+ 42952,0
142
+ 43528,0
143
+ 45700,0
144
+ 23626,0
145
+ 21897,0
146
+ 41051,0
147
+ 11544,0
148
+ 53766,0
149
+ 48282,0
150
+ 5175,0
151
+ 30933,0
152
+ 59537,0
153
+ 2900,0
154
+ 42353,0
155
+ 98,1
156
+ 33867,0
157
+ 20365,0
158
+ 23360,0
159
+ 11315,0
160
+ 4118,0
161
+ 56267,0
162
+ 14294,0
163
+ 19621,0
164
+ 1118,0
165
+ 37389,0
166
+ 33704,0
167
+ 36049,0
168
+ 17246,0
169
+ 44603,0
170
+ 33138,0
171
+ 638,1
172
+ 44092,0
173
+ 14210,0
174
+ 64895,0
175
+ 49563,0
176
+ 50963,0
177
+ 4629,0
178
+ 22156,0
179
+ 26848,0
180
+ 48255,0
181
+ 1499,0
182
+ 29132,0
183
+ 40092,0
184
+ 16573,0
185
+ 62720,0
186
+ 52657,0
187
+ 62647,0
188
+ 1779,0
189
+ 55821,0
190
+ 53784,0
191
+ 56653,0
192
+ 24126,0
193
+ 56329,0
194
+ 29820,0
195
+ 51293,0
196
+ 39659,0
197
+ 40564,0
198
+ 24198,0
199
+ 36954,0
200
+ 41059,0
201
+ 26816,0
202
+ 13292,0
203
+ 64897,1
204
+ 35736,0
205
+ 51583,0
206
+ 13226,0
207
+ 54430,0
208
+ 14199,0
209
+ 57418,0
210
+ 50372,0
211
+ 37410,0
212
+ 48606,0
213
+ 21486,0
214
+ 29042,0
215
+ 58557,0
216
+ 41101,0
217
+ 36968,0
218
+ 32025,0
219
+ 18832,0
220
+ 36991,0
221
+ 42059,0
222
+ 9590,0
223
+ 8294,0
224
+ 51460,0
225
+ 58315,0
226
+ 24547,0
227
+ 51543,0
228
+ 54181,0
229
+ 45311,0
230
+ 40415,0
231
+ 30941,0
232
+ 64679,0
233
+ 54814,0
234
+ 50421,0
235
+ 1911,0
236
+ 10063,0
237
+ 3845,0
238
+ 22911,0
239
+ 24561,0
240
+ 11491,0
241
+ 39579,0
242
+ 18445,0
243
+ 9446,0
244
+ 36472,0
245
+ 36884,0
246
+ 35529,0
247
+ 11901,0
248
+ 61777,0
249
+ 48365,0
250
+ 2737,0
251
+ 52371,0
252
+ 40292,0
253
+ 2098,0
254
+ 560,1
255
+ 49264,0
256
+ 30848,0
257
+ 64336,0
258
+ 37868,0
259
+ 10586,0
260
+ 40745,0
261
+ 61606,0
262
+ 31712,0
263
+ 61350,0
264
+ 56301,0
265
+ 39778,0
266
+ 21033,0
267
+ 12156,0
268
+ 58466,0
269
+ 40560,0
270
+ 176,0
271
+ 18924,0
272
+ 61657,0
273
+ 36745,0
274
+ 26186,0
275
+ 18097,0
276
+ 13761,0
277
+ 8249,0
278
+ 12545,0
279
+ 52075,0
280
+ 25068,0
281
+ 40407,0
282
+ 9330,0
283
+ 22128,0
284
+ 41922,0
285
+ 63136,0
286
+ 43585,0
287
+ 23109,0
288
+ 19425,0
289
+ 31012,0
290
+ 729,0
291
+ 26901,0
292
+ 50161,0
293
+ 25803,0
294
+ 47501,1
295
+ 19259,0
296
+ 2337,0
297
+ 169,0
298
+ 32043,0
299
+ 575,0
300
+ 7535,0
301
+ 37289,0
302
+ 25250,0
303
+ 35402,0
304
+ 7544,0
305
+ 27554,0
306
+ 6784,0
307
+ 24490,0
308
+ 26397,0
309
+ 16908,0
310
+ 26956,0
311
+ 45525,0
312
+ 49498,0
313
+ 60148,0
314
+ 24483,0
315
+ 62396,0
316
+ 19306,0
317
+ 56985,0
318
+ 16089,0
319
+ 26874,0
320
+ 54777,0
321
+ 21981,0
322
+ 56576,0
323
+ 642,0
324
+ 14868,0
325
+ 30913,0
326
+ 41584,0
327
+ 40537,0
328
+ 48377,0
329
+ 45414,0
330
+ 16446,0
331
+ 61840,0
332
+ 2084,0
333
+ 3980,0
334
+ 7753,0
335
+ 18594,0
336
+ 46280,0
337
+ 62317,0
338
+ 25220,0
339
+ 12354,0
340
+ 18557,0
341
+ 52631,0
342
+ 42830,0
343
+ 41278,0
344
+ 12388,0
345
+ 33017,0
346
+ 29077,0
347
+ 44985,0
348
+ 47759,0
349
+ 15103,0
350
+ 32900,0
351
+ 33144,0
352
+ 39094,0
353
+ 9821,0
354
+ 38946,0
355
+ 59688,0
356
+ 38534,0
357
+ 33248,0
358
+ 12743,0
359
+ 7292,0
360
+ 42399,0
361
+ 11323,0
362
+ 38984,0
363
+ 2696,0
364
+ 9233,0
365
+ 19959,0
366
+ 17502,0
367
+ 17702,0
368
+ 27282,0
369
+ 20030,0
370
+ 61575,0
371
+ 62882,0
372
+ 4873,0
373
+ 59248,0
374
+ 9580,0
375
+ 32805,0
376
+ 56417,0
377
+ 54452,0
378
+ 49888,0
379
+ 64518,0
380
+ 63956,0
381
+ 29315,0
382
+ 55998,0
383
+ 20727,0
384
+ 59384,0
385
+ 5923,0
386
+ 10741,0
387
+ 64519,0
388
+ 38954,0
389
+ 55044,0
390
+ 49691,0
391
+ 43016,0
392
+ 23664,0
393
+ 35565,0
394
+ 49143,0
395
+ 64543,0
396
+ 8629,0
397
+ 13646,0
398
+ 16080,0
399
+ 646,0
400
+ 64752,0
401
+ 45120,0
402
+ 6009,0
403
+ 7600,0
404
+ 46682,0
405
+ 24030,0
406
+ 53455,0
407
+ 47880,0
408
+ 23914,0
409
+ 60850,0
410
+ 26799,0
411
+ 28146,0
412
+ 65284,0
413
+ 21128,0
414
+ 31573,0
415
+ 39499,0
416
+ 3696,0
417
+ 15393,0
418
+ 52166,0
419
+ 19507,0
420
+ 35136,0
421
+ 49062,0
422
+ 60557,1
423
+ 52933,0
424
+ 14325,0
425
+ 19336,0
426
+ 36559,0
427
+ 37265,0
428
+ 63349,0
429
+ 12108,0
430
+ 34852,0
431
+ 46491,0
432
+ 12607,0
433
+ 22107,0
434
+ 50735,0
435
+ 44512,0
436
+ 24384,0
437
+ 3798,0
438
+ 18199,0
439
+ 51535,0
440
+ 34451,0
441
+ 5872,0
442
+ 46746,0
443
+ 6579,0
444
+ 65421,1
445
+ 43970,0
446
+ 41456,0
447
+ 61432,0
448
+ 46102,0
449
+ 27905,0
450
+ 22040,0
451
+ 18275,0
452
+ 18896,0
453
+ 33560,0
454
+ 2088,0
455
+ 44472,0
456
+ 41671,0
457
+ 31028,0
458
+ 8678,0
459
+ 65371,0
460
+ 56834,0
461
+ 53839,0
462
+ 19058,1
463
+ 47223,0
464
+ 44589,0
465
+ 38093,0
466
+ 52431,0
467
+ 64278,0
468
+ 50097,0
469
+ 30360,0
470
+ 18845,0
471
+ 65496,0
472
+ 46846,0
473
+ 34207,0
474
+ 25090,0
475
+ 38197,0
476
+ 12558,0
477
+ 28991,0
478
+ 16335,0
479
+ 43681,0
480
+ 20007,0
481
+ 61020,0
482
+ 60362,0
483
+ 41958,0
484
+ 30475,0
485
+ 13951,0
486
+ 29898,0
487
+ 58146,0
488
+ 57522,0
489
+ 20853,0
490
+ 30458,0
491
+ 17010,1
492
+ 16252,0
493
+ 21581,0
494
+ 14581,0
495
+ 62855,0
496
+ 10828,0
497
+ 9147,0
498
+ 9050,0
499
+ 50287,0
500
+ 43337,0
501
+ 27268,0
502
+ 34469,0
503
+ 24337,0
504
+ 10214,0
505
+ 53797,0
506
+ 54778,0
507
+ 39452,0
508
+ 57177,0
509
+ 5766,0
510
+ 54256,0
511
+ 36770,0
512
+ 27828,0
513
+ 58786,0
514
+ 31427,0
515
+ 45017,0
516
+ 47050,0
517
+ 21910,0
518
+ 37411,0
519
+ 18629,0
520
+ 50989,0
521
+ 53071,0
522
+ 38361,0
523
+ 44559,0
524
+ 9438,0
525
+ 25133,0
526
+ 6280,0
527
+ 16818,0
528
+ 33587,0
529
+ 60330,0
530
+ 2743,0
531
+ 20885,0
532
+ 56052,0
533
+ 15202,0
534
+ 8020,0
535
+ 47122,0
536
+ 50204,0
537
+ 63406,0
538
+ 40748,0
539
+ 1457,0
540
+ 65348,0
541
+ 14776,0
542
+ 27997,0
543
+ 49368,0
544
+ 49424,0
545
+ 59446,0
546
+ 45806,0
547
+ 34221,0
548
+ 55383,0
549
+ 15722,0
550
+ 55792,0
551
+ 7677,0
552
+ 59381,0
553
+ 17057,0
554
+ 52503,0
555
+ 6735,0
556
+ 7692,0
557
+ 26594,0
558
+ 25284,0
559
+ 14932,0
560
+ 44283,0
561
+ 49349,0
562
+ 56245,0
563
+ 50442,0
564
+ 52483,0
565
+ 19932,0
566
+ 10630,0
567
+ 8976,0
568
+ 56963,0
569
+ 22134,0
570
+ 4980,0
571
+ 16180,0
572
+ 30965,0
573
+ 7782,0
574
+ 34437,0
575
+ 44267,0
576
+ 27535,0
577
+ 10024,0
578
+ 35831,0
579
+ 22462,0
580
+ 31414,0
581
+ 31650,0
582
+ 11234,0
583
+ 48409,0
584
+ 30516,0
585
+ 16758,0
586
+ 15767,0
587
+ 39031,0
588
+ 62012,0
589
+ 38019,0
590
+ 16463,0
591
+ 50225,0
592
+ 11718,0
593
+ 46347,0
594
+ 44445,0
595
+ 64099,0
596
+ 22147,0
597
+ 65222,0
598
+ 17864,0
599
+ 58027,0
600
+ 42323,0
601
+ 14576,0
602
+ 42885,0
603
+ 2435,0
604
+ 25656,0
605
+ 17900,0
606
+ 26138,0
607
+ 62548,0
608
+ 7109,0
609
+ 31420,0
610
+ 41698,0
611
+ 37854,0
612
+ 16406,0
613
+ 23870,0
614
+ 40938,0
615
+ 5238,0
616
+ 64586,0
617
+ 112,1
618
+ 59371,0
619
+ 53940,0
620
+ 21332,0
621
+ 56854,0
622
+ 53658,0
623
+ 37840,0
624
+ 33563,0
625
+ 65299,0
626
+ 62776,0
627
+ 27810,0
628
+ 24318,0
629
+ 40199,0
630
+ 14280,0
631
+ 11966,0
632
+ 41190,0
633
+ 6511,0
634
+ 49051,0
635
+ 63940,0
636
+ 21750,0
637
+ 40491,0
638
+ 29149,0
639
+ 38712,0
640
+ 55090,0
641
+ 60030,0
642
+ 19120,0
643
+ 1,0
644
+ 4022,0
645
+ 21891,0
646
+ 8233,0
647
+ 54641,0
648
+ 39130,0
649
+ 65102,0
650
+ 58867,0
651
+ 26012,0
652
+ 27235,0
653
+ 2641,0
654
+ 9604,0
655
+ 39084,0
656
+ 14658,0
657
+ 26831,0
658
+ 12017,0
659
+ 54367,0
660
+ 57513,0
661
+ 43275,0
662
+ 27658,0
663
+ 24783,0
664
+ 17225,0
665
+ 279,0
666
+ 45249,0
667
+ 32061,0
668
+ 4526,0
669
+ 1797,0
670
+ 46606,0
671
+ 42656,0
672
+ 51324,0
673
+ 64017,0
674
+ 54190,0
675
+ 58904,0
676
+ 13609,0
677
+ 43821,0
678
+ 23884,0
679
+ 48443,0
680
+ 32670,0
681
+ 5233,0
682
+ 57505,0
683
+ 49767,0
684
+ 35841,0
685
+ 19721,0
686
+ 32981,0
687
+ 58297,0
688
+ 51156,0
689
+ 37676,0
690
+ 58663,0
691
+ 16437,0
692
+ 13203,0
693
+ 32813,0
694
+ 42068,0
695
+ 53416,0
696
+ 3532,0
697
+ 59870,0
698
+ 30509,0
699
+ 3769,0
700
+ 12627,0
701
+ 32842,0
702
+ 40080,0
703
+ 61136,0
704
+ 21087,0
705
+ 40532,0
706
+ 46262,0
707
+ 32160,0
708
+ 23216,0
709
+ 14165,0
710
+ 55915,0
711
+ 44214,0
712
+ 57434,0
713
+ 46391,0
714
+ 22424,0
715
+ 46198,0
716
+ 39376,0
717
+ 55385,0
718
+ 8479,0
719
+ 23797,0
720
+ 64353,0
721
+ 60974,0
722
+ 15216,0
723
+ 26570,0
724
+ 25493,0
725
+ 23949,1
726
+ 23946,0
727
+ 34866,0
728
+ 62066,0
729
+ 20535,0
730
+ 11798,0
731
+ 19289,0
732
+ 23703,0
733
+ 22370,0
734
+ 16862,0
735
+ 48451,0
736
+ 54654,0
737
+ 22096,0
738
+ 30032,0
739
+ 27064,0
740
+ 46266,0
741
+ 54749,0
742
+ 48570,0
743
+ 42607,0
744
+ 8633,0
745
+ 20320,0
746
+ 49144,0
747
+ 45677,0
748
+ 37817,0
749
+ 62194,0
750
+ 63642,0
751
+ 57066,0
752
+ 28543,0
753
+ 45566,0
754
+ 9715,0
755
+ 44723,0
756
+ 62849,0
757
+ 35425,0
758
+ 64082,0
759
+ 22111,0
760
+ 23822,0
761
+ 23645,0
762
+ 5861,0
763
+ 9940,0
764
+ 11852,0
765
+ 26474,0
766
+ 14624,0
767
+ 14386,0
768
+ 23159,0
769
+ 3507,0
770
+ 59187,0
771
+ 43419,0
772
+ 20117,0
773
+ 34588,0
774
+ 6286,0
775
+ 63908,0
776
+ 31317,0
777
+ 65280,0
778
+ 28373,0
779
+ 59957,0
780
+ 30060,0
781
+ 59362,0
782
+ 65412,0
783
+ 38684,0
784
+ 26170,0
785
+ 19797,0
786
+ 49259,0
787
+ 30311,0
788
+ 29530,0
789
+ 61200,0
790
+ 38827,0
791
+ 51664,0
792
+ 40217,0
793
+ 2964,0
794
+ 58623,0
795
+ 37216,0
796
+ 58244,0
797
+ 52364,0
798
+ 10660,0
799
+ 60991,0
800
+ 51276,0
801
+ 44057,0
802
+ 57851,0
803
+ 29101,0
804
+ 3039,0
805
+ 8120,0
806
+ 62155,0
807
+ 49965,0
808
+ 31072,0
809
+ 4547,0
810
+ 34732,0
811
+ 18020,0
812
+ 58457,0
813
+ 2417,0
814
+ 49001,0
815
+ 53748,0
816
+ 1009,0
817
+ 2678,1
818
+ 14826,0
819
+ 47140,0
820
+ 758,1
821
+ 37968,0
822
+ 48196,0
823
+ 5403,0
824
+ 40816,0
825
+ 10707,0
826
+ 49089,0
827
+ 20734,0
828
+ 43549,0
829
+ 23009,0
830
+ 54860,0
831
+ 7467,0
832
+ 52947,0
833
+ 6811,0
834
+ 22329,0
835
+ 5123,0
836
+ 22182,0
837
+ 21801,0
838
+ 30229,0
839
+ 11770,0
840
+ 53463,0
841
+ 50513,0
842
+ 54577,0
843
+ 51329,0
844
+ 18932,0
845
+ 18981,0
846
+ 58375,0
847
+ 39468,0
848
+ 64740,0
849
+ 44650,0
850
+ 39086,0
851
+ 47115,0
852
+ 2539,0
853
+ 57325,0
854
+ 48389,0
855
+ 39044,0
856
+ 57693,0
857
+ 13176,0
858
+ 44434,0
859
+ 11092,0
860
+ 53575,0
861
+ 47529,0
862
+ 14881,0
863
+ 28503,0
864
+ 16528,0
865
+ 42587,0
866
+ 42336,0
867
+ 63770,0
868
+ 34884,0
869
+ 34141,0
870
+ 31052,0
871
+ 60960,0
872
+ 42584,0
873
+ 34470,0
874
+ 12479,0
875
+ 861,0
876
+ 65138,0
877
+ 30255,0
878
+ 7846,0
879
+ 6171,0
880
+ 26350,0
881
+ 28957,0
882
+ 45290,0
883
+ 31733,0
884
+ 49609,0
885
+ 30468,0
886
+ 45568,0
887
+ 10566,0
888
+ 23279,0
889
+ 45769,0
890
+ 10767,0
891
+ 18313,0
892
+ 11860,0
893
+ 3488,0
894
+ 59967,0
895
+ 42444,0
896
+ 39945,0
897
+ 14060,0
898
+ 26205,0
899
+ 13912,0
900
+ 13123,0
901
+ 30552,0
902
+ 3277,0
903
+ 30439,0
904
+ 4605,0
905
+ 44948,0
906
+ 32405,0
907
+ 31559,0
908
+ 20298,0
909
+ 5767,0
910
+ 37987,0
911
+ 24604,0
912
+ 10895,0
913
+ 55995,0
914
+ 57902,0
915
+ 32948,0
916
+ 60869,0
917
+ 15124,0
918
+ 22670,0
919
+ 33232,0
920
+ 38991,0
921
+ 8463,0
922
+ 55319,0
923
+ 9533,0
924
+ 39314,0
925
+ 19112,0
926
+ 43287,0
927
+ 9074,1
928
+ 24834,0
929
+ 33040,0
930
+ 48070,0
931
+ 39175,0
932
+ 32131,0
933
+ 5211,0
934
+ 64693,0
935
+ 4052,0
936
+ 3182,0
937
+ 32609,0
938
+ 63790,0
939
+ 17061,0
940
+ 45209,0
941
+ 14568,0
942
+ 33581,0
943
+ 22859,0
944
+ 43271,0
945
+ 16050,0
946
+ 3611,0
947
+ 49711,0
948
+ 58430,0
949
+ 61665,0
950
+ 19351,0
951
+ 53862,0
952
+ 55423,0
953
+ 8157,0
954
+ 3763,0
955
+ 50744,0
956
+ 57273,0
957
+ 52320,0
958
+ 7095,0
959
+ 21191,0
960
+ 42650,0
961
+ 41173,0
962
+ 54405,0
963
+ 35442,1
964
+ 46912,0
965
+ 20101,0
966
+ 54445,0
967
+ 44158,0
968
+ 59680,0
969
+ 28309,0
970
+ 3585,0
971
+ 44330,0
972
+ 11625,0
973
+ 54843,0
974
+ 46723,0
975
+ 50545,0
976
+ 31014,0
977
+ 14865,0
978
+ 41873,0
979
+ 30752,0
980
+ 9299,0
981
+ 37309,0
982
+ 46673,0
983
+ 41220,0
984
+ 18257,0
985
+ 36465,0
986
+ 54869,0
987
+ 18581,0
988
+ 10082,0
989
+ 37929,0
990
+ 28296,0
991
+ 2340,0
992
+ 43461,0
993
+ 57166,0
994
+ 24031,0
995
+ 21976,0
996
+ 35195,0
997
+ 36801,0
998
+ 2916,0
999
+ 44439,0
1000
+ 63310,0
1001
+ 9856,0
1002
+ 16555,0
1003
+ 29571,0
1004
+ 40851,0
1005
+ 59883,0
1006
+ 20042,0
1007
+ 4003,0
1008
+ 58932,0
1009
+ 6659,0
1010
+ 34988,0
1011
+ 59518,0
1012
+ 18253,0
1013
+ 20758,0
1014
+ 41967,0
1015
+ 19356,0
1016
+ 57626,0
1017
+ 26801,0
1018
+ 55563,0
1019
+ 14428,0
1020
+ 60228,0
1021
+ 49680,0
1022
+ 32313,0
1023
+ 48549,0
1024
+ 60820,0
1025
+ 41447,0
1026
+ 57644,0
1027
+ 62114,0
1028
+ 27935,0
1029
+ 12502,0
1030
+ 3218,0
1031
+ 43558,0
1032
+ 49845,0
1033
+ 9216,0
1034
+ 54295,0
1035
+ 25687,0
1036
+ 58701,0
1037
+ 20657,0
1038
+ 55814,0
1039
+ 11202,0
1040
+ 43165,0
1041
+ 53548,0
1042
+ 44333,0
1043
+ 40473,0
1044
+ 4574,0
1045
+ 60889,0
1046
+ 45940,0
1047
+ 58181,0
1048
+ 12296,0
1049
+ 54851,0
1050
+ 56290,0
1051
+ 64315,0
1052
+ 54022,0
1053
+ 58242,0
1054
+ 46989,0
1055
+ 46808,0
1056
+ 818,1
1057
+ 63140,0
1058
+ 46462,0
1059
+ 18542,0
1060
+ 46791,0
1061
+ 64780,1
1062
+ 40289,0
1063
+ 51604,0
1064
+ 14234,0
1065
+ 8320,0
1066
+ 49679,0
1067
+ 14659,0
1068
+ 53090,0
1069
+ 58564,0
1070
+ 35032,0
1071
+ 20203,0
1072
+ 49503,0
1073
+ 48240,0
1074
+ 34476,0
1075
+ 41143,0
1076
+ 6479,0
1077
+ 46879,0
1078
+ 33239,0
1079
+ 29431,0
1080
+ 9956,0
1081
+ 64972,1
1082
+ 25162,0
1083
+ 44325,0
1084
+ 57109,0
1085
+ 9088,0
1086
+ 23646,0
1087
+ 30409,0
1088
+ 37850,0
1089
+ 1784,0
1090
+ 1848,0
1091
+ 38972,0
1092
+ 10509,0
1093
+ 16684,0
1094
+ 64,0
1095
+ 61154,0
1096
+ 16795,0
1097
+ 722,1
1098
+ 34832,0
1099
+ 46652,0
1100
+ 35211,0
1101
+ 19448,0
1102
+ 53123,0
1103
+ 26893,0
1104
+ 62793,0
1105
+ 7002,0
1106
+ 32571,0
1107
+ 50844,0
1108
+ 10135,0
1109
+ 26552,0
1110
+ 33235,0
1111
+ 52810,0
1112
+ 57234,0
1113
+ 27687,0
1114
+ 48956,0
1115
+ 54144,0
1116
+ 12588,0
1117
+ 1360,0
1118
+ 55224,0
1119
+ 42320,0
1120
+ 25983,0
1121
+ 24118,0
1122
+ 46770,0
1123
+ 56518,0
1124
+ 19433,0
1125
+ 4793,0
1126
+ 54364,0
1127
+ 25901,0
1128
+ 41997,0
1129
+ 13338,0
1130
+ 22541,0
1131
+ 48257,0
1132
+ 56860,0
1133
+ 62433,0
1134
+ 38791,0
1135
+ 63721,0
1136
+ 51419,0
1137
+ 2593,0
1138
+ 54164,0
1139
+ 48026,0
1140
+ 58848,0
1141
+ 30438,0
1142
+ 48676,0
1143
+ 10504,0
1144
+ 29473,0
1145
+ 11756,0
1146
+ 26918,0
1147
+ 47789,0
1148
+ 61571,0
1149
+ 11864,0
1150
+ 24280,0
1151
+ 51211,0
1152
+ 2692,0
1153
+ 50898,0
1154
+ 45847,0
1155
+ 18737,0
1156
+ 62030,0
1157
+ 52616,0
1158
+ 3363,0
1159
+ 39350,0
1160
+ 37646,0
1161
+ 30441,0
1162
+ 36207,0
1163
+ 47590,0
1164
+ 34834,0
1165
+ 55672,0
1166
+ 14540,0
1167
+ 5258,0
1168
+ 37001,0
1169
+ 23113,0
1170
+ 59188,0
1171
+ 3632,0
1172
+ 11935,0
1173
+ 23927,0
1174
+ 47042,0
1175
+ 5330,0
1176
+ 59703,0
1177
+ 34916,0
1178
+ 21453,0
1179
+ 41875,0
1180
+ 60474,0
1181
+ 65161,0
1182
+ 63119,0
1183
+ 680,0
1184
+ 3627,0
1185
+ 53119,0
1186
+ 61839,0
1187
+ 36771,0
1188
+ 51088,0
1189
+ 58065,0
1190
+ 35878,0
1191
+ 13107,0
1192
+ 50156,0
1193
+ 24437,0
1194
+ 4165,0
1195
+ 28798,0
1196
+ 6813,0
1197
+ 49694,0
1198
+ 52705,0
1199
+ 42475,0
1200
+ 55535,0
1201
+ 21105,0
1202
+ 6621,0
1203
+ 15512,0
1204
+ 64387,0
1205
+ 7678,0
1206
+ 1543,0
1207
+ 9024,0
1208
+ 9076,0
1209
+ 16683,0
1210
+ 47872,0
1211
+ 22532,0
1212
+ 51865,0
1213
+ 10277,0
1214
+ 52469,0
1215
+ 61633,0
1216
+ 62917,0
1217
+ 59244,0
1218
+ 54853,0
1219
+ 7139,0
1220
+ 60383,0
1221
+ 3847,0
1222
+ 37595,0
1223
+ 55197,0
1224
+ 494,0
1225
+ 31424,0
1226
+ 27286,0
1227
+ 17535,0
1228
+ 16331,0
1229
+ 54645,0
1230
+ 14711,0
1231
+ 25553,0
1232
+ 32344,0
1233
+ 56817,0
1234
+ 23937,0
1235
+ 28414,0
1236
+ 26925,0
1237
+ 59527,0
1238
+ 25257,0
1239
+ 25719,0
1240
+ 15053,0
1241
+ 43596,0
1242
+ 63506,0
1243
+ 14736,0
1244
+ 5814,0
1245
+ 3328,0
1246
+ 23322,0
1247
+ 27029,0
1248
+ 55173,0
1249
+ 18359,0
1250
+ 14692,0
1251
+ 9309,0
1252
+ 23976,0
1253
+ 1956,0
1254
+ 29514,0
1255
+ 28963,0
1256
+ 48992,0
1257
+ 7850,0
1258
+ 20128,0
1259
+ 5068,0
1260
+ 26625,0
1261
+ 60373,0
1262
+ 51737,0
1263
+ 20579,0
1264
+ 2214,0
1265
+ 39239,0
1266
+ 40736,0
1267
+ 23162,0
1268
+ 62872,0
1269
+ 26405,0
1270
+ 7645,0
1271
+ 10735,0
1272
+ 52563,0
1273
+ 7766,0
1274
+ 56731,0
1275
+ 14751,0
1276
+ 47959,0
1277
+ 41947,0
1278
+ 31821,0
1279
+ 29754,0
1280
+ 2929,0
1281
+ 44717,0
1282
+ 860,0
1283
+ 55588,0
1284
+ 55166,0
1285
+ 47780,0
1286
+ 60596,0
1287
+ 20305,0
1288
+ 12365,0
1289
+ 49757,0
1290
+ 56556,0
1291
+ 46358,0
1292
+ 56062,0
1293
+ 3154,0
1294
+ 56030,0
1295
+ 47826,0
1296
+ 60325,0
1297
+ 60804,0
1298
+ 15960,0
1299
+ 43760,0
1300
+ 15738,0
1301
+ 45716,0
1302
+ 44997,0
1303
+ 26693,0
1304
+ 10764,0
1305
+ 23972,0
1306
+ 34273,0
1307
+ 36007,0
1308
+ 26578,0
1309
+ 46058,0
1310
+ 53822,0
1311
+ 46161,0
1312
+ 58556,0
1313
+ 45289,0
1314
+ 45181,0
1315
+ 5956,0
1316
+ 14008,0
1317
+ 65474,0
1318
+ 36042,0
1319
+ 7464,0
1320
+ 31616,0
1321
+ 56665,0
1322
+ 14216,0
1323
+ 55033,0
1324
+ 22316,0
1325
+ 3394,0
1326
+ 17827,0
1327
+ 31850,0
1328
+ 23842,0
1329
+ 63390,0
1330
+ 17001,0
1331
+ 59818,0
1332
+ 33680,0
1333
+ 20661,0
1334
+ 61704,0
1335
+ 11489,0
1336
+ 64051,0
1337
+ 40724,0
1338
+ 27920,0
1339
+ 44542,0
1340
+ 30099,0
1341
+ 1598,0
1342
+ 18647,0
1343
+ 4076,0
1344
+ 25611,0
1345
+ 62099,0
1346
+ 37293,0
1347
+ 55978,0
1348
+ 10873,0
1349
+ 48176,0
1350
+ 3378,0
1351
+ 60048,0
1352
+ 49037,1
1353
+ 24121,0
1354
+ 7791,0
1355
+ 18407,0
1356
+ 2504,0
1357
+ 6660,0
1358
+ 47843,0
1359
+ 47150,0
1360
+ 41050,0
1361
+ 4774,0
1362
+ 12679,0
1363
+ 10490,0
1364
+ 52784,0
1365
+ 59707,0
1366
+ 172,0
1367
+ 38831,0
1368
+ 63812,0
1369
+ 57181,0
1370
+ 42922,0
1371
+ 41127,0
1372
+ 21808,0
1373
+ 32662,0
1374
+ 12660,0
1375
+ 12116,0
1376
+ 33844,0
1377
+ 58651,0
1378
+ 9379,0
1379
+ 36306,0
1380
+ 17978,0
1381
+ 64520,0
1382
+ 44047,0
1383
+ 51892,0
1384
+ 62677,0
1385
+ 36979,0
1386
+ 6044,0
1387
+ 19980,0
1388
+ 50646,0
1389
+ 8414,0
1390
+ 3687,0
1391
+ 42701,0
1392
+ 3112,0
1393
+ 35382,0
1394
+ 17002,0
1395
+ 1437,0
1396
+ 59791,0
1397
+ 22297,0
1398
+ 25881,0
1399
+ 2787,0
1400
+ 56134,0
1401
+ 52202,0
1402
+ 56339,0
1403
+ 37382,0
1404
+ 24868,0
1405
+ 4752,0
1406
+ 48300,0
1407
+ 50974,0
1408
+ 15651,0
1409
+ 34468,0
1410
+ 55449,0
1411
+ 30525,0
1412
+ 13816,0
1413
+ 8993,0
1414
+ 10219,0
1415
+ 28537,0
1416
+ 39244,0
1417
+ 60296,0
1418
+ 39632,0
1419
+ 60983,0
1420
+ 29114,0
1421
+ 26104,0
1422
+ 10610,0
1423
+ 17349,0
1424
+ 52534,0
1425
+ 58566,0
1426
+ 20272,0
1427
+ 21097,0
1428
+ 2763,0
1429
+ 11709,0
1430
+ 24008,0
1431
+ 53935,0
1432
+ 4222,0
1433
+ 43329,0
1434
+ 5166,0
1435
+ 57808,0
1436
+ 3964,0
1437
+ 4849,0
1438
+ 22991,0
1439
+ 29572,0
1440
+ 19443,0
1441
+ 29509,0
1442
+ 36258,0
1443
+ 38284,0
1444
+ 56443,0
1445
+ 16222,0
1446
+ 46467,0
1447
+ 54508,0
1448
+ 20499,0
1449
+ 52310,0
1450
+ 33290,0
1451
+ 64757,0
1452
+ 2955,0
1453
+ 11587,0
1454
+ 49366,0
1455
+ 47928,0
1456
+ 37680,0
1457
+ 52114,0
1458
+ 37601,0
1459
+ 17323,0
1460
+ 26582,0
1461
+ 58023,0
1462
+ 45628,0
1463
+ 61960,0
1464
+ 18389,0
1465
+ 3135,0
1466
+ 65172,0
1467
+ 35354,0
1468
+ 51053,0
1469
+ 42302,0
1470
+ 32325,0
1471
+ 55908,0
1472
+ 22002,0
1473
+ 47065,0
1474
+ 27047,0
1475
+ 51233,0
1476
+ 38151,0
1477
+ 23095,0
1478
+ 595,1
1479
+ 26778,0
1480
+ 28846,0
1481
+ 2353,0
1482
+ 55144,0
1483
+ 7814,0
1484
+ 39524,0
1485
+ 51834,0
1486
+ 39489,0
1487
+ 61580,0
1488
+ 3168,0
1489
+ 19961,0
1490
+ 46878,0
1491
+ 58286,0
1492
+ 55145,0
1493
+ 659,0
1494
+ 2577,0
1495
+ 13135,0
1496
+ 45522,0
1497
+ 59,0
1498
+ 24996,0
1499
+ 54518,0
1500
+ 14525,0
1501
+ 49520,0
1502
+ 16689,0
1503
+ 57679,0
1504
+ 54686,0
1505
+ 22944,0
1506
+ 17121,0
1507
+ 41313,0
1508
+ 29284,0
1509
+ 39847,0
1510
+ 17132,0
1511
+ 48770,0
1512
+ 40964,0
1513
+ 6046,0
1514
+ 1379,0
1515
+ 41766,0
1516
+ 14337,0
1517
+ 60211,0
1518
+ 10352,0
1519
+ 56413,0
1520
+ 16168,0
1521
+ 40357,0
1522
+ 1918,0
1523
+ 8686,0
1524
+ 46924,0
1525
+ 12408,0
1526
+ 44160,0
1527
+ 44579,0
1528
+ 5389,0
1529
+ 53702,0
1530
+ 2352,0
1531
+ 29009,0
1532
+ 62190,0
1533
+ 58679,0
1534
+ 349,0
1535
+ 17881,0
1536
+ 8054,0
1537
+ 22030,0
1538
+ 61352,0
1539
+ 299,0
1540
+ 34785,0
1541
+ 43828,0
1542
+ 3344,0
1543
+ 21513,0
1544
+ 26399,0
1545
+ 4591,0
1546
+ 9633,0
1547
+ 37802,0
1548
+ 28690,0
1549
+ 63958,0
1550
+ 43762,0
1551
+ 7391,0
1552
+ 22252,0
1553
+ 51146,0
1554
+ 27610,0
1555
+ 63213,0
1556
+ 14780,0
1557
+ 37370,0
1558
+ 17846,0
1559
+ 22726,0
1560
+ 28170,0
1561
+ 2054,0
1562
+ 29762,0
1563
+ 5605,0
1564
+ 48099,0
1565
+ 24096,0
1566
+ 13158,0
1567
+ 36592,0
1568
+ 13965,0
1569
+ 53537,0
1570
+ 64847,0
1571
+ 32247,0
1572
+ 58688,0
1573
+ 15534,0
1574
+ 17788,0
1575
+ 10711,0
1576
+ 9598,0
1577
+ 9973,0
1578
+ 12466,0
1579
+ 6758,0
1580
+ 28559,0
1581
+ 26130,0
1582
+ 65208,0
1583
+ 62975,0
1584
+ 423,0
1585
+ 36220,0
1586
+ 11002,0
1587
+ 6422,0
1588
+ 152,0
1589
+ 41582,0
1590
+ 20283,0
1591
+ 18244,0
1592
+ 11997,0
1593
+ 7033,0
1594
+ 26204,0
1595
+ 37668,0
1596
+ 33390,0
1597
+ 42853,0
1598
+ 45226,0
1599
+ 15234,0
1600
+ 8731,0
1601
+ 598,1
1602
+ 6091,0
1603
+ 64669,1
1604
+ 65329,0
1605
+ 60646,0
1606
+ 610,1
1607
+ 56847,0
1608
+ 825,0
1609
+ 58003,0
1610
+ 49172,0
1611
+ 34703,0
1612
+ 16919,0
1613
+ 19612,0
1614
+ 50852,0
1615
+ 49065,0
1616
+ 5427,0
1617
+ 40535,0
1618
+ 48563,0
1619
+ 34055,0
1620
+ 51464,0
1621
+ 38319,0
1622
+ 5290,0
1623
+ 10348,0
1624
+ 18838,0
1625
+ 5229,0
1626
+ 6928,0
1627
+ 23772,0
1628
+ 6245,0
1629
+ 65004,0
1630
+ 20187,0
1631
+ 10385,0
1632
+ 17936,0
1633
+ 58090,0
1634
+ 49054,0
1635
+ 34845,0
1636
+ 19719,0
1637
+ 8999,0
1638
+ 41153,0
1639
+ 330,0
1640
+ 17006,0
1641
+ 54389,0
1642
+ 40641,0
1643
+ 54557,0
1644
+ 62344,0
1645
+ 8758,0
1646
+ 2046,0
1647
+ 20069,0
1648
+ 4762,0
1649
+ 24842,0
1650
+ 25565,0
1651
+ 8336,0
1652
+ 20141,0
1653
+ 16744,0
1654
+ 50386,0
1655
+ 22234,0
1656
+ 28908,0
1657
+ 6602,0
1658
+ 4138,0
1659
+ 38372,0
1660
+ 52335,0
1661
+ 36988,0
1662
+ 9181,0
1663
+ 16806,0
1664
+ 33366,0
1665
+ 33748,0
1666
+ 527,0
1667
+ 42628,0
1668
+ 59523,0
1669
+ 56701,0
1670
+ 64196,0
1671
+ 59650,0
1672
+ 6066,0
1673
+ 49180,0
1674
+ 43513,0
1675
+ 21958,0
1676
+ 28735,0
1677
+ 54170,0
1678
+ 40423,0
1679
+ 22636,0
1680
+ 64761,0
1681
+ 59529,0
1682
+ 13694,0
1683
+ 31822,0
1684
+ 23451,0
1685
+ 55549,0
1686
+ 30108,0
1687
+ 24320,0
1688
+ 2700,0
1689
+ 64644,0
1690
+ 18254,0
1691
+ 38559,0
1692
+ 49271,0
1693
+ 18875,0
1694
+ 43181,0
1695
+ 23824,0
1696
+ 23729,0
1697
+ 50671,0
1698
+ 16655,0
1699
+ 26300,0
1700
+ 24910,0
1701
+ 5420,0
1702
+ 29150,0
1703
+ 12966,0
1704
+ 60749,0
1705
+ 61378,0
1706
+ 49014,0
1707
+ 64536,0
1708
+ 62411,0
1709
+ 61315,0
1710
+ 50350,0
1711
+ 9928,0
1712
+ 1633,0
1713
+ 433,0
1714
+ 46362,0
1715
+ 63629,1
1716
+ 23500,0
1717
+ 25467,0
1718
+ 24811,0
1719
+ 39046,0
1720
+ 51344,0
1721
+ 3647,0
1722
+ 1008,0
1723
+ 51579,0
1724
+ 42457,0
1725
+ 11507,0
1726
+ 44665,0
1727
+ 63261,0
1728
+ 1936,0
1729
+ 44941,0
1730
+ 4690,1
1731
+ 18966,0
1732
+ 19909,0
1733
+ 52172,0
1734
+ 38059,0
1735
+ 39267,0
1736
+ 42368,0
1737
+ 40439,0
1738
+ 31945,0
1739
+ 3818,0
1740
+ 55227,0
1741
+ 56867,0
1742
+ 61083,0
1743
+ 17470,0
1744
+ 38564,0
1745
+ 4742,0
1746
+ 31586,0
1747
+ 61687,0
1748
+ 11858,0
1749
+ 40524,0
1750
+ 5208,0
1751
+ 35537,0
1752
+ 6572,0
1753
+ 53516,0
1754
+ 12649,0
1755
+ 24045,0
1756
+ 15208,0
1757
+ 44945,0
1758
+ 54679,0
1759
+ 52121,0
1760
+ 15443,0
1761
+ 42001,0
1762
+ 46895,0
1763
+ 60834,0
1764
+ 7054,0
1765
+ 28428,0
1766
+ 6752,0
1767
+ 916,0
1768
+ 48937,0
1769
+ 55440,0
1770
+ 8110,0
1771
+ 19522,0
1772
+ 17217,0
1773
+ 54017,0
1774
+ 28940,0
1775
+ 27940,0
1776
+ 5664,0
1777
+ 57376,0
1778
+ 8754,1
1779
+ 42029,0
1780
+ 10406,0
1781
+ 38105,0
1782
+ 4419,0
1783
+ 39806,0
1784
+ 23683,0
1785
+ 50818,0
1786
+ 14713,0
1787
+ 13865,0
1788
+ 4149,0
1789
+ 3048,0
1790
+ 17855,0
1791
+ 50838,0
1792
+ 35434,0
1793
+ 35330,0
1794
+ 64649,1
1795
+ 54618,0
1796
+ 38744,0
1797
+ 781,0
1798
+ 65052,0
1799
+ 25077,0
1800
+ 10871,0
1801
+ 49740,0
1802
+ 41151,0
1803
+ 39073,0
1804
+ 36643,0
1805
+ 12814,0
1806
+ 52347,0
1807
+ 16552,0
1808
+ 20847,0
1809
+ 3518,0
1810
+ 58890,0
1811
+ 34467,0
1812
+ 33500,0
1813
+ 10416,0
1814
+ 10425,0
1815
+ 53651,0
1816
+ 17594,0
1817
+ 32605,0
1818
+ 20974,0
1819
+ 60293,0
1820
+ 40254,0
1821
+ 53580,0
1822
+ 35548,0
1823
+ 18992,0
1824
+ 39962,0
1825
+ 60587,0
1826
+ 33658,0
1827
+ 53250,0
1828
+ 20251,0
1829
+ 6592,0
1830
+ 10657,0
1831
+ 24734,0
1832
+ 48220,0
1833
+ 44554,0
1834
+ 29942,0
1835
+ 48144,0
1836
+ 17728,0
1837
+ 50333,0
1838
+ 42505,0
1839
+ 8946,1
1840
+ 27542,0
1841
+ 5174,0
1842
+ 16129,0
1843
+ 6456,0
1844
+ 29096,0
1845
+ 48880,0
1846
+ 32540,0
1847
+ 43735,0
1848
+ 36482,0
1849
+ 32283,0
1850
+ 17707,0
1851
+ 10708,0
1852
+ 1264,0
1853
+ 25189,0
1854
+ 7059,0
1855
+ 53553,0
1856
+ 3511,0
1857
+ 49633,0
1858
+ 16733,0
1859
+ 25163,0
1860
+ 58521,0
1861
+ 30800,0
1862
+ 44204,0
1863
+ 37658,0
1864
+ 34082,0
1865
+ 32521,0
1866
+ 19085,0
1867
+ 7165,0
1868
+ 30554,0
1869
+ 13258,0
1870
+ 61291,0
1871
+ 48427,0
1872
+ 51828,0
1873
+ 2018,0
1874
+ 14642,0
1875
+ 38449,0
1876
+ 12572,0
1877
+ 30366,0
1878
+ 6575,0
1879
+ 61503,0
1880
+ 34210,0
1881
+ 58305,0
1882
+ 7805,0
1883
+ 20628,0
1884
+ 11019,0
1885
+ 36855,0
1886
+ 62778,0
1887
+ 39712,0
1888
+ 19624,0
1889
+ 38601,0
1890
+ 51162,0
1891
+ 16594,0
1892
+ 56598,0
1893
+ 35237,0
1894
+ 61110,0
1895
+ 21862,0
1896
+ 32524,0
1897
+ 31346,0
1898
+ 13651,0
1899
+ 34521,0
1900
+ 1398,0
1901
+ 11339,0
1902
+ 42543,0
1903
+ 6108,0
1904
+ 45221,0
1905
+ 48774,0
1906
+ 25514,0
1907
+ 47295,0
1908
+ 50232,0
1909
+ 64324,0
1910
+ 17420,0
1911
+ 57323,0
1912
+ 25474,0
1913
+ 43960,0
1914
+ 1015,0
1915
+ 27862,0
1916
+ 2988,0
1917
+ 25816,0
1918
+ 33591,0
1919
+ 3633,0
1920
+ 26846,0
1921
+ 61567,0
1922
+ 36628,0
1923
+ 24936,0
1924
+ 13821,0
1925
+ 17435,0
1926
+ 7338,0
1927
+ 29078,0
1928
+ 54681,0
1929
+ 38532,0
1930
+ 48041,0
1931
+ 21901,0
1932
+ 22869,0
1933
+ 44800,0
1934
+ 21979,0
1935
+ 52453,0
1936
+ 17925,0
1937
+ 60321,0
1938
+ 37573,0
1939
+ 18712,0
1940
+ 3463,0
1941
+ 53533,0
1942
+ 25837,0
1943
+ 9017,0
1944
+ 61165,0
1945
+ 44438,0
1946
+ 29448,0
1947
+ 59772,0
1948
+ 63477,0
1949
+ 33882,0
1950
+ 5840,0
1951
+ 57360,0
1952
+ 23876,0
1953
+ 24836,0
1954
+ 50678,0
1955
+ 34531,0
1956
+ 37724,0
1957
+ 12407,0
1958
+ 1436,0
1959
+ 59390,0
1960
+ 35597,0
1961
+ 34295,0
1962
+ 1045,0
1963
+ 367,0
1964
+ 44869,0
1965
+ 39026,0
1966
+ 25801,0
1967
+ 59737,0
1968
+ 55019,0
1969
+ 39460,0
1970
+ 56935,0
1971
+ 51319,0
1972
+ 3937,0
1973
+ 63482,0
1974
+ 39011,0
1975
+ 6837,0
1976
+ 38293,0
1977
+ 41751,0
1978
+ 1138,1
1979
+ 10115,0
1980
+ 61533,0
1981
+ 49901,0
1982
+ 29015,0
1983
+ 9071,0
1984
+ 26619,0
1985
+ 717,0
1986
+ 6684,0
1987
+ 4224,0
1988
+ 6428,0
1989
+ 22642,0
1990
+ 20728,0
1991
+ 2713,0
1992
+ 5851,0
1993
+ 20294,0
1994
+ 11796,0
1995
+ 55008,0
1996
+ 22564,0
1997
+ 15323,0
1998
+ 30846,0
1999
+ 54496,0
2000
+ 50063,0
2001
+ 46449,0
2002
+ 9547,0
2003
+ 62559,0
2004
+ 53138,0
2005
+ 57868,0
2006
+ 53370,0
2007
+ 10044,0
2008
+ 17422,0
2009
+ 4312,0
2010
+ 21436,0
2011
+ 37247,0
2012
+ 40520,0
2013
+ 17877,0
2014
+ 17130,0
2015
+ 24577,0
2016
+ 43530,0
2017
+ 52963,0
2018
+ 45559,0
2019
+ 3972,0
2020
+ 55068,0
2021
+ 8252,0
2022
+ 34516,0
2023
+ 15671,0
2024
+ 2758,0
2025
+ 35074,0
2026
+ 49091,0
2027
+ 36281,0
2028
+ 46022,0
2029
+ 6848,0
2030
+ 44300,0
2031
+ 34155,0
2032
+ 37205,0
2033
+ 63317,0
2034
+ 8882,0
2035
+ 9567,0
2036
+ 53202,0
2037
+ 29663,0
2038
+ 25700,0
2039
+ 23169,0
2040
+ 26955,0
2041
+ 60685,1
2042
+ 35491,0
2043
+ 22979,0
2044
+ 17434,0
2045
+ 11657,0
2046
+ 21256,0
2047
+ 40932,0
2048
+ 33304,0
2049
+ 27292,0
2050
+ 22600,0
2051
+ 7317,0
2052
+ 7245,0
2053
+ 49594,0
2054
+ 12840,0
2055
+ 40977,0
2056
+ 60028,0
2057
+ 20526,0
2058
+ 56749,1
2059
+ 25738,0
2060
+ 63343,0
2061
+ 52966,0
2062
+ 30058,0
2063
+ 35089,0
2064
+ 1842,0
2065
+ 19529,0
2066
+ 54068,0
2067
+ 65058,0
2068
+ 11676,0
2069
+ 41430,0
2070
+ 53177,0
2071
+ 40392,0
2072
+ 18998,0
2073
+ 25535,0
2074
+ 24624,0
2075
+ 54092,0
2076
+ 26064,0
2077
+ 10101,0
2078
+ 24432,0
2079
+ 47992,0
2080
+ 883,1
2081
+ 28127,0
2082
+ 47936,0
2083
+ 60210,0
2084
+ 17370,0
2085
+ 17773,0
2086
+ 2338,0
2087
+ 59762,0
2088
+ 16891,0
2089
+ 58561,0
2090
+ 64839,0
2091
+ 12882,0
2092
+ 43042,0
2093
+ 36310,0
2094
+ 45537,0
2095
+ 52227,0
2096
+ 47846,0
2097
+ 22467,0
2098
+ 6027,0
2099
+ 55960,0
2100
+ 7180,0
2101
+ 48620,0
2102
+ 34011,0
2103
+ 57427,0
2104
+ 41319,0
2105
+ 25033,0
2106
+ 10433,0
2107
+ 54220,0
2108
+ 3924,0
2109
+ 27963,0
2110
+ 51637,0
2111
+ 23209,0
2112
+ 50983,0
2113
+ 536,0
2114
+ 44594,0
2115
+ 48280,0
2116
+ 15152,0
2117
+ 31368,0
2118
+ 16544,0
2119
+ 20400,0
2120
+ 35343,0
2121
+ 28727,0
2122
+ 41628,0
2123
+ 30834,0
2124
+ 31140,0
2125
+ 61638,0
2126
+ 65506,0
2127
+ 6,0
2128
+ 20947,0
2129
+ 43884,0
2130
+ 36321,0
2131
+ 18161,0
2132
+ 29029,0
2133
+ 3538,0
2134
+ 37272,0
2135
+ 41084,0
2136
+ 18644,0
2137
+ 64235,0
2138
+ 53242,0
2139
+ 48572,0
2140
+ 55372,0
2141
+ 27250,0
2142
+ 30744,0
2143
+ 23618,0
2144
+ 16650,0
2145
+ 39513,0
2146
+ 3329,0
2147
+ 43458,0
2148
+ 48357,0
2149
+ 28225,0
2150
+ 35868,0
2151
+ 65044,0
2152
+ 2610,1
2153
+ 53754,0
2154
+ 31273,0
2155
+ 52285,0
2156
+ 6301,0
2157
+ 30776,0
2158
+ 26539,0
2159
+ 54396,0
2160
+ 64908,1
2161
+ 38421,0
2162
+ 17991,0
2163
+ 57357,0
2164
+ 11213,0
2165
+ 16898,0
2166
+ 43547,0
2167
+ 36356,0
2168
+ 6937,0
2169
+ 62746,0
2170
+ 27805,0
2171
+ 813,0
2172
+ 52536,0
2173
+ 45999,0
2174
+ 26152,0
2175
+ 43759,0
2176
+ 32804,0
2177
+ 45376,0
2178
+ 14426,0
2179
+ 51911,0
2180
+ 42552,0
2181
+ 11631,0
2182
+ 29875,0
2183
+ 37163,0
2184
+ 21708,0
2185
+ 32560,0
2186
+ 50755,0
2187
+ 33437,0
2188
+ 64397,1
2189
+ 64191,0
2190
+ 35371,0
2191
+ 61196,0
2192
+ 64091,0
2193
+ 60407,0
2194
+ 8255,0
2195
+ 30487,0
2196
+ 1804,0
2197
+ 7008,0
2198
+ 4170,0
2199
+ 24245,0
2200
+ 62228,0
2201
+ 59543,0
2202
+ 53104,0
2203
+ 32697,0
2204
+ 52337,0
2205
+ 13408,0
2206
+ 25986,0
2207
+ 12652,0
2208
+ 65211,0
2209
+ 43008,0
2210
+ 62669,0
2211
+ 29069,0
2212
+ 42985,0
2213
+ 10313,0
2214
+ 59849,0
2215
+ 51118,0
2216
+ 43520,0
2217
+ 21525,0
2218
+ 39725,0
2219
+ 36273,0
2220
+ 26569,0
2221
+ 20236,0
2222
+ 11621,0
2223
+ 3384,0
2224
+ 48378,0
2225
+ 5660,0
2226
+ 25788,0
2227
+ 63371,0
2228
+ 16336,0
2229
+ 56154,0
2230
+ 39382,0
2231
+ 44862,0
2232
+ 17107,0
2233
+ 19596,0
2234
+ 34863,0
2235
+ 55171,0
2236
+ 42266,0
2237
+ 58365,0
2238
+ 31192,0
2239
+ 54531,0
2240
+ 55781,0
2241
+ 39676,0
2242
+ 50510,0
2243
+ 6289,0
2244
+ 28594,0
2245
+ 27547,0
2246
+ 64817,0
2247
+ 25138,0
2248
+ 29729,0
2249
+ 10326,0
2250
+ 19388,0
2251
+ 62261,0
2252
+ 8947,0
2253
+ 35958,0
2254
+ 9329,0
2255
+ 11371,0
2256
+ 6052,0
2257
+ 4904,0
2258
+ 1649,0
2259
+ 17479,0
2260
+ 12345,0
2261
+ 21770,0
2262
+ 9295,0
2263
+ 33830,0
2264
+ 1421,0
2265
+ 20125,0
2266
+ 40412,0
2267
+ 58669,0
2268
+ 51856,0
2269
+ 30686,0
2270
+ 44978,0
2271
+ 30619,0
2272
+ 57687,0
2273
+ 36257,0
2274
+ 20004,0
2275
+ 53508,0
2276
+ 53860,0
2277
+ 51672,0
2278
+ 487,0
2279
+ 9199,0
2280
+ 12779,0
2281
+ 7716,0
2282
+ 40536,0
2283
+ 3275,0
2284
+ 50856,0
2285
+ 44659,0
2286
+ 35407,0
2287
+ 8082,0
2288
+ 33198,0
2289
+ 19478,0
2290
+ 21120,0
2291
+ 41404,0
2292
+ 12975,0
2293
+ 58270,0
2294
+ 7539,0
2295
+ 60854,0
2296
+ 32306,0
2297
+ 59475,0
2298
+ 43375,0
2299
+ 36994,0
2300
+ 40116,0
2301
+ 15311,0
2302
+ 3415,0
2303
+ 2976,0
2304
+ 62514,0
2305
+ 44884,0
2306
+ 37322,0
2307
+ 63438,0
2308
+ 17768,0
2309
+ 51206,0
2310
+ 31780,0
2311
+ 50701,0
2312
+ 48697,0
2313
+ 36941,0
2314
+ 61934,0
2315
+ 43293,0
2316
+ 16035,0
2317
+ 11533,0
2318
+ 41753,0
2319
+ 35399,0
2320
+ 27394,0
2321
+ 52116,0
2322
+ 60298,0
2323
+ 62520,0
2324
+ 39536,0
2325
+ 64873,0
2326
+ 25887,0
2327
+ 61202,0
2328
+ 36403,0
2329
+ 51587,0
2330
+ 15026,0
2331
+ 54450,0
2332
+ 18567,0
2333
+ 17314,0
2334
+ 14079,0
2335
+ 31118,0
2336
+ 60690,0
2337
+ 46477,1
2338
+ 53864,0
2339
+ 32400,0
2340
+ 37777,0
2341
+ 64566,0
2342
+ 46301,0
2343
+ 35930,0
2344
+ 18940,0
2345
+ 34720,0
2346
+ 3768,0
2347
+ 18267,0
2348
+ 44910,0
2349
+ 72,0
2350
+ 14356,0
2351
+ 57252,0
2352
+ 25366,0
2353
+ 3456,0
2354
+ 61886,0
2355
+ 5633,0
2356
+ 11563,0
2357
+ 2217,0
2358
+ 18283,0
2359
+ 39459,0
2360
+ 33105,0
2361
+ 24640,0
2362
+ 6651,0
2363
+ 3936,0
2364
+ 58908,0
2365
+ 19617,0
2366
+ 29175,0
2367
+ 54156,0
2368
+ 21163,0
2369
+ 59268,0
2370
+ 37463,0
2371
+ 53116,0
2372
+ 56321,0
2373
+ 6612,0
2374
+ 11912,0
2375
+ 9451,0
2376
+ 39674,0
2377
+ 55552,0
2378
+ 40740,0
2379
+ 1155,0
2380
+ 38659,0
2381
+ 12499,0
2382
+ 12733,0
2383
+ 2382,0
2384
+ 16484,0
2385
+ 41040,0
2386
+ 20367,0
2387
+ 33291,0
2388
+ 36188,0
2389
+ 41689,0
2390
+ 12741,0
2391
+ 33613,0
2392
+ 63733,0
2393
+ 62903,0
2394
+ 33905,0
2395
+ 24724,0
2396
+ 27904,0
2397
+ 21596,0
2398
+ 8901,0
2399
+ 4410,0
2400
+ 55186,0
2401
+ 63578,0
2402
+ 23782,0
2403
+ 4807,0
2404
+ 33809,0
2405
+ 64973,1
2406
+ 40918,0
2407
+ 51514,0
2408
+ 47793,0
2409
+ 40555,0
2410
+ 10184,0
2411
+ 14066,0
2412
+ 55228,0
2413
+ 33501,0
2414
+ 31117,1
2415
+ 53142,0
2416
+ 43334,0
2417
+ 40728,0
2418
+ 36787,0
2419
+ 50762,0
2420
+ 63887,1
2421
+ 54705,0
2422
+ 43622,0
2423
+ 13827,0
2424
+ 33821,0
2425
+ 22319,0
2426
+ 60935,0
2427
+ 48274,0
2428
+ 5323,0
2429
+ 18014,0
2430
+ 41726,0
2431
+ 58239,0
2432
+ 40527,0
2433
+ 25665,0
2434
+ 53050,0
2435
+ 61705,0
2436
+ 2216,0
2437
+ 29782,0
2438
+ 64589,0
2439
+ 9569,0
2440
+ 6343,0
2441
+ 45234,0
2442
+ 45964,0
2443
+ 59234,0
2444
+ 23699,0
2445
+ 60037,0
2446
+ 41846,0
2447
+ 1372,0
2448
+ 46919,0
2449
+ 33951,0
2450
+ 44967,0
2451
+ 56601,0
2452
+ 25971,0
2453
+ 31601,0
2454
+ 22476,0
2455
+ 53163,0
2456
+ 46521,0
2457
+ 62562,0
2458
+ 46672,0
2459
+ 49652,0
2460
+ 58108,0
2461
+ 24086,0
2462
+ 17252,0
2463
+ 55183,0
2464
+ 62836,0
2465
+ 5512,0
2466
+ 46184,0
2467
+ 35838,0
2468
+ 6539,0
2469
+ 32456,0
2470
+ 19371,0
2471
+ 18095,0
2472
+ 64193,0
2473
+ 15997,0
2474
+ 6085,0
2475
+ 57692,0
2476
+ 29553,0
2477
+ 15327,0
2478
+ 51945,0
2479
+ 29925,0
2480
+ 46448,0
2481
+ 39184,0
2482
+ 37778,0
2483
+ 15286,0
2484
+ 31556,0
2485
+ 3697,0
2486
+ 10864,0
2487
+ 62246,0
2488
+ 15353,0
2489
+ 45632,0
2490
+ 45350,0
2491
+ 38398,0
2492
+ 29255,0
2493
+ 1057,0
2494
+ 42946,0
2495
+ 434,0
2496
+ 21237,0
2497
+ 18650,0
2498
+ 3459,0
2499
+ 34974,0
2500
+ 21177,0
2501
+ 35830,0
2502
+ 62267,0
2503
+ 4511,0
2504
+ 12367,0
2505
+ 44676,0
2506
+ 63083,0
2507
+ 46472,0
2508
+ 35030,0
2509
+ 23361,0
2510
+ 50854,0
2511
+ 295,0
2512
+ 26868,0
2513
+ 41175,0
2514
+ 64334,0
2515
+ 37080,0
2516
+ 36182,0
2517
+ 7927,0
2518
+ 24815,0
2519
+ 12670,0
2520
+ 10042,0
2521
+ 31993,0
2522
+ 55363,0
2523
+ 25629,0
2524
+ 26922,0
2525
+ 2808,0
2526
+ 61696,0
2527
+ 52499,0
2528
+ 8716,0
2529
+ 3913,0
2530
+ 34493,0
2531
+ 17856,0
2532
+ 61119,0
2533
+ 18028,0
2534
+ 14317,0
2535
+ 44583,0
2536
+ 34200,0
2537
+ 26942,0
2538
+ 34944,0
2539
+ 9603,0
2540
+ 1900,0
2541
+ 47579,0
2542
+ 51418,0
2543
+ 19183,0
2544
+ 44865,0
2545
+ 39211,0
2546
+ 13229,0
2547
+ 37258,0
2548
+ 31486,0
2549
+ 59778,0
2550
+ 7658,0
2551
+ 45460,0
2552
+ 18824,0
2553
+ 34752,0
2554
+ 56855,0
2555
+ 35950,0
2556
+ 22738,0
2557
+ 20429,0
2558
+ 10308,0
2559
+ 37473,0
2560
+ 5041,0
2561
+ 47568,0
2562
+ 30241,0
2563
+ 46000,0
2564
+ 45085,0
2565
+ 62407,0
2566
+ 31421,0
2567
+ 45384,0
2568
+ 7774,0
2569
+ 42583,0
2570
+ 48898,0
2571
+ 32214,0
2572
+ 34584,0
2573
+ 37004,0
2574
+ 11969,0
2575
+ 49599,0
2576
+ 43685,0
2577
+ 64624,0
2578
+ 28718,0
2579
+ 30684,0
2580
+ 61714,0
2581
+ 37464,0
2582
+ 59935,0
2583
+ 55042,0
2584
+ 64244,0
2585
+ 42915,0
2586
+ 9244,0
2587
+ 14411,0
2588
+ 28677,0
2589
+ 9787,0
2590
+ 2400,0
2591
+ 10935,0
2592
+ 55005,0
2593
+ 11904,0
2594
+ 10669,0
2595
+ 40190,0
2596
+ 26725,0
2597
+ 23789,0
2598
+ 13329,0
2599
+ 35508,0
2600
+ 13914,0
2601
+ 55078,0
2602
+ 46886,0
2603
+ 15627,0
2604
+ 624,1
2605
+ 852,0
2606
+ 35230,0
2607
+ 11337,0
2608
+ 28348,0
2609
+ 5299,0
2610
+ 64850,0
2611
+ 56990,0
2612
+ 4600,0
2613
+ 28774,0
2614
+ 45794,0
2615
+ 25370,0
2616
+ 55945,0
2617
+ 26370,0
2618
+ 60669,0
2619
+ 36365,0
2620
+ 34523,0
2621
+ 52312,0
2622
+ 12181,0
2623
+ 2660,0
2624
+ 20699,0
2625
+ 64840,0
2626
+ 55388,0
2627
+ 21236,0
2628
+ 40782,0
2629
+ 546,1
2630
+ 16572,0
2631
+ 27975,0
2632
+ 8517,0
2633
+ 55618,0
2634
+ 54590,0
2635
+ 30457,0
2636
+ 47806,0
2637
+ 63022,0
2638
+ 61668,0
2639
+ 33312,0
2640
+ 61546,0
2641
+ 65460,0
2642
+ 58788,0
2643
+ 10202,0
2644
+ 248,0
2645
+ 53833,0
2646
+ 21345,0
2647
+ 13814,0
2648
+ 18211,0
2649
+ 37047,0
2650
+ 14855,0
2651
+ 38081,0
2652
+ 24270,0
2653
+ 50505,0
2654
+ 42173,0
2655
+ 58203,0
2656
+ 7682,0
2657
+ 24219,0
2658
+ 51055,0
2659
+ 16421,0
2660
+ 40387,0
2661
+ 41629,0
2662
+ 17798,0
2663
+ 43333,0
2664
+ 6465,0
2665
+ 26912,0
2666
+ 54884,0
2667
+ 14508,0
2668
+ 44759,0
2669
+ 59626,0
2670
+ 63082,0
2671
+ 61280,0
2672
+ 22507,0
2673
+ 20174,0
2674
+ 34582,0
2675
+ 4074,0
2676
+ 7910,0
2677
+ 46029,0
2678
+ 19750,0
2679
+ 33735,0
2680
+ 25856,0
2681
+ 46127,0
2682
+ 38194,0
2683
+ 57496,0
2684
+ 38129,0
2685
+ 29527,0
2686
+ 42724,0
2687
+ 630,1
2688
+ 53149,0
2689
+ 64786,0
2690
+ 59353,0
2691
+ 48074,0
2692
+ 18741,0
2693
+ 54664,0
2694
+ 47947,0
2695
+ 6591,0
2696
+ 12060,0
2697
+ 46373,0
2698
+ 54283,0
2699
+ 13767,0
2700
+ 31509,0
2701
+ 40403,0
2702
+ 41224,0
2703
+ 48369,0
2704
+ 13235,0
2705
+ 40076,0
2706
+ 64922,0
2707
+ 46243,0
2708
+ 58114,0
2709
+ 48474,0
2710
+ 4878,0
2711
+ 34243,0
2712
+ 10522,0
2713
+ 64317,0
2714
+ 51301,0
2715
+ 40993,0
2716
+ 63232,0
2717
+ 16814,0
2718
+ 28369,0
2719
+ 15643,0
2720
+ 39033,0
2721
+ 14451,0
2722
+ 49085,0
2723
+ 10136,0
2724
+ 8114,0
2725
+ 61234,0
2726
+ 60314,0
2727
+ 2521,0
2728
+ 31791,0
2729
+ 25321,0
2730
+ 6346,0
2731
+ 8917,0
2732
+ 24571,0
2733
+ 37277,0
2734
+ 63347,0
2735
+ 3978,0
2736
+ 1238,0
2737
+ 11649,0
2738
+ 20880,0
2739
+ 22122,0
2740
+ 33518,0
2741
+ 2722,0
2742
+ 55123,0
2743
+ 13852,0
2744
+ 5192,0
2745
+ 17816,0
2746
+ 30419,0
2747
+ 12096,0
2748
+ 38298,0
2749
+ 21122,0
2750
+ 16365,0
2751
+ 60798,0
2752
+ 41734,0
2753
+ 49823,0
2754
+ 41047,0
2755
+ 25363,0
2756
+ 36245,0
2757
+ 30253,0
2758
+ 37726,0
2759
+ 37158,0
2760
+ 15686,0
2761
+ 39351,0
2762
+ 19221,0
2763
+ 45947,0
2764
+ 42593,0
2765
+ 13952,0
2766
+ 32555,0
2767
+ 14679,0
2768
+ 53305,0
2769
+ 43032,0
2770
+ 58229,0
2771
+ 51062,0
2772
+ 54651,0
2773
+ 46421,0
2774
+ 5496,0
2775
+ 30446,0
2776
+ 35723,0
2777
+ 11095,0
2778
+ 8013,0
2779
+ 65234,0
2780
+ 59311,0
2781
+ 58165,0
2782
+ 13520,0
2783
+ 49579,0
2784
+ 64773,1
2785
+ 17477,0
2786
+ 710,0
2787
+ 57863,0
2788
+ 36051,0
2789
+ 48541,1
2790
+ 23717,0
2791
+ 20033,0
2792
+ 48967,0
2793
+ 1366,0
2794
+ 20192,0
2795
+ 20044,0
2796
+ 56089,0
2797
+ 38233,0
2798
+ 52832,0
2799
+ 52501,0
2800
+ 42589,0
2801
+ 8900,0
2802
+ 2288,0
2803
+ 17457,0
2804
+ 46880,0
2805
+ 48072,0
2806
+ 8159,0
2807
+ 55853,0
2808
+ 36516,0
2809
+ 15308,0
2810
+ 18617,0
2811
+ 47067,0
2812
+ 27460,0
2813
+ 11767,0
2814
+ 43071,0
2815
+ 28163,0
2816
+ 56605,0
2817
+ 50103,0
2818
+ 51897,0
2819
+ 47125,0
2820
+ 35189,0
2821
+ 27740,0
2822
+ 64881,0
2823
+ 110,0
2824
+ 41235,0
2825
+ 48170,0
2826
+ 32577,0
2827
+ 63635,0
2828
+ 11043,0
2829
+ 47059,0
2830
+ 33265,0
2831
+ 39018,0
2832
+ 60434,0
2833
+ 63203,0
2834
+ 63176,0
2835
+ 11269,0
2836
+ 29000,0
2837
+ 40904,0
2838
+ 52866,0
2839
+ 61593,0
2840
+ 61856,0
2841
+ 50175,0
2842
+ 44463,0
2843
+ 4291,0
2844
+ 8182,0
2845
+ 4503,0
2846
+ 47914,0
2847
+ 9895,0
2848
+ 10641,0
2849
+ 54745,0
2850
+ 59633,0
2851
+ 40927,0
2852
+ 55477,0
2853
+ 38156,0
2854
+ 591,0
2855
+ 53500,0
2856
+ 57213,0
2857
+ 49584,0
2858
+ 37136,0
2859
+ 29178,0
2860
+ 1536,0
2861
+ 16464,0
2862
+ 13220,0
2863
+ 5018,0
2864
+ 53621,0
2865
+ 41401,0
2866
+ 48014,0
2867
+ 19050,0
2868
+ 58127,0
2869
+ 48102,0
2870
+ 5182,0
2871
+ 9947,0
2872
+ 23686,0
2873
+ 59385,0
2874
+ 26505,0
2875
+ 11871,0
2876
+ 13246,0
2877
+ 14463,0
2878
+ 43869,0
2879
+ 45367,0
2880
+ 47300,0
2881
+ 14208,0
2882
+ 7495,0
2883
+ 27458,0
2884
+ 46724,0
2885
+ 26307,0
2886
+ 31222,0
2887
+ 12321,0
2888
+ 17569,0
2889
+ 44897,0
2890
+ 22169,0
2891
+ 50654,0
2892
+ 45054,0
2893
+ 39247,0
2894
+ 16874,0
2895
+ 63979,0
2896
+ 31167,0
2897
+ 40659,0
2898
+ 59494,0
2899
+ 62742,0
2900
+ 51347,0
2901
+ 33338,0
2902
+ 17335,0
2903
+ 62424,0
2904
+ 61708,0
2905
+ 43063,0
2906
+ 37098,0
2907
+ 631,1
2908
+ 16977,0
2909
+ 19975,0
2910
+ 48039,0
2911
+ 31987,0
2912
+ 53744,0
2913
+ 17325,0
2914
+ 8229,0
2915
+ 36349,0
2916
+ 60050,0
2917
+ 35553,0
2918
+ 38045,0
2919
+ 21696,0
2920
+ 32838,0
2921
+ 28955,0
2922
+ 26308,0
2923
+ 33446,0
2924
+ 8300,0
2925
+ 4985,0
2926
+ 63815,0
2927
+ 47707,0
2928
+ 59126,0
2929
+ 35592,0
2930
+ 53998,0
2931
+ 32178,0
2932
+ 20988,0
2933
+ 60481,0
2934
+ 57449,0
2935
+ 45751,0
2936
+ 8086,0
2937
+ 15223,0
2938
+ 11485,0
2939
+ 8522,0
2940
+ 1212,0
2941
+ 60937,0
2942
+ 19237,0
2943
+ 30808,0
2944
+ 33214,0
2945
+ 43705,0
2946
+ 64861,0
2947
+ 56058,0
2948
+ 37645,0
2949
+ 40354,0
2950
+ 58047,0
2951
+ 58183,0
2952
+ 7189,0
2953
+ 26224,0
2954
+ 8998,0
2955
+ 45244,0
2956
+ 35409,0
2957
+ 39040,0
2958
+ 65126,0
2959
+ 50520,0
2960
+ 20701,0
2961
+ 62120,0
2962
+ 60492,0
2963
+ 50316,0
2964
+ 2239,0
2965
+ 10867,0
2966
+ 63002,0
2967
+ 17729,0
2968
+ 19245,0
2969
+ 57916,0
2970
+ 29311,0
2971
+ 22091,0
2972
+ 26895,0
2973
+ 12214,0
2974
+ 61966,0
2975
+ 48182,0
2976
+ 44822,0
2977
+ 45898,0
2978
+ 32542,0
2979
+ 20834,0
2980
+ 59255,0
2981
+ 45212,0
2982
+ 7389,0
2983
+ 57476,0
2984
+ 20420,0
2985
+ 32474,0
2986
+ 1945,0
2987
+ 7969,0
2988
+ 49207,0
2989
+ 5622,0
2990
+ 24064,0
2991
+ 37734,0
2992
+ 46756,0
2993
+ 48938,0
2994
+ 28760,0
2995
+ 526,0
2996
+ 1648,1
2997
+ 19688,0
2998
+ 40128,0
2999
+ 23652,0
3000
+ 47871,0
3001
+ 34379,0
3002
+ 63513,0
3003
+ 59052,0
3004
+ 4763,0
3005
+ 30469,0
3006
+ 41288,0
3007
+ 51886,0
3008
+ 25864,0
3009
+ 22650,0
3010
+ 54931,0
3011
+ 1349,0
3012
+ 17631,0
3013
+ 16294,0
3014
+ 61390,0
3015
+ 409,0
3016
+ 41980,0
3017
+ 33324,0
3018
+ 23767,0
3019
+ 3506,0
3020
+ 17316,0
3021
+ 51638,0
3022
+ 59392,0
3023
+ 30093,1
3024
+ 20738,0
3025
+ 31130,0
3026
+ 56902,0
3027
+ 14834,0
3028
+ 45587,0
3029
+ 17078,0
3030
+ 43072,0
3031
+ 52623,0
3032
+ 52675,0
3033
+ 40726,0
3034
+ 28784,0
3035
+ 31563,0
3036
+ 37832,0
3037
+ 35374,0
3038
+ 52327,0
3039
+ 35485,0
3040
+ 8638,0
3041
+ 9502,0
3042
+ 61049,0
3043
+ 64495,0
3044
+ 21488,0
3045
+ 24282,0
3046
+ 46829,0
3047
+ 8915,0
3048
+ 9991,0
3049
+ 48407,0
3050
+ 56475,0
quantum_perceptron/train/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ from quantum_perceptron.train.data_gen import *
2
+ from quantum_perceptron.train.training import *
quantum_perceptron/train/data_gen.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ from tqdm import tqdm
3
+ from quantum_perceptron.utils import (
4
+ calculate_succ_probability
5
+ )
6
+ from quantum_perceptron.perceptron import Perceptron
7
+
8
+
9
+ def generate_training_samples(data: np.ndarray,
10
+ num_positive_samples: int,
11
+ num_negative_samples: int) -> np.ndarray:
12
+ """
13
+ From the entire dataset, generate training samples.
14
+ """
15
+ pos_inds = np.where(data[:, 1] == 1)[0]
16
+ neg_inds = np.where(data[:, 1] == 0)[0]
17
+
18
+ if len(pos_inds) < num_positive_samples:
19
+ num_positive_samples = len(pos_inds)
20
+ if len(neg_inds) < num_negative_samples:
21
+ num_negative_samples = len(neg_inds)
22
+
23
+ sampled_neg_inds = np.random.choice(neg_inds,
24
+ num_negative_samples,
25
+ replace=False)
26
+ sampled_pos_inds = np.random.choice(pos_inds,
27
+ num_positive_samples,
28
+ replace=False)
29
+
30
+ new_data = np.vstack((data[sampled_pos_inds], data[sampled_neg_inds]))
31
+ np.random.shuffle(new_data)
32
+ return new_data
33
+
34
+
35
+ def generate_dataset(num_qubits: int = 4,
36
+ fixed_weight: int = 626,
37
+ dir_path: str = './data/',
38
+ threshold: float = 0.5,
39
+ num_runs: int = 8192,
40
+ create_training_samples: bool = True,
41
+ num_pos_train_samples: int = 50,
42
+ num_neg_train_samples: int = 3000):
43
+ """
44
+ Generate training dataset with fixed weight.
45
+
46
+ Args:
47
+ num_qubits: `int` representing number of qubits.
48
+ fixed_weight: `int` representing the fixed weight value.
49
+ dir_path: `str` representing the directory path.
50
+ """
51
+ num_samples = np.power(2, np.power(2, num_qubits))
52
+ data = np.empty([num_samples, 2], dtype=np.int64)
53
+ p = Perceptron(num_qubits, fixed_weight, 0)
54
+
55
+ for i in tqdm(range(num_samples)):
56
+ p.input = i
57
+ p.build_circuit()
58
+ prob = calculate_succ_probability(p.measure_circuit(num_runs))
59
+ if prob > threshold:
60
+ label = 1
61
+ else:
62
+ label = 0
63
+ data[i][0] = i
64
+ data[i][1] = label
65
+
66
+ print("Number of positive samples: {}".format(
67
+ np.sum(data[:, 1] == 1)
68
+ ))
69
+ print("Number of negative samples: {}".format(
70
+ np.sum(data[:, 1] == 0)
71
+ ))
72
+
73
+ filename = 'sample_space_qubits_{}_fweight_{}.txt'.format(
74
+ num_qubits, fixed_weight
75
+ )
76
+ np.savetxt(dir_path + filename, data, fmt='%i,%i', delimiter=',')
77
+ print('Saved data to {}'.format(dir_path + filename))
78
+
79
+ if create_training_samples:
80
+ train_data = generate_training_samples(
81
+ data, num_pos_train_samples, num_neg_train_samples
82
+ )
83
+ train_filename = 'train_space_qubits_{}_fweight_{}.txt'.format(
84
+ num_qubits, fixed_weight
85
+ )
86
+ np.savetxt(dir_path + train_filename,
87
+ train_data,
88
+ fmt='%i,%i',
89
+ delimiter=',')
90
+ print('Saved training data to {}'.format(dir_path + train_filename))
quantum_perceptron/train/training.py ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from typing import List
3
+ import numpy as np
4
+ from tqdm import tqdm
5
+ import wandb
6
+ from quantum_perceptron.utils import (
7
+ get_vector_from_int,
8
+ get_int_from_vector,
9
+ calculate_succ_probability
10
+ )
11
+ from quantum_perceptron import Perceptron
12
+
13
+
14
+ class PerceptronTrainer:
15
+ def __init__(self,
16
+ num_qubits: int,
17
+ fixed_weight: int,
18
+ dataset_path: str,
19
+ threshold: float = 0.5,
20
+ num_runs: int = 8192,
21
+ learning_rate_pos: float = 0.5,
22
+ learning_rate_neg: float = 0.5):
23
+ """
24
+ This class is used to train the perceptron.
25
+
26
+ Args:
27
+ num_qubits: `int` representing number of qubits.
28
+ fixed_weight: `int` representing the fixed weight value.
29
+ dataset_path: `str` representing the path to the dataset.
30
+ threshold: `float` representing the threshold value.
31
+ num_runs: `int` representing number of runs.
32
+ learning_rate_pos: `float` representing the learning rate for positve
33
+ samples.
34
+ learning_rate_neg: `float` representing the learning rate for
35
+ negativesamples.
36
+ """
37
+ self.num_qubits = num_qubits
38
+ self.fixed_weight = fixed_weight
39
+ assert os.path.exists(dataset_path), "Dataset path does not exist"
40
+ self.data = self.read_dataset(dataset_path)
41
+ self.threshold = threshold
42
+ self.num_runs = num_runs
43
+ self.learning_rate_pos = learning_rate_pos
44
+ self.learning_rate_neg = learning_rate_neg
45
+ self.perceptron = Perceptron(num_qubits)
46
+ self.accumulate_loss: List[float] = []
47
+ self.num_steps = 0
48
+
49
+ # Initializing random weight for the training
50
+ self.weight_variable = np.random.randint(
51
+ np.power(2, np.power(2, num_qubits)))
52
+
53
+ wandb.init(
54
+ project="quantum-perceptron",
55
+ config={
56
+ "learning_rate_pos": learning_rate_pos,
57
+ "learning_rate_neg": learning_rate_neg,
58
+ "fixed_weight": fixed_weight,
59
+ "num_qubits": num_qubits,
60
+ "dataset": dataset_path,
61
+ "num_runs": num_runs,
62
+ "threshold": threshold
63
+ }
64
+ )
65
+
66
+ def read_dataset(self, filepath: str) -> np.ndarray:
67
+ """
68
+ Read dataset from file.
69
+ """
70
+ return np.loadtxt(filepath, dtype=np.int64, delimiter=',')
71
+
72
+ def invert_non_matching_bits(self, input: int):
73
+ """
74
+ Invert non-matching positions in vector.
75
+ """
76
+ input_vector = get_vector_from_int(input, self.num_qubits)
77
+ weight_vector = get_vector_from_int(self.weight_variable,
78
+ self.num_qubits)
79
+ non_match_ids = np.where(input_vector != weight_vector)[0]
80
+ num_select = int(np.ceil(len(non_match_ids) * self.learning_rate_pos))
81
+ selected_ids = np.random.choice(non_match_ids,
82
+ num_select,
83
+ replace=False)
84
+ for id in selected_ids:
85
+ weight_vector[id] *= -1
86
+ self.weight_variable = get_int_from_vector(weight_vector,
87
+ self.num_qubits)
88
+
89
+ def invert_matching_bits(self, input: int):
90
+ """
91
+ Invert matching positions in vector.
92
+ """
93
+ input_vector = get_vector_from_int(input, self.num_qubits)
94
+ weight_vector = get_vector_from_int(self.weight_variable,
95
+ self.num_qubits)
96
+ match_ids = np.where(input_vector == weight_vector)[0]
97
+ num_select = int(np.ceil(len(match_ids) * self.learning_rate_neg))
98
+ selected_ids = np.random.choice(match_ids,
99
+ num_select,
100
+ replace=False)
101
+ for id in selected_ids:
102
+ weight_vector[id] *= -1
103
+ self.weight_variable = get_int_from_vector(weight_vector,
104
+ self.num_qubits)
105
+
106
+ def calc_loss(self):
107
+ """
108
+ Note that we will only use this loss to generate the plot
109
+ and not for training the perceptron.
110
+ """
111
+ self.perceptron.input = self.weight_variable
112
+ self.perceptron.weight = self.fixed_weight
113
+ self.perceptron.build_circuit()
114
+ loss = calculate_succ_probability(
115
+ self.perceptron.measure_circuit(self.num_runs))
116
+ return loss
117
+
118
+ def train_step(self, input: int, label: int):
119
+ """
120
+ Training step for a single sample.
121
+ """
122
+ self.perceptron.input = input
123
+ self.perceptron.weight = self.weight_variable
124
+ self.perceptron.build_circuit()
125
+ prob = calculate_succ_probability(
126
+ self.perceptron.measure_circuit(self.num_runs))
127
+ loss = self.calc_loss()
128
+ self.accumulate_loss.append(loss)
129
+ self.num_steps += 1
130
+ if int(loss) == 1:
131
+ print("Training converged at step: {}".format(self.num_steps))
132
+ return True
133
+ if prob > self.threshold:
134
+ pred = 1
135
+ else:
136
+ pred = 0
137
+ if label == 1 and pred == 0:
138
+ self.invert_non_matching_bits(input)
139
+ wandb.log({"probability": loss, "weight": self.weight_variable})
140
+ elif label == 0 and pred == 1:
141
+ self.invert_matching_bits(input)
142
+ wandb.log({"probability": loss, "weight": self.weight_variable})
143
+ return False
144
+
145
+ def train_epoch(self, epoch: int):
146
+ """
147
+ Train the epoch.
148
+ """
149
+ for i in tqdm(range(self.data.shape[0])):
150
+ input = self.data[i, 0]
151
+ label = self.data[i, 1]
152
+ converged = self.train_step(input, label)
153
+ if converged:
154
+ return True
155
+ return False
156
+
157
+ def train(self, num_epochs: int):
158
+ """
159
+ Train the perceptron.
160
+ """
161
+ for i in range(num_epochs):
162
+ converged = self.train_epoch(i)
163
+ if converged:
164
+ break
quantum_perceptron/utils/__init__.py CHANGED
@@ -1,2 +1,3 @@
1
  from quantum_perceptron.utils.data_utils import *
2
  from quantum_perceptron.utils.quantum_utils import *
 
 
1
  from quantum_perceptron.utils.data_utils import *
2
  from quantum_perceptron.utils.quantum_utils import *
3
+ from quantum_perceptron.utils.plot_utils import *
quantum_perceptron/utils/data_utils.py CHANGED
@@ -35,7 +35,7 @@ def get_vector_from_int(data: int, num_qubits: int) -> np.ndarray:
35
 
36
  Args:
37
  data: `int` representing data value
38
- (correspponding toinput or weight vector)
39
  num_qubits: `int` representing number of qubits.
40
 
41
  Returns: Vector in form of `np.ndarray`.
@@ -52,6 +52,30 @@ def get_vector_from_int(data: int, num_qubits: int) -> np.ndarray:
52
  return data_vector
53
 
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  def get_possible_state_strings(num_bits: int) -> np.ndarray:
56
  """
57
  Get all the state bit strings corresponding to given number of bits.
@@ -100,3 +124,20 @@ def get_ones_counts_to_states(states: np.ndarray) -> Dict[int, List[int]]:
100
  ones_count[ct].append(i)
101
 
102
  return ones_count
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  Args:
37
  data: `int` representing data value
38
+ (correspponding to input or weight vector)
39
  num_qubits: `int` representing number of qubits.
40
 
41
  Returns: Vector in form of `np.ndarray`.
 
52
  return data_vector
53
 
54
 
55
+ def get_int_from_vector(data_vector: np.ndarray, num_qubits: int) -> int:
56
+ """
57
+ Get the integer data value from the vector.
58
+
59
+ Args:
60
+ data_vector: `np.ndarray` representing the vector.
61
+ num_qubits: `int` representing number of qubits.
62
+
63
+ Returns: `int` representing the data value.
64
+ """
65
+ if len(data_vector) != np.power(2, num_qubits):
66
+ raise ValueError("The vector length is not equal to 2^num_qubits")
67
+
68
+ data_bin_vec = []
69
+ for i, val in enumerate(data_vector):
70
+ if val == -1:
71
+ data_bin_vec.append('1')
72
+ elif val == 1:
73
+ data_bin_vec.append('0')
74
+
75
+ data_bin = ''.join(data_bin_vec)
76
+ return int(data_bin, 2)
77
+
78
+
79
  def get_possible_state_strings(num_bits: int) -> np.ndarray:
80
  """
81
  Get all the state bit strings corresponding to given number of bits.
 
124
  ones_count[ct].append(i)
125
 
126
  return ones_count
127
+
128
+
129
+ def calculate_succ_probability(counts: Dict[str, int]) -> float:
130
+ """
131
+ Calculate the success probability from the counts of the states.
132
+
133
+ Args:
134
+ counts: `dict` containing the counts of the states.
135
+
136
+ Returns: `float` representing the success probability.
137
+ """
138
+ if len(counts) == 0:
139
+ raise ValueError("The counts dict is empty")
140
+
141
+ total_count = sum(counts.values())
142
+ succ_count = counts.get('1', 0)
143
+ return succ_count / total_count
quantum_perceptron/utils/plot_utils.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import matplotlib.pyplot as plt
3
+ from quantum_perceptron.utils.data_utils import (
4
+ get_bin_int,
5
+ assert_bits,
6
+ assert_negative
7
+ )
8
+
9
+
10
+ def get_img_from_data(data: int, num_qubits: int) -> np.ndarray:
11
+ """
12
+ Get n x n matrix representing the image of the data where n is
13
+ num_qubits.
14
+
15
+ Args:
16
+ data: `int` representing data value
17
+ (correspponding to input or weight vector)
18
+ num_qubits: `int` representing number of qubits.
19
+
20
+ Returns: Image in form of `np.ndarray`.
21
+ """
22
+ assert_negative(data)
23
+ assert_bits(data, num_qubits)
24
+ bin_str = get_bin_int(data, num_qubits)
25
+ img = np.zeros((np.power(2, num_qubits)))
26
+
27
+ for i, bit in enumerate(bin_str):
28
+ if bit == '0':
29
+ img[i] = 255
30
+
31
+ return img.reshape((num_qubits, num_qubits))
32
+
33
+
34
+ def plot_img_from_data(data: int, num_qubits: int):
35
+ """
36
+ Plot image from data.
37
+ """
38
+ img = get_img_from_data(data, num_qubits)
39
+ ax = plt.imshow(img, cmap='gray')
40
+ ax.axes.xaxis.set_visible(False)
41
+ ax.axes.yaxis.set_visible(False)
requirements.txt CHANGED
@@ -3,4 +3,5 @@ qiskit
3
  pycodestyle
4
  pytest
5
  mypy
6
- gradio
 
 
3
  pycodestyle
4
  pytest
5
  mypy
6
+ gradio
7
+ wandb