In [56]:
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
import shapely.geometry.polygon
import json
from functools import partial
import pyproj
from shapely.ops import transform
import pandas as pd
In [86]:
brdf = gpd.read_file('brest/buildings_brest_full.geojson')
In [87]:
brdf.shape
Out[87]:
(27174, 5)
In [2]:
# df = gpd.read_file('minsk_belarus.imposm-geojson/minsk_belarus_buildings.geojson')
df = gpd.read_file('geojson/grodno_buildings_full_18.geojson')
df.shape
Out[2]:
(26172, 5)
In [57]:
all_results_grodno = pd.read_csv('data/input/all_results_grodno.csv')
In [68]:
roofs_type_dict = dict(all_results_grodno.values)
In [79]:
def coords_to_array(coords):
return [[c[1], c[0]] for c in coords]
def get_building_area(building):
project = partial(
pyproj.transform,
pyproj.Proj(init='EPSG:4326'),
pyproj.Proj(init='EPSG:32633'))
figure = transform(project, building.geometry)
return figure.area
def polygon_to_array(p):
res = dict()
p_id = int(p.id - 1)
res['id'] = p_id
res['centroid'] = [p.geometry.centroid.y, p.geometry.centroid.x]
res['name'] = p[2]
res['type'] = p.type
res['roof_area'] = get_building_area(p)
is_flat = False
if p_id in roofs_type_dict:
is_flat = bool(roofs_type_dict[p_id])
res['is_flat'] = is_flat
res['exterior'] = coords_to_array(p.geometry.exterior.coords)
res['interiors'] = [coords_to_array(x.coords) for x in p.geometry.interiors]
return res
In [26]:
k = df.ix[15]
In [34]:
pl = df.ix[15]
In [44]:
pl[2]
Out[44]:
'Приход Пресвятого Искупителя'
In [30]:
k.name
Out[30]:
15
In [81]:
polygon_to_array(df.ix[0])
Out[81]:
{'centroid': [53.68630938480518, 23.829517963823307],
'exterior': [[53.686277791040595, 23.829047942132462],
[53.68631173774847, 23.829110974044312],
[53.68633872747668, 23.829074931860674],
[53.68657476187005, 23.829541971505506],
[53.68654777214181, 23.829578935698493],
[53.686582724678054, 23.829646996752274],
[53.68655573494984, 23.82968496677364],
[53.68652178824197, 23.82961698953889],
[53.68627376772707, 23.82997498062343],
[53.686036727505325, 23.82950995263539],
[53.68622775107866, 23.829229997069376],
[53.68628474802023, 23.829150955722465],
[53.686250717493344, 23.82908599597286],
[53.686277791040595, 23.829047942132462]],
'id': 0,
'interiors': [[[53.68630377494043, 23.82937793766038],
[53.686204784663964, 23.829520932928546],
[53.68629673414176, 23.829698964551934],
[53.68639572441825, 23.829555969283803],
[53.68630377494043, 23.82937793766038]]],
'is_flat': True,
'name': None,
'roof_area': 1623.2254890467225,
'type': 'public'}
In [82]:
res = []
for index in range(len(df)):
poly = df.ix[index]
if type(poly.geometry) is shapely.geometry.polygon.Polygon:
res.append(polygon_to_array(poly))
In [71]:
len(res)
Out[71]:
26165
In [83]:
with open('data/output/grodno_buildings_26k_roofs_labeled.json', 'w') as f:
f.write(json.dumps(res))
In [ ]:
In [39]:
df.ix[0].geometry
Out[39]:
In [43]:
[list(x.coords) for x in df.ix[0].geometry.interiors]
Out[43]:
[[(23.82937793766038, 53.68630377494043),
(23.829520932928546, 53.686204784663964),
(23.829698964551934, 53.68629673414176),
(23.829555969283803, 53.68639572441825),
(23.82937793766038, 53.68630377494043)]]
In [29]:
list(df.ix[0].geometry.interiors[0].coords)
Out[29]:
[(23.82937793766038, 53.68630377494043),
(23.829520932928546, 53.686204784663964),
(23.829698964551934, 53.68629673414176),
(23.829555969283803, 53.68639572441825),
(23.82937793766038, 53.68630377494043)]
In [7]:
grodno_small = plt.imread('satellite_maps/grodno_small_test_18.png')
In [82]:
from skimage.io import imread
In [ ]:
img = imread('satellite_maps/grodno_full_18.png')
/opt/conda/lib/python3.5/site-packages/PIL/Image.py:2246: DecompressionBombWarning: Image size (1889796096 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.
DecompressionBombWarning)
In [12]:
import numpy as np
In [ ]:
In [13]:
arr = np.zeros(2**32)
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-13-3797360445a2> in <module>()
----> 1 arr = np.zeros(2**32)
MemoryError:
In [6]:
from PIL import Image
im = Image.open('satellite_maps/grodno_maps_full/grodno_full_18.bmp')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-6-0ce2b82e0319> in <module>()
1 from PIL import Image
----> 2 im = Image.open('satellite_maps/grodno_maps_full/grodno_full_18.bmp')
/opt/conda/lib/python3.5/site-packages/PIL/Image.py in open(fp, mode)
2305 return None
2306
-> 2307 im = _open_core(fp, filename, prefix)
2308
2309 if im is None:
/opt/conda/lib/python3.5/site-packages/PIL/Image.py in _open_core(fp, filename, prefix)
2295 if not accept or accept(prefix):
2296 fp.seek(0)
-> 2297 im = factory(fp, filename)
2298 _decompression_bomb_check(im.size)
2299 return im
/opt/conda/lib/python3.5/site-packages/PIL/ImageFile.py in __init__(self, fp, filename)
95
96 try:
---> 97 self._open()
98 except (IndexError, # end of data
99 TypeError, # end of data (ord)
/opt/conda/lib/python3.5/site-packages/PIL/BmpImagePlugin.py in _open(self)
203 offset = i32(head_data[10:14])
204 # load bitmap information (offset=raster info)
--> 205 self._bitmap(offset=offset)
206
207
/opt/conda/lib/python3.5/site-packages/PIL/BmpImagePlugin.py in _bitmap(self, header, offset)
129 # -------------------------------- Check abnormal values for DOS attacks
130 if file_info['width'] * file_info['height'] > 2**31:
--> 131 raise IOError("Unsupported BMP Size: (%dx%d)" % self.size)
132 # ----------------------- Check bit depth for unusual unsupported values
133 self.mode, raw_mode = BIT2MODE.get(file_info['bits'], (None, None))
OSError: Unsupported BMP Size: (52992x50688)
In [5]:
grodno_full = plt.imread('satellite_maps/grodno_maps_full/grodno_full_18.bmp')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-5-995b343e126f> in <module>()
----> 1 grodno_full = plt.imread('satellite_maps/grodno_maps_full/grodno_full_18.bmp')
/opt/conda/lib/python3.5/site-packages/matplotlib/pyplot.py in imread(*args, **kwargs)
2295 @docstring.copy_dedent(_imread)
2296 def imread(*args, **kwargs):
-> 2297 return _imread(*args, **kwargs)
2298
2299
/opt/conda/lib/python3.5/site-packages/matplotlib/image.py in imread(fname, format)
1304
1305 if ext not in handlers:
-> 1306 im = pilread(fname)
1307 if im is None:
1308 raise ValueError('Only know how to handle extensions: %s; '
/opt/conda/lib/python3.5/site-packages/matplotlib/image.py in pilread(fname)
1282 except ImportError:
1283 return None
-> 1284 image = Image.open(fname)
1285 return pil_to_array(image)
1286
/opt/conda/lib/python3.5/site-packages/PIL/Image.py in open(fp, mode)
2305 return None
2306
-> 2307 im = _open_core(fp, filename, prefix)
2308
2309 if im is None:
/opt/conda/lib/python3.5/site-packages/PIL/Image.py in _open_core(fp, filename, prefix)
2295 if not accept or accept(prefix):
2296 fp.seek(0)
-> 2297 im = factory(fp, filename)
2298 _decompression_bomb_check(im.size)
2299 return im
/opt/conda/lib/python3.5/site-packages/PIL/ImageFile.py in __init__(self, fp, filename)
95
96 try:
---> 97 self._open()
98 except (IndexError, # end of data
99 TypeError, # end of data (ord)
/opt/conda/lib/python3.5/site-packages/PIL/BmpImagePlugin.py in _open(self)
203 offset = i32(head_data[10:14])
204 # load bitmap information (offset=raster info)
--> 205 self._bitmap(offset=offset)
206
207
/opt/conda/lib/python3.5/site-packages/PIL/BmpImagePlugin.py in _bitmap(self, header, offset)
129 # -------------------------------- Check abnormal values for DOS attacks
130 if file_info['width'] * file_info['height'] > 2**31:
--> 131 raise IOError("Unsupported BMP Size: (%dx%d)" % self.size)
132 # ----------------------- Check bit depth for unusual unsupported values
133 self.mode, raw_mode = BIT2MODE.get(file_info['bits'], (None, None))
OSError: Unsupported BMP Size: (52992x50688)
In [ ]:
In [11]:
# min_lon = 23.8
# max_lon = 23.85
# top_lat = 53.69
# bottom_lat = 53.64.
move_left=-0.0001
move_up=0.00005
# move_left=0
# move_up=0
min_lon = 23.79913330078125+move_left
max_lon = 23.85131835937500+move_left
top_lat= 53.69020140888777+move_up
bottom_lat= 53.63975308561533+move_up
In [90]:
df.plot(figsize=(10,20))
Out[90]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f36c94f6dd8>
In [120]:
# pp = Point(27.5528669,53.8991698)
# pp = Point(27.5551613, 53.8991461)
pp = Point(23.83, 53.65)
pp = Point(23.8321414, 53.6959896)
In [121]:
n_houses = df.geometry.centroid.distance(pp).sort_values().head(50)
In [11]:
df.plot()
Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fc59142b4e0>
In [12]:
sg_boundary = df.ix[18780].geometry
sg_boundary
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/opt/conda/lib/python3.5/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance)
2133 try:
-> 2134 return self._engine.get_loc(key)
2135 except KeyError:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8564)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8508)()
KeyError: 18780
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-12-c896c9926d6f> in <module>()
----> 1 sg_boundary = df.ix[18780].geometry
2
3 sg_boundary
/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py in __getitem__(self, key)
85 else:
86 key = com._apply_if_callable(key, self.obj)
---> 87 return self._getitem_axis(key, axis=0)
88
89 def _get_label(self, label, axis=0):
/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis)
1030 return self._get_loc(key, axis=axis)
1031
-> 1032 return self._get_label(key, axis=axis)
1033
1034 def _getitem_iterable(self, key, axis=0):
/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py in _get_label(self, label, axis)
100 raise IndexingError('no slices here, handle elsewhere')
101
--> 102 return self.obj._xs(label, axis=axis)
103
104 def _get_loc(self, key, axis=0):
/opt/conda/lib/python3.5/site-packages/pandas/core/generic.py in xs(self, key, axis, level, drop_level)
1777 drop_level=drop_level)
1778 else:
-> 1779 loc = self.index.get_loc(key)
1780
1781 if isinstance(loc, np.ndarray):
/opt/conda/lib/python3.5/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance)
2134 return self._engine.get_loc(key)
2135 except KeyError:
-> 2136 return self._engine.get_loc(self._maybe_cast_indexer(key))
2137
2138 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8564)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8508)()
KeyError: 18780
In [3]:
import matplotlib.pyplot as plt
In [124]:
houses = df.ix[n_houses.index]
In [7]:
houses.plot(figsize=(10,20))
Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe7c0e87940>
In [8]:
import os
import matplotlib.pyplot as plt
from cartopy import config
import cartopy.crs as ccrs
In [1]:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.Mollweide())
ax.stock_img()
plt.show()
In [ ]:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.PlateCarree())
houses.plot(figsize=(10,20), ax=ax)
In [36]:
houses
Out[36]:
geometry
id
name
osm_id
type
8334
POLYGON ((23.82932244946139 53.64973914726951,...
8335.0
None
222486218.0
apartments
2505
POLYGON ((23.83033464808861 53.65036309614177,...
2506.0
None
29130902.0
residential
2572
POLYGON ((23.82896227908202 53.65080742082898,...
2573.0
None
29133296.0
residential
2507
POLYGON ((23.83068601746965 53.64991114392265,...
2508.0
None
29130906.0
residential
8791
POLYGON ((23.82890788053044 53.65032629958682,...
8792.0
None
307366257.0
yes
2510
POLYGON ((23.82977314439503 53.64880766636986,...
2511.0
None
29133291.0
residential
8333
POLYGON ((23.82843128551599 53.64969564519205,...
8334.0
None
222485423.0
apartments
1298
POLYGON ((23.83111525473117 53.64953412591791,...
1299.0
None
29126825.0
industrial
8943
POLYGON ((23.83075148013344 53.65109533920301,...
8944.0
None
367453084.0
yes
1282
POLYGON ((23.83121064078929 53.64943706347916,...
1283.0
None
29126824.0
industrial
8343
POLYGON ((23.82816985395598 53.64911184563601,...
8344.0
None
222484700.0
apartments
8330
POLYGON ((23.82821117673865 53.64949565298232,...
8331.0
None
222484763.0
apartments
717
POLYGON ((23.82835065160745 53.6507786709011, ...
718.0
None
29125641.0
public
2504
POLYGON ((23.83133092109983 53.64979094743114,...
2505.0
None
29130900.0
residential
2548
POLYGON ((23.83081962500623 53.64911486312116,...
2549.0
None
29130903.0
apartments
710
POLYGON ((23.82919194322898 53.64834649405725,...
711.0
None
29125627.0
yes
2508
POLYGON ((23.83034705330533 53.64856827921522,...
2509.0
None
29133292.0
apartments
2539
POLYGON ((23.83175856579973 53.64930798217028,...
2540.0
None
29130905.0
apartments
2502
POLYGON ((23.82959963899933 53.64774282939069,...
2503.0
None
29130897.0
dormitory
708
POLYGON ((23.82786165137631 53.64802555098473,...
709.0
None
29125625.0
public
814
POLYGON ((23.82709118683661 53.6502514491915, ...
815.0
None
29125638.0
public
8332
POLYGON ((23.82757138606939 53.6511235862167, ...
8333.0
None
222601039.0
apartments
1189
POLYGON ((23.83204313141249 53.6487938362296, ...
1190.0
None
29126819.0
industrial
2501
POLYGON ((23.83025099669496 53.64763998343875,...
2502.0
None
29130894.0
apartments
8063
POLYGON ((23.83163216669988 53.65036435342725,...
8064.0
Евроопт
172267995.0
retail
1274
POLYGON ((23.83236742724625 53.64870884373144,...
1275.0
None
29126822.0
yes
2530
POLYGON ((23.83243515302391 53.64916079595056,...
2531.0
None
29130898.0
apartments
8763
POLYGON ((23.83254503977452 53.64856023258817,...
8764.0
None
307366254.0
yes
9007
POLYGON ((23.83027513657609 53.6531966823286, ...
9008.0
None
384771930.0
industrial
1460
POLYGON ((23.82893998321958 53.6529486618137, ...
1461.0
Конте СПА
29128675.0
industrial
2503
POLYGON ((23.83207992796741 53.64816192454936,...
2504.0
None
29130896.0
apartments
1249
POLYGON ((23.82675498870032 53.65090096286841,...
1250.0
None
29126826.0
industrial
715
POLYGON ((23.82657125738274 53.64969304680207,...
716.0
None
29125639.0
yes
8888
POLYGON ((23.8300866275737 53.64670389249233, ...
8889.0
None
338683584.0
roof
926
POLYGON ((23.82611653913557 53.64923363468912,...
927.0
None
29125624.0
school
1742
POLYGON ((23.83284829703132 53.64876273936883,...
1743.0
None
29129465.0
apartments
8920
POLYGON ((23.8312122333509 53.64665762438682, ...
8921.0
Ручная автомойка
360763552.0
yes
8037
POLYGON ((23.83016558510161 53.64637448369759,...
8038.0
None
153244646.0
yes
2513
POLYGON ((23.82600665238499 53.65029084413641,...
2514.0
None
29133293.0
apartments
9009
POLYGON ((23.8268371313514 53.64720177754083, ...
9010.0
None
393208096.0
apartments
8036
POLYGON ((23.82954649773322 53.64629133521814,...
8037.0
None
153244653.0
yes
1470
POLYGON ((23.82908934873413 53.65397955208499,...
1471.0
None
29128681.0
public
2427
POLYGON ((23.83336914849454 53.65201223559114,...
2428.0
None
29130680.0
apartments
713
POLYGON ((23.82594797906276 53.65155399694464,...
714.0
None
29125637.0
public
1462
POLYGON ((23.82638224546619 53.6539808931895, ...
1463.0
None
29128676.0
industrial
8947
POLYGON ((23.82781513181371 53.6464296366205, ...
8948.0
None
368011748.0
yes
1469
POLYGON ((23.8294283967175 53.65431968971578, ...
1470.0
None
29128683.0
industrial
2439
POLYGON ((23.83377365914168 53.65114303223206,...
2440.0
None
29130681.0
apartments
699
POLYGON ((23.83167198073994 53.65382691762821,...
700.0
None
29125555.0
public
1192
POLYGON ((23.82586097490781 53.64836099474974,...
1193.0
None
29126829.0
industrial
In [ ]:
In [123]:
n_houses
Out[123]:
1908 0.000364
1903 0.000605
1905 0.000732
1902 0.000869
1989 0.000980
1904 0.001065
1865 0.001075
1874 0.001160
7585 0.001399
8803 0.001454
1968 0.001663
1918 0.001683
1873 0.001708
1864 0.001786
474 0.001820
2075 0.001840
2377 0.001879
1875 0.001917
9071 0.002026
2400 0.002100
7675 0.002149
1869 0.002171
7586 0.002174
1878 0.002375
1863 0.002546
1057 0.002663
1580 0.002723
8564 0.002757
1906 0.002768
1870 0.002818
1877 0.002844
1659 0.002866
1868 0.002873
7710 0.002901
8985 0.002906
1879 0.002980
1577 0.002986
2025 0.003025
1909 0.003036
1880 0.003116
1912 0.003139
8989 0.003180
9065 0.003216
1582 0.003222
1872 0.003269
2023 0.003353
433 0.003355
1866 0.003360
1914 0.003395
8050 0.003411
dtype: float64
In [128]:
houses
Out[128]:
geometry
id
name
osm_id
type
1908
POLYGON ((23.83185495768623 53.69541096419556,...
1909.0
None
29129830.0
residential
1903
POLYGON ((23.83192067180713 53.69653338484952,...
1904.0
None
29129828.0
residential
1905
POLYGON ((23.83243439865262 53.69641184725349,...
1906.0
None
29129829.0
residential
1902
POLYGON ((23.8314071964187 53.6966580237497, 2...
1903.0
None
29129827.0
residential
1989
POLYGON ((23.83301895257995 53.69630397215965,...
1990.0
None
29129785.0
residential
1904
POLYGON ((23.83128699992718 53.69499195285589,...
1905.0
None
29129826.0
residential
1865
POLYGON ((23.83104442764935 53.69676707231, 23...
1866.0
None
29129780.0
residential
1874
POLYGON ((23.83215896931435 53.69513695978083,...
1875.0
None
29129790.0
residential
7585
POLYGON ((23.83176501986517 53.6974025882086, ...
7586.0
None
40163343.0
yes
8803
POLYGON ((23.83202854690094 53.69739445776253,...
8804.0
None
313351877.0
roof
1968
POLYGON ((23.82987297286184 53.69551087648139,...
1969.0
None
29129784.0
residential
1918
POLYGON ((23.8336849786061 53.69589895859831, ...
1919.0
None
29129786.0
residential
1873
POLYGON ((23.8321667644843 53.69465659290995, ...
1874.0
None
29129792.0
residential
1864
POLYGON ((23.83029575605789 53.69676003151133,...
1865.0
None
29129779.0
residential
474
POLYGON ((23.83072323311976 53.69423531845644,...
475.0
None
29124853.0
public
2075
POLYGON ((23.83311207552418 53.69723352522161,...
2076.0
None
29130143.0
residential
2377
POLYGON ((23.83022593480447 53.6949229697928, ...
2378.0
None
29130573.0
residential
1875
POLYGON ((23.83295147825939 53.69466363370861,...
1876.0
None
29129793.0
residential
9071
POLYGON ((23.83010967780746 53.69568924338091,...
9072.0
ЦТП № 5-59
472864991.0
yes
2400
POLYGON ((23.83213826601349 53.69850162335274,...
2401.0
None
29130575.0
residential
7675
POLYGON ((23.83378287923517 53.69653774343917,...
7676.0
None
61576158.0
yes
1869
POLYGON ((23.83404699300416 53.69539914571209,...
1870.0
None
29129787.0
residential
7586
POLYGON ((23.82941942808111 53.69728473864998,...
7587.0
None
40163346.0
residential
1878
POLYGON ((23.83368321840643 53.69390842423269,...
1879.0
None
29129794.0
residential
1863
POLYGON ((23.82952562679432 53.69676941924288,...
1864.0
None
29129778.0
residential
1057
POLYGON ((23.8338400438148 53.69794154458268, ...
1058.0
ТП-603
29126514.0
yes
1580
POLYGON ((23.82982636948017 53.69849399582085,...
1581.0
None
29128827.0
industrial
8564
POLYGON ((23.83376058337274 53.69383231655186,...
8565.0
None
255513305.0
yes
1906
POLYGON ((23.83140736405676 53.69319872849098,...
1907.0
None
29129832.0
residential
1870
POLYGON ((23.83443792496817 53.69477393955438,...
1871.0
None
29129788.0
residential
1877
POLYGON ((23.82994145301075 53.69350751780388,...
1878.0
None
29129796.0
residential
1659
POLYGON ((23.83255308640156 53.69864562444925,...
1660.0
None
29128839.0
residential
1868
POLYGON ((23.82885239233141 53.69559905410278,...
1869.0
None
29129783.0
residential
7710
POLYGON ((23.83480748307909 53.69554406881795,...
7711.0
None
87280063.0
public
8985
POLYGON ((23.83134852309649 53.69877445430103,...
8986.0
None
378288862.0
industrial
1879
POLYGON ((23.82945396152218 53.69391596794554,...
1880.0
None
29129797.0
residential
1577
POLYGON ((23.82891827409037 53.69819836609591,...
1578.0
None
29128826.0
warehouse
2025
POLYGON ((23.83428495523526 53.69705893017851,...
2026.0
None
29130145.0
residential
1909
POLYGON ((23.83340309520239 53.69356677785933,...
1910.0
None
29129833.0
residential
1880
POLYGON ((23.82898097072609 53.6943199756785, ...
1881.0
None
29129798.0
residential
1912
POLYGON ((23.83073454868904 53.69301583536372,...
1913.0
None
29129841.0
residential
8989
POLYGON ((23.82935279195086 53.69768346578397,...
8990.0
ВНС
378288863.0
yes
9065
POLYGON ((23.82935245667474 53.69774792261936,...
9066.0
ТП-166
472864990.0
yes
1582
POLYGON ((23.82919278141929 53.69777248159568,...
1583.0
None
29128830.0
industrial
1872
POLYGON ((23.83451998380025 53.69412593462002,...
1873.0
None
29129789.0
residential
2023
POLYGON ((23.83491577726809 53.69595033966476,...
2024.0
None
29130141.0
residential
433
POLYGON ((23.83206894767426 53.69946193799933,...
434.0
None
29125195.0
public
1866
POLYGON ((23.8287152643955 53.69674519554272, ...
1867.0
None
29129781.0
residential
1914
POLYGON ((23.83022459369994 53.69303804740713,...
1915.0
None
29129842.0
residential
8050
POLYGON ((23.83383912180545 53.6988071437234, ...
8051.0
None
162041838.0
residential
In [129]:
evroopt = houses.ix[1908]
In [130]:
evroopt
Out[130]:
geometry POLYGON ((23.83185495768623 53.69541096419556,...
id 1909
name None
osm_id 2.91298e+07
type residential
Name: 1908, dtype: object
In [131]:
eb = evroopt.geometry.bounds
In [46]:
eb
Out[46]:
(23.831632166699876, 53.649838975736316, 23.833392366366326, 53.65121184765712)
In [140]:
In [158]:
evroopt.geometry.plot()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-158-f06c66dcf0d9> in <module>()
----> 1 evroopt.geometry.plot()
AttributeError: 'Polygon' object has no attribute 'plot'
In [ ]:
In [168]:
type(houses)
Out[168]:
geopandas.geodataframe.GeoDataFrame
In [166]:
houses.head()
Out[166]:
geometry
id
name
osm_id
type
1908
POLYGON ((23.83185495768623 53.69541096419556,...
1909.0
None
29129830.0
residential
1903
POLYGON ((23.83192067180713 53.69653338484952,...
1904.0
None
29129828.0
residential
1905
POLYGON ((23.83243439865262 53.69641184725349,...
1906.0
None
29129829.0
residential
1902
POLYGON ((23.8314071964187 53.6966580237497, 2...
1903.0
None
29129827.0
residential
1989
POLYGON ((23.83301895257995 53.69630397215965,...
1990.0
None
29129785.0
residential
In [170]:
gpd.geodataframe.GeoDataFrame([houses.ix[1908]]).plot()
Out[170]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fc82aac90b8>
In [ ]:
In [287]:
cnt = evroopt.geometry.centroid
In [294]:
print(cnt.y)
53.69564129500758
In [291]:
print(list(cnt))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-291-d71fabeedc76> in <module>()
----> 1 print(list(cnt))
TypeError: 'Point' object is not iterable
In [ ]:
evroopt
In [297]:
evroopt.geometry.centroid.x
Out[297]:
23.832245865569984
In [302]:
top_lat
Out[302]:
53.690251408887775
In [9]:
def get_building_extended_image(building):
evroopt = building
# print(evroopt.geometry.centroid)
eb = evroopt.geometry.bounds
assert(evroopt.geometry.centroid.x>min_lon)
assert(evroopt.geometry.centroid.x<max_lon)
assert(evroopt.geometry.centroid.y>bottom_lat)
assert(evroopt.geometry.centroid.y<top_lat)
min_x = max(0, int((eb[0] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1]))
max_x = int((eb[2] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1])
min_y = max(0, int((eb[3] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0]))
max_y = int((eb[1] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0])
print(min_x)
print(max_x)
print(min_y)
print(max_y)
# evroopt_image = grodno_small[min_y:max_y, min_x:max_x, :]
# plt.imshow(evroopt_image)
# plt.show()
x_shift = 50
y_shift = 18
evroopt_image_extended = grodno_small[min_y:max_y+y_shift,min_x:max_x+x_shift,:]
return evroopt_image_extended
# plt.title('extended')
# plt.imshow(evroopt_image_extended)
# plt.show()
In [316]:
im = get_building_extended_image(df.ix[1])
In [321]:
from skimage.io import imsave
In [353]:
df.ix[255].geometry
Out[353]:
In [328]:
df.ix[0]
Out[328]:
geometry POLYGON ((23.82904794213246 53.6862777910406, ...
id 1
name None
osm_id -61784
type public
Name: 0, dtype: object
In [335]:
Out[335]:
array([], shape=(0, 227, 3), dtype=float32)
In [348]:
df.ix[0]
Out[348]:
geometry POLYGON ((23.82904794213246 53.6862777910406, ...
id 1
name None
osm_id -61784
type public
Name: 0, dtype: object
In [344]:
for i in range(len(df)):
cur_b = df.ix[i]
if i%100 == 0:
print(i)
if cur_b.geometry.centroid.x>min_lon and cur_b.geometry.centroid.x<max_lon and cur_b.geometry.centroid.y>bottom_lat and cur_b.geometry.centroid.y<top_lat:
imsave('data/working/samples/%04d.bmp' % i, get_building_extended_image(cur_b))
0
5595
5767
1154
1326
5729
5912
1324
1510
7021
7123
2641
2746
8739
8868
11844
12039
9012
9207
10512
10636
5778
5994
4729
4984
7366
7655
11448
11706
8411
8543
11942
12138
8358
8568
8731
8998
6871
7076
4097
4319
8513
8735
9221
9472
7829
8096
11440
11696
8078
8309
9933
10051
7617
7781
9598
9803
6083
6285
3579
3722
8510
8741
9070
9208
7576
7776
10839
10945
6397
6570
2787
2925
8307
8509
9618
9781
4334
4539
12535
12808
8125
8275
9254
9659
3997
4231
6074
6295
1031
1184
1314
1496
4850
4952
3780
3886
7280
7444
9404
9610
4923
5071
3878
4034
7909
8207
10636
10813
411
534
6124
6261
6211
6290
10377
10658
6388
6485
10543
10575
6699
6983
8637
8987
6355
6490
10582
10662
6963
7159
8403
8640
6670
7117
8360
8953
7014
7233
8463
8740
7091
7294
8495
8763
4237
4529
13466
13548
4144
4598
13162
13518
4131
4501
13341
13456
4118
4528
13276
13403
4113
4558
13202
13339
4096
4543
13167
13287
/opt/conda/lib/python3.5/site-packages/skimage/util/dtype.py:110: UserWarning: Possible precision loss when converting from float32 to uint8
"%s to %s" % (dtypeobj_in, dtypeobj))
3862
4028
13285
13456
100
3996
4453
10840
10977
3982
4440
10898
11030
3968
4426
10952
11071
3179
3231
10908
11026
3240
3287
10906
11056
4041
4117
13275
13520
4224
4422
9954
10315
4275
4380
10392
10605
4113
4175
10532
10593
4132
4217
10342
10513
4364
4434
10269
10386
4389
4688
10440
10561
4484
4645
10378
10449
3938
4478
9009
9347
4408
4647
10393
10488
3911
4015
9100
9274
4185
4311
8799
9105
3967
4203
8948
9117
3987
4201
9025
9171
3999
4281
8767
9030
3854
3989
9042
9131
3874
3943
9132
9240
4482
4678
8790
8978
4487
4711
8841
9028
3731
3925
5163
5326
3269
3445
4883
5027
3623
3724
5107
5187
3663
3733
5078
5134
3615
3924
5156
5371
4634
4742
10582
11059
4778
4866
10787
10963
4660
4817
10759
11126
4809
4977
10727
10813
1728
1911
7084
7217
4262
4688
10725
11159
4449
4624
10552
11086
4340
4570
10494
10909
4015
4232
9080
9225
5930
5996
2951
3022
4696
4918
10897
11148
4005
4049
13340
13509
3035
3085
10937
10979
200
4308
4417
10210
10370
3999
4190
719
814
5173
5341
110
213
6348
6525
0
40
5841
5896
1595
1736
3114
3161
10932
10999
5924
6078
1735
1784
5021
5180
1198
1294
4857
5176
800
990
5937
6086
1572
1614
6113
6168
2076
2153
6582
6716
1625
1660
6368
6432
1655
1699
6321
6355
1639
1692
6476
6516
1575
1616
6394
6474
1572
1637
6478
6513
1492
1560
6328
6372
1509
1572
6331
6395
1396
1435
6478
6587
1373
1469
3344
3423
3294
3370
6094
6184
2382
2463
6111
6220
2281
2394
4502
4666
10575
11109
5999
6063
2342
2432
5788
5837
2517
2566
5812
5964
2387
2547
5954
6121
2421
2679
5904
5995
3092
3157
5949
6011
2322
2378
5852
6054
2615
2746
5866
6013
2740
2917
5801
5932
2889
3059
5710
5786
2591
2672
6731
6834
483
547
6643
6689
957
1013
6367
6408
2300
2346
6412
6572
2211
2309
6330
6381
2310
2364
6303
6344
2455
2585
6161
6235
2432
2560
5528
5726
2843
3015
6124
6228
2553
2678
5455
5568
3294
3414
5580
5666
3362
3489
5639
5816
3063
3374
5380
5513
3090
3273
5512
5621
3026
3157
5535
5624
3141
3206
5375
5427
3045
3100
5179
5296
3064
3220
4906
4985
3480
3573
6440
6572
1612
1689
4997
5067
3512
3568
5017
5050
3278
3311
5234
5383
3226
3364
300
5126
5249
3297
3444
5095
5148
3442
3508
5262
5307
3473
3559
5184
5267
3426
3479
5160
5232
3643
3744
5207
5322
3593
3727
6447
6653
1099
1260
4252
4372
10178
10365
5327
5376
3653
3710
5075
5149
3711
3777
5239
5364
3987
4081
5086
5189
3822
3894
5403
5522
3781
3933
5351
5536
4067
4322
4946
5076
4595
4744
5832
5909
3454
3573
5805
5889
2544
2618
5175
5332
4528
4745
5868
5910
3360
3429
5757
5837
3512
3617
5731
5767
3561
3600
5667
5753
3448
3592
5755
5876
3310
3418
5780
5934
3223
3327
5818
5889
3310
3353
5878
5917
3070
3108
5891
6019
2999
3088
5957
6017
2913
2974
5978
6042
2866
2936
6004
6089
2775
2887
6053
6118
2715
2794
6213
6299
2549
2700
6090
6151
2771
2816
6038
6145
2793
2924
6056
6099
2912
2964
6019
6069
2997
3061
5993
6049
3048
3128
6043
6086
2954
3008
6106
6168
2940
3030
6064
6115
3087
3142
6078
6149
3017
3100
6129
6172
2015
2063
5797
5848
2204
2251
5821
5905
2255
2343
5690
5740
2316
2370
5681
5763
2476
2553
5689
5745
2398
2456
5659
5708
2441
2501
6231
6282
2871
2910
6133
6181
2905
2954
5950
6112
3189
3310
6106
6156
3100
3137
6311
6356
2820
2883
6325
6404
2749
2811
6299
6346
2886
2947
6278
6378
3386
3449
6293
6307
2957
2973
6339
6373
2998
3051
4782
4925
3448
3588
6373
6405
2834
2859
6361
6422
2927
3003
6592
6636
3295
3342
6661
6754
2883
3037
6589
6696
2753
2888
6652
6710
3173
3248
6719
6768
2761
2852
6148
6293
3732
3881
5969
6158
3656
3850
5907
5991
3860
3965
5959
6023
4473
4566
5998
6342
4888
5138
5940
5971
4487
4513
6084
6219
4089
4190
7153
7357
4206
4412
6480
6677
1236
1590
6712
6815
4661
4840
5761
5959
1812
1920
7098
7183
4712
4784
6919
6974
4429
4475
6988
7026
4597
4630
4716
5010
4239
4529
5720
5854
3369
3489
6714
7147
4069
4452
7100
7155
4419
4463
7192
7242
4445
4505
7265
7336
4435
4526
7242
7279
4875
4912
6084
6206
2658
2762
7143
7246
4375
4427
7201
7239
4857
4894
6278
6320
2993
3045
5374
5490
3364
3484
7001
7080
3935
4014
6296
6405
3069
3157
6714
6774
3615
3681
7065
7211
3863
4079
6668
6737
3029
3181
400
6498
6573
3456
3512
6834
6955
2569
2691
6931
6979
2500
2548
6820
6903
2449
2500
7184
7391
4628
4834
6879
6907
2433
2454
6836
6898
3816
3910
6795
7016
2127
2293
7402
7473
3983
4031
6779
6868
2289
2359
6867
7020
2269
2404
6798
6842
2362
2420
6970
7018
2401
2471
7004
7062
2099
2158
7414
7477
3805
3861
7027
7060
2163
2285
7312
7406
3697
3831
5045
5170
3253
3376
7092
7127
3846
3890
7086
7119
3884
3919
6841
6877
1187
1257
6729
6866
1102
1202
7350
7382
1076
1125
7333
7643
934
1080
6876
7040
1432
1553
7250
7335
3930
3988
7573
7625
1209
1277
7394
7478
1461
1501
7415
7536
1579
1630
7143
7381
1453
1537
7124
7177
1471
1485
7354
7432
1938
1986
7728
7819
1480
1598
7788
7827
1592
1642
5364
5732
5189
5518
7801
7835
1636
1690
7361
7381
3963
3992
7367
7409
2155
2241
7608
7690
1846
1916
7516
7601
1877
1940
7414
7495
2280
2357
7463
7637
2123
2239
7087
7121
2185
2233
7370
7449
4396
4533
7187
7227
2475
2514
7061
7124
2291
2368
7293
7337
2493
2541
6943
7014
2739
2795
7227
7315
2557
2603
7243
7306
2586
2630
7285
7331
2724
2777
7157
7210
2619
2651
7045
7090
2607
2651
7353
7410
2535
2576
7475
7569
2436
2495
7550
7619
2282
2345
7552
7578
2374
2421
7436
7496
2350
2464
7499
7526
4073
4120
7649
7707
2447
2528
7578
7596
2399
2440
7596
7640
2435
2451
7237
7272
2619
2650
7409
7463
4084
4130
7548
7574
2604
2645
7344
7559
2610
2775
7640
7693
2603
2695
7148
7256
2721
2787
7671
7722
2726
2875
7251
7400
2774
2914
7409
7493
2888
2943
7585
7630
2920
2975
7067
7088
3643
3659
7355
7487
2974
3057
7545
7590
2874
2910
7590
7633
2871
2910
7701
7732
2891
2926
7657
7735
2935
3004
7497
7554
2850
2899
7445
7520
3077
3147
7276
7406
3210
3286
500
6916
7036
1405
1435
7304
7409
3166
3224
7514
7618
3773
3896
7597
7783
3861
3952
6597
6706
1803
1853
7697
7783
3751
3866
7692
7757
3492
3614
7639
7683
3366
3448
7030
7065
3550
3641
7747
7808
1619
1709
5373
5483
4982
5076
4847
4905
4834
4901
8883
8936
1694
1759
8922
9058
1546
1696
7322
7696
1483
1852
6796
6878
982
1034
6742
6805
938
1040
6931
7058
431
483
6872
6945
928
1018
8140
8393
24
193
7833
7842
1873
1882
7843
7954
1739
1880
8318
8352
1595
1640
7891
7944
1943
2004
7283
7311
2309
2370
7640
7700
2271
2444
8599
8652
1431
1486
8798
8829
1667
1697
8695
8899
1451
1620
8656
8698
1529
1592
8661
8707
1791
1862
8551
8585
2005
2029
8615
8687
1948
2042
8316
8510
889
998
8470
8554
1211
1302
8268
8319
491
535
7202
7339
2918
3092
7807
8046
1399
1653
8425
8470
495
546
7701
7778
963
1040
8168
8308
1137
1296
7836
8067
879
1026
7039
7172
915
990
7029
7162
856
918
7026
7141
748
865
6972
7035
936
984
6941
7016
775
820
6911
7036
689
782
6977
7018
652
680
5809
5934
4983
5074
7307
7405
882
937
7524
7596
843
893
7321
7394
816
862
7512
7563
651
726
7185
7235
839
895
7197
7257
904
955
7225
7327
702
755
7115
7175
531
605
7325
7431
399
543
7202
7248
581
634
7444
7484
373
436
8162
8277
664
715
8361
8492
544
681
8407
8455
399
467
8218
8321
558
624
8321
8361
416
444
8265
8413
303
354
8109
8165
314
347
7410
7489
1325
1389
8047
8105
310
414
8076
8142
491
537
6955
6998
324
349
6963
7043
186
337
9057
9102
1569
1608
7012
7193
0
193
8545
8630
1182
1274
6917
6993
3901
3968
4775
4886
535
653
4304
4418
751
852
4448
4786
477
856
9091
9328
1021
1351
7264
7355
1112
1172
600
7047
7169
305
345
7167
7276
300
335
7274
7373
278
327
6867
6892
2407
2436
7579
7650
2450
2504
2412
2544
5246
5344
7499
7527
66
97
7385
7430
226
263
7438
7479
143
271
7384
7464
282
317
4207
4431
858
893
8509
8606
2102
2230
7735
7808
8
39
6898
6936
2439
2466
7908
7943
112
131
8025
8057
130
170
7743
7784
133
185
7819
7856
134
181
7911
7960
138
178
8084
8116
122
162
8589
8624
81
125
8644
8678
89
116
8704
8746
78
114
8811
8840
0
23
7228
7316
220
264
8380
8434
2106
2152
7660
7797
13238
13318
7301
7426
0
149
8001
8049
0
86
8817
8917
12311
12369
8687
8765
12568
12654
7199
7263
3923
3977
9355
9383
11903
11932
8068
8151
12734
12817
8830
8906
12505
12586
6509
6611
11679
11789
7275
7470
12120
12307
8523
8630
11478
11585
8681
8960
11145
11356
8685
8822
11300
11382
7710
7848
12369
12575
7322
7397
12681
12746
8893
8996
10887
10978
8438
8502
47
139
8239
8386
13502
13705
7042
7103
11452
11516
7324
7481
10939
11125
6901
6946
11333
11385
7451
7587
3154
3244
6861
6909
11381
11427
6762
6864
9842
9968
6718
6887
10041
10191
6920
6962
10067
10121
7898
7947
0
94
7726
7917
10487
10678
7657
7813
8705
8893
7593
7751
9092
9278
7927
8126
9271
9505
7898
7959
9194
9256
8267
8365
9816
9900
8337
8372
9160
9199
8311
8345
9152
9184
8308
8371
9097
9154
8530
8567
80
133
8861
8893
8665
8697
8368
8588
1797
2073
7967
8056
8196
8275
7275
7497
8147
8407
6537
6576
11242
11329
6084
6282
11408
11578
700
7961
8046
11930
12041
6442
6496
11296
11344
6443
6462
11251
11268
6829
6860
9302
9338
6718
6825
9040
9160
6824
6894
8973
9039
6851
6916
9046
9117
5373
5619
13124
13448
7023
7065
11323
11365
5621
5651
13160
13193
4797
4977
12590
12780
4934
4968
12800
12829
5017
5176
12063
12248
4731
4764
12691
12724
5133
5160
12743
12770
4853
5031
13139
13328
5465
5584
12251
12444
8924
9132
8685
8899
7455
7642
8523
8700
0
207
5990
6148
7273
7332
11962
12022
1358
1621
7045
7251
0
138
5040
5200
357
540
8793
8938
7328
7424
8093
8206
0
95
5246
5368
534
727
5253
5377
6918
7025
11373
11480
427
537
5015
5123
7291
7324
8281
8313
1390
1462
6923
7042
587
722
4972
5048
210
276
5140
5240
600
662
5088
5173
7136
7294
10397
10582
761
845
5029
5142
233
455
5916
6223
9312
9457
9820
10022
6782
6983
11215
11386
918
965
4512
4567
954
1041
3981
4075
106
242
3380
3493
2268
2320
12884
12961
2262
2325
12821
12865
2132
2284
8793
8943
7054
7249
11973
12161
6910
6939
9026
9053
2501
2651
6280
6425
1333
1479
5974
6075
1348
1383
6547
6594
1226
1338
4929
5080
1709
1802
4771
4959
747
828
5151
5351
1145
1379
7305
7572
1798
2012
4784
4936
2701
2748
5108
5196
1081
1146
5643
5747
2677
2840
5595
5704
800
1732
1769
3253
3286
2486
2511
2730
2775
2696
2718
2711
2747
3248
3349
7172
7283
3286
3364
7314
7376
4141
4358
5751
5917
1101
1186
4960
5112
3715
3804
5744
5894
2995
3226
5673
5790
3050
3124
4225
4280
4414
4461
4048
4090
3934
4238
5556
5709
2759
2806
2686
2762
2402
2530
9357
9428
5230
5403
12474
12660
4030
4135
1111
1214
4086
4211
2004
2067
4046
4138
995
1090
3356
3493
9347
9431
4184
4299
1121
1201
3834
3900
968
1037
6156
6289
8935
9075
4184
4204
953
986
4125
4161
1201
1261
4485
4629
1554
1786
5791
5848
10888
11082
5773
5831
10640
10813
5353
5449
8047
8142
8192
8361
11025
11249
3428
3482
510
606
4945
5195
7230
7533
4201
4419
6187
6405
5159
5341
7109
7194
5248
5401
7170
7333
3618
3684
3706
3747
5314
5431
7084
7200
3185
3235
12150
12215
4991
5054
4418
4485
4177
4315
1007
1108
4901
4951
4104
4229
4705
4814
3792
3955
5647
5723
2534
2605
5073
5161
3001
3093
3389
3480
643
691
5770
5868
2693
2850
4605
4697
3671
3760
5755
5836
2644
2739
4868
4917
3645
3693
5435
5499
2830
2912
5340
5386
2983
3029
4878
4914
3335
3379
4719
4810
1494
1563
5374
5446
257
344
7343
7574
5353
5575
7831
7876
4328
4397
7815
7869
4734
4787
3238
3312
9536
9596
7699
7810
4811
4917
6667
6792
5660
5763
6581
6665
5645
5770
7715
7861
4654
4719
7744
7799
4528
4606
6460
6520
5590
5664
7841
7899
4557
4639
4317
4394
8564
8671
7812
7855
4418
4472
7939
7988
5304
5387
7893
7919
5334
5379
7869
7941
4437
4474
7858
7886
4661
4685
7863
7918
4491
4546
5023
5202
6664
6833
8006
8035
4950
4988
7936
7994
4024
4098
7834
8026
5144
5293
5542
5681
6814
6952
7428
7511
715
775
7981
8034
3941
3991
8086
8266
5079
5219
4321
4433
4000
4103
9371
9445
5306
5576
9337
9453
4434
4538
8177
8297
5695
5740
8069
8171
5708
5803
9625
9683
5079
5125
8028
8077
5322
5366
8048
8081
5284
5311
5656
5799
5200
5360
8029
8085
4060
4120
8112
8244
4091
4162
5257
5305
4141
4222
8274
8384
3861
3949
9075
9224
2895
3093
8119
8190
3930
4018
9238
9298
3009
3139
9239
9464
2673
2905
8746
8964
3871
3938
900
9011
9107
3117
3163
9406
9534
2190
2351
9355
9422
767
838
9427
9482
799
851
9298
9322
901
926
1262
1385
6215
6420
9424
9503
696
789
9082
9136
693
719
5272
5403
6540
6727
8920
9223
0
147
7959
8000
1190
1263
8903
8944
289
367
9446
9609
188
410
8973
9073
488
542
8949
9094
627
715
9159
9226
349
448
7399
7445
605
645
9153
9207
666
724
8908
8938
241
289
7318
7348
559
583
9468
9626
6268
6406
5048
5246
12840
13034
8764
8816
695
755
9085
9181
510
601
7147
7265
4869
4947
9112
9255
7781
7942
9432
9632
1788
1980
7797
7926
1059
1337
6457
6543
2485
2601
8054
8300
1764
2024
6495
6690
2320
2513
6341
6417
2633
2723
6363
6409
1950
2092
6229
6346
3438
3625
6000
6081
3579
3633
6043
6247
3426
3576
6905
7073
2813
2889
6812
6916
2784
2849
8290
8360
2569
2658
8194
8267
2504
2558
5411
5538
1513
1702
1000
8103
8167
2930
3011
4015
4136
8173
8360
7954
8113
2905
2997
7791
7933
3095
3186
8013
8182
2821
2930
7918
8022
3130
3196
7866
7941
3400
3451
7799
7928
3263
3394
4784
4878
4199
4244
4439
4600
3921
4199
7794
7924
3185
3275
1100
7522
7547
13739
13766
7612
7637
13793
13820
7931
8025
3213
3347
8027
8085
13653
13741
9536
9565
13065
13094
9362
9423
13106
13206
9411
9442
13980
14010
7442
7472
12382
12412
9040
9072
10762
10794
9576
9608
10041
10072
9600
9651
9935
9991
9166
9235
10341
10382
8226
8259
9748
9784
6200
6242
13861
13909
7747
7773
8226
8255
6501
6549
13576
13623
6099
6212
11267
11309
6040
6079
11273
11335
6249
6290
11260
11330
6326
6484
11131
11223
6143
6274
11197
11230
6029
6166
10809
10844
5990
6084
10705
10757
6019
6063
11095
11233
6105
6174
10702
10748
6181
6424
10777
10824
5996
6020
10811
10840
6000
6051
10867
10896
6097
6117
10863
10879
6065
6168
10930
10963
5999
6045
10984
11019
5950
5975
10633
10676
6011
6200
10620
10668
5938
5982
10452
10613
5985
6074
10243
10573
6111
6176
10314
10441
6125
6201
10547
10569
6245
6284
10335
10383
6454
6494
10684
10786
6268
6288
10401
10431
6301
6322
10534
10586
6277
6420
10678
10732
6187
6273
10694
10731
6429
6470
10463
10486
5889
5928
9705
9735
6186
6359
10116
10174
5890
5935
9753
10088
6026
6163
9494
9686
5950
5980
9935
9955
6177
6269
9480
9604
5974
6151
9786
9920
6293
6334
9566
9680
5866
6245
9361
9688
6480
6522
9515
9551
6397
6478
9436
9484
6259
6308
9357
9414
6895
7524
7475
7982
6277
6377
7532
7648
7052
7155
7409
7477
6670
6773
6912
7048
6571
6608
6888
6931
8378
8402
13730
13755
6262
6377
8758
8849
6212
6328
8867
8960
6780
6995
8125
8301
6227
6555
7813
8051
6605
6698
8050
8146
5920
6102
8189
8316
6350
6444
8118
8186
6311
6409
8041
8116
6261
6339
7975
8068
6124
6285
8093
8206
6184
6289
7915
8026
5914
6157
7821
8118
6151
6232
7750
7840
5844
6061
7764
8033
6153
6208
13006
13063
5706
5846
8039
8201
4910
4966
13052
13108
5001
5030
13155
13188
8157
8183
12444
12469
0
451
10296
10713
6850
6952
12950
13032
1200
1256
1504
9696
9903
1257
1352
9553
9688
8064
8108
8749
8794
51
191
10738
10851
6269
6330
10882
10920
6464
6570
9580
9682
1177
1209
10051
10091
8791
8822
13205
13236
5167
5198
12357
12391
1073
1193
9883
10022
6213
6246
13050
13082
5998
6031
12828
12857
673
983
10274
10469
5980
6017
12794
12828
1300
896
1018
12091
12197
1013
1138
12285
12417
928
1247
11642
11991
491
787
9865
10065
0
335
9307
9867
351
539
9256
9539
598
836
9747
9929
846
1060
9700
9856
0
161
10125
10268
187
364
9714
9852
6379
6519
10878
10920
540
651
9397
9532
739
908
9940
10065
625
770
10117
10200
393
498
9724
9821
525
594
9277
9357
463
512
9562
9613
112
169
10008
10055
5
68
9292
9343
0
39
9997
10043
933
1140
9483
9725
1064
1253
9454
9767
642
677
9211
9259
356
454
9055
9132
192
244
9186
9227
160
197
8874
8907
767
867
2130
2204
879
1046
2101
2208
715
739
2190
2211
1969
2199
11292
11470
987
1108
1149
1251
2223
2453
11259
11542
1829
2032
11082
11263
1706
2005
11303
11447
2088
2306
11066
11217
2466
2723
11122
11202
1395
1519
11398
11521
384
512
10125
10276
1100
1243
12393
12499
1330
1428
11513
11626
1276
1359
11918
12009
1107
1210
11500
11596
1737
1808
11204
11282
1272
1337
11513
11590
2365
2582
10802
11225
2065
2133
10931
11000
2303
2491
10719
10870
1241
1385
10374
10620
488
620
10494
10611
1345
1553
9929
10086
1810
1986
10009
10166
1571
1803
10110
10272
1405
1569
10143
10261
2250
2295
10760
10806
1452
1545
10272
10364
1495
1607
10318
10405
1658
1737
10243
10313
1133
1201
9823
9894
1636
1766
5479
5633
1148
1250
5184
5442
2372
2786
4466
4655
1434
1622
5337
5457
2395
2594
4292
4337
1256
1357
5298
5405
1391
1482
5580
5688
1390
1501
5445
5532
1195
1246
5581
5624
2372
2968
4329
4563
2639
2729
4300
4330
2714
2859
378
478
3599
3701
11323
11491
3499
3584
11307
11491
3276
3403
11471
11562
480
546
10103
10153
3617
3656
11194
11295
1400
3494
3604
11701
11843
3418
3469
11361
11455
3624
3666
11055
11150
3442
3543
10967
11053
3941
4121
9890
10184
4353
4505
9385
9537
665
864
8979
9233
3917
3978
10396
10523
2001
2100
10885
10987
1283
1843
10222
10849
4255
4325
9908
10002
3372
3468
10435
10505
3781
3871
10649
10693
3938
3995
10220
10305
3867
3916
10725
10778
3977
4054
10501
10634
3871
3906
9800
9892
3838
3904
9714
9800
4044
4086
9711
9770
3422
3494
10595
10652
4008
4195
7691
7947
3527
3626
7577
7705
3973
4069
7958
8024
2847
2972
11043
11161
3816
3893
8001
8067
4321
4488
8668
8823
4147
4212
7644
7702
4397
4581
8546
8692
4430
4664
8506
8651
4487
4539
8732
8784
4171
4423
7328
7716
3535
3775
9952
10040
4199
4254
7523
7588
3777
4046
7105
7281
3568
3852
7326
7519
3741
3887
7267
7383
3401
3524
7250
7383
3795
3925
6252
6375
3679
3752
6309
6422
3667
3750
7213
7329
3814
3975
6177
6278
1211
1336
12025
12141
3315
3386
7017
7127
3928
3998
6369
6427
3865
3972
6145
6223
1551
1936
9921
10172
2820
2933
4583
4671
4320
4437
1142
1182
4219
4360
939
971
4373
4441
1190
1230
4543
4609
1264
1356
35
166
9899
10009
3863
3904
9927
10044
2863
3024
380
467
2816
2996
265
349
2740
2993
735
889
2794
2854
554
614
4073
4139
9789
9814
5575
5885
11506
11870
2656
2957
479
784
5098
5518
11376
11770
5046
5227
11044
11368
1229
1292
10818
10882
5303
5584
11295
11360
5336
5618
11007
11137
5649
5777
11080
11191
2872
2931
503
583
5666
5825
11297
11375
5602
5839
11408
11461
5646
5775
10994
11067
5389
5494
11184
11232
5078
5144
10985
11028
4943
5025
11099
11367
5178
5242
11050
11060
5582
5767
10920
10979
5394
5509
10935
10996
5195
5438
10877
11044
5657
5781
11219
11279
3538
3632
10342
10732
5242
5295
11120
11178
3957
4030
9751
9827
3777
3806
1033
1087
574
683
9279
9400
4158
4187
9794
9816
3601
3661
6630
6746
3420
3528
7051
7200
5059
5212
10828
10945
5351
5391
9516
9748
5473
5605
10382
10554
5445
5484
9567
9755
4872
4999
9261
9360
4689
4819
9272
9416
5576
5622
10135
10220
5312
5450
10378
10423
5658
5712
9650
9761
5211
5233
11100
11171
5269
5329
10012
10102
5407
5505
10255
10298
1500
5578
5668
9558
9605
5694
5744
9289
9378
5523
5620
10791
10825
5460
5489
10776
10834
4666
4740
9404
9482
5217
5277
10108
10160
5270
5300
9587
9631
4467
4575
1177
1253
5343
5384
9142
9401
4966
5132
9116
9285
5402
5460
9159
9379
5146
5213
9261
9326
4762
5154
8160
8440
5098
5679
8456
8834
4999
5156
9415
9580
4622
4994
8281
8572
5297
5560
8416
8578
4666
4844
8552
8788
4923
5067
8845
9033
5010
5164
8791
8986
5380
5654
8848
8987
4879
5034
8994
9223
5487
5645
8597
8720
4324
4711
994
1277
4817
4975
7700
7868
5171
5334
8801
8929
5352
5498
8806
8925
5626
5700
8704
8824
5176
5311
9017
9146
5449
5509
9801
9938
5566
5614
8731
8794
4931
5072
8392
8505
5096
5209
8981
9084
4821
4927
8634
8767
4763
4918
8948
9075
4610
4743
9126
9233
5182
5287
9652
9763
5136
5253
7889
7994
5283
5392
8697
8784
4631
4708
8485
8566
5048
5087
7754
7792
4696
4791
8757
8845
5165
5239
8165
8245
5562
5644
8942
9006
5696
5733
9173
9247
5698
5727
9041
9131
4562
4626
8660
8713
5503
5733
9396
9538
5430
5490
8719
8779
4767
4813
9108
9153
5456
5500
9047
9068
4710
4762
8214
8271
5102
5163
8240
8294
5213
5260
8344
8389
5679
5701
8577
8616
5662
5693
8977
9003
5577
5996
7369
7809
5237
5786
7487
8042
4549
4580
8770
8822
5377
5782
7085
7499
6039
6231
6961
7178
5889
6060
7112
7291
4642
4789
6380
6558
5343
5404
10786
10839
4911
5253
7141
7336
5782
5961
7263
7407
5722
5843
7078
7190
5970
6056
6906
7005
5255
5445
1899
2037
4616
4748
1231
1417
5379
5442
10650
10691
4693
4831
1146
1394
5165
5278
1925
2067
5499
5558
1948
1980
4786
4847
1410
1463
4927
4992
1266
1327
5430
5471
2038
2081
5058
5369
10665
10842
5361
5397
9794
9858
6923
7101
6209
6354
4898
5110
8531
8740
7044
7160
6156
6298
5256
5427
8227
8395
5334
5426
10481
10572
9575
9626
7719
7755
9633
9802
7736
7822
1600
9329
9393
7433
7558
9571
9855
7481
7588
8973
9039
5915
6344
9329
9586
7221
7318
9379
9633
6964
7057
4798
4953
6340
6580
9352
9606
7090
7182
9406
9546
7428
7515
8669
8799
5987
6065
8758
8855
6040
6136
8356
8458
6121
6261
8480
8581
6156
6237
9297
9863
7331
7494
8844
8880
5707
5736
9336
9434
4182
4286
9025
9124
4106
4271
9559
9650
4051
4241
9386
9480
4101
4204
9180
9280
4107
4185
9437
9703
3301
3418
9316
9580
3784
3899
9347
9611
3665
3776
9365
9632
3573
3698
9612
9710
3805
4022
9472
9606
2806
3007
9239
9306
2576
2634
5129
5277
9726
9968
9672
9767
3564
3779
9150
9303
2212
2455
9033
9193
2163
2416
9198
9270
2094
2133
9312
9378
2115
2152
4724
4779
898
934
5088
5203
8051
8173
5240
5388
1821
1878
5505
5561
10666
10711
9575
9696
2451
2612
9568
9686
2851
3031
1700
9380
9499
7608
7679
4390
4585
9550
9723
5063
5254
941
1086
6286
6352
3849
3897
7405
7522
10640
10797
6483
6526
4107
4165
7084
7286
12406
12544
6977
7105
12336
12438
8013
8116
8605
8681
6303
6436
12999
13231
5327
5398
1635
1685
9403
9671
3413
3542
6283
6406
4582
4679
1800
6112
6182
3899
3977
5368
5452
1707
1754
1900
2000
3538
3683
672
769
3541
3579
499
638
3691
3835
757
856
1995
2075
5064
5260
2211
2291
5113
5310
2322
2401
5143
5339
2674
2753
5225
5421
2563
2642
5197
5393
2866
2945
4872
5068
2646
2725
4858
5054
2280
2359
4821
5018
2077
2167
5237
5289
2060
2140
4796
4992
2776
2866
5405
5458
2433
2628
4827
4882
2172
2275
4798
4845
2767
2870
4861
4907
3632
3737
5314
5395
2941
3021
5141
5333
3038
3117
5167
5359
6831
6955
472
754
6768
6849
774
940
7031
7108
527
716
7747
7861
354
401
7559
7609
464
527
7890
7990
341
443
7968
8025
563
623
7984
8041
649
709
7991
8048
747
807
7744
7875
648
739
7629
7670
826
875
7775
7838
426
456
8544
8848
844
1201
7877
7963
771
826
2100
7695
7744
1117
1185
8330
8480
1317
1411
8131
8288
1401
1496
8336
8410
1224
1313
8016
8080
1273
1330
2933
3038
5043
5101
8165
8216
1097
1159
8271
8353
1497
1565
8562
8620
1381
1428
8361
8553
1421
1535
8608
8668
1360
1409
3312
3418
5143
5219
8719
8989
1294
1426
8063
8192
1587
1678
8168
8226
1555
1610
8184
8258
1602
1731
7824
7858
2225
2260
8319
8464
1613
1768
7856
7908
2223
2259
7955
7997
2225
2262
7539
7610
357
401
8014
8067
2232
2273
7902
7962
2151
2189
8001
8056
2163
2196
7617
7837
426
564
7843
7878
2155
2186
8264
8302
2958
3001
8209
8279
3025
3134
8298
8355
2875
2924
8414
8477
2603
2681
8348
8423
2756
2845
8503
8554
2504
2553
7762
7804
2693
2754
7798
8101
2944
3104
8028
8149
1495
1579
7754
7802
2616
2683
7765
7806
2770
2828
7753
7791
2551
2572
7774
7893
2848
2928
7799
7835
2411
2434
7740
7784
2375
2403
7841
7893
2366
2439
6218
6261
2975
3027
3431
3617
5205
5331
6154
6204
3336
3394
6175
6219
3270
3345
6187
6239
3120
3170
6183
6230
3173
3204
6189
6226
3198
3233
3755
3941
5391
5517
6224
6301
3256
3335
6244
6289
3213
3244
6250
6283
3176
3212
8160
8208
1334
1380
6255
6294
3142
3180
8043
8162
1690
1872
6260
6302
3094
3147
6210
6290
3320
3422
6412
6461
3158
3205
6423
6475
3120
3171
6316
6451
3206
3355
6443
6491
3075
3133
6459
6506
3037
3084
2908
2967
5369
5475
6386
6463
3358
3471
6471
6522
2995
3049
6498
6541
2937
3005
8211
8256
1539
1590
6502
6558
3101
3167
6526
6583
3023
3097
7916
7944
2221
2249
6599
6679
3020
3090
6566
6618
2920
2991
6620
6637
2969
2986
6629
6661
2899
2947
7018
7072
2474
2512
6986
7035
2566
2620
7028
7079
2419
2478
7000
7051
2521
2578
3095
3290
5080
5161
7990
8091
1358
1426
6712
6763
3311
3394
6673
6752
3516
3578
6899
7016
3563
3658
7124
7220
2317
2404
6973
7032
3495
3560
6838
6871
3238
3281
6766
6824
3466
3507
6784
6811
3411
3463
6820
6874
3469
3509
6869
6912
3225
3286
6221
6249
3046
3075
6213
6246
3077
3123
6763
6799
3291
3314
6879
6948
3460
3558
2200
7014
7041
3243
3263
6467
6516
3205
3258
6750
6807
3150
3261
6766
6810
3065
3118
6840
6875
3377
3403
7025
7068
3132
3185
6859
6901
3389
3411
6897
6956
3395
3424
6948
6975
3424
3447
6952
7003
3399
3435
7102
7151
3070
3130
7748
7805
2476
2541
7043
7100
2354
2432
6804
6848
3080
3107
6949
7020
3046
3099
6740
6808
3543
3598
6843
6898
3082
3142
6927
7002
2909
2969
6846
6886
2842
2874
6991
7088
2930
2996
7923
7982
1379
1428
7102
7202
2874
3035
7723
7762
3434
3492
6487
6541
3155
3212
7741
7786
2414
2441
7644
7668
3154
3185
7707
7747
3248
3313
7569
7718
3510
3577
7696
7743
3202
3250
7669
7738
3117
3171
7303
7343
3531
3590
7800
7851
3409
3500
7103
7155
3313
3383
7261
7282
3430
3450
7136
7211
3374
3437
7139
7164
3386
3404
7065
7128
3153
3262
7190
7238
3062
3113
7167
7226
3102
3195
7185
7256
3206
3290
6780
6857
2875
3047
7304
7349
3396
3437
7142
7190
3440
3531
7066
7100
3262
3287
7231
7255
3385
3409
7387
7417
3377
3404
7222
7323
2391
2472
7344
7402
3394
3444
7334
7419
3455
3567
7485
7531
3735
3782
7433
7493
3377
3441
7450
7527
3665
3751
7337
7403
3597
3681
7472
7523
3471
3528
6902
6971
3016
3062
7650
7671
3604
3636
7732
7775
3616
3718
7250
7320
3741
3800
7272
7323
3346
3411
7273
7341
3659
3697
7902
7960
3466
3545
7022
7131
3644
3717
7116
7177
3680
3735
6937
7071
3237
3289
5129
5257
4216
4356
5359
5493
4345
4499
5843
5953
3963
4160
7711
7750
3311
3360
7178
7248
3661
3762
5737
5862
4175
4413
5670
5781
4446
4607
5949
6074
4636
4727
6003
6048
3879
3951
7476
7545
3580
3634
6042
6129
3885
3997
6176
6238
3908
3951
6222
6367
3917
4010
6405
6491
3947
4057
6337
6375
3995
4136
7546
7685
3686
3755
6439
6483
3993
4078
6360
6420
3939
3989
5809
5923
4593
4668
6210
6304
4689
4815
6295
6403
4791
4863
6426
6533
4844
4917
6323
6402
4551
4603
6556
6664
4898
4970
6428
6520
4515
4580
6345
6423
4488
4571
6452
6501
4594
4651
6512
6708
4580
4758
6790
6938
4988
5073
6692
6771
4940
5007
6821
6911
4706
4766
6922
7092
4759
4856
6518
6653
4417
4532
5251
5343
4355
4454
6448
6560
4156
4355
6374
6477
4328
4460
2300
6870
7045
4589
4711
6496
6538
4060
4114
6709
6763
4020
4071
6753
6866
4034
4104
6771
6822
4197
4251
6635
6706
4317
4418
7233
7316
3262
3363
6713
6776
4287
4357
6511
6628
3530
3637
6434
6520
3502
3568
6347
6398
3477
3560
6551
6594
3648
3691
6501
6537
3838
3875
6495
6563
3749
3847
6383
6431
3649
3713
6092
6239
4553
4763
6437
6493
3635
3683
6318
6365
3622
3694
6485
6527
3643
3693
7384
7486
3548
3688
6346
6420
3856
3909
6456
6521
3874
3928
6291
6329
3767
3848
6412
6466
3862
3917
6240
6278
3239
3262
6306
6415
3723
3780
6556
6660
3901
3959
6620
6662
3668
3715
6601
6659
3711
3773
6686
6742
3851
3891
6684
6735
3885
3978
6710
6752
3947
3988
7014
7090
3296
3444
6227
6363
4285
4389
6341
6415
4164
4275
6655
6708
3583
3625
6185
6295
4411
4545
6065
6162
4262
4413
7044
7094
3743
3813
7084
7141
3766
3842
6801
6869
3933
4019
7368
7407
3874
3929
6559
6715
3992
4209
7263
7326
3495
3545
7505
7548
3921
3976
6151
6216
3069
3135
7160
7229
3786
3841
7545
7589
3940
3995
6890
6947
3948
4038
6507
6579
3689
3743
7462
7497
4116
4182
6736
6814
3813
4005
7371
7405
4117
4159
7582
7643
4038
4082
7214
7285
4076
4128
7229
7285
3818
3869
7273
7358
4024
4142
7146
7198
4057
4111
7103
7181
3972
4099
7293
7378
3838
3902
7412
7478
3885
3944
6579
6634
3776
3846
8429
8571
13393
13887
7528
8273
13376
13520
7594
7632
3960
4003
6416
6460
4071
4151
6660
6858
4510
4625
7981
8390
13760
13922
7329
7380
4106
4153
9310
9470
12777
12890
7500
7529
4154
4187
8716
8851
13454
13606
8301
8422
13216
13370
6391
6439
3489
3565
7165
7288
13474
13626
8720
8789
13804
13928
7885
8147
13177
13320
9447
9591
12958
13047
7404
7571
13588
14027
7680
7781
12750
12884
9082
9116
13953
13977
9102
9245
13779
13895
9080
9435
12946
13047
8589
8787
13079
13210
8893
9068
12957
13091
8050
8245
12629
12768
8393
8608
12334
12415
8433
8578
12604
12670
7462
7671
12874
12950
8187
8299
13186
13278
8089
8232
12331
12398
9445
9733
13133
13357
9096
9305
12140
12218
9322
9392
11675
11755
2400
6405
6448
3617
3668
8263
8405
12708
12773
9198
9277
11861
12075
9307
9455
12201
12388
9395
9822
13584
13760
8924
9026
11812
12162
9152
9295
12377
12439
8639
8994
11701
11810
8015
8192
11891
12149
8775
8985
12204
12284
8763
8864
12565
12635
7965
8062
12759
12835
8588
8726
12417
12611
7354
7511
13346
13469
8005
8072
12159
12303
9006
9099
12242
12526
6813
6997
12201
12368
8633
8732
12117
12404
6850
7050
11816
12106
6596
6799
12285
12576
6718
6966
12638
12823
6528
6820
11958
12162
7960
8055
12331
12614
6593
6710
11763
11917
6717
6959
11687
11770
6405
6522
11852
12008
6400
6486
12023
12269
8999
9195
11710
11850
6979
7269
11698
11902
7402
7534
11989
12090
8239
8335
12369
12654
7793
7946
11981
12062
8207
8542
11305
11637
6476
6629
12277
12392
8814
9270
9938
10281
8678
9082
10263
10624
8591
9234
10431
11013
9155
9438
9674
10012
9299
9467
10297
10648
7027
7183
10998
11117
9411
9678
10606
11131
6865
6988
10981
11136
7249
7444
12802
12942
7808
7868
12192
12336
6929
7084
10541
10662
7394
7548
10476
10598
6761
6883
10524
10679
6921
7006
10872
10942
7197
7329
10779
10886
7566
7786
10654
10817
6796
6881
10748
10820
7070
7188
10688
10841
6939
7059
10212
10365
6752
6841
10340
10417
9392
9465
11969
12183
6814
6902
10402
10480
7331
7404
10354
10439
6873
7163
9900
10107
7070
7152
10850
10941
7626
7691
10501
10593
7075
7214
11127
11302
9105
9174
11525
11606
6943
7024
10373
10464
7391
7606
9478
9780
7781
7985
9720
10008
7280
7500
8837
9139
7022
7237
9233
9534
7630
8043
10017
10293
7886
8008
9976
10132
7266
7635
9768
10044
8027
8182
9779
9902
6971
7273
9564
9805
7517
7633
9730
9881
7158
7284
9480
9647
7279
7445
9165
9290
7533
7621
8932
9003
8257
8373
11959
12313
7834
7985
8778
9010
7677
7795
8503
8659
7782
7871
8364
8439
7362
7434
10778
10863
7795
7867
8453
8539
8068
8175
8476
8616
7492
7668
8117
8430
7656
7771
8282
8430
7841
7936
12762
12835
7932
8072
8289
8526
7668
7892
8035
8200
7827
7903
8200
8288
6697
6785
10273
10350
4674
4816
12790
12927
2500
5819
6162
13269
13432
5697
5837
13262
13393
6160
6327
13182
13286
6020
6145
12692
12795
5834
5959
12511
12615
9541
9611
11822
11903
5900
5974
12625
12712
5837
6057
13082
13213
8006
8231
9002
9164
5730
5817
12954
13059
7086
7305
12582
12896
6856
6941
10812
10883
5028
5167
12413
12595
7105
7396
10142
10354
4894
4999
13484
13612
4748
4853
13434
13562
8607
8742
13897
14007
4762
4858
12867
12946
8655
8764
13691
13825
8998
9141
13625
13738
7552
7806
12007
12186
8894
9019
13694
13763
8813
8926
13575
13716
7671
7820
9326
9556
0
375
6162
6374
6226
6350
12889
12993
8895
8993
12516
12584
7
352
6687
6802
6100
6174
12815
12902
7502
7720
12189
12501
0
212
7258
7371
5925
6122
12917
13058
34
294
6423
6516
7369
7683
12506
12724
371
550
11094
11354
232
326
7113
7361
472
557
7261
7472
5579
5767
12341
12574
581
665
7081
7296
545
753
7479
7561
90
277
8988
9125
9057
9125
13866
13977
2600
7504
7629
9003
9167
54
125
7112
7256
0
53
11325
11397
382
475
6535
6783
349
437
6395
6447
200
290
6965
7020
618
671
6947
7024
444
495
7522
7604
220
263
7890
7956
376
420
7840
7899
352
401
7920
7978
244
284
7806
7869
394
435
7758
7816
413
451
7697
7740
0
151
6987
7082
82
145
6796
6941
205
278
6556
6697
2700
2800
2900
3000
896
931
12650
12683
977
1031
12675
12732
131
172
11400
11440
518
556
11045
11082
542
598
11583
11645
76
110
11766
11809
101
150
10980
11024
197
244
11036
11084
233
277
11312
11354
703
777
11325
11392
790
848
12409
12469
220
275
12274
12341
304
347
11778
11818
201
237
11652
11691
313
369
11721
11770
0
33
11047
11092
593
641
12307
12362
120
157
11688
11737
220
274
11408
11460
50
102
11018
11067
248
297
11056
11107
336
375
11380
11415
505
553
11409
11461
3100
863
899
12626
12662
226
276
11611
11656
272
315
11853
11892
196
236
11116
11151
339
374
11579
11614
347
397
11668
11721
636
687
11464
11518
313
355
12119
12162
117
162
11127
11167
454
514
11352
11407
776
829
10923
10976
614
688
10921
10995
538
651
10695
10805
337
451
10816
10906
458
537
10770
10842
647
702
10668
10721
886
945
10627
10684
745
790
10885
10930
833
887
10876
10927
658
712
10840
10892
807
852
10844
10889
970
1023
10840
10891
798
841
10719
10762
880
933
10534
10585
870
918
10795
10840
73
192
11466
11652
806
855
10566
10613
997
1043
10697
10740
475
520
7939
7984
743
782
7815
7857
124
160
7746
7781
786
819
7937
7984
409
453
8016
8074
445
494
11761
11806
598
640
7792
7831
815
876
12367
12423
139
177
7881
7913
756
788
7860
7901
0
36
11238
11280
570
610
7929
7974
456
495
8064
8103
129
163
7584
7632
1003
1041
7781
7816
40
84
7980
8019
402
447
11882
11933
873
932
7977
8025
151
188
7654
7692
93
129
7851
7897
713
745
7694
7725
922
964
8075
8128
618
668
7975
8024
994
1028
8077
8109
952
982
7941
7972
787
828
8033
8093
541
581
7687
7727
3200
33
74
8222
8264
513
550
7809
7846
175
214
7755
7802
301
353
11465
11515
57
95
7775
7813
783
822
7678
7713
61
103
7924
7969
56
91
7643
7671
608
647
7742
7778
850
888
7907
7937
902
936
7738
7769
977
1009
7723
7759
697
728
7614
7648
843
886
8695
8734
803
831
8490
8518
819
861
8369
8412
696
746
10724
10771
968
1005
7647
7685
4
52
7849
7891
60
105
8178
8219
494
534
7868
7903
609
642
8075
8115
585
621
7852
7888
720
756
7752
7783
804
846
8579
8625
58
97
7569
7605
710
745
7978
8013
0
38
7743
7788
520
566
7739
7781
11
52
8083
8115
879
922
7670
7707
0
26
7625
7668
69
113
8120
8161
558
590
8075
8122
0
31
7895
7937
565
598
7621
7655
821
854
7806
7840
988
1020
8355
8390
961
997
8420
8458
976
1021
10480
10523
976
1018
9072
9112
480
527
8092
8139
691
725
8152
8189
651
683
7573
7608
918
953
7796
7826
898
939
8561
8605
896
941
8782
8840
703
752
8362
8409
1008
1040
8308
8343
722
767
8249
8292
3300
105
147
7791
7844
917
957
8891
8929
940
975
8462
8501
902
942
8939
8976
843
886
8820
8858
799
833
8620
8656
674
728
8500
8547
958
993
8246
8282
576
615
7558
7597
914
954
8345
8386
991
1037
8531
8574
621
660
7680
7717
1008
1051
8610
8660
463
506
7983
8035
1030
1069
8565
8606
971
1013
8195
8240
759
788
8132
8160
884
923
8396
8441
955
998
9027
9067
731
780
8609
8656
873
917
8623
8672
954
996
8964
9010
995
1040
9105
9151
918
958
8521
8561
855
898
8859
8899
754
802
8667
8707
648
690
8448
8493
798
832
8233
8268
697
736
8552
8594
906
945
8718
8758
844
878
8226
8255
878
907
8110
8140
941
978
8664
8704
907
952
8208
8241
966
1009
8754
8800
623
673
8400
8447
859
899
8460
8501
763
815
8422
8467
541
572
8135
8161
1021
1059
8863
8906
813
859
8761
8803
1064
1097
7673
7704
1040
1083
7953
7995
1050
1092
8697
8743
1058
1099
9148
9189
1016
1060
7866
7907
1039
1081
9046
9088
948
983
8285
8318
1047
1087
8398
8439
1055
1095
8508
8548
1050
1088
8910
8954
1069
1106
8340
8381
1035
1076
8232
8270
764
990
7468
7558
682
717
8277
8322
839
923
7143
7349
687
908
6901
6988
709
792
7114
7321
853
950
6540
6752
727
814
6505
6714
621
708
6683
6893
765
834
6161
6311
749
787
8081
8123
984
1033
8807
8851
634
666
8166
8202
829
873
8519
8562
62
114
7497
7540
775
816
8344
8382
137
184
7521
7563
0
14
7548
7577
8
45
7408
7459
874
1070
5886
5965
3400
979
1068
6571
6782
1015
1093
6007
6198
905
1125
6889
6981
833
914
6424
6496
413
445
770
802
156
197
7462
7502
492
523
1881
1925
1019
1070
1601
1637
505
535
1088
1120
408
435
900
929
963
990
1545
1594
508
533
1159
1186
620
656
1948
1990
399
460
2041
2092
418
460
339
385
87
125
7431
7483
416
459
522
565
2408
2455
12775
12818
2086
2134
12690
12740
1843
1887
12723
12764
2737
2786
12805
12861
1388
1429
12739
12778
2275
2345
12651
12747
2563
2602
12855
12891
2643
2679
12746
12788
1817
1856
12794
12834
1582
1625
12696
12740
2105
2139
13118
13158
1659
1701
12852
12894
831
1024
6320
6398
1020
1107
7334
7539
1543
1583
12800
12841
2558
2587
12785
12808
2176
2223
12707
12764
2124
2175
13202
13256
1701
1747
12749
12797
2594
2640
12907
12954
2517
2553
12826
12862
596
638
3801
3835
2690
2720
12812
12839
2711
2758
12775
12814
2597
2644
12725
12781
1489
1536
12773
12822
1600
1646
12829
12872
1643
1680
12715
12749
1948
1987
12777
12812
1802
1860
12914
12963
1863
1910
12814
12872
1872
1912
12934
12984
1742
1787
12679
12727
2107
2151
12852
12903
1985
2034
12921
12968
1898
1945
12746
12793
1761
1802
12892
12940
1767
1809
12775
12819
1122
1161
13859
13899
2021
2063
12860
12898
1955
1993
12625
12676
2205
2242
13167
13215
2502
2545
12679
12725
1543
1583
12682
12716
1698
1738
12667
12702
2660
2730
12663
12717
2413
2466
12640
12702
1479
1521
12656
12698
1992
2037
12645
12685
417
462
721
765
2485
2527
11080
11119
2517
2578
12377
12425
2597
2642
11491
11535
2644
2686
12053
12090
805
839
8115
8155
1705
1742
12521
12554
2301
2351
11927
11980
2276
2326
12477
12513
1580
1623
12265
12303
1798
1843
12707
12751
2173
2216
11765
11800
1946
1995
11745
11796
2268
2324
11743
11778
913
958
1262
1289
1539
1587
12351
12403
2076
2116
12478
12519
2708
2747
10995
11035
2058
2101
12377
12424
2081
2116
11937
11984
2058
2092
12735
12772
1953
1992
11895
11930
2351
2392
12522
12568
2579
2623
11533
11577
3500
2401
2440
11720
11757
2146
2182
11826
11858
2054
2090
11925
11971
1430
1479
12751
12798
2656
2694
11830
11869
1656
1694
12503
12538
2483
2568
12450
12509
1913
1945
11501
11536
2581
2624
12174
12213
2256
2305
11863
11911
2027
2065
12583
12624
1877
1920
11938
11985
2088
2122
11734
11763
2112
2161
12038
12087
2776
2820
12716
12757
1611
1649
12627
12664
1972
2036
12224
12275
1929
1979
12058
12109
2373
2411
12304
12348
1750
1793
11058
11103
1991
2038
11823
11855
1917
1950
11843
11876
2372
2414
12031
12067
2108
2145
12413
12454
1493
1550
11178
11225
2160
2209
12513
12551
2291
2318
12399
12428
1847
1882
12585
12623
1649
1692
12299
12345
2181
2230
12223
12273
2005
2037
12154
12185
2440
2480
12141
12183
2373
2408
11612
11639
2319
2373
12137
12187
1746
1788
12260
12296
1278
1331
11100
11152
2576
2621
11077
11118
2695
2733
12075
12114
2041
2081
12256
12291
1757
1798
12550
12586
1514
1554
12576
12618
1680
1718
11089
11126
1352
1388
11061
11101
1738
1772
11096
11130
1448
1485
11107
11141
2210
2257
12614
12664
2431
2467
11882
11922
1658
1704
12084
12128
1893
1935
12189
12239
1640
1671
11142
11174
984
1024
8668
8708
1561
1596
11204
11248
1663
1706
11187
11225
2397
2444
11987
12024
2353
2384
11750
11777
2065
2095
11658
11684
2159
2205
11976
12024
1743
1791
12033
12076
2521
2558
12138
12172
2450
2489
12512
12543
2390
2430
12463
12513
2653
2700
12282
12332
2628
2674
11697
11751
2000
2040
12373
12407
2527
2567
12221
12268
1647
1685
11022
11057
1871
1912
11560
11602
1976
2030
11980
12032
2038
2079
11555
11591
1421
1465
12627
12672
1711
1751
12872
12918
2236
2279
12340
12383
1796
1836
12561
12598
2109
2143
11811
11844
1792
1833
12354
12394
549
578
559
586
2138
2176
11603
11635
2130
2160
12570
12607
1845
1887
12306
12340
2177
2221
12456
12499
2452
2487
12438
12480
2203
2237
12420
12447
2127
2160
11749
11775
1686
1731
12228
12272
1801
1832
12151
12184
2580
2625
11799
11851
2653
2699
11629
11675
1823
1865
11806
11842
2549
2588
11866
11904
1736
1778
11973
12005
2035
2075
11707
11739
1652
1695
12408
12461
1905
1950
12408
12456
2148
2185
12305
12341
2563
2608
12485
12537
2728
2768
12554
12587
2553
2586
12070
12095
1801
1856
12487
12537
2731
2776
12464
12510
1485
1522
12494
12527
3600
2442
2504
12564
12618
2191
2254
11837
11887
2685
2720
11057
11092
2259
2312
12036
12075
2319
2359
12597
12645
1683
1724
12010
12048
2696
2734
11741
11785
2520
2552
11976
12009
1928
1971
11647
11692
2541
2577
11606
11639
1591
1633
12397
12436
2331
2371
12382
12426
2526
2581
11914
11959
2666
2713
11976
12022
2437
2484
11619
11665
1849
1896
11623
11665
1958
2014
12540
12604
1886
1932
12606
12653
2105
2138
12287
12327
1748
1787
12461
12502
1951
1996
11583
11629
1958
1998
12134
12169
1635
1682
12140
12187
2319
2354
11825
11865
448
493
418
470
2339
2363
12251
12276
2195
2233
11624
11656
2605
2652
12408
12454
2559
2593
12245
12285
1755
1794
12337
12374
2095
2127
11885
11908
2006
2052
11761
11813
2059
2117
12168
12217
2539
2568
12172
12200
2118
2150
12201
12236
1947
1986
12346
12380
1823
1872
12065
12106
2207
2254
12155
12213
2285
2330
11656
11703
2172
2218
12065
12111
1841
1883
12166
12208
2721
2763
11861
11907
1568
1609
12458
12497
2721
2761
11675
11716
2350
2392
12085
12121
1790
1828
12283
12313
1402
1451
10968
11016
2497
2530
12033
12067
1834
1880
12014
12051
1987
2025
11534
11567
1913
1956
12843
12882
1608
1650
12198
12237
1856
1901
12378
12423
1856
1898
12500
12553
2007
2058
12047
12104
2159
2232
11688
11738
1562
1596
11014
11044
2278
2320
11810
11850
2710
2756
12308
12355
2601
2647
11954
11995
1617
1669
11058
11108
2468
2516
11558
11603
2571
2607
12017
12054
1451
1496
12554
12600
1737
1782
11882
11925
2476
2525
11763
11806
2531
2576
11762
11812
2731
2775
12094
12142
2103
2153
11669
11705
1878
1917
10975
11019
1868
1908
12095
12131
2436
2473
12340
12379
2085
2123
11590
11624
1860
1898
11861
11895
1793
1834
11908
11958
2625
2671
12502
12553
1744
1783
12125
12159
1505
1545
12438
12476
2334
2377
11682
11722
2134
2171
11918
11945
1892
1925
12322
12359
2508
2550
11033
11076
2688
2729
11558
11598
2204
2239
12012
12041
2280
2329
12232
12283
1992
2040
11905
11963
1476
1526
11023
11067
2055
2097
11775
11817
2223
2263
11779
11819
2471
2512
11876
11912
1322
1365
11651
11699
2667
2727
12429
12484
2639
2666
12205
12239
2364
2406
11805
11845
2488
2529
12211
12252
1709
1751
12449
12489
2631
2667
11894
11930
1966
2007
12439
12478
1985
2025
11682
11716
3700
2253
2285
12101
12136
1879
1918
11705
11738
2244
2290
12550
12587
1692
1740
12313
12374
1916
1948
12121
12148
1912
1960
12527
12582
1635
1672
11245
11282
2755
2797
12021
12063
2232
2271
11640
11673
2782
2822
11550
11589
2792
2839
12346
12396
2773
2817
11879
11925
2794
2840
12492
12537
2792
2831
12120
12163
2778
2834
11792
11840
1798
1849
11736
11794
2528
2569
10986
11026
2603
2678
10966
11050
1753
1790
10933
10973
1655
1713
10948
10999
1573
1608
10960
10996
1830
1888
10955
11016
2127
2198
10649
10721
1923
1959
10558
10595
2062
2125
10732
10794
2348
2383
10431
10470
2164
2203
10536
10580
2473
2519
10467
10512
2692
2729
10752
10806
2021
2049
10792
10820
1760
1798
10769
10810
2639
2675
10749
10788
2736
2776
10560
10600
2557
2606
10385
10428
2415
2451
12418
12458
2730
2769
10386
10430
2463
2501
10308
10346
2713
2748
10313
10346
2637
2684
10276
10327
1802
1846
10812
10863
2685
2742
10444
10489
2006
2052
12460
12507
2193
2247
10736
10789
1905
1939
10610
10643
1566
1601
10898
10934
1061
1115
10788
10840
2479
2526
10663
10717
1920
1976
10876
10932
2406
2450
12213
12259
2554
2594
12613
12654
2715
2759
10603
10641
2667
2713
10506
10549
2584
2630
10482
10530
2629
2672
10135
10176
1784
1835
10689
10728
2528
2564
11670
11700
2701
2729
10926
10959
2645
2691
10879
10940
2430
2491
10506
10567
2699
2808
10188
10279
2525
2575
10426
10470
2589
2619
10223
10253
2044
2079
10017
10050
2335
2379
9777
9821
2403
2436
9681
9717
2754
2804
11603
11654
2675
2723
9554
9603
2295
2341
9670
9723
2501
2543
9571
9610
1614
1662
9332
9379
1608
1647
12482
12528
2019
2048
10696
10727
2129
2167
9765
9800
2093
2127
9980
10011
2674
2714
10695
10732
1888
1930
10645
10680
2543
2591
10544
10589
2586
2622
10863
10907
2596
2636
10651
10695
2767
2802
11025
11060
2437
2484
10643
10698
2251
2292
9693
9737
2369
2412
9721
9766
2258
2299
9864
9901
2539
2583
9592
9637
2588
2630
10351
10392
2337
2381
9637
9683
2410
2446
10549
10585
1706
1763
10818
10860
2072
2107
9921
9959
2735
2774
11098
11135
2525
2568
10269
10316
2314
2358
9720
9765
1421
1458
9560
9596
1777
1818
9344
9384
2552
2596
10935
10977
2615
2685
10564
10626
2325
2361
10476
10517
2608
2651
10329
10370
1537
1567
10955
10987
3800
1999
2039
9946
9982
2526
2577
9523
9578
2410
2453
9609
9652
1703
1744
10890
10932
2604
2646
9621
9663
2643
2686
9628
9670
1485
1528
9431
9473
1660
1700
9421
9471
1625
1665
9497
9537
2465
2504
12276
12316
1635
1672
9538
9573
1727
1767
9368
9409
1220
1260
9315
9355
1332
1373
9268
9310
1731
1772
9463
9503
1976
2035
10810
10872
1549
1590
9465
9504
1293
1333
9350
9390
1348
1389
9371
9409
1638
1697
9274
9322
2179
2216
9842
9879
1699
1746
9519
9572
1827
1861
10778
10810
2123
2166
9945
9990
2204
2251
10600
10648
1810
1848
9280
9317
1587
1626
9402
9440
2099
2148
9898
9945
1209
1279
10332
10425
2008
2048
9839
9875
1426
1462
9406
9439
1754
1796
9407
9449
1267
1298
9329
9365
2828
2865
10360
10392
2777
2823
12258
12302
2795
2841
10432
10473
2781
2822
10137
10177
2754
2791
10531
10560
2752
2792
9391
9430
2770
2807
10485
10522
2058
2096
12015
12057
2777
2816
9512
9549
1975
2113
9154
9402
2118
2291
9232
9558
1556
1612
9241
9290
1520
1560
9362
9403
2268
2515
9056
9196
2026
2121
8980
9138
2155
2201
9190
9235
2746
2786
11710
11763
1496
1540
7708
7749
1472
1504
7618
7643
1179
1225
7825
7866
1139
1177
8028
8070
1575
1623
8032
8068
1282
1318
7812
7845
1168
1199
7731
7762
1238
1271
7813
7849
1551
1587
7929
7961
2137
2162
7718
7739
1340
1396
7981
8020
2460
2511
9695
9749
1102
1142
7929
7979
1517
1543
7841
7865
2344
2387
8037
8080
2520
2553
8056
8092
1690
1735
7872
7915
2794
2836
10260
10305
2575
2610
7989
8022
2597
2651
7818
7868
1882
1922
7841
7874
2748
2793
8047
8098
2423
2464
8049
8092
1555
1585
7606
7640
1951
1987
7824
7856
2011
2056
7906
7952
1663
1719
7705
7744
1695
1729
9341
9377
1454
1488
7762
7792
2100
2128
7602
7632
2605
2650
9549
9593
1357
1389
7642
7680
2439
2488
7807
7845
2781
2816
10301
10329
2606
2642
8296
8327
1452
1518
7933
7989
1296
1327
7659
7699
1403
1432
7696
7722
1790
1822
8925
8960
1626
1661
9131
9168
1763
1809
8393
8444
2795
2841
10792
10832
1411
1447
8686
8725
1210
1245
8016
8052
2196
2237
8379
8425
2375
2420
10575
10619
2207
2255
9745
9793
1831
1867
7978
8013
2511
2551
7950
7991
1663
1701
9214
9256
3900
1905
1943
8068
8102
1737
1791
8070
8124
1926
1970
8140
8186
1930
1967
7721
7762
2061
2102
8073
8120
1989
2025
7710
7749
1481
1527
8051
8100
1805
1840
7756
7798
1753
1795
7859
7896
1886
1923
8687
8728
2570
2606
10714
10752
1511
1552
8899
8945
2291
2338
8895
8938
2244
2288
8150
8197
1070
1105
8053
8089
1112
1155
8695
8746
1491
1538
8695
8740
1715
1756
8610
8657
1420
1461
8071
8104
1132
1166
7763
7790
2646
2673
7645
7667
1406
1446
9291
9332
2570
2608
8910
8948
2168
2220
8051
8111
2525
2558
7847
7884
2704
2755
7838
7884
1912
1947
7770
7802
2335
2376
7601
7649
1392
1434
7854
7900
1335
1373
7765
7806
2368
2400
7716
7746
2201
2234
7743
7784
1819
1855
7849
7882
2578
2629
7902
7951
2214
2265
7923
7969
1745
1771
7765
7796
1946
1980
7618
7657
2379
2415
7982
8020
2383
2434
7920
7965
2236
2263
7634
7667
2189
2239
7992
8037
1283
1321
7887
7920
2494
2536
7893
7933
2546
2600
7772
7813
1308
1336
7999
8028
1219
1253
7907
7941
1393
1437
9159
9201
1896
1928
8105
8142
2181
2209
7655
7681
1321
1372
9059
9111
2223
2261
7569
7604
1897
1938
9069
9111
2315
2366
8849
8890
1305
1349
8625
8672
1334
1391
8092
8129
1789
1826
8737
8776
2657
2699
8608
8654
2582
2625
8632
8679
2415
2450
7568
7604
1810
1858
7675
7711
1731
1776
7557
7600
2551
2589
7656
7696
2399
2448
7887
7931
1784
1814
7980
8017
2108
2139
7675
7709
2461
2501
8017
8061
2092
2133
7956
7988
1604
1637
7797
7837
1892
1942
7951
7990
2596
2635
7644
7685
2416
2457
7687
7735
1962
2009
7953
8000
1637
1670
7912
7938
2032
2063
7806
7833
1635
1674
8155
8194
1813
1860
8103
8154
2610
2651
8095
8139
1263
1305
9009
9049
2384
2424
8911
8944
1152
1195
9121
9159
1172
1213
8909
8949
2869
2905
10639
10680
2518
2555
8801
8837
2442
2486
8467
8511
1106
1152
8257
8302
1187
1230
8684
8728
1905
1944
8270
8307
1444
1484
8798
8838
1588
1651
8459
8519
1290
1332
9139
9180
1379
1432
7760
7821
1248
1293
9230
9275
2592
2634
8433
8483
1710
1743
8538
8572
2380
2443
8364
8409
1193
1224
7701
7730
1128
1161
7687
7724
2511
2562
8410
8454
1689
1719
8005
8044
1170
1219
8193
8225
4000
1345
1387
8516
8560
1752
1796
9011
9050
1338
1372
8253
8281
1307
1351
8897
8938
1707
1748
8347
8393
1116
1158
8354
8395
2072
2115
8674
8719
2553
2592
8335
8376
2026
2061
7623
7653
1430
1472
8624
8669
2675
2705
8570
8603
2292
2330
8578
8617
1253
1284
7684
7717
2221
2259
8634
8674
1755
1807
8788
8825
2462
2502
8746
8790
1456
1493
8279
8322
2656
2711
8466
8513
2136
2172
8248
8287
2430
2472
8818
8863
1470
1510
8393
8433
2284
2336
7843
7900
1369
1401
8192
8212
2019
2058
8190
8237
2335
2374
8295
8331
1134
1169
7842
7880
1603
1642
9034
9075
1567
1607
9004
9045
1272
1318
9174
9221
1373
1413
8984
9025
1215
1256
8942
8984
1578
1618
8934
8975
2628
2673
7751
7805
1931
1972
8996
9037
1953
1993
8940
8980
2453
2491
8948
8987
2524
2560
8887
8924
1146
1186
8628
8669
1072
1112
8458
8498
1285
1321
8257
8297
1245
1286
8401
8442
1337
1376
8725
8766
1372
1413
8465
8506
1457
1496
8569
8609
1477
1517
8514
8555
1565
1605
8784
8824
1532
1576
8621
8670
1818
1858
8661
8701
2370
2410
8774
8814
2008
2049
8819
8860
2545
2585
8722
8763
2604
2640
8838
8872
2487
2533
8673
8727
2686
2716
7597
7635
2500
2540
8503
8543
2117
2157
8496
8536
2100
2141
8619
8660
1979
2019
8631
8672
1925
1965
8623
8663
1535
1576
8384
8425
2556
2597
8525
8572
1968
2007
8731
8771
1574
1618
8273
8324
1803
1843
8496
8537
1840
1889
8402
8439
1636
1669
8368
8400
1685
1726
8245
8288
1769
1814
8182
8223
2238
2280
8291
8333
1823
1862
8843
8882
1576
1616
8176
8213
1163
1199
8147
8179
1511
1553
8190
8230
2086
2134
7991
8049
1981
2021
8183
8223
2051
2092
8142
8191
2656
2692
8198
8230
2717
2757
8134
8174
2737
2777
8507
8548
2648
2693
8308
8352
2703
2742
8387
8427
2675
2716
8025
8066
2040
2078
7687
7733
2611
2654
8004
8040
2491
2524
7682
7713
1680
1713
7575
7605
2182
2215
7582
7615
2359
2401
8226
8273
2603
2647
7585
7611
1590
1630
8729
8769
1957
2016
8557
8606
1535
1578
8850
8886
1610
1650
8401
8444
1158
1199
8286
8326
1096
1132
8164
8198
1748
1792
8255
8299
2457
2519
8209
8263
2453
2490
8110
8149
2133
2173
8114
8155
1835
1875
9224
9264
4100
1219
1261
8281
8315
1396
1436
8933
8974
1866
1907
9139
9179
1523
1565
9061
9103
1827
1867
9035
9075
1096
1137
8601
8641
2264
2330
8405
8473
1338
1379
8816
8856
1273
1308
8192
8226
1099
1139
8408
8448
1194
1234
8380
8419
1126
1179
9067
9117
1141
1181
8498
8538
1280
1320
8675
8715
2647
2687
8715
8755
2351
2438
8593
8648
1719
1761
8165
8212
1247
1283
8735
8773
2410
2451
8742
8782
1656
1696
9042
9082
2305
2340
7722
7763
1968
2008
8499
8539
1593
1638
9188
9242
1182
1224
9019
9060
1720
1760
9076
9117
1125
1164
9190
9225
1277
1320
8485
8531
2051
2088
8309
8349
2575
2615
8083
8123
1515
1555
8446
8481
1113
1154
8537
8582
1899
1932
8758
8794
1643
1685
8589
8634
1864
1905
8368
8410
2144
2184
8711
8750
1286
1325
8809
8850
1625
1667
8821
8859
1471
1507
9107
9146
1225
1257
8231
8252
2389
2426
8126
8166
2246
2291
8220
8272
1184
1221
9154
9192
2447
2517
8347
8435
2637
2673
8351
8388
1863
1928
8311
8363
1603
1634
8877
8911
1503
1544
9205
9241
1188
1228
9207
9244
1392
1432
9084
9121
1183
1222
8872
8909
2173
2214
8451
8488
1427
1460
8335
8368
1852
1892
8768
8808
1780
1820
8555
8593
1687
1727
8686
8725
1369
1409
8767
8803
2383
2418
8454
8498
1678
1716
8968
9005
2695
2737
8804
8843
1286
1325
8962
9000
1858
1897
8959
8997
1160
1200
8960
9001
1895
1934
8970
9007
1068
1114
8968
9012
1446
1485
8971
9009
1100
1147
9009
9055
1682
1737
9170
9215
1755
1795
8625
8665
1740
1777
8851
8897
1255
1301
8862
8903
1169
1201
8755
8789
2149
2189
8402
8438
2273
2304
8647
8675
2150
2188
8341
8374
2218
2257
8713
8750
1215
1254
8638
8676
2040
2079
8756
8794
1299
1339
8423
8462
1822
1860
8319
8356
2495
2533
8596
8634
2480
2504
9030
9052
2013
2067
8428
8479
2025
2064
8388
8425
1656
1693
8317
8360
1808
1846
8207
8244
2082
2126
8223
8266
2547
2595
8992
9036
1554
1596
8552
8596
1250
1302
8120
8153
1389
1430
8231
8268
1607
1638
8128
8154
2752
2786
8666
8702
1417
1457
8863
8905
1980
2022
8884
8923
1501
1539
8981
9018
1233
1275
9078
9118
1251
1293
8544
8585
2127
2195
7878
7938
1844
1874
8440
8476
1562
1602
8336
8373
4200
2203
2241
8549
8586
1645
1689
8762
8805
2285
2325
8767
8808
2624
2663
8765
8803
1496
1526
8127
8161
2626
2666
8543
8580
2649
2698
8863
8912
2623
2793
8907
9228
2744
2990
8726
8863
2637
2678
8939
8979
2792
2833
8395
8434
2748
2853
8252
8355
2772
2813
8605
8652
2805
2844
8545
8582
1944
1977
7495
7538
2287
2319
7553
7590
1081
1120
8640
8678
2141
2179
7493
7531
1540
1625
6283
6462
1530
1623
6046
6108
1157
1239
6774
6964
1102
1301
5938
6019
1201
1256
6107
6205
1314
1372
6110
6169
1235
1274
8586
8624
1697
1737
6224
6266
1792
1824
6328
6362
2670
2708
8118
8157
2003
2050
6238
6279
1393
1437
6198
6253
1420
1459
8482
8520
1995
2051
6137
6180
2605
2654
6010
6042
2454
2490
5894
5945
1922
1975
8794
8838
1908
1946
6355
6400
1957
1999
6382
6434
1869
1914
6282
6320
2483
2514
6490
6531
2690
2726
7185
7222
2489
2534
7135
7171
2067
2110
6331
6372
2121
2161
8558
8596
1970
2022
6647
6687
1855
1907
6555
6595
2387
2445
6090
6143
2546
2588
6590
6635
2401
2428
6758
6785
1170
1215
8437
8480
2434
2500
6330
6378
2101
2139
6223
6256
2634
2675
7548
7587
2465
2507
6855
6893
2016
2058
6744
6786
2226
2266
7381
7424
2897
2946
6445
6493
1937
1973
6531
6573
2006
2043
6515
6549
2363
2408
7497
7534
2672
2716
8236
8278
2248
2327
6307
6337
1936
1972
7162
7193
2190
2216
5919
5955
2237
2268
7280
7315
2498
2534
6039
6073
2347
2378
6883
6915
2619
2653
7216
7247
2368
2409
7096
7143
1992
2028
6301
6343
2340
2383
6667
6709
2754
2791
6564
6593
2034
2072
7003
7043
1731
1777
6467
6506
2118
2172
6176
6214
2547
2589
7392
7437
2690
2731
6931
6972
1928
1977
6112
6152
1766
1798
6398
6435
2368
2422
7442
7491
2303
2345
7411
7457
1855
1874
7294
7317
1780
1822
7454
7502
2193
2231
7229
7265
2430
2485
7288
7328
2360
2405
7315
7359
2012
2065
7122
7166
2625
2662
6894
6949
1326
1367
8565
8607
2695
2743
6623
6660
2287
2324
6872
6909
2084
2134
6940
6987
2269
2303
6639
6673
2267
2323
6567
6624
1926
1965
6683
6725
2153
2189
6345
6382
1766
1801
6663
6696
2315
2371
7016
7055
1970
2013
6975
7012
1925
1976
6867
6919
2265
2296
7083
7109
4300
1634
1673
7494
7540
2049
2096
6389
6426
2341
2371
7250
7284
1984
2018
7421
7452
2661
2706
7430
7478
2742
2770
7203
7238
2017
2052
7182
7228
2013
2048
7045
7075
2592
2623
7012
7055
2705
2740
7119
7150
2561
2608
6694
6736
2656
2700
6423
6479
2399
2435
6440
6477
2291
2336
6197
6231
2750
2793
6638
6674
2422
2453
6037
6073
1603
1654
7270
7327
2140
2168
7445
7469
1554
1588
7429
7455
2295
2350
7295
7352
2788
2828
7987
8031
2104
2138
7231
7264
2552
2599
6143
6178
2058
2095
7465
7506
1854
1902
7449
7485
1681
1726
7366
7399
2641
2678
7181
7209
2576
2611
6791
6828
2560
2599
6870
6904
2435
2474
9002
9042
2493
2535
6770
6817
2482
2524
6576
6624
2026
2070
6907
6962
2222
2268
6799
6848
2038
2091
6415
6459
1947
1991
6466
6504
1958
2001
7282
7317
2315
2349
7093
7120
2181
2223
6987
7019
2200
2236
6909
6954
2286
2323
6077
6113
1413
1458
6103
6164
2398
2429
7038
7067
2155
2190
6026
6078
1865
1894
7250
7283
2245
2290
6692
6733
2574
2614
7164
7205
2594
2626
7257
7291
1725
1756
7492
7523
2209
2242
6394
6434
2436
2465
7120
7150
1856
1894
6724
6767
2508
2547
7069
7096
2713
2746
6838
6867
2264
2303
7006
7034
2336
2375
6329
6378
2120
2168
7350
7392
2106
2144
7034
7068
2557
2585
6919
6942
2485
2522
8874
8911
2423
2471
6377
6420
1553
1608
7393
7429
2622
2675
6158
6195
1755
1804
7341
7384
1954
1986
7019
7054
2303
2366
6803
6858
1742
1779
7242
7279
2399
2444
6835
6875
2232
2274
6754
6790
1813
1851
6435
6480
2315
2356
6448
6495
1987
2031
7489
7522
2646
2685
7109
7143
2490
2527
7370
7412
2456
2493
7482
7524
2469
2523
7199
7241
2033
2089
7310
7355
2614
2656
7412
7457
1904
1942
6618
6656
1815
1852
6948
6981
2119
2171
7153
7216
2165
2198
7051
7086
2295
2339
6514
6552
2441
2474
6571
6600
2279
2314
6340
6382
2489
2521
6083
6127
2364
2404
6554
6602
1794
1837
7546
7575
2366
2407
6222
6258
2237
2274
6059
6101
2741
2777
6923
6963
2713
2761
7453
7500
2417
2461
7352
7391
1573
1603
7457
7494
2583
2626
7096
7131
2688
2743
6177
6212
1807
1838
7257
7283
2435
2473
7054
7078
2772
2814
7474
7518
2768
2797
6855
6882
4400
2787
2829
7210
7277
2791
2835
6581
6610
2783
2822
6317
6364
2765
2798
7128
7164
2797
2837
6932
6975
2763
2801
6386
6417
2573
2658
5782
5963
1796
1849
6591
6649
1859
2158
5804
5962
2406
2451
5799
5842
2208
2249
5816
5858
1921
2042
5528
5776
2710
2806
5913
6125
2233
2265
5914
5946
2223
2495
5549
5656
2058
2192
5490
5578
2275
2338
4426
4607
2081
2165
5623
5811
2297
2381
4222
4310
2250
2296
4321
4372
1995
2037
4315
4344
1564
1606
4320
4363
2421
2470
4217
4256
2041
2076
6690
6722
1999
2034
4192
4227
1854
1897
4384
4412
2149
2221
4381
4414
2114
2157
4252
4292
1708
1741
6298
6337
1988
2031
4412
4449
1833
1854
4582
4606
1986
2048
4528
4568
2074
2117
4573
4611
2147
2185
4577
4611
1903
1946
4281
4310
1736
1779
4391
4429
1804
1847
4283
4321
1953
2002
7109
7148
1525
1568
4183
4221
1897
1939
4156
4194
2503
2544
4233
4261
1654
1697
4246
4284
1651
1694
4470
4508
2133
2175
4470
4508
2057
2100
4318
4356
1523
1565
4129
4167
1732
1774
4138
4176
1632
1674
4524
4562
1605
1647
4408
4446
2700
2733
4693
4735
2210
2249
5652
5721
2118
2162
6484
6520
2338
2381
5776
5826
1739
1782
4220
4255
1739
1782
4329
4363
2106
2143
4167
4203
1804
1847
4167
4201
2138
2170
7779
7805
2056
2110
4221
4263
2153
2202
4206
4254
1645
1690
4191
4227
2720
2741
6992
7031
2275
2337
5674
5725
2232
2273
5768
5807
2134
2165
4426
4463
1574
1618
4129
4157
1992
2034
4349
4375
2610
2646
6482
6517
1893
1935
4473
4499
1734
1777
4445
4471
1990
2032
4473
4499
1905
1948
4349
4375
1782
1821
4655
4679
2197
2239
4518
4565
2735
2780
4688
4729
1722
1752
4657
4676
1902
1943
4660
4686
1847
1879
4656
4683
1987
2028
4660
4686
2208
2243
4665
4694
2069
2105
4665
4690
2136
2170
4665
4691
2784
2830
4765
4799
2744
2780
6440
6498
2288
2329
4665
4700
1802
1844
4084
4122
1646
1689
4038
4093
1680
1725
3983
4027
2607
2653
2417
2447
1608
1651
3967
4005
1572
1614
4030
4068
2444
2494
3390
3439
2378
2414
3455
3498
1432
1464
2548
2582
2741
2807
3490
3533
1986
2024
6583
6628
2538
2565
3526
3567
2696
2723
3510
3538
1751
1793
4013
4039
2519
2550
3411
3440
4500
2565
2627
3459
3490
1856
1890
4584
4609
2344
2385
3147
3191
2432
2474
3479
3514
2555
2595
3358
3418
2532
2558
3488
3517
1914
1944
4576
4607
1459
1492
2395
2426
1406
1441
2370
2404
1659
1695
4329
4358
2242
2273
1235
1274
2494
2538
931
972
2595
2628
6599
6644
2257
2302
1445
1495
2431
2474
1116
1163
2217
2254
1065
1107
1902
1936
934
973
1975
2012
798
838
2470
2526
1195
1236
2330
2364
1136
1168
2471
2515
5802
5840
1946
1983
1279
1313
2501
2537
1030
1068
2416
2450
909
945
2416
2456
1422
1464
1948
1989
1341
1375
1923
1957
1501
1531
2360
2404
835
896
2508
2587
1109
1159
1983
2015
948
984
2602
2641
1375
1401
1877
1921
1165
1195
1963
2004
1040
1094
1745
1788
4275
4309
2651
2696
3443
3486
2144
2175
6402
6430
1643
1669
4120
4162
1846
1892
1438
1473
1833
1876
1223
1248
1670
1712
1038
1084
2161
2203
851
895
2284
2322
826
865
2403
2447
1332
1379
2269
2304
702
739
2113
2151
1387
1427
2059
2090
881
916
2779
2815
1306
1345
2163
2198
1061
1098
2175
2207
974
1009
2149
2190
786
830
2326
2363
998
1036
2334
2375
1433
1466
1905
1947
4232
4267
2371
2409
1161
1196
2675
2713
1192
1228
2174
2210
1263
1302
2124
2159
966
1003
2478
2520
706
751
1956
2003
746
784
2032
2069
1483
1523
2648
2688
6812
6857
1948
1981
1123
1153
2019
2055
1293
1328
1834
1877
1300
1332
2613
2661
1083
1142
2514
2555
2145
2184
2575
2614
1157
1188
2178
2213
1312
1345
2216
2258
837
879
2294
2332
960
998
2792
2831
3555
3590
2042
2082
950
989
2173
2212
693
730
2036
2082
1396
1440
2017
2061
1175
1218
1965
2004
1411
1458
1796
1837
780
815
2101
2141
866
901
2487
2619
5639
5771
2249
2278
1295
1330
2678
2716
1063
1100
2753
2806
908
952
2752
2789
1391
1429
2759
2794
1180
1212
2026
2065
713
754
1781
1814
660
690
2701
2737
1361
1398
2483
2525
663
706
2423
2483
599
636
2209
2242
375
415
2107
2152
569
619
2021
2066
586
634
1807
1835
397
422
2133
2170
1465
1494
1848
1886
601
645
1731
1762
405
432
2305
2344
585
628
2003
2048
463
499
2319
2376
634
684
2438
2490
541
597
4600
2188
2221
1374
1410
1705
1740
322
371
2252
2289
264
288
1862
1892
390
423
2402
2457
436
493
1842
1875
542
578
2657
2691
1310
1342
2157
2201
642
686
2255
2309
335
367
2236
2281
634
680
2121
2164
455
485
1762
1818
606
646
2414
2464
337
383
2265
2309
436
478
1779
1812
351
375
2213
2253
554
599
2423
2461
645
679
1678
1719
161
201
2056
2083
40
75
2031
2076
1119
1155
1845
1880
44
76
1810
1856
841
891
1655
1692
37
71
2100
2142
1057
1098
1721
1753
4538
4571
2036
2101
757
801
1735
1780
4091
4127
2170
2204
38
67
2471
2523
377
433
2650
2684
4
28
2218
2245
171
210
2667
2689
199
218
2609
2635
256
279
2009
2030
79
100
1722
1758
183
212
2495
2535
608
652
1738
1776
2
50
1881
1927
182
222
4700
2460
2497
191
220
2382
2421
46
98
2716
2751
73
106
2654
2671
250
267
2153
2178
145
166
2497
2545
1396
1438
1704
1748
95
125
2155
2189
108
129
2331
2375
709
755
2693
2740
149
197
1894
1930
149
170
2725
2764
1111
1148
2204
2237
133
162
2399
2441
960
1004
2544
2574
24
47
2744
2791
225
256
1977
2020
1492
1525
2403
2439
245
270
4800
2809
2850
12663
12707
2812
2854
11607
11650
2819
2862
11725
11765
2905
2958
11945
12000
3052
3096
12073
12112
3023
3065
12141
12179
2864
2914
11914
11964
2855
2884
11820
11850
2851
2883
12151
12188
2895
2947
12406
12472
2800
2844
11656
11709
2932
2975
12185
12228
2817
2863
11901
11947
2832
2875
12286
12324
2959
3008
12269
12311
2861
2908
11995
12041
2857
2904
12516
12562
3022
3062
11980
12026
2795
2842
12035
12081
2882
2929
12161
12207
2895
2926
12083
12122
2977
3006
12032
12073
2959
3007
11972
12012
2842
2886
12057
12103
3066
3113
12019
12051
2992
3037
12205
12248
2977
3023
12114
12158
2862
2914
10961
11011
2853
2888
10316
10347
3052
3089
10550
10586
1853
1888
116
150
3282
3309
10047
10081
3315
3352
10438
10472
3418
3448
10062
10095
2971
3009
10594
10633
3037
3072
10176
10208
3072
3100
10525
10553
3257
3282
10089
10119
2942
2979
10101
10148
3108
3139
10383
10413
2923
2965
10693
10733
2990
3022
10705
10732
2905
2938
10761
10788
2890
2927
10596
10636
2918
2951
10544
10582
2933
2969
10499
10546
2945
2992
10450
10492
2953
2992
10158
10198
3059
3089
10390
10425
3138
3173
10192
10221
3088
3143
10100
10144
2985
3025
10557
10592
3088
3127
10460
10500
2986
3014
10204
10240
3004
3034
10070
10102
3037
3074
10217
10258
3162
3210
9920
9969
3068
3097
9472
9502
2835
2870
9569
9602
3205
3247
10174
10216
3182
3224
10446
10493
3131
3173
10571
10606
3171
3194
10104
10131
2972
2997
10738
10760
3012
3058
10835
10882
3195
3256
10759
10818
3351
3401
10065
10129
3073
3104
9907
9938
3302
3346
9272
9309
2988
3022
10392
10427
3181
3214
10255
10281
3022
3062
10480
10521
3091
3118
10345
10374
3434
3475
9800
9835
3046
3089
10051
10117
3483
3511
9837
9861
2985
3021
9335
9365
3306
3344
9967
9997
2905
2963
9543
9595
3008
3040
10348
10381
2917
2968
10215
10274
3243
3276
10477
10510
3181
3211
10276
10317
3398
3429
10110
10143
2947
2987
9278
9315
4900
2918
2955
10028
10068
3517
3588
9750
9807
2985
3066
9922
9980
3451
3481
9939
9972
3386
3412
9989
10012
3313
3335
9867
9890
3244
3302
9821
9865
2906
2951
9388
9432
2935
2961
9438
9469
2936
2962
9342
9367
3014
3052
10616
10652
3534
3573
9695
9730
2870
2916
12299
12345
3201
3251
10501
10550
3124
3167
10689
10731
3258
3301
10364
10406
3120
3165
9973
10016
3467
3510
9722
9759
2856
2901
9419
9462
2871
2907
9495
9532
3080
3151
10016
10067
3476
3510
9868
9911
3208
3251
10395
10435
3264
3289
9924
9952
2793
2845
10961
11014
3099
3137
9438
9473
2919
2951
9492
9529
3274
3320
9994
10028
3003
3036
10530
10563
3245
3285
9276
9318
3195
3237
9386
9436
3357
3380
9850
9871
3132
3168
9373
9409
3232
3254
9994
10019
2880
2924
9312
9355
3020
3054
9426
9469
3645
3692
9241
9290
3097
3135
9253
9294
3799
3843
9254
9302
3014
3057
9240
9293
2941
2987
12329
12375
3103
3267
8565
8889
3015
3130
8589
8790
3309
3407
8094
8254
3126
3236
8482
8561
2899
2973
8968
9061
2818
2864
12600
12646
3511
3560
7729
7769
2872
2918
10821
10848
2967
2995
9406
9435
3582
3634
7743
7798
3447
3491
7752
7794
2983
3020
9512
9550
3513
3558
7779
7823
2806
2866
7876
7929
2924
2959
7677
7710
2850
2887
7728
7760
2812
2852
9418
9466
4003
4032
8385
8415
3282
3316
9901
9929
4034
4081
8804
8848
3741
3787
8908
8953
3897
3945
8923
8972
3327
3364
9135
9175
2933
2981
8042
8098
3560
3608
8628
8690
3869
3900
8699
8731
3142
3198
9224
9266
3541
3578
8694
8730
4194
4242
8490
8539
3232
3284
8379
8429
2973
3028
10917
10967
3007
3056
8475
8517
3663
3730
7827
7884
3941
3978
8055
8093
2810
2849
7933
7980
2853
2899
7677
7715
4238
4277
8571
8606
3092
3131
9329
9369
3367
3403
9078
9123
3468
3498
8348
8381
3592
3639
7803
7851
3905
3965
8677
8730
3633
3675
8472
8516
3744
3796
8784
8837
4101
4138
8595
8634
3344
3385
8679
8721
3919
3959
8451
8497
3490
3525
8294
8331
2818
2856
10911
10949
2949
2996
10645
10683
3884
3926
8180
8222
3182
3212
9270
9305
3275
3315
9207
9251
3785
3828
9130
9175
3505
3543
8245
8290
5000
3126
3177
9856
9897
3858
3917
8571
8625
3361
3404
8267
8312
4257
4301
8179
8224
3978
4025
8184
8232
3794
3838
8349
8394
4212
4255
8165
8205
3765
3814
8180
8239
3939
3984
8289
8331
2975
3036
8910
8988
3346
3379
8632
8668
3798
3832
8814
8848
3661
3708
9177
9226
3543
3592
9181
9231
3814
3859
8304
8348
3963
4007
8944
8988
2970
3009
8155
8198
3956
4004
8747
8795
4178
4215
8152
8183
4212
4255
8043
8094
4074
4124
8744
8792
4188
4227
8786
8822
4151
4195
8745
8790
3386
3433
8014
8070
3853
3893
8358
8394
3842
3887
8727
8775
4209
4254
8615
8659
4154
4194
8541
8581
3358
3402
7982
8027
4200
4245
8746
8790
4157
4201
8412
8456
4169
4205
8644
8681
3862
3900
8536
8574
4097
4141
8811
8855
3391
3432
8202
8242
3190
3236
8158
8212
2889
2933
7924
7968
3027
3064
7715
7757
4031
4076
8094
8139
2979
3010
7829
7861
2940
2991
7781
7849
3066
3105
8103
8144
4200
4238
8393
8434
4376
4417
7881
7926
3367
3411
8586
8630
2861
2900
7812
7858
3227
3258
8435
8468
3970
4013
8872
8914
3775
3821
9179
9222
3342
3383
8317
8352
3694
3734
8666
8712
3858
3901
8998
9043
2924
2951
9306
9334
3843
3872
8817
8845
3719
3764
8976
9022
3764
3806
8537
8580
3685
3730
9010
9058
3716
3762
9116
9165
3429
3481
8034
8080
3010
3045
8586
8624
3735
3773
8254
8306
3336
3374
8031
8073
3338
3379
7817
7859
3554
3609
7913
7970
3515
3555
8763
8797
4180
4228
8246
8284
3369
3444
9756
9810
3100
3144
9193
9237
3140
3179
7913
7950
2906
2983
7848
7928
3361
3405
9168
9206
4037
4081
8463
8508
2833
2855
8473
8496
3285
3325
7952
7993
3824
3873
8884
8933
3126
3168
8028
8069
4487
4530
8020
8063
3694
3734
8343
8392
3010
3042
8081
8111
3227
3267
8070
8110
3907
3939
8529
8559
4359
4399
7748
7788
4042
4080
8669
8707
3238
3278
7895
7934
4329
4371
7679
7722
3156
3196
7750
7790
3083
3118
7916
7951
2866
2906
8626
8667
2863
2903
8409
8448
3436
3477
8453
8496
3473
3535
8111
8190
2964
3004
8523
8564
3126
3171
8299
8354
3402
3442
8513
8553
3598
3643
8545
8600
3983
4027
8627
8671
3266
3301
8288
8326
3648
3689
7945
7984
3529
3570
7977
8017
2947
2994
8394
8433
5100
3056
3096
8488
8527
3091
3121
8392
8427
4296
4351
8497
8569
2951
3010
7965
8012
3538
3573
8058
8105
3608
3648
8062
8102
2898
2939
8505
8545
3055
3118
7728
7789
4230
4273
8354
8406
4420
4464
7676
7720
3028
3068
8381
8421
2874
2915
8192
8233
4399
4440
7987
8027
3188
3214
7843
7872
3941
3985
8502
8553
3794
3839
8608
8658
4233
4274
8240
8281
4138
4178
8779
8819
3430
3472
8303
8343
3918
3957
8120
8158
3267
3312
8660
8705
3150
3189
8204
8240
3228
3281
7776
7827
2887
2956
8688
8750
3634
3676
8708
8746
3167
3203
7952
7986
4391
4416
8263
8290
3407
3451
7858
7896
4267
4304
8067
8112
4457
4489
7595
7628
2993
3028
7690
7727
3591
3625
8917
8950
3636
3682
9081
9130
4323
4363
8103
8139
3560
3609
8112
8157
3797
3835
8760
8802
2818
2868
8097
8139
3030
3071
8202
8236
2901
2938
8539
8571
2868
2906
8000
8037
3050
3089
7996
8034
3376
3418
7931
7981
4314
4353
7747
7784
2995
3039
7873
7924
4365
4406
7611
7655
3177
3238
7875
7921
4323
4362
7946
7984
2923
2956
8013
8041
3053
3113
8321
8368
3925
3964
8780
8823
3196
3237
9206
9246
3502
3531
7922
7958
3166
3204
8393
8428
2945
2981
8225
8262
4386
4431
7658
7703
3046
3081
7813
7847
3096
3131
7889
7925
3099
3137
8229
8265
4469
4506
7787
7825
4390
4422
8133
8173
3619
3660
8885
8924
3628
3669
8025
8062
4497
4536
7638
7677
4512
4564
7824
7876
2894
2952
7513
7557
4484
4525
7951
7991
4404
4440
7547
7583
4452
4497
7527
7572
3453
3494
7867
7907
3038
3219
6824
6898
4500
4537
7554
7591
2896
2934
8339
8375
3520
3610
6220
6372
3920
4078
6419
6566
3753
3902
6446
6526
4423
4464
7917
7958
3667
3762
6698
6826
3651
3741
5903
6047
3157
3196
8096
8134
3588
3682
6058
6206
3422
3519
6037
6213
2838
2976
6779
6860
4297
4337
7780
7817
4291
4396
5876
6009
4006
4049
8702
8745
4243
4283
7924
7965
3304
3351
6201
6277
3651
3705
6536
6575
3706
3764
6552
6592
3576
3626
6517
6559
3404
3444
6802
6841
3467
3530
6744
6796
3484
3538
6630
6692
4351
4511
6035
6155
3578
3621
6616
6667
3675
3731
6930
6975
3801
3850
6696
6751
3034
3076
5899
5932
4089
4128
8450
8487
4433
4488
5889
5943
5200
3269
3308
6861
6905
2923
2960
6205
6264
2860
2895
7233
7281
3916
3957
8236
8277
3340
3380
6751
6791
2926
2961
6971
7023
3553
3597
5859
5897
3277
3326
5867
5916
3071
3112
7301
7337
3769
3851
5953
6060
3206
3249
6481
6520
3262
3323
6319
6358
4170
4274
5930
6004
2972
3022
6364
6409
3339
3380
6506
6548
3373
3435
6618
6667
2885
2915
5921
5953
3119
3150
5925
5961
3722
3761
6883
6928
3101
3132
6003
6038
3411
3443
5903
5951
2987
3037
6008
6054
3325
3356
6818
6854
2888
2935
6342
6375
3009
3036
8257
8288
3019
3049
6540
6575
3299
3346
6134
6175
2976
3008
7290
7318
2994
3051
6994
7040
3176
3211
6020
6054
3050
3087
7210
7244
3197
3241
7012
7061
2944
2973
6892
6924
3244
3285
6029
6074
3105
3142
7226
7264
3574
3624
6977
7023
3101
3143
6538
6582
3055
3090
6744
6777
3655
3706
6828
6888
3249
3288
6911
6956
2985
3018
7056
7090
2822
2864
6650
6685
3372
3468
6872
6994
2952
2988
6698
6738
3072
3108
6681
6726
3051
3094
6381
6417
2953
2989
7180
7219
3311
3353
6045
6097
3354
3405
5897
5934
3103
3133
6088
6126
2909
2954
5868
5906
3491
3526
5933
5966
2854
2897
6000
6060
3172
3215
6095
6125
3340
3381
5977
6009
3274
3323
5964
6003
3254
3290
6122
6158
3181
3227
6762
6796
3216
3261
5849
5897
2824
2879
6192
6235
3026
3060
7417
7455
3407
3445
5993
6028
3045
3095
7334
7377
2914
2942
6061
6085
2821
2849
7433
7459
3094
3151
6614
6653
2853
2888
6949
6986
3012
3046
6941
6978
3196
3227
6289
6325
3384
3424
6076
6111
3550
3595
5953
5992
4448
4487
8009
8042
3133
3173
5843
5877
4396
4438
7029
7071
4234
4265
6425
6456
2987
3025
6712
6747
4391
4456
6471
6543
4456
4496
7208
7248
3874
4057
5894
6119
3021
3053
6880
6923
2932
2972
7275
7304
4430
4471
7141
7185
3033
3079
6168
6209
4370
4431
7099
7146
4470
4509
7366
7409
3612
3655
7034
7081
4449
4490
7109
7147
4341
4380
7140
7178
2955
3001
6174
6207
4436
4488
7473
7528
4494
4542
5946
5997
4516
4660
6129
6233
4510
4554
7384
7431
2967
3009
5882
5919
4523
4558
7191
7227
4493
4525
7458
7489
3095
3129
8069
8103
3576
3653
5819
5867
3294
3546
5749
5868
3291
3335
5828
5862
5300
3349
3414
6671
6741
3810
3941
5810
5922
3008
3102
5381
5513
3404
3441
5855
5890
3130
3177
7151
7201
3114
3260
5480
5555
3437
3534
5554
5624
3624
3721
5607
5678
3542
3607
5587
5643
3187
3237
5934
5976
3417
3507
5671
5730
2968
3020
7484
7534
3228
3312
5267
5327
3325
3416
5492
5550
3177
3259
4586
4650
3393
3464
4458
4546
3540
3643
4555
4627
3840
3905
5545
5613
3794
3882
4443
4503
3941
4012
4540
4592
3171
3244
4684
4726
3647
3701
4692
4744
3962
3997
5267
5305
2981
3020
8333
8370
3470
3517
4803
4852
3506
3559
4368
4420
3441
3497
4519
4590
3720
3767
4811
4853
3265
3318
4419
4470
3492
3534
4902
4944
3836
3874
4907
4942
3966
4012
5337
5381
4417
4468
5970
6017
3072
3108
5827
5862
3019
3066
4803
4851
3911
3966
5162
5211
3096
3145
4359
4407
3104
3144
5802
5832
3039
3075
4953
4988
4035
4074
4621
4659
3477
3527
4600
4647
3335
3385
4818
4866
3570
3614
5065
5111
3304
3342
4473
4505
2941
2991
4631
4677
3171
3214
7071
7114
4216
4269
5234
5287
2912
2953
4718
4755
3968
3999
4865
4895
3296
3347
4725
4772
3529
3573
4836
4877
3529
3570
5129
5169
3527
3678
5692
5770
3500
3551
4738
4783
2988
3034
4584
4628
3122
3176
5012
5063
3315
3381
4430
4482
3554
3602
4641
4685
3574
3625
4753
4799
3756
3821
4959
5008
4102
4154
5279
5328
3497
3540
4978
5026
3989
4036
4974
5020
3610
3660
4834
4879
2923
2965
5778
5825
2975
3014
4735
4772
3852
3901
4981
5037
3844
3898
5126
5188
3368
3424
4541
4596
2849
2890
4710
4749
3809
3860
5094
5139
3400
3450
4848
4894
3761
3814
5122
5168
3595
3628
4446
4472
3746
3798
6830
6891
3206
3254
4534
4578
3113
3155
4753
4803
4383
4433
5765
5810
3543
3593
4939
4983
4194
4247
5356
5408
3251
3300
4664
4707
4479
4622
5815
5931
4005
4043
5181
5220
4145
4195
5226
5274
2997
3049
5787
5844
3821
3860
4775
4821
3121
3171
4508
4554
3613
3664
4790
4834
3223
3274
4774
4820
3959
4005
5140
5183
3353
3404
4667
4712
3677
3719
4985
5023
3609
3657
4960
5016
3649
3715
4433
4461
3735
3865
5619
5723
3749
3797
4766
4809
3943
3994
4908
4956
4027
4065
5755
5792
3370
3418
4761
4805
3575
3618
4856
4902
5400
3445
3494
4709
4757
3202
3248
4867
4906
3166
3212
4759
4799
3728
3782
5012
5063
3152
3195
4463
4497
3292
3330
3616
3656
3053
3104
4660
4705
4176
4225
3647
3697
2911
2951
3543
3577
3864
3911
3752
3797
4150
4204
3704
3760
4298
4345
3554
3599
3438
3489
4390
4436
3291
3306
3486
3514
2866
2897
3542
3571
4091
4133
3539
3578
3178
3230
3630
3673
4222
4267
3626
3672
4025
4066
3728
3770
3913
3957
3757
3797
4476
4518
3528
3572
3140
3183
3584
3623
3943
3985
3791
3829
2971
3010
3560
3595
3255
3296
3567
3605
3825
3869
3696
3735
4195
4227
3478
3516
4269
4313
3581
3619
4103
4142
2562
2596
4021
4062
5101
5143
4228
4277
5590
5637
4508
4556
3470
3516
2856
2889
3581
3606
3053
3104
3592
3624
2893
2918
1396
1423
2861
2891
1317
1358
3352
3391
1351
1395
4024
4054
1234
1268
3594
3638
1666
1712
4488
4536
2194
2241
3038
3083
4739
4779
4073
4120
1322
1366
3255
3288
1873
1913
3823
3856
1231
1271
2788
2834
4700
4748
4381
4426
1221
1262
4181
4227
1447
1488
3083
3116
905
943
3466
3497
805
842
3659
3702
1012
1049
4281
4326
1225
1265
3218
3249
1457
1486
3177
3246
1116
1177
3456
3496
1133
1175
4329
4366
2050
2088
3989
4027
1714
1755
3105
3159
6271
6310
3977
4014
1304
1342
4022
4051
1281
1310
2951
2990
857
902
3820
3854
1177
1212
3718
3757
1070
1108
4052
4094
1624
1669
3508
3544
1408
1443
3739
3774
1518
1553
3338
3376
1249
1286
3715
3776
1142
1184
2870
2912
1237
1277
3587
3622
1193
1227
4333
4368
1409
1443
2848
2883
967
1001
4045
4091
1411
1457
3634
3668
1301
1335
3897
3937
1570
1618
4034
4078
5209
5255
4066
4115
2139
2172
3229
3265
1379
1413
3916
3953
1499
1535
3468
3504
1337
1372
3220
3239
1042
1072
3280
3324
848
886
4142
4179
1639
1677
4252
4290
1477
1514
2984
3029
4653
4690
2920
2957
949
985
3612
3650
1545
1595
4221
4263
2139
2181
4321
4368
2247
2295
4364
4405
2323
2364
3775
3809
1853
1884
4044
4085
1693
1731
3737
3770
1700
1732
3167
3200
1569
1601
3411
3438
1550
1595
3828
3864
1550
1587
4251
4286
1376
1409
4329
4364
5402
5437
3888
3926
1368
1406
4169
4202
1358
1389
3395
3431
1348
1383
5500
3388
3418
1467
1495
4366
4408
2202
2244
3127
3161
1400
1433
3066
3103
1062
1099
3512
3557
1047
1094
3367
3409
823
880
4099
4136
2095
2127
4173
4215
2186
2227
3324
3356
1022
1056
3504
3576
1680
1746
4032
4064
2088
2120
3901
3936
1280
1313
3344
3382
1438
1470
3972
4016
1392
1427
3744
3773
1008
1042
3276
3307
1447
1478
3510
3556
790
841
4434
4477
2297
2339
4437
4481
2239
2284
4472
4524
1432
1479
3414
3489
1769
1816
3571
3609
1401
1443
3000
3084
1171
1213
2994
3055
1084
1125
3755
3793
1265
1313
3624
3660
1377
1408
4007
4044
1835
1868
3911
3948
1241
1275
3306
3338
1853
1888
4271
4320
2090
2141
4320
4352
1495
1531
3568
3603
1564
1595
3454
3501
1586
1626
3180
3204
1394
1422
3649
3683
1546
1576
3882
3916
1059
1087
3039
3074
844
874
3341
3399
1808
1871
3370
3418
4880
4921
3500
3541
2149
2218
3751
3784
2174
2202
4333
4373
1902
1942
3822
3859
1838
1871
3556
3611
2176
2215
4032
4068
1530
1563
4012
4055
1602
1657
3858
3890
1456
1492
4417
4448
1372
1401
3392
3437
1072
1111
3584
3621
1309
1350
3289
3313
1575
1604
3000
3033
4956
4988
3335
3368
1609
1637
3712
3743
941
976
3178
3224
6930
6964
3733
3768
1609
1656
3060
3085
917
945
3482
3502
997
1015
3305
3361
745
801
4008
4058
1782
1823
4120
4159
1425
1471
2853
2889
1078
1117
3060
3120
754
806
3286
3323
1360
1402
3548
3590
955
1013
3400
3447
737
777
3681
3715
2176
2211
3194
3237
878
930
4249
4279
1202
1238
3156
3177
1491
1522
3799
3834
1631
1673
3141
3177
1075
1111
3518
3564
1554
1638
4358
4394
1306
1350
3443
3481
1418
1461
3770
3804
1372
1399
2890
2927
1195
1229
3762
3792
932
958
3108
3144
1153
1191
4240
4287
2344
2392
4091
4129
1786
1823
3927
3966
1201
1237
4426
4468
1957
1998
4286
4330
2294
2340
4381
4423
1849
1891
2873
2897
889
921
3662
3720
1633
1674
4401
4440
2281
2320
2811
2865
888
928
4094
4131
1546
1579
3785
3811
1418
1467
3330
3363
1109
1130
3486
3510
1745
1770
4122
4177
2244
2292
3156
3181
890
921
3531
3575
1315
1342
2919
2971
1102
1141
4485
4548
1897
1961
4502
4563
2064
2120
3349
3377
725
753
5600
3822
3854
2174
2202
3096
3124
493
524
3253
3284
583
614
4366
4413
2001
2048
2878
2907
52
89
3548
3580
38
71
3571
3604
822
852
3636
3668
957
992
3078
3108
319
350
4459
4510
2115
2165
3466
3495
82
118
2975
3017
932
978
3090
3128
426
465
2819
2855
212
242
2845
2892
4771
4807
3316
3352
336
371
3945
3981
1583
1613
3466
3501
240
274
3386
3418
333
358
3150
3185
364
398
3458
3498
290
343
4281
4321
1973
2012
3070
3106
372
415
2933
2971
46
85
3565
3608
1033
1096
3113
3149
276
302
3200
3234
353
387
3083
3134
643
688
3241
3275
435
469
3186
3219
150
176
3409
3446
5
38
3735
3787
1213
1240
2973
3002
58
83
3026
3053
919
955
3358
3396
154
184
3282
3340
576
639
2937
2963
149
173
3033
3058
226
254
2888
2922
201
231
5700
3233
3269
211
241
3197
3230
546
571
3318
3365
43
83
3220
3257
670
703
3053
3126
536
597
3395
3429
229
256
3266
3300
245
271
3739
3772
18
45
3153
3185
195
217
3145
3173
465
495
3256
3289
345
371
3146
3180
79
116
3229
3265
97
123
3083
3120
97
124
3462
3498
186
212
3115
3145
237
260
5800
2898
2923
104
131
3607
3639
26
71
2827
2861
148
183
3279
3328
21
50
3784
3819
19
45
3688
3714
28
57
3309
3346
139
160
4415
4457
2159
2201
3060
3098
197
229
5900
5970
6010
9234
9274
6019
6062
9289
9319
6120
6156
9290
9316
5870
5902
9246
9305
5935
5964
9276
9307
6166
6210
9223
9270
6240
6297
9224
9281
6152
6205
9177
9230
5941
5979
9185
9223
5931
5958
9004
9037
5869
5904
8942
8977
5866
5898
9146
9203
6186
6234
9158
9205
5983
6030
9108
9163
5956
5998
9071
9112
4542
4590
7772
7821
6027
6076
9080
9123
5861
5896
9062
9112
4591
4636
7700
7746
4586
4632
7809
7855
6099
6149
9120
9169
6028
6092
9031
9076
4659
4701
7886
7928
4669
4710
7800
7842
4539
4579
7680
7720
4878
5048
6482
6686
4800
5004
6112
6250
5935
5995
8949
8992
4645
4730
6002
6095
4960
5120
6220
6366
6055
6105
9155
9206
5119
5253
6267
6370
4623
4679
5922
5979
5846
5885
6324
6359
4553
4608
7401
7452
5493
5535
6547
6587
5495
5536
6647
6689
4539
4576
6005
6045
4980
5027
6368
6417
4731
4771
6848
6893
4768
4805
7145
7174
4964
4997
6905
6941
4902
4954
6803
6847
5325
5379
6909
6950
5142
5183
6414
6455
5405
5455
6531
6583
5181
5222
6545
6585
5050
5089
6429
6468
4902
4949
6310
6357
4585
4619
6696
6740
5135
5164
6857
6893
5458
5504
6588
6632
5948
5984
6380
6418
4766
4804
7391
7432
5067
5114
6851
6891
5398
5440
6861
6901
5323
5368
6784
6828
5049
5089
7053
7098
6000
4880
4917
6759
6793
5388
5431
6748
6791
5631
5674
6418
6461
5156
5195
6967
6997
5282
5323
6104
6149
4778
4813
6900
6932
4638
4676
7682
7720
5690
5731
6260
6297
6006
6051
9198
9243
5901
5940
6773
6813
5756
5784
6744
6772
5785
5844
6305
6355
4834
4879
7115
7159
5837
5884
6414
6456
6102
6147
9223
9269
4606
4646
7505
7545
5029
5071
6840
6879
5270
5429
6355
6478
4766
4812
7866
7912
4550
4595
7556
7598
4669
4701
7362
7394
5672
5709
6729
6766
5092
5142
6944
6984
5969
6027
6463
6514
5863
5892
9017
9047
5905
5948
6359
6396
5802
5840
6894
6932
5439
5483
6790
6833
5860
5904
6790
6834
5646
5693
6555
6605
4564
4603
7274
7309
5590
5630
6528
6568
4560
4617
7628
7688
4726
4766
7380
7421
4885
4909
6956
6990
5075
5097
6940
6970
5150
5184
7025
7063
5945
5985
6830
6869
4664
4704
6937
6977
5652
5693
6672
6714
4851
4893
6733
6782
5682
5730
6417
6458
4907
4942
7101
7137
5052
5087
7011
7033
5961
6018
6764
6831
5618
5674
6226
6269
5433
5474
6170
6210
6000
6041
6625
6665
4631
4675
7957
8001
5258
5305
6910
6948
5587
5638
6463
6519
5896
5938
6546
6588
4856
4901
6796
6833
5217
5253
6898
6930
4624
4670
7267
7300
5577
5639
6630
6698
6008
6043
6415
6450
5611
5649
6724
6761
5259
5302
6732
6774
5288
5326
6497
6534
4648
4688
7446
7486
5188
5231
6403
6446
5641
5680
6771
6811
4636
4673
6726
6759
5544
5580
6195
6230
6037
6069
6555
6596
5462
5500
6774
6812
4696
4745
6689
6748
4832
4864
6905
6944
5107
5163
6471
6527
5576
5617
6758
6799
5233
5277
6846
6890
4840
4880
6878
6911
5736
5772
6279
6313
6077
6132
6378
6419
5530
5575
6701
6744
4760
4804
6744
6785
4663
4695
6834
6871
5218
5259
6073
6107
4718
4748
7043
7080
5734
5773
6820
6860
5947
5983
6723
6754
5105
5149
6360
6404
5690
5739
6604
6646
6015
6051
6509
6550
4734
4786
6694
6758
4894
4935
6920
6956
5955
6009
5815
5865
4650
4683
5652
5686
5726
5817
5477
5587
6061
6200
5679
5792
5172
5216
6464
6503
6064
6131
5356
5431
5876
5954
5402
5469
5880
5937
6597
6659
5972
6051
5449
5514
6117
6195
5519
5586
6100
5778
5856
5355
5418
5993
6045
5313
5348
5732
5767
4990
5024
6230
6315
5461
5539
5159
5209
4082
4112
5426
5551
2448
2580
5236
5269
6518
6550
5063
5103
2424
2464
5746
5788
2765
2806
5159
5195
2454
2488
5549
5606
2537
2585
4970
5018
7077
7114
5577
5624
2500
2551
6048
6089
6698
6737
5735
5787
2453
2505
5612
5660
2418
2465
5511
5570
2604
2648
5083
5132
2378
2427
5154
5188
2387
2422
5600
5658
2351
2407
5955
6064
948
1056
6028
6101
1355
1431
5969
6037
1265
1331
5531
5566
2267
2301
5020
5052
6931
6958
4978
5018
1454
1496
6029
6076
879
924
6069
6125
755
812
6073
6121
844
892
5526
5581
752
810
5112
5159
4165
4178
6174
6223
948
997
5845
5926
880
954
5567
5605
800
840
5773
5844
942
1005
5779
5818
6771
6810
5160
5199
2156
2194
5865
5920
1005
1058
5120
5168
1960
2006
5685
5737
847
908
5664
5740
916
986
5773
5823
1068
1118
5598
5646
848
899
5959
6016
835
894
5301
5337
1446
1488
5057
5153
4087
4144
5660
5695
2204
2233
4942
4986
1762
1805
4652
4697
1427
1466
6015
6064
761
816
6019
6071
1046
1082
5701
5762
974
1042
4867
4899
1892
1923
6246
6324
5591
5659
4807
4842
1935
1970
4992
5034
2075
2114
5072
5114
2272
2312
5019
5047
1509
1538
5227
5262
1392
1426
4694
4734
1986
2026
4766
4806
2026
2065
4626
4668
1869
1911
5113
5147
1553
1581
5128
5164
1482
1529
5087
5126
1496
1534
5098
5130
2510
2546
4796
4837
1481
1522
5682
5728
6492
6537
4823
4869
2000
2046
5893
5972
1170
1254
4707
4748
1702
1743
4691
4724
1509
1547
6078
6122
929
976
4907
4940
1299
1328
5228
5262
1466
1497
4584
4624
2130
2168
4540
4591
1857
1908
5106
5143
1373
1408
4614
4658
1488
1527
4735
4772
955
989
6012
6063
688
743
4538
4592
2161
2216
4772
4807
2101
2139
4960
4999
2115
2152
4554
4591
1948
1987
4988
5027
1735
1774
4857
4901
1838
1887
5100
5153
1838
1894
4810
4858
1678
1710
4618
4688
1763
1831
4804
4842
1739
1774
4860
4899
1284
1321
4675
4758
5574
5633
6007
6039
6842
6871
4853
4890
2062
2096
5881
5920
740
784
5073
5114
1428
1463
4795
4830
2184
2215
4775
4816
1854
1897
4770
4817
1608
1655
6200
5244
5287
6450
6492
4865
4914
1526
1573
5945
5998
666
725
5356
5411
6129
6170
5826
5863
6558
6598
6144
6187
18
68
4574
4614
1397
1447
4938
4973
2057
2094
6194
6252
475
520
5750
5815
516
581
4701
4742
2062
2104
6004
6074
488
524
5879
5916
377
415
4756
4793
1005
1042
5078
5120
2187
2223
6204
6305
757
845
5609
5645
46
83
4644
4686
2091
2134
6061
6134
362
411
5636
5682
430
467
6157
6233
355
403
5911
5967
613
672
4651
4684
7026
7056
5913
5961
278
328
5236
5286
305
356
5594
5639
362
406
5654
5695
525
555
5792
5837
239
284
5533
5575
443
472
6177
6234
67
127
5843
5889
166
215
5733
5793
595
659
5833
5880
302
349
6038
6086
40
90
6095
6131
489
533
5403
5447
83
127
5102
5137
2245
2282
5444
5496
144
198
5835
5893
501
566
5838
5862
2389
2413
5703
5764
417
450
5350
5411
548
612
6106
6166
135
206
5663
5703
576
608
5921
5974
771
831
5544
5612
286
356
5880
5931
568
620
5809
5871
618
680
6118
6173
730
789
5487
5537
712
765
5536
5596
553
583
5783
5851
413
445
5350
5399
8
65
5755
5810
26
81
5695
5743
98
147
5990
6023
382
421
6155
6210
186
250
5510
5560
246
299
6087
6135
91
142
5298
5349
244
285
5192
5250
342
398
5799
5868
91
155
5195
5221
190
209
5745
5803
160
223
6300
5846
5908
670
735
6156
6263
666
767
5381
5424
202
248
5516
5572
658
713
5890
5941
224
274
6363
6433
9182
9252
6242
6296
301
360
6212
6267
109
176
6139
6179
481
523
6287
6338
9100
9151
6357
6417
9049
9110
7933
7970
7600
7620
6473
6523
9152
9203
6430
6467
9050
9087
6507
6551
9103
9146
6495
6583
5872
5944
7186
7225
6180
6220
7464
7511
6290
6342
5316
5374
330
397
7385
7430
6422
6468
7271
7306
6324
6362
7516
7568
6421
6474
7275
7330
6218
6283
6889
6935
6097
6149
7091
7136
7176
7227
7350
7381
6317
6347
5662
5708
42
88
7153
7185
6105
6143
7792
7837
6856
6900
7168
7195
6050
6074
7069
7112
6104
6146
7037
7075
6084
6121
7113
7156
6033
6074
7637
7696
6243
6303
7610
7660
6739
6786
7249
7286
6108
6142
7464
7509
6404
6449
7518
7564
6625
6674
7248
7286
6394
6435
6722
6767
5877
5921
7269
7316
7391
7443
7006
7055
6038
6099
5396
5460
601
669
7293
7329
6448
6483
7480
7543
6359
6422
7719
7766
6514
6562
7416
7463
6457
6505
7564
7621
6661
6722
7504
7551
6559
6607
5446
5483
663
700
7252
7307
6196
6261
7069
7105
6030
6064
6976
7022
6123
6171
7410
7445
6367
6403
7307
7351
7328
7374
7315
7346
6414
6445
7345
7377
6242
6275
7452
7496
7405
7451
7429
7473
7278
7324
7152
7196
7297
7343
7053
7096
7260
7307
7635
7665
6671
6704
7809
7854
6908
6955
6635
6679
6110
6156
7332
7360
6371
6401
7352
7397
7358
7403
7027
7071
7117
7162
7350
7399
6392
6442
7696
7742
6604
6650
7373
7435
6304
6369
6825
6869
6819
6865
7200
7244
6390
6447
7518
7563
7358
7402
7907
7947
6853
6894
7479
7534
6509
6565
7919
7957
6716
6755
7449
7493
6483
6528
7314
7349
6290
6326
7529
7566
6385
6422
7873
7921
6957
7002
7869
7919
6902
6950
7686
7728
6566
6609
6313
6354
5912
5950
7934
7978
6931
6972
6443
6483
5912
5950
7224
7265
6070
6106
6400
6626
6664
5970
6013
6678
6717
5838
5875
7159
7209
6139
6196
7201
7239
7243
7282
7893
7933
6747
6787
6542
6584
5963
6000
7649
7688
6559
6597
7833
7876
6612
6653
7864
7909
6817
6861
7984
8035
6699
6752
7534
7583
6465
6513
6794
6837
5823
5868
7252
7287
6167
6201
6430
6468
5801
5853
6749
6790
5804
5842
7901
7992
4753
4994
6601
6629
5589
5615
7118
7193
4952
5085
6456
6549
5014
5092
6823
6972
5370
5466
7183
7226
7198
7244
7268
7310
7443
7490
7016
7101
4899
4960
6992
7055
5234
5318
6968
7029
4462
4571
6866
6940
5135
5199
6681
6734
5407
5452
6667
6716
5490
5542
7219
7262
4544
4600
7330
7369
6463
6503
6870
6967
4496
4548
6401
6460
5170
5229
6910
6963
4849
4906
6482
6536
5396
5446
6594
6641
5476
5512
6769
6808
5667
5704
6861
6893
4533
4566
7603
7664
6603
6660
6820
6859
5741
5777
8007
8160
5515
5547
7943
8027
4564
4702
7972
8020
5042
5113
7991
8024
4474
4510
7980
8010
4513
4554
6580
6617
1017
1041
6262
6316
912
970
6635
6670
1021
1067
6599
6638
6017
6056
6547
6590
919
970
6485
6546
999
1048
6328
6394
774
837
7980
8012
2350
2378
6967
7009
7045
7091
6333
6383
692
745
6411
6456
106
164
6930
6971
0
24
6928
6986
51
98
6254
6304
187
235
6629
6668
46
89
7364
7397
6268
6304
7973
8012
6989
7028
6607
6654
81
125
6670
6713
345
365
6815
6855
284
335
7689
7757
6678
6745
6270
6350
613
689
6893
6945
5230
5297
6335
6386
511
564
6465
6507
321
363
6394
6459
534
602
6259
6307
368
404
6335
6396
576
639
7142
7209
4505
4568
6665
6710
6063
6107
6771
6815
5769
5813
8822
8857
7555
7588
9627
9675
7982
8030
8030
8067
7640
7668
9679
9724
8052
8098
9362
9407
7695
7739
9608
9644
8143
8178
9635
9685
8101
8156
9421
9479
7885
7937
9420
9462
7979
8017
9537
9568
7838
7869
9434
9472
7753
7794
6500
9104
9140
7637
7678
6654
6704
0
47
9163
9203
7635
7672
9051
9082
7572
7600
9337
9368
7686
7714
9107
9145
7574
7608
9687
9724
8149
8186
6702
6791
5114
5203
9585
9668
6537
6649
9301
9359
6660
6883
9435
9501
6679
6907
9571
9635
6697
6923
9329
9397
6382
6613
9086
9223
6949
7044
9131
9180
7178
7226
6624
6660
5815
5849
9057
9103
7284
7329
8896
8931
7391
7428
8925
8975
7272
7325
8989
9031
6741
6775
8764
8800
6520
6558
9265
9293
7612
7643
8651
8698
6743
6791
8679
8723
6300
6346
8821
8857
6304
6342
9161
9202
7498
7538
8685
8721
6525
6560
8591
8635
6327
6365
8494
8534
7072
7105
8862
8899
6477
6508
8984
9031
7010
7056
9029
9067
7385
7424
8282
8344
7182
7238
8767
8802
6595
6625
8471
8537
6403
6455
8814
8850
6586
6616
7398
7436
6256
6296
7709
7746
6838
6875
8688
8723
6411
6441
8698
8735
7277
7314
8137
8182
7007
7050
9201
9244
7220
7260
8681
8719
6447
6485
9005
9051
7475
7525
8985
9020
6629
6657
8781
8815
7308
7344
8741
8798
7102
7148
8972
9008
7199
7235
8974
9017
7329
7373
9659
9702
7850
7889
8768
8794
6337
6374
8879
8937
6802
6857
8034
8074
7012
7055
8989
9026
6694
6720
8986
9024
6574
6600
8880
8917
6560
6585
8922
8962
7511
7555
8174
8215
7145
7183
8681
8717
6603
6629
8937
8979
7421
7457
9329
9396
7979
8047
8322
8365
7096
7132
8692
8735
6651
6689
8764
8800
6649
6675
8937
8979
6919
6962
6960
7030
4967
5029
9071
9114
7151
7193
8425
8461
7125
7151
8883
8909
6663
6693
8711
8760
6878
6932
9018
9055
7248
7285
8399
8441
7231
7273
8720
8762
6704
6744
8820
8855
6478
6504
8809
8844
6549
6575
8891
8921
7443
7469
8610
8653
6686
6723
8790
8832
6997
7040
8565
8612
6438
6478
8628
8668
7217
7260
8251
8291
7054
7097
6462
6505
178
221
9194
9265
7704
7785
8623
8660
6571
6613
8985
9021
6516
6542
8648
8707
7101
7153
8897
8937
7092
7131
8576
8627
7197
7245
8792
8829
7426
7462
8837
8877
7053
7090
8076
8116
7053
7088
8886
8922
6720
6747
8886
8923
6614
6638
8206
8249
7039
7076
8775
8834
6382
6441
8931
8969
7155
7190
8599
8641
7423
7461
8753
8797
6946
6988
8205
8242
6514
6551
6600
8579
8626
6606
6652
9153
9193
7242
7282
9419
9489
5793
6019
9509
9645
5778
5993
8956
9033
5743
5861
8540
8821
4469
4571
8764
8813
6463
6492
8686
8825
5421
5563
8029
8178
4792
4862
9172
9390
4817
4899
8615
8803
4315
4388
8408
8647
5319
5374
9138
9323
5092
5162
9159
9354
4953
5030
8986
9161
4576
4662
9415
9491
5095
5192
8630
8767
4782
4861
8564
8637
4133
4310
8502
8642
5419
5559
9045
9116
4929
5084
9176
9354
4622
4706
9453
9601
5244
5311
9405
9447
7807
7851
8611
8786
4615
4686
8996
9244
5349
5530
8829
8871
6776
6820
9522
9588
4273
4428
8822
8890
4660
4804
9170
9322
4440
4513
9169
9241
4222
4346
8846
8973
4368
4435
9519
9577
6148
6202
9010
9144
4407
4474
9497
9581
4489
4573
8256
8382
5579
5618
9026
9121
5086
5173
9593
9631
7931
7972
8281
8339
4901
5018
8985
9045
4723
4827
8904
9002
4256
4321
8845
8907
4269
4338
8091
8191
4685
4748
8396
8477
5416
5470
8557
8622
4302
4348
8520
8560
6493
6531
9441
9476
4387
4410
8038
8080
4589
4653
9647
9680
4362
4411
8040
8085
4687
4723
8660
8701
4691
4733
8690
8738
6832
6879
8942
8981
4722
4820
9485
9515
5607
5642
8050
8092
6958
6995
9573
9853
5570
5658
9045
9214
3353
3443
8583
8662
3898
4109
8558
8601
6543
6581
9338
9450
3871
4071
8816
8925
2465
2603
8727
8856
3987
4041
8858
8900
7197
7238
8004
8064
4382
4477
8754
8808
3191
3311
8518
8583
3647
3814
8521
8570
3850
3918
8714
8771
3366
3480
9363
9431
4669
4808
8644
8709
3694
3847
8018
8059
6671
6712
9092
9206
3220
3278
8988
9047
3216
3256
8517
8603
3096
3181
8781
8862
2604
2664
8923
8974
4028
4065
8755
8807
2650
2706
9008
9046
5221
5322
8664
8709
3168
3208
8757
8792
2823
2871
9216
9265
3164
3195
8542
8588
3230
3275
8545
8572
3552
3584
8578
8636
3505
3542
8360
8403
3398
3432
8709
8757
4051
4094
8407
8452
3326
3365
8435
8481
3270
3303
8063
8121
3738
3810
8317
8358
3472
3504
9607
9759
4543
4608
8182
8213
3538
3577
8559
8606
3338
3375
8151
8189
3630
3681
8223
8283
3437
3503
8426
8468
3769
3801
8473
8518
3209
3248
8395
8438
3494
3524
6700
8631
8675
3276
3319
8906
8941
2367
2403
8098
8130
3686
3723
9674
9715
2399
2445
9546
9655
1201
1356
9477
9559
1378
1482
8902
9002
2838
3131
9383
9472
1603
1742
9326
9408
1493
1599
9643
9724
1076
1179
9224
9320
1640
1774
9521
9604
1600
1661
9478
9554
1542
1600
8251
8345
5349
5383
9257
9338
1927
2026
8202
8249
896
957
8148
8183
930
964
8154
8196
989
1030
8122
8164
830
877
8264
8309
1044
1085
8295
8347
724
767
8250
8298
801
847
9615
9673
1484
1533
8170
8226
756
796
9550
9608
1464
1513
8381
8424
776
811
9645
9684
2234
2273
9636
9701
1585
1637
8858
8975
4536
4645
9492
9538
2117
2164
9666
9716
2123
2177
9584
9627
2060
2102
9606
9643
2175
2215
9319
9607
3039
3144
9597
9637
2272
2312
9553
9596
2208
2251
9332
9415
2451
2555
8086
8143
555
609
8685
8721
6383
6405
8670
8716
3127
3173
8095
8129
436
465
6572
6625
0
29
8702
8757
2759
2814
9320
9400
2021
2118
9684
9742
1506
1554
6800
8799
8892
2823
3101
9557
9644
634
719
8725
8780
2709
2763
9180
9272
1824
1957
9689
9736
2204
2252
8105
8178
5351
5392
8837
9019
3400
3851
6900
7000
7100
7200
7300
3697
3801
6097
6258
9381
9446
6049
6276
7400
156
204
7363
7427
291
346
6794
6869
594
689
8893
8970
3148
3234
7537
7601
569
655
8278
8400
3713
3836
7600
7793
729
788
6352
6459
427
482
6452
6540
279
333
7030
7118
9067
9144
4772
4812
4438
4627
2441
2697
809
891
5931
6123
5396
5540
3996
4069
7472
7535
1408
1559
4689
4744
4267
4335
7553
7625
4115
4186
4750
4815
3919
3975
8607
8656
3396
3459
7819
7858
5406
5448
5542
5571
1904
1945
8418
8477
5579
5623
7993
8057
1632
1692
8157
8183
1750
1776
7790
7819
2442
2470
7736
7782
2243
2276
7755
7794
2582
2606
5899
5927
5818
5851
8756
8781
4301
4325
9310
9338
4896
4926
8119
8190
4026
4068
2545
2577
214
233
8217
8249
5387
5479
5351
5391
1440
1479
5346
5363
1535
1549
4903
4948
1383
1425
3705
3749
883
919
4557
4608
1472
1512
3617
3649
878
917
3463
3505
396
448
3701
3738
606
640
7878
7968
4309
4387
3007
3032
185
215
5298
5331
1541
1575
5223
5254
1558
1582
1172
1647
5501
5921
4175
4267
10358
10532
1784
1819
3287
3324
4234
4265
10547
10576
4173
4248
10562
10610
4249
4324
10599
10655
4245
4328
10374
10525
4006
4440
10801
10911
1587
1660
6096
6249
3345
3513
6310
6391
7500
6351
6498
2357
2624
6597
6658
3440
3535
6705
6757
3402
3482
6698
6737
3601
3639
6709
6925
3676
3824
5046
5094
3220
3273
6414
6504
2598
2681
6995
7037
3778
3842
8207
8237
3128
3166
5534
5604
2694
2764
5629
5701
2586
2666
5402
5522
2636
2741
5818
5876
2349
2401
6825
6873
2493
2557
5581
5653
2646
2725
5263
5317
2904
2960
5311
5356
2880
2927
5345
5392
2852
2911
5384
5412
2602
2627
5344
5384
2945
2978
5540
5584
2578
2615
5520
5546
2650
2677
1116
1148
421
445
1158
1196
424
455
1219
1241
272
299
1228
1261
418
451
1225
1258
323
365
1260
1288
370
419
1306
1342
402
437
1443
1473
356
396
1438
1482
412
445
1437
1517
299
332
1348
1408
321
352
1369
1410
406
443
1366
1399
264
298
1649
1676
406
433
1607
1655
247
320
1975
2012
384
421
1987
2033
307
346
2092
2123
388
415
1445
1474
555
581
1539
1574
661
691
1647
1686
497
527
1168
1208
894
943
789
832
623
661
1508
1550
495
528
2441
2532
12984
13154
2383
2478
12975
13110
6820
6958
13727
13900
3669
3744
9404
9477
1068
1131
9231
9275
1491
1534
559
602
5391
5454
1203
1255
5235
5276
1075
1125
5227
5287
1282
1327
5303
5361
1238
1286
4925
4961
1170
1201
4939
5004
1039
1126
5200
5243
1844
1888
4666
4740
2284
2367
4253
4287
3347
3383
5054
5095
1621
1650
5123
5165
1731
1780
5147
5185
1649
1683
4965
4997
1592
1621
4935
4962
1588
1612
5187
5228
1716
1762
5217
5287
1693
1733
6338
6391
2238
2309
5163
5201
1333
1367
4257
4305
3247
3295
5073
5122
1685
1734
4825
4910
1089
1230
5224
5321
5207
5295
5278
5342
5156
5217
5219
5283
5099
5164
5085
5194
5013
5097
8842
8884
2688
2752
7600
5052
5254
5101
5331
9339
9383
2631
2673
9128
9178
4813
4842
8026
8080
4352
4390
8159
8371
4527
4751
8266
8380
2483
2584
9239
9332
946
1046
8239
8323
2639
2748
8888
8963
1413
1514
1845
1883
1357
1393
8809
8844
554
629
2631
2675
1391
1421
2078
2110
1506
1538
2007
2037
1539
1566
2192
2221
1458
1493
2843
2869
1381
1402
0
76
739
801
131
176
410
459
16
58
587
625
3
53
698
743
6
47
633
672
570
611
2148
2247
8038
8097
4496
4533
5687
5793
2865
2965
5764
5820
2933
3007
5646
5707
2841
2901
5062
5141
3989
4019
60
108
515
563
35
71
4950
4977
0
102
4724
4860
8982
9012
4689
4726
6401
6461
4640
4720
7352
7447
4340
4406
6788
6856
4094
4204
7116
7164
3026
3080
5785
5808
1601
1625
5688
5738
1483
1537
5747
5819
1517
1577
218
239
5580
5596
6815
7073
12494
12680
8828
8975
13323
13510
811
915
167
215
915
1007
166
214
1142
1278
116
160
1611
1645
2202
2242
6834
6981
9186
9314
6318
6497
9414
9624
8004
8030
8940
8964
1096
1142
116
322
6618
6868
9205
9466
811
874
214
341
5958
5986
10780
10812
5710
5736
9908
9933
6040
6091
8823
8881
6110
6175
8847
8922
812
875
341
443
5904
5928
4173
4201
4835
4952
8052
8155
4877
5050
8015
8156
4651
5175
7786
8187
1216
1293
9679
9763
2458
2522
9239
9316
3314
3390
8456
8549
709
788
11008
11055
1976
2040
9504
9582
5074
5128
3684
3726
4972
5037
4034
4121
1900
1975
9565
9662
5109
5213
3884
4008
5210
5252
4110
4162
4803
4821
3899
3917
4901
4978
3931
4044
7700
5105
5174
4119
4163
1924
2053
9617
9699
4673
4696
1023
1042
2378
2454
9296
9393
4192
4213
6415
6435
3970
4077
948
1034
4358
4397
6495
6531
5647
5698
9616
9646
5610
5670
10003
10037
7747
7812
5443
5520
7466
7583
5085
5241
7642
7725
5172
5313
6511
6557
242
290
6542
6580
198
234
6579
6627
126
170
6523
6567
340
382
6358
6405
150
201
6485
6541
294
339
5711
5761
0
28
5482
5521
199
238
7674
7768
4906
5031
5358
5392
455
484
5453
5496
444
477
5464
5510
329
384
5802
5838
1109
1147
6137
6187
815
861
6145
6192
873
920
6392
6449
647
710
4973
5044
3695
3814
5046
5095
3474
3523
6565
6607
291
327
4879
4928
3672
3732
4904
4947
3716
3768
7405
7468
860
920
7470
7527
503
588
7460
7533
856
910
6811
6861
422
470
6198
6256
591
650
5360
5395
2548
2584
5430
5464
2431
2467
5364
5405
2476
2515
5896
6002
1790
1858
5029
5059
1592
1640
6513
6538
3407
3452
6542
6612
3338
3466
6592
6665
3404
3443
6569
6616
3427
3515
5375
5416
2834
2873
7428
7460
3939
3969
7426
7490
3501
3559
7394
7509
3419
3495
7455
7500
3580
3620
7491
7534
3559
3598
7507
7552
2282
2310
5335
5366
3019
3051
6427
6499
3323
3363
6315
6347
3208
3242
6214
6344
2417
2473
6208
6306
2713
2816
5417
5531
2919
3051
6175
6239
2744
2841
6153
6196
2857
2901
6164
6206
2831
2869
5340
5418
5057
5155
5754
5834
5215
5288
4774
4845
6218
6289
6440
6619
2618
2776
925
953
10519
10550
4577
4687
6046
6143
2460
2503
12092
12131
6611
6640
198
226
2471
2506
12803
12837
4942
5015
3774
3842
7120
7323
418
467
6406
6447
2695
2737
2716
2750
12004
12040
3696
3718
10978
11001
3761
3786
10997
11021
3587
3615
11022
11054
2054
2088
12806
12843
1653
1698
12648
12689
2554
2592
12702
12745
1566
1601
12607
12645
2115
2158
11961
12004
2455
2490
11820
11860
1760
1788
12835
12858
1891
1937
12883
12927
2121
2156
12369
12392
1485
1512
12732
12755
6435
6530
3267
3335
1548
1599
12519
12555
2129
2152
12766
12796
2594
2627
12084
12110
2944
2973
12240
12268
7800
2355
2390
12640
12667
2557
2587
12094
12129
2530
2554
12337
12362
2637
2677
12979
13012
2831
2883
12444
12481
6312
6352
289
334
2695
2734
12224
12262
2864
2908
12246
12278
2655
2680
12383
12404
2581
2606
12800
12832
1485
1552
13630
13692
2862
2889
7154
7193
690
717
7862
7884
571
601
8192
8220
674
703
8057
8077
786
819
7602
7632
844
875
7624
7655
930
971
7863
7900
973
1009
8006
8045
8689
8724
5083
5119
8701
8725
5419
5448
8463
8479
4914
4933
6788
6918
145
256
1261
1296
8007
8037
5210
5260
2945
2994
2607
2650
12267
12308
8357
8391
5242
5273
8412
8452
4859
4905
8915
8946
5242
5275
8839
8877
5234
5276
741
768
8041
8064
8612
8669
5009
5047
847
890
8015
8047
8889
8923
4959
5002
8652
8694
5198
5227
8879
8921
5383
5436
8341
8387
5107
5168
8709
8747
4914
4964
8575
8611
4894
4937
8724
8779
5339
5382
8423
8455
5210
5243
8618
8650
5076
5110
8986
9018
5106
5126
8810
8827
5290
5313
8933
8956
5454
5470
8835
8859
5150
5177
8698
8733
5024
5070
8605
8635
5125
5150
8657
8686
5260
5285
8457
8490
4869
4897
8862
8902
5058
5096
8665
8688
5118
5144
8589
8625
5238
5271
8786
8828
5040
5109
8542
8572
5234
5270
8898
8928
5310
5346
8516
8538
4906
4928
8872
8891
5467
5504
8926
8964
5172
5213
8962
9010
4974
5015
8761
8796
5213
5248
8526
8570
5161
5200
8512
8544
4880
4906
8810
8844
4948
4989
8690
8723
4987
5019
8424
8465
5040
5077
8606
8639
5181
5217
8646
8678
5299
5334
8382
8424
5075
5104
8403
8437
4915
4963
837
874
7862
7898
8964
8981
5314
5336
8653
8682
4913
4948
8950
8985
5040
5071
8341
8398
5189
5230
8538
8554
4940
4968
8893
8934
5489
5518
8598
8616
5048
5068
8749
8787
5284
5329
2623
2654
12797
12821
6728
6843
430
496
802
834
7747
7784
8774
8816
5150
5181
8854
8889
5163
5215
8824
8861
5307
5351
8661
8681
5166
5186
1751
1779
482
514
7900
635
669
642
704
639
673
324
369
185
215
360
397
626
663
853
889
204
231
943
970
426
451
216
250
418
442
292
323
8466
8492
5216
5249
1535
1585
9174
9217
1557
1592
9298
9335
1718
1744
275
305
2418
2442
8466
8496
1716
1751
8907
8938
1874
1898
8839
8865
2113
2151
8328
8359
642
679
276
307
636
670
189
222
3160
3195
7116
7153
3419
3460
6568
6605
2264
2302
7743
7786
2823
2864
6325
6357
2600
2629
7512
7546
1550
1601
7343
7388
1913
1942
7514
7546
1599
1625
7592
7619
1729
1757
7707
7729
1889
1919
7660
7686
1427
1465
7464
7506
1453
1496
7553
7587
1317
1388
7578
7611
1531
1563
8275
8311
1436
1474
8220
8254
1456
1495
7838
7886
1157
1189
7924
7957
8936
8976
5114
5159
1075
1102
7853
7895
1400
1432
7640
7675
2793
2835
8156
8200
3307
3337
7905
7936
3157
3188
8148
8177
2301
2337
8162
8202
3533
3573
8177
8219
3340
3382
8352
8384
1864
1899
6352
6396
1892
1919
6448
6483
1658
1689
6286
6324
636
666
428
465
2223
2252
6867
6905
2731
2786
6521
6551
2390
2419
6475
6506
1983
2017
6901
6937
2911
2964
6670
6719
3178
3206
6527
6561
2041
2072
7408
7439
8002
8032
9931
9961
7843
7885
10419
10457
0
44
1063
1089
1917
1941
7438
7466
613
669
935
990
5191
5223
7360
7392
3447
3488
8246
8292
8728
8900
10786
10920
1472
1506
8738
8776
1679
1709
7779
7811
8065
8205
10151
10309
8219
8265
10000
10050
2553
2583
8067
8095
1401
1437
8397
8431
7411
7446
9385
9421
5871
5910
8401
8444
6193
6256
8746
8798
2828
2874
5134
5192
2849
2886
5216
5259
2743
2839
5114
5158
2868
2902
5142
5177
2216
2260
7130
7166
3938
3974
5771
5804
5691
5727
6873
6908
2768
2853
5741
5916
2361
2382
6103
6131
3952
3992
5023
5062
4275
4378
5732
5806
4591
4637
5605
5646
4561
4598
5581
5613
4030
4064
5480
5516
1997
2033
4269
4299
2165
2200
4323
4348
4582
4605
7178
7211
2600
2631
6139
6183
9167
9218
11326
11371
3750
3791
6568
6630
8536
8566
294
322
8169
8317
4821
4892
2642
2662
5086
5104
1791
1816
4554
4599
8000
5588
5736
2657
2824
2690
2727
10647
10681
2820
2860
10400
10433
1782
1818
10873
10906
1598
1633
11110
11145
1858
1891
10692
10723
1748
1784
10999
11028
225
269
11552
11587
0
69
11599
11662
9282
9310
4753
4783
3413
3451
1945
1981
3801
3861
1894
1958
3722
3747
2114
2166
3369
3433
2061
2134
2983
3039
1881
1936
3161
3222
1782
1848
3881
3935
2023
2061
3278
3325
1948
1987
3054
3090
1797
1835
3678
3725
2044
2086
3566
3606
2055
2095
3705
3765
1915
1976
1772
1815
10725
10761
3811
3862
2033
2076
3455
3522
2060
2114
3358
3434
1670
1743
7903
7953
526
589
7606
7697
5050
5112
7909
7963
467
525
7559
7708
4693
5007
5688
5731
13815
13861
5803
5854
13773
13823
8518
8728
389
612
4486
4553
2826
2886
1756
1903
6090
6203
8502
8540
1982
2018
8518
8533
2045
2064
6076
6404
12282
12714
7552
7580
11441
11475
8479
8495
11619
11632
9021
9051
11330
11360
141
202
1036
1098
8988
9019
11307
11338
0
397
8704
8983
9478
9581
6550
6618
4334
4483
6271
6446
3888
3951
5938
6031
8588
8687
13577
13676
3126
3148
900
927
3202
3234
807
842
6223
6269
2328
2391
3213
3240
10020
10053
3197
3225
10055
10089
8279
8313
5041
5073
6358
6420
1837
1951
8113
8153
781
813
6264
6344
2331
2385
8314
8352
789
825
7575
7623
518
598
7936
8117
953
1204
911
932
4093
4120
2463
2496
1628
1666
2516
2542
1602
1629
2439
2483
1576
1614
8100
2537
2568
1473
1513
2367
2415
1710
1742
2608
2632
1716
1740
2512
2562
1530
1567
2340
2372
1650
1686
2258
2313
1594
1647
2605
2628
1646
1669
2381
2416
1643
1684
2419
2453
1700
1727
9626
9673
1668
1693
9198
9221
2067
2090
1803
1839
3253
3285
8204
8268
2584
2628
2430
2470
1502
1548
2324
2360
1719
1750
3241
3272
857
891
1473
1572
64
125
1416
1488
73
269
3244
3284
10115
10156
3194
3228
10233
10261
3070
3100
10248
10293
2998
3032
6611
6652
3125
3152
5970
5995
3134
3155
6075
6101
2514
2536
6631
6659
2061
2087
7172
7198
1747
1776
6369
6392
2471
2498
7245
7269
1949
2007
6829
6878
2243
2277
6624
6648
1885
1919
6704
6740
1844
1872
6531
6561
2284
2314
6294
6314
1744
1776
6343
6367
1968
1991
7090
7111
2070
2124
6864
6902
2357
2381
6865
6881
2078
2106
6557
6595
2780
2812
6685
6712
2314
2334
6974
7000
2053
2110
6367
6402
3079
3112
7128
7153
2989
3019
7386
7409
2370
2411
6265
6291
2682
2722
6971
7003
2924
2965
6749
6780
2198
2248
6723
6755
2833
2857
7415
7434
2795
2831
7106
7146
2935
2970
7241
7276
2762
2786
6814
6838
3004
3039
7300
7331
7298
7317
11885
11905
2582
2613
7624
7648
6433
6504
5640
5700
2143
2168
7542
7566
2288
2327
7513
7537
2268
2293
7679
7704
1831
1859
7795
7821
2464
2490
7537
7576
2042
2077
7742
7769
8200
6449
6531
7430
7494
6352
6855
7208
7506
1579
1610
11088
11119
2065
2099
6598
6624
1801
1853
6695
6745
3149
3175
6755
6782
2071
2100
10000
10028
2036
2066
9943
9975
2059
2083
6636
6655
5733
5780
6562
6602
5549
5586
6595
6633
5832
5864
6816
6849
7094
7130
6067
6103
1007
1034
7827
7848
1455
1490
7907
7942
1360
1435
7327
7452
1114
1142
7755
7775
919
947
8020
8045
1368
1398
7930
7960
1302
1329
7720
7750
6353
7201
7406
8158
1047
1067
7762
7779
1718
1752
10707
10741
6989
7039
7624
7688
1615
1653
7673
7701
1012
1142
7111
7191
8300
5329
5407
8188
8260
2531
2574
10051
10082
5251
5352
8217
8310
5256
5329
8083
8149
5388
5492
8117
8222
8198
8551
11793
11903
6755
6784
12010
12042
6647
6685
11926
11967
3279
3320
7863
7898
7523
7563
10724
10775
5439
5517
12759
12847
8429
8549
13102
13237
5319
5434
12192
12332
5480
5593
12643
12784
5646
5869
12720
12881
8583
8786
13252
13429
7754
7818
2137
2196
9342
9618
11083
11323
915
1081
409
450
5431
5660
12845
13011
64
95
1493
1532
530
579
2009
2094
594
625
1810
1837
768
852
4816
4899
417
500
4734
4817
524
554
1785
1845
173
337
4707
4909
92
147
1712
1759
407
432
1201
1242
625
657
1466
1499
550
573
1040
1076
599
624
1218
1268
455
490
1317
1353
623
656
1558
1593
32
60
1706
1755
596
680
4778
4861
953
1003
4518
4577
1145
1213
4526
4574
8771
8822
6741
6790
9605
9644
8090
8126
8901
8935
7502
7539
7430
7476
6365
6417
8771
8794
6272
6303
9276
9330
7846
7892
8498
8530
6463
6494
9084
9130
7303
7347
9266
9305
7652
7688
9650
9700
7815
7851
9566
9596
7882
7916
2967
3020
12772
12826
3166
3213
12411
12459
2934
2978
12649
12689
2357
2428
13090
13170
2901
2956
12866
12925
2673
2707
12536
12569
3220
3285
12174
12220
8400
2836
2887
12832
12891
3207
3256
12539
12588
106
147
11853
11894
2947
2990
12601
12640
3271
3307
12471
12507
152
193
10956
11001
3005
3042
12572
12609
3021
3057
12623
12658
2744
2806
13107
13179
3015
3070
12712
12767
3102
3152
12663
12712
230
266
11169
11204
2735
2772
11909
11954
2800
2847
12957
13004
6339
6864
8178
8659
0
227
12000
12205
5407
5472
2806
2859
4977
5029
10426
10493
5042
5075
10406
10440
612
637
1092
1119
634
668
1257
1284
639
664
1043
1070
552
571
936
969
3410
3438
1159
1195
2241
2272
2550
2588
2805
2855
2005
2046
1993
2028
2507
2538
2256
2282
2516
2543
2302
2339
479
520
3293
3321
1689
1724
2330
2361
1525
1550
2753
2795
2243
2288
2767
2792
1568
1594
2490
2526
1801
1835
2338
2370
2055
2090
3253
3300
1014
1058
2618
2658
1910
1949
2697
2731
2007
2038
3678
3716
950
983
2177
2227
1521
1572
1794
1822
484
524
2327
2357
1091
1116
3267
3307
1612
1643
3072
3106
1748
1775
2024
2067
1224
1267
2780
2825
2188
2238
2871
2910
2023
2062
3081
3133
981
1014
2140
2183
1215
1258
2790
2836
2136
2173
2396
2436
719
763
3602
3632
1090
1125
2805
2843
1600
1626
2151
2178
1979
2016
3978
4019
1503
1550
2408
2457
2510
2558
2499
2535
1848
1875
1784
1816
715
742
3609
3630
1445
1484
2572
2602
1592
1624
2618
2658
2276
2304
1994
2035
839
893
2427
2464
2376
2426
2020
2065
674
708
2668
2703
1771
1806
433
464
1290
1307
3777
3808
1483
1507
2174
2211
555
583
2359
2397
1318
1352
2375
2416
1209
1248
2540
2589
1218
1280
2544
2590
1729
1773
2112
2143
2622
2658
2354
2383
2149
2178
2410
2441
2120
2148
2201
2228
2537
2571
3905
3945
2129
2195
2306
2340
2440
2480
2410
2435
2077
2111
1974
2005
1163
1185
2307
2359
2552
2603
4442
4485
1793
1836
2126
2173
1163
1208
2438
2492
2060
2112
2023
2046
2572
2595
2661
2694
1447
1488
1934
1969
607
639
2703
2752
1435
1465
2345
2394
774
815
2027
2059
1339
1376
2399
2437
2225
2253
8500
2305
2334
1901
1929
4160
4210
1898
1934
2790
2817
1634
1663
635
669
1197
1224
2243
2279
2171
2205
1979
2015
2396
2420
2313
2350
2131
2164
2346
2375
2364
2392
2746
2776
1612
1637
2295
2328
2279
2321
2458
2511
1753
1799
1958
1992
700
743
2406
2432
1277
1316
3856
3887
1067
1093
2179
2214
1969
1998
2287
2314
1336
1355
2359
2392
2319
2354
2756
2778
1490
1520
3962
3999
1810
1845
2628
2666
1243
1277
2470
2501
2619
2640
3211
3248
1609
1646
2644
2694
1855
1906
590
615
1022
1049
2662
2723
1537
1579
2593
2633
1463
1495
2333
2363
2393
2424
2113
2146
655
684
607
636
711
743
2296
2347
535
576
2473
2520
1295
1348
2197
2234
489
533
2779
2819
1520
1556
2883
2925
1502
1539
3274
3322
1756
1801
1989
2024
2441
2482
2601
2637
1556
1588
2187
2225
2489
2518
2256
2295
296
323
2514
2566
2006
2055
4010
4051
1463
1491
4364
4393
1540
1589
1058
1138
5097
5234
2569
2607
1826
1858
3398
3429
1599
1627
3242
3274
1774
1802
80
137
849
921
1029
1106
5222
5350
1697
1743
6522
6569
4935
5010
3563
3648
7904
7924
10574
10593
9120
9179
13600
13657
5253
5292
3024
3062
2003
2036
6809
6837
5023
5092
3736
3800
4923
4966
3754
3802
5089
5127
1931
1968
4525
4566
3228
3260
3451
3521
1854
1918
1660
1692
7278
7321
4532
4575
3317
3359
4650
4684
3087
3126
4517
4553
3127
3162
3518
3562
1916
1970
5223
5267
2195
2234
8600
5160
5198
2225
2262
4258
4295
8642
8686
3388
3395
6386
6393
9090
9108
11308
11326
1893
1927
1028
1069
2017
2059
1064
1104
4259
4296
8693
8738
8617
8626
2286
2294
8665
8676
1349
1360
8267
8314
1637
1701
8679
8691
1350
1361
9016
9037
13233
13254
5436
5471
37
71
4231
4265
1967
2064
1200
1236
8843
8880
5458
5504
72
114
1751
1781
9113
9149
1748
1785
9311
9365
1742
1786
9210
9242
1700
1731
9291
9329
1517
1553
8152
8179
1224
1264
8775
8820
1738
1779
9248
9280
1819
1872
11683
11732
1191
1376
12200
12438
1517
1557
10919
10955
1311
1367
11154
11211
9093
9169
92
160
8198
8383
3797
3872
8266
8465
3994
4171
9006
9086
115
184
9215
9327
191
311
78
119
1167
1208
626
662
1330
1359
715
785
2030
2077
0
27
992
1020
449
481
1911
1940
56
135
1552
1580
18
53
1172
1213
0
47
1924
1985
9299
9433
268
437
9227
9288
655
712
9271
9395
100
212
109
150
1644
1681
600
627
2060
2083
9371
9441
134
230
2453
2489
2312
2359
2751
2770
2334
2356
5266
5295
4987
5014
8929
8961
3940
4022
7090
7165
4577
4670
7072
7098
4357
4383
5977
6022
5334
5373
5926
6025
2376
2449
5990
5998
3150
3158
1660
1686
5405
5434
458
484
4908
4936
263
304
4909
4957
438
456
5372
5389
662
737
5064
5101
517
594
4933
4982
4143
4154
5928
5939
8700
2481
2489
4667
4675
6948
6976
10045
10076
6837
6868
12626
12656
9435
9490
10574
10610
8820
8843
12147
12166
8849
8865
12167
12180
7090
7120
10638
10668
9283
9355
10638
10704
8204
8240
303
341
4893
4921
6278
6307
5351
5423
7373
7457
3998
4229
7235
7610
3673
3699
8620
8651
3578
3619
9055
9097
3937
3986
7895
7955
4252
4328
7286
7345
3883
4051
7588
7878
3881
3923
8401
8443
3010
3041
6580
6604
4266
4290
12650
12674
4801
4942
12892
13029
6247
6268
13102
13125
4235
4353
12731
12850
4904
4938
12792
12822
4718
4749
12799
12829
2873
2916
12758
12805
3150
3191
12607
12648
2713
2765
13196
13252
3030
3067
12410
12445
3060
3098
12342
12382
9321
9348
5361
5388
8366
8636
5756
5838
8480
8605
5887
5974
8624
8755
5830
5931
7701
7752
5054
5131
7711
7771
5369
5446
7626
7637
5026
5037
7593
7652
5120
5236
7621
7633
5038
5050
9601
9630
1421
1443
7486
7517
5265
5294
7512
7635
5227
5330
7439
7491
5250
5285
7964
8018
5981
6039
8407
8441
5496
5533
5510
5543
3163
3193
5569
5619
12543
12587
1198
1305
5141
5204
1296
1635
5170
5347
8395
8428
4978
5013
8800
8315
8342
5519
5551
5036
5066
6768
6797
197
320
9823
9916
336
433
5385
5454
870
951
9378
9481
24
49
6471
6500
1596
1667
6062
6105
8455
8640
4531
4838
2102
2156
12622
12678
1564
1581
6045
6056
708
720
6483
6495
2722
2756
2422
2465
2417
2461
2451
2485
4798
4832
1910
1944
2657
2690
2477
2518
9465
9607
4949
5017
2724
2765
2508
2553
2222
2255
2605
2644
4960
5008
2474
2514
3592
3630
969
1003
3443
3468
1007
1036
3362
3383
1033
1054
3382
3412
1011
1042
2288
2320
2235
2270
3366
3388
993
1017
2406
2436
2199
2222
2321
2358
2204
2241
2699
2736
1834
1871
2713
2747
1745
1778
2594
2630
1510
1544
2730
2763
1707
1740
2694
2722
1494
1521
2243
2285
1539
1581
2698
2738
1260
1302
1987
2016
601
638
2053
2096
539
580
2838
2880
1178
1219
2797
2829
1145
1177
2536
2576
967
1013
2487
2528
889
920
2483
2523
839
880
2459
2516
793
839
2158
2184
387
418
2392
2435
165
209
3201
3221
1039
1076
7572
7591
1412
1437
6139
6206
5394
5469
2659
2691
1704
1733
2058
2091
812
849
2421
2454
1026
1060
5493
5598
5387
5467
2661
2701
1148
1187
2317
2351
906
945
2321
2354
2843
2878
5854
5891
3683
3709
5788
5835
13694
13785
7541
7684
13272
13370
9406
9477
273
385
9461
9495
460
494
9450
9536
317
460
9213
9258
493
556
8900
9238
9269
573
603
9296
9328
518
551
9340
9368
455
486
9359
9382
642
671
9400
9425
562
591
9420
9447
527
557
9437
9463
496
527
9464
9491
510
539
9375
9400
607
637
8954
9001
383
422
8957
9049
421
497
8973
8989
554
572
9031
9149
383
498
9175
9196
454
474
9013
9055
545
582
707
759
12389
12431
7406
7428
1388
1416
5998
6065
13675
13732
6871
7002
13003
13082
4348
4536
4123
4198
3287
3323
712
744
4483
4531
1238
1294
4172
4194
862
890
3462
3506
1058
1097
3345
3399
556
607
4552
4593
944
972
3572
3643
1838
1926
3291
3355
2067
2124
3436
3466
974
1004
5912
5934
12309
12330
7966
8046
5745
5824
7911
7943
5830
5860
8580
8671
759
817
5365
5400
13779
13818
6984
7038
5346
5409
8084
8154
4359
4503
7735
7830
4712
4813
2202
2220
9023
9043
7630
7707
5328
5400
9000
3805
4029
6766
7002
5261
5294
7196
7229
5253
5281
7315
7341
2328
2423
13304
13414
2418
2497
13342
13455
5203
5248
7323
7379
5823
5960
11657
11869
5188
5242
7221
7284
5183
5416
13449
13568
8009
8056
3884
3952
4366
4473
4768
4913
4598
4666
5512
5570
3814
4305
124
732
3772
3842
4485
4528
8362
8393
4488
4518
8415
8439
1192
1213
3890
3946
4548
4602
6836
6878
5198
5264
8660
8697
3206
3246
4395
4455
3966
4014
6904
6932
1132
1146
1110
1279
6468
6725
9485
9521
7780
7816
9567
9596
7982
8010
9662
9727
7915
7972
6094
6167
1434
1510
435
474
10611
10647
637
649
6184
6197
48
56
5801
5811
2030
2072
6215
6251
3008
3031
7461
7485
1586
1629
7517
7554
332
380
8002
8059
2917
2955
8645
8678
3012
3060
8416
8459
2988
3018
10025
10056
1163
1251
12103
12188
864
939
12176
12243
1207
1268
11558
11608
9100
305
553
9879
10074
7325
7359
11455
11479
5228
5402
4605
4760
8444
8505
1759
1812
In [ ]:
plt.imsave()
In [ ]:
im.t
In [317]:
plt.imshow(im)
Out[317]:
<matplotlib.image.AxesImage at 0x7fc7b36b03c8>
In [42]:
def get_building_by_coords(longitude, latitude, swap=True, plot_surroundings=False):
if swap:
longitude, latitude = latitude, longitude
p = Point(longitude, latitude)
assert(p.x>min_lon)
assert(p.x<max_lon)
assert(p.y>bottom_lat)
assert(p.y<top_lat)
# print(p)
n_houses = df.geometry.centroid.distance(p).sort_values().head(20)
building = df.ix[n_houses.index[0]]
gpd.geodataframe.GeoDataFrame([building]).plot()
plt.show()
evroopt = building
print(evroopt.geometry.centroid)
eb = evroopt.geometry.bounds
assert(evroopt.geometry.centroid.x>min_lon)
assert(evroopt.geometry.centroid.x<max_lon)
assert(evroopt.geometry.centroid.y>bottom_lat)
assert(evroopt.geometry.centroid.y<top_lat)
min_x = int((eb[0] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1])
max_x = int((eb[2] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1])
min_y = int((eb[3] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0])
max_y = int((eb[1] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0])
evroopt_image = grodno_small[min_y:max_y, min_x:max_x, :]
plt.imshow(evroopt_image)
plt.show()
x_shift = 50
y_shift = 18
evroopt_image_extended = grodno_small[min_y:max_y+y_shift,min_x:max_x+x_shift,:]
plt.title('extended')
plt.imshow(evroopt_image_extended)
plt.show()
if plot_surroundings:
surr_len = 100
evroopt_image_surr = grodno_small[min_y-surr_len:max_y+surr_len,min_x-surr_len:max_x+surr_len,:]
plt.title('surroundings')
plt.imshow(evroopt_image_surr)
plt.show()
df.ix[n_houses.index[:10]].plot()
plt.show()
tmp_img = evroopt_image.copy()
for i in range(evroopt_image.shape[0]):
for j in range(evroopt_image.shape[1]):
pnt_lat = top_lat + (min_y+i+0.0) / grodno_small.shape[0] * (bottom_lat - top_lat)
pnt_lon = min_lon + (min_x+j+0.0) / grodno_small.shape[1] * (max_lon - min_lon)
if Point(pnt_lon,pnt_lat).within(evroopt.geometry.boundary):
s=1-tmp_img[i, j, :]
tmp_img[i, j, :] = 1-(s*0.2)
# print(pnt_lat, pnt_lon)
plt.imshow(tmp_img)
plt.show()
# get_building_by_coords(23.8321414, 53.6959896)
# get_building_by_coords(23.8471843, 53.652622)
# get_building_by_coords(23.8471312,53.6515075)
# get_building_by_coords(23.849389,53.652911,swap=False)
# get_building_by_coords(53.656687, 23.840150)
# get_building_by_coords(53.710471, 23.845995, plot_surroundings=True)
# get_building_by_coords(53.617367, 23.807851, plot_surroundings=True)
b = df.ix[3564].geometry.centroid
get_building_by_coords(b.y, b.x, plot_surroundings=True)
POINT (23.81269946176409 53.65133210104477)
In [308]:
max_lon
Out[308]:
23.851218359375
In [14]:
grodno_small.shape
Out[14]:
(15872, 9728, 3)
In [101]:
houses
Out[101]:
geometry
id
name
osm_id
type
8334
POLYGON ((23.82932244946139 53.64973914726951,...
8335.0
None
222486218.0
apartments
2505
POLYGON ((23.83033464808861 53.65036309614177,...
2506.0
None
29130902.0
residential
2572
POLYGON ((23.82896227908202 53.65080742082898,...
2573.0
None
29133296.0
residential
2507
POLYGON ((23.83068601746965 53.64991114392265,...
2508.0
None
29130906.0
residential
8791
POLYGON ((23.82890788053044 53.65032629958682,...
8792.0
None
307366257.0
yes
2510
POLYGON ((23.82977314439503 53.64880766636986,...
2511.0
None
29133291.0
residential
8333
POLYGON ((23.82843128551599 53.64969564519205,...
8334.0
None
222485423.0
apartments
1298
POLYGON ((23.83111525473117 53.64953412591791,...
1299.0
None
29126825.0
industrial
8943
POLYGON ((23.83075148013344 53.65109533920301,...
8944.0
None
367453084.0
yes
1282
POLYGON ((23.83121064078929 53.64943706347916,...
1283.0
None
29126824.0
industrial
8343
POLYGON ((23.82816985395598 53.64911184563601,...
8344.0
None
222484700.0
apartments
8330
POLYGON ((23.82821117673865 53.64949565298232,...
8331.0
None
222484763.0
apartments
717
POLYGON ((23.82835065160745 53.6507786709011, ...
718.0
None
29125641.0
public
2504
POLYGON ((23.83133092109983 53.64979094743114,...
2505.0
None
29130900.0
residential
2548
POLYGON ((23.83081962500623 53.64911486312116,...
2549.0
None
29130903.0
apartments
710
POLYGON ((23.82919194322898 53.64834649405725,...
711.0
None
29125627.0
yes
2508
POLYGON ((23.83034705330533 53.64856827921522,...
2509.0
None
29133292.0
apartments
2539
POLYGON ((23.83175856579973 53.64930798217028,...
2540.0
None
29130905.0
apartments
2502
POLYGON ((23.82959963899933 53.64774282939069,...
2503.0
None
29130897.0
dormitory
708
POLYGON ((23.82786165137631 53.64802555098473,...
709.0
None
29125625.0
public
814
POLYGON ((23.82709118683661 53.6502514491915, ...
815.0
None
29125638.0
public
8332
POLYGON ((23.82757138606939 53.6511235862167, ...
8333.0
None
222601039.0
apartments
1189
POLYGON ((23.83204313141249 53.6487938362296, ...
1190.0
None
29126819.0
industrial
2501
POLYGON ((23.83025099669496 53.64763998343875,...
2502.0
None
29130894.0
apartments
8063
POLYGON ((23.83163216669988 53.65036435342725,...
8064.0
Евроопт
172267995.0
retail
1274
POLYGON ((23.83236742724625 53.64870884373144,...
1275.0
None
29126822.0
yes
2530
POLYGON ((23.83243515302391 53.64916079595056,...
2531.0
None
29130898.0
apartments
8763
POLYGON ((23.83254503977452 53.64856023258817,...
8764.0
None
307366254.0
yes
9007
POLYGON ((23.83027513657609 53.6531966823286, ...
9008.0
None
384771930.0
industrial
1460
POLYGON ((23.82893998321958 53.6529486618137, ...
1461.0
Конте СПА
29128675.0
industrial
2503
POLYGON ((23.83207992796741 53.64816192454936,...
2504.0
None
29130896.0
apartments
1249
POLYGON ((23.82675498870032 53.65090096286841,...
1250.0
None
29126826.0
industrial
715
POLYGON ((23.82657125738274 53.64969304680207,...
716.0
None
29125639.0
yes
8888
POLYGON ((23.8300866275737 53.64670389249233, ...
8889.0
None
338683584.0
roof
926
POLYGON ((23.82611653913557 53.64923363468912,...
927.0
None
29125624.0
school
1742
POLYGON ((23.83284829703132 53.64876273936883,...
1743.0
None
29129465.0
apartments
8920
POLYGON ((23.8312122333509 53.64665762438682, ...
8921.0
Ручная автомойка
360763552.0
yes
8037
POLYGON ((23.83016558510161 53.64637448369759,...
8038.0
None
153244646.0
yes
2513
POLYGON ((23.82600665238499 53.65029084413641,...
2514.0
None
29133293.0
apartments
9009
POLYGON ((23.8268371313514 53.64720177754083, ...
9010.0
None
393208096.0
apartments
8036
POLYGON ((23.82954649773322 53.64629133521814,...
8037.0
None
153244653.0
yes
1470
POLYGON ((23.82908934873413 53.65397955208499,...
1471.0
None
29128681.0
public
2427
POLYGON ((23.83336914849454 53.65201223559114,...
2428.0
None
29130680.0
apartments
713
POLYGON ((23.82594797906276 53.65155399694464,...
714.0
None
29125637.0
public
1462
POLYGON ((23.82638224546619 53.6539808931895, ...
1463.0
None
29128676.0
industrial
8947
POLYGON ((23.82781513181371 53.6464296366205, ...
8948.0
None
368011748.0
yes
1469
POLYGON ((23.8294283967175 53.65431968971578, ...
1470.0
None
29128683.0
industrial
2439
POLYGON ((23.83377365914168 53.65114303223206,...
2440.0
None
29130681.0
apartments
699
POLYGON ((23.83167198073994 53.65382691762821,...
700.0
None
29125555.0
public
1192
POLYGON ((23.82586097490781 53.64836099474974,...
1193.0
None
29126829.0
industrial
In [136]:
evroopt = houses.ix[1908]
eb = evroopt.geometry.bounds
# evroop
In [137]:
min_x = int((eb[0] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1])
max_x = int((eb[2] - min_lon)/(max_lon - min_lon) * grodno_small.shape[1])
min_y = int((eb[3] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0])
max_y = int((eb[1] - top_lat)/(bottom_lat - top_lat) * grodno_small.shape[0])
evroopt_image = grodno_small[min_y:max_y, min_x:max_x, :]
plt.imshow(evroopt_image)
Out[137]:
<matplotlib.image.AxesImage at 0x7fc82b1fb0b8>
In [95]:
houses
Out[95]:
geometry
id
name
osm_id
type
8334
POLYGON ((23.82932244946139 53.64973914726951,...
8335.0
None
222486218.0
apartments
2505
POLYGON ((23.83033464808861 53.65036309614177,...
2506.0
None
29130902.0
residential
2572
POLYGON ((23.82896227908202 53.65080742082898,...
2573.0
None
29133296.0
residential
2507
POLYGON ((23.83068601746965 53.64991114392265,...
2508.0
None
29130906.0
residential
8791
POLYGON ((23.82890788053044 53.65032629958682,...
8792.0
None
307366257.0
yes
2510
POLYGON ((23.82977314439503 53.64880766636986,...
2511.0
None
29133291.0
residential
8333
POLYGON ((23.82843128551599 53.64969564519205,...
8334.0
None
222485423.0
apartments
1298
POLYGON ((23.83111525473117 53.64953412591791,...
1299.0
None
29126825.0
industrial
8943
POLYGON ((23.83075148013344 53.65109533920301,...
8944.0
None
367453084.0
yes
1282
POLYGON ((23.83121064078929 53.64943706347916,...
1283.0
None
29126824.0
industrial
8343
POLYGON ((23.82816985395598 53.64911184563601,...
8344.0
None
222484700.0
apartments
8330
POLYGON ((23.82821117673865 53.64949565298232,...
8331.0
None
222484763.0
apartments
717
POLYGON ((23.82835065160745 53.6507786709011, ...
718.0
None
29125641.0
public
2504
POLYGON ((23.83133092109983 53.64979094743114,...
2505.0
None
29130900.0
residential
2548
POLYGON ((23.83081962500623 53.64911486312116,...
2549.0
None
29130903.0
apartments
710
POLYGON ((23.82919194322898 53.64834649405725,...
711.0
None
29125627.0
yes
2508
POLYGON ((23.83034705330533 53.64856827921522,...
2509.0
None
29133292.0
apartments
2539
POLYGON ((23.83175856579973 53.64930798217028,...
2540.0
None
29130905.0
apartments
2502
POLYGON ((23.82959963899933 53.64774282939069,...
2503.0
None
29130897.0
dormitory
708
POLYGON ((23.82786165137631 53.64802555098473,...
709.0
None
29125625.0
public
814
POLYGON ((23.82709118683661 53.6502514491915, ...
815.0
None
29125638.0
public
8332
POLYGON ((23.82757138606939 53.6511235862167, ...
8333.0
None
222601039.0
apartments
1189
POLYGON ((23.83204313141249 53.6487938362296, ...
1190.0
None
29126819.0
industrial
2501
POLYGON ((23.83025099669496 53.64763998343875,...
2502.0
None
29130894.0
apartments
8063
POLYGON ((23.83163216669988 53.65036435342725,...
8064.0
Евроопт
172267995.0
retail
1274
POLYGON ((23.83236742724625 53.64870884373144,...
1275.0
None
29126822.0
yes
2530
POLYGON ((23.83243515302391 53.64916079595056,...
2531.0
None
29130898.0
apartments
8763
POLYGON ((23.83254503977452 53.64856023258817,...
8764.0
None
307366254.0
yes
9007
POLYGON ((23.83027513657609 53.6531966823286, ...
9008.0
None
384771930.0
industrial
1460
POLYGON ((23.82893998321958 53.6529486618137, ...
1461.0
Конте СПА
29128675.0
industrial
2503
POLYGON ((23.83207992796741 53.64816192454936,...
2504.0
None
29130896.0
apartments
1249
POLYGON ((23.82675498870032 53.65090096286841,...
1250.0
None
29126826.0
industrial
715
POLYGON ((23.82657125738274 53.64969304680207,...
716.0
None
29125639.0
yes
8888
POLYGON ((23.8300866275737 53.64670389249233, ...
8889.0
None
338683584.0
roof
926
POLYGON ((23.82611653913557 53.64923363468912,...
927.0
None
29125624.0
school
1742
POLYGON ((23.83284829703132 53.64876273936883,...
1743.0
None
29129465.0
apartments
8920
POLYGON ((23.8312122333509 53.64665762438682, ...
8921.0
Ручная автомойка
360763552.0
yes
8037
POLYGON ((23.83016558510161 53.64637448369759,...
8038.0
None
153244646.0
yes
2513
POLYGON ((23.82600665238499 53.65029084413641,...
2514.0
None
29133293.0
apartments
9009
POLYGON ((23.8268371313514 53.64720177754083, ...
9010.0
None
393208096.0
apartments
8036
POLYGON ((23.82954649773322 53.64629133521814,...
8037.0
None
153244653.0
yes
1470
POLYGON ((23.82908934873413 53.65397955208499,...
1471.0
None
29128681.0
public
2427
POLYGON ((23.83336914849454 53.65201223559114,...
2428.0
None
29130680.0
apartments
713
POLYGON ((23.82594797906276 53.65155399694464,...
714.0
None
29125637.0
public
1462
POLYGON ((23.82638224546619 53.6539808931895, ...
1463.0
None
29128676.0
industrial
8947
POLYGON ((23.82781513181371 53.6464296366205, ...
8948.0
None
368011748.0
yes
1469
POLYGON ((23.8294283967175 53.65431968971578, ...
1470.0
None
29128683.0
industrial
2439
POLYGON ((23.83377365914168 53.65114303223206,...
2440.0
None
29130681.0
apartments
699
POLYGON ((23.83167198073994 53.65382691762821,...
700.0
None
29125555.0
public
1192
POLYGON ((23.82586097490781 53.64836099474974,...
1193.0
None
29126829.0
industrial
In [138]:
houses.ix[1908].geometry
Out[138]:
In [18]:
evroopt.geom
Out[18]:
8063
In [ ]:
P
In [41]:
r = evroopt.geometry.centroid
In [43]:
print(r)
POINT (23.83253836769375 53.65044192152697)
In [ ]:
evroopt=houses.ix[710].ge
In [139]:
tmp_img = evroopt_image.copy()
for i in range(evroopt_image.shape[0]):
for j in range(evroopt_image.shape[1]):
pnt_lat = top_lat + (min_y+i+0.0) / grodno_small.shape[0] * (bottom_lat - top_lat)
pnt_lon = min_lon + (min_x+j+0.0) / grodno_small.shape[1] * (max_lon - min_lon)
if not Point(pnt_lon,pnt_lat).within(evroopt.geometry):
s=1-tmp_img[i, j, :]
tmp_img[i, j, :] = 1-(s*0.2)
# print(pnt_lat, pnt_lon)
plt.imshow(tmp_img)
plt.show()
In [16]:
plt.imshow(evroopt_image)
Out[16]:
<matplotlib.image.AxesImage at 0x7fc82acacf98>
In [27]:
import skimage
In [ ]:
In [21]:
evroopt.geometry.boundary
Out[21]:
shapely.geometry.linestring.LineString
In [26]:
evroopt.geometry.contains()
Out[26]:
'<path fill-rule="evenodd" fill="#66cc99" stroke="#555555" stroke-width="2.0" opacity="0.6" d="M 23.831632166699876,53.65036435342725 L 23.832166429208172,53.65083063870077 L 23.832134326518997,53.65088445051916 L 23.83219274838413,53.65089744246907 L 23.83236005117146,53.65119734696461 L 23.832387124718707,53.65120991981939 L 23.832420819969485,53.65121184765712 L 23.832447222964475,53.65120774052457 L 23.832473458321402,53.65119449711752 L 23.833094138251393,53.65045504561956 L 23.833156751068113,53.65038044668134 L 23.833110734419677,53.65036762236949 L 23.833392366366326,53.65002404815839 L 23.83275022876418,53.649838975736316 L 23.83262927790139,53.64988465710863 L 23.83269298036552,53.64994073204084 L 23.831632166699876,53.65036435342725 z" />'
In [65]:
evroopt.geometry.centroid.bounds
Out[65]:
(23.832538367693754, 53.65044192152697, 23.832538367693754, 53.65044192152697)
In [57]:
min_y, max_y
# min_x, max_x
Out[57]:
(12312, 12748)
In [8]:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.PlateCarree())
ax.stock_img()
# ny_lon, ny_lat = -75, 43
# delhi_lon, delhi_lat = 77.23, 28.61
# plt.plot([ny_lon, delhi_lon], [ny_lat, delhi_lat],
# color='blue', linewidth=2, marker='o',
# transform=ccrs.Geodetic(),
# )
# plt.plot([ny_lon, delhi_lon], [ny_lat, delhi_lat],
# color='gray', linestyle='--',
# transform=ccrs.PlateCarree(),
# )
# plt.text(ny_lon - 3, ny_lat - 12, 'New York',
# horizontalalignment='right',
# transform=ccrs.Geodetic())
# plt.text(delhi_lon + 3, delhi_lat - 12, 'Delhi',
# horizontalalignment='left',
# transform=ccrs.Geodetic())
# plt.show()
In [37]:
p = df.ix[666].geometry
In [81]:
from bokeh.plotting import figure, save
In [38]:
p.boundary
Out[38]:
In [82]:
p = figure(title="My first interactive plot!")
In [83]:
p
Out[83]:
<bokeh.plotting.figure.Figure at 0x7f36c9967f98>
In [85]:
x_coords = [0,1,2,3,4]
y_coords = [5,4,1,2,0]
p.circle(x=x_coords, y=y_coords, size=10, color="red")
outfp = "points.html"
save(obj=p, filename=outfp)
/opt/conda/lib/python3.5/site-packages/bokeh/io.py:430: UserWarning: save() called but no resources were supplied and output_file(...) was never called, defaulting to resources.CDN
warnings.warn("save() called but no resources were supplied and output_file(...) was never called, defaulting to resources.CDN")
/opt/conda/lib/python3.5/site-packages/bokeh/io.py:440: UserWarning: save() called but no title was supplied and output_file(...) was never called, using default title 'Bokeh Plot'
warnings.warn("save() called but no title was supplied and output_file(...) was never called, using default title 'Bokeh Plot'")
Out[85]:
'/tmp/working/points.html'
Content source: azati/nasa2017
Similar notebooks: