arr=[1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0,
1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0,
1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1,
1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,
0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,
1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0,
1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1,
0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,
1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1,
0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1,
1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0,
0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1,
0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0,
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1,
0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1,
1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1,
1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1,
0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1,
1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1,
1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0,
1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1,
0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0,
0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1,
0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0,
1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1,
1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1,
1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0,
0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0,
1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1,
0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0,
1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1,
1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1,
0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1,
1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1,
1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,
1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0,
1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,
1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0,
0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0,
1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1,
0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0,
0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1,
0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0,
1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0,
0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0,
1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1,
1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1,
1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1,
0, 1, 0, 0, 1, 0, 0, 1, 1, 1] #2000 элементов, это list, должно быть 1999-1998-1997 и в начале 2-3
import numpy as np
from time import *
brr=np.random.randint(0,2,1000000)#Более длинный вариант
#print(brr[:20])
lbrr=list(np.random.randint(0,2,1000000))
#print(lbrr[:20])
def _list(a):
b=[i for i in range(1,len(a)-1) if (a[i+1]+a[i-1])*a[i]>=1]
if a[0]+a[1]==2:
b=[0]+b
if a[-1]+a[-2]==2:
b=b+[len(a)-1]
return b
def _nparr(a):
b=np.zeros_like(a)
b[:-1]=a[1:]+a[:-1]
b[1:]=np.maximum(b[1:],b[:-1])
return np.where(b==2)[0]
def test(b):
print(f'\ntest {type(b)} size={len(b)}')
if isinstance(b,np.ndarray):
t2=time()
c=_nparr(b)
t3=time()
print(f'nparray:calc = {1000*(t3-t2):.6f}')
t1=time()
b=b.tolist()
t2=time()
c=_list(b)
t3=time()
print(f'list:convert+calc = {1000*(t2-t1):.6f}+{1000*(t3-t2):.6f}')
...
elif isinstance(b,list):
t2=time()
c=_list(b)
t3=time()
print(f'list:calc = {1000*(t3-t2):.6f}')
t1=time()
b=np.array(b)
t2=time()
c=_nparr(b)
t3=time()
print(f'nparray:conver+calc = {1000*(t2-t1):.6f}+{1000*(t3-t2):.6f}')
...
c=_list(arr)
assert c[:10]==[2, 3, 14, 15, 16, 17, 18, 19, 20, 27]
assert c[-3:]==[1997,1998,1999]
assert _nparr(np.array(arr)).tolist()==c
test(arr)
test(brr)
test(lbrr)
YXJyPVsxLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKICAgICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsCiAgICAgICAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAogICAgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMCwKICAgICAgIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDEsCiAgICAgICAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLAogICAgICAgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwKICAgICAgIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsCiAgICAgICAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAxLCAxLAogICAgICAgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMSwKICAgICAgIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsCiAgICAgICAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAwLAogICAgICAgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMSwKICAgICAgIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsCiAgICAgICAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAxLCAxLAogICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwKICAgICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsCiAgICAgICAxLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAxLAogICAgICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwKICAgICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDEsCiAgICAgICAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLAogICAgICAgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMCwgMCwgMSwgMSwKICAgICAgIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsCiAgICAgICAxLCAxLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLAogICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwKICAgICAgIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsCiAgICAgICAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLAogICAgICAgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwKICAgICAgIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsCiAgICAgICAwLCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAxLAogICAgICAgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwKICAgICAgIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsCiAgICAgICAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLAogICAgICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwKICAgICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsCiAgICAgICAwLCAwLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAxLAogICAgICAgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwKICAgICAgIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsCiAgICAgICAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLAogICAgICAgMSwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMSwgMCwKICAgICAgIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDEsIDEsCiAgICAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAxLCAwLCAxLCAxLCAwLAogICAgICAgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMSwKICAgICAgIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsCiAgICAgICAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLAogICAgICAgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwKICAgICAgIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDEsIDEsCiAgICAgICAxLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAxLAogICAgICAgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMSwKICAgICAgIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDAsCiAgICAgICAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLAogICAgICAgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwKICAgICAgIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsCiAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLAogICAgICAgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwKICAgICAgIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDEsIDAsCiAgICAgICAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAxLAogICAgICAgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwKICAgICAgIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDEsCiAgICAgICAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAxLCAxLAogICAgICAgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwKICAgICAgIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsCiAgICAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAxLAogICAgICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwKICAgICAgIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDAsCiAgICAgICAxLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLAogICAgICAgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwKICAgICAgIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsCiAgICAgICAwLCAwLCAxLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLAogICAgICAgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwKICAgICAgIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDAsCiAgICAgICAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLAogICAgICAgMCwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMSwgMCwKICAgICAgIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsCiAgICAgICAxLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLAogICAgICAgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMSwKICAgICAgIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsCiAgICAgICAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLAogICAgICAgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwKICAgICAgIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDEsCiAgICAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAwLAogICAgICAgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKICAgICAgIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsCiAgICAgICAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAwLAogICAgICAgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwKICAgICAgIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsCiAgICAgICAwLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLAogICAgICAgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwKICAgICAgIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsCiAgICAgICAxLCAxLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAxLAogICAgICAgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwKICAgICAgIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDEsIDFdICMyMDAwINGN0LvQtdC80LXQvdGC0L7Qsiwg0Y3RgtC+IGxpc3QsINC00L7Qu9C20L3QviDQsdGL0YLRjCAxOTk5LTE5OTgtMTk5NyDQuCDQsiDQvdCw0YfQsNC70LUgMi0zCmltcG9ydCBudW1weSBhcyBucApmcm9tIHRpbWUgaW1wb3J0ICoKYnJyPW5wLnJhbmRvbS5yYW5kaW50KDAsMiwxMDAwMDAwKSPQkdC+0LvQtdC1INC00LvQuNC90L3Ri9C5INCy0LDRgNC40LDQvdGCCiNwcmludChicnJbOjIwXSkKbGJycj1saXN0KG5wLnJhbmRvbS5yYW5kaW50KDAsMiwxMDAwMDAwKSkKI3ByaW50KGxicnJbOjIwXSkKCmRlZiBfbGlzdChhKToKICAgIGI9W2kgZm9yIGkgaW4gcmFuZ2UoMSxsZW4oYSktMSkgaWYgKGFbaSsxXSthW2ktMV0pKmFbaV0+PTFdCiAgICBpZiBhWzBdK2FbMV09PTI6CiAgICAgICAgYj1bMF0rYgogICAgaWYgYVstMV0rYVstMl09PTI6CiAgICAgICAgYj1iK1tsZW4oYSktMV0KICAgIHJldHVybiBiCgpkZWYgX25wYXJyKGEpOgogICAgYj1ucC56ZXJvc19saWtlKGEpCiAgICBiWzotMV09YVsxOl0rYVs6LTFdCiAgICBiWzE6XT1ucC5tYXhpbXVtKGJbMTpdLGJbOi0xXSkKICAgIHJldHVybiBucC53aGVyZShiPT0yKVswXQoKICAgIApkZWYgdGVzdChiKToKICAgIHByaW50KGYnXG50ZXN0IHt0eXBlKGIpfSBzaXplPXtsZW4oYil9JykKICAgIGlmIGlzaW5zdGFuY2UoYixucC5uZGFycmF5KTogIAogICAgICAgIHQyPXRpbWUoKQogICAgICAgIGM9X25wYXJyKGIpCiAgICAgICAgdDM9dGltZSgpCiAgICAgICAgcHJpbnQoZiducGFycmF5OmNhbGMgPSB7MTAwMCoodDMtdDIpOi42Zn0nKQogICAgICAgIAogICAgICAgIHQxPXRpbWUoKQogICAgICAgIGI9Yi50b2xpc3QoKSAgICAgCiAgICAgICAgdDI9dGltZSgpCiAgICAgICAgYz1fbGlzdChiKQogICAgICAgIHQzPXRpbWUoKQogICAgICAgIHByaW50KGYnbGlzdDpjb252ZXJ0K2NhbGMgPSB7MTAwMCoodDItdDEpOi42Zn0rezEwMDAqKHQzLXQyKTouNmZ9JykKICAgICAgICAuLi4KICAgIGVsaWYgaXNpbnN0YW5jZShiLGxpc3QpOgogICAgICAgIHQyPXRpbWUoKQogICAgICAgIGM9X2xpc3QoYikKICAgICAgICB0Mz10aW1lKCkKICAgICAgICBwcmludChmJ2xpc3Q6Y2FsYyA9IHsxMDAwKih0My10Mik6LjZmfScpCiAgICAgICAgdDE9dGltZSgpCiAgICAgICAgYj1ucC5hcnJheShiKSAKICAgICAgICB0Mj10aW1lKCkKICAgICAgICBjPV9ucGFycihiKQogICAgICAgIHQzPXRpbWUoKQogICAgICAgIHByaW50KGYnbnBhcnJheTpjb252ZXIrY2FsYyA9IHsxMDAwKih0Mi10MSk6LjZmfSt7MTAwMCoodDMtdDIpOi42Zn0nKQogICAgICAgIC4uLgoKYz1fbGlzdChhcnIpCmFzc2VydCBjWzoxMF09PVsyLCAzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjddCmFzc2VydCBjWy0zOl09PVsxOTk3LDE5OTgsMTk5OV0KYXNzZXJ0IF9ucGFycihucC5hcnJheShhcnIpKS50b2xpc3QoKT09YwoKdGVzdChhcnIpCnRlc3QoYnJyKQp0ZXN0KGxicnIpCgo=