def sieve(N):
n = int(N**0.5)
prime = [True]*2*(N//6)
for i in range(6,n+1,6):
if prime[2*(i//6-1)]:
k = ((i-1)**2//6)*6
incr1 = 6*((i-1)-(int((i-1)/3)+1))
incr2 = 6*(int((i-1)/3)+1)
for j in range((i-1)**2,N,(i-1)):
if j==k-1:
prime[2*(j//6)]=False
k+=incr1
elif j==k+1:
prime[2*(j//6)-1]=False
k+=incr2
if prime[2*(i//6-1)+1]:
k = ((i+1)**2//6)*6
incr1 = 6*(int(i/3))
incr2 = 6*((i+1)-int(i/3))
for j in range((i+1)**2,N,(i+1)):
if j==k-1:
prime[2*(j//6)]=False
k+=incr1
elif j==k+1:
prime[2*(j//6)-1]=False
k+=incr2
P = [2,3]
for j in range(len(prime)):
if prime[j]:
if j & 1 == 1:
P.append(6*(j//2+1)+1)
else:
P.append(6*(j//2+1)-1)
return P
ZGVmIHNpZXZlKE4pOgogICAgbiA9IGludChOKiowLjUpCiAgICBwcmltZSA9IFtUcnVlXSoyKihOLy82KQogICAgZm9yIGkgaW4gcmFuZ2UoNixuKzEsNik6CiAgICAgICAgaWYgcHJpbWVbMiooaS8vNi0xKV06CiAgICAgICAgICAgIGsgPSAoKGktMSkqKjIvLzYpKjYKICAgICAgICAgICAgaW5jcjEgPSA2KigoaS0xKS0oaW50KChpLTEpLzMpKzEpKQogICAgICAgICAgICBpbmNyMiA9IDYqKGludCgoaS0xKS8zKSsxKQogICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgoaS0xKSoqMixOLChpLTEpKToKICAgICAgICAgICAgICAgIGlmIGo9PWstMToKICAgICAgICAgICAgICAgICAgICBwcmltZVsyKihqLy82KV09RmFsc2UKICAgICAgICAgICAgICAgICAgICBrKz1pbmNyMQogICAgICAgICAgICAgICAgZWxpZiBqPT1rKzE6CiAgICAgICAgICAgICAgICAgICAgcHJpbWVbMiooai8vNiktMV09RmFsc2UKICAgICAgICAgICAgICAgICAgICBrKz1pbmNyMgogICAgICAgIGlmIHByaW1lWzIqKGkvLzYtMSkrMV06CiAgICAgICAgICAgIGsgPSAoKGkrMSkqKjIvLzYpKjYKICAgICAgICAgICAgaW5jcjEgPSA2KihpbnQoaS8zKSkKICAgICAgICAgICAgaW5jcjIgPSA2KigoaSsxKS1pbnQoaS8zKSkKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoKGkrMSkqKjIsTiwoaSsxKSk6CiAgICAgICAgICAgICAgICBpZiBqPT1rLTE6CiAgICAgICAgICAgICAgICAgICAgcHJpbWVbMiooai8vNildPUZhbHNlCiAgICAgICAgICAgICAgICAgICAgays9aW5jcjEKICAgICAgICAgICAgICAgIGVsaWYgaj09aysxOgogICAgICAgICAgICAgICAgICAgIHByaW1lWzIqKGovLzYpLTFdPUZhbHNlCiAgICAgICAgICAgICAgICAgICAgays9aW5jcjIKICAgIFAgPSBbMiwzXQogICAgZm9yIGogaW4gcmFuZ2UobGVuKHByaW1lKSk6CiAgICAgICAgaWYgcHJpbWVbal06CiAgICAgICAgICAgIGlmIGogJiAxID09IDE6CiAgICAgICAgICAgICAgICBQLmFwcGVuZCg2KihqLy8yKzEpKzEpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBQLmFwcGVuZCg2KihqLy8yKzEpLTEpICAgICAKICAgIHJldHVybiBQ