⬅ HOME
DownUnderCTF 2020 Writeups

I helped out with organising and writing (mostly crypto) challenges for DownUnderCTF. Here are the writeups for my challenges! Congrats to the top teams and thanks to everyone for playing :)

rot-i (100pts) - 447 solves

ROT13 is boring!

Ypw'zj zwufpp hwu txadjkcq dtbtyu kqkwxrbvu! Mbz cjzg kv IAJBO{ndldie_al_aqk_jjrnsxee}. Xzi utj gnn olkd qgq ftk ykaqe uei mbz ocrt qi ynlu, etrm mff'n wij bf wlny mjcj :).

Solution

The title hints at the well known Caesar Shift Cipher. If we try to ROT13 or use substitution cipher solvers on the ciphertext, we don't get any useful results. There are a couple things that we can observe to help us proceed. The first is that the title is called "rot-i". This hints at each element being rotated by a different amount. Punctuation has also been preserved, so we can use this to guess what the plaintext might be. Specifically, the first word looks like it might say "You're" or "You've", and indeed if we look a bit closer, Y = Y + 0, p = o + 1, w = u + 2, and so on... It looks like each letter is shifted by i positions, where i is its index in the message.

Solve script:

from string import ascii_lowercase, ascii_uppercase

c = "Ypw'zj zwufpp hwu txadjkcq dtbtyu kqkwxrbvu! Mbz cjzg kv IAJBO{ndldie_al_aqk_jjrnsxee}. Xzi utj gnn olkd qgq ftk ykaqe uei mbz ocrt qi ynlu, etrm mff'n wij bf wlny mjcj :)."

def decrypt(ct):
    out = ''
    for i,c in enumerate(ct):
        if c in ascii_lowercase:
            alph = ascii_lowercase
        elif c in ascii_uppercase:
            alph = ascii_uppercase
        else:
            out += c
            continue
        out += alph[(alph.index(c) - i) % len(alph)]
    return out

print(decrypt(c))

Which gives:

You've solved the beginner crypto challenge! The flag is DUCTF{crypto_is_fun_kjqlptzy}. Now get out some pen and paper for the rest of them, they won't all be this easy :).

Alternative Solution (no scripting)

The challenge can also be solved using only online tools, or just pen and paper. We can notice a part in the ciphertext that looks similar to the flag format DUCTF{...}. We can ignore the rest of the ciphertext and try rotating this to reduce the work. Notice that D has been shifted 5 letters up to turn into I. U has been shifted 6 letters up (and wrapped around the alphabet) to get to A. C has been shifted 7 letters up to get to J, and so on. Shifting in the opposite direction reveals the flag.


babyrsa (200pts) - 144 solves

This is just RSA for babies!

babyrsa.py:

from Crypto.Util.number import bytes_to_long, getPrime

flag = open('flag.txt', 'rb').read().strip()

p, q = getPrime(1024), getPrime(1024)
n = p*q
e = 0x10001

s = pow(557*p - 127*q, n - p - q, n)

c = pow(bytes_to_long(flag), e, n)

print(f'n = {n}')
print(f's = {s}')
print(f'c = {c}')

output.txt:

n = 19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287
s = 3737620488571314497417090205346622993399153545806108327860889306394326129600175543006901543011761797780057015381834670602598536525041405700999041351402341132165944655025231947620944792759658373970849932332556577226700342906965939940429619291540238435218958655907376220308160747457826709661045146370045811481759205791264522144828795638865497066922857401596416747229446467493237762035398880278951440472613839314827303657990772981353235597563642315346949041540358444800649606802434227470946957679458305736479634459353072326033223392515898946323827442647800803732869832414039987483103532294736136051838693397106408367097
c = 7000985606009752754441861235720582603834733127613290649448336518379922443691108836896703766316713029530466877153379023499681743990770084864966350162010821232666205770785101148479008355351759336287346355856788865821108805833681682634789677829987433936120195058542722765744907964994170091794684838166789470509159170062184723590372521926736663314174035152108646055156814533872908850156061945944033275433799625360972646646526892622394837096683592886825828549172814967424419459087181683325453243145295797505798955661717556202215878246001989162198550055315405304235478244266317677075034414773911739900576226293775140327580

Solution

n is too large to be factorised directly, but the given value s gives us enough information needed to compute p and q.

We'll use Euler's theorem, which states that

aφ(n)1(modn)a^{\varphi(n)} \equiv 1 \pmod n

for all positive coprime a and n. Notice that

φ(n)=(p1)(q1)=pqpq+1=npq+1\begin{aligned} \varphi(n) &= (p-1)(q-1) \\ &= pq - p - q + 1 \\ &= n - p - q + 1 \end{aligned}

Thus, φ(n)1=npq\varphi(n) - 1 = n - p - q which is the exponent used in calculating s.

We can rewrite s as

s(557p127q)φ(n)1(modn)(557p127q)φ(n)(557p127q)1(modn)(557p127q)1(modn)\begin{aligned} s &\equiv (557p - 127q)^{\varphi(n) - 1} \pmod n \\ &\equiv (557p - 127q)^{\varphi(n)} (557p - 127q)^{-1} \pmod n \\ &\equiv (557p - 127q)^{-1} \pmod n \end{aligned}

where the last line follows from Euler's theorem.

So taking the modular inverse of s modulo n gives us the value of 557p - 127q. We can use this to compute p.

Let Ss1557p127q(modn)S \equiv s^{-1} \equiv 557p - 127q \pmod n

Construct the univariate polynomial in the ring of integers:

poly=(127x+p)(557xq)=127557x2+557px127qxpq=127557x2+(557p127q)xpq=127557x2+Sxn\begin{aligned} poly &= (127x + p)(557x - q) \\ &= 127\cdot 557x^2 + 557px - 127qx - pq \\ &= 127\cdot 557x^2 + (557p - 127q)x - pq \\ &= 127\cdot 557x^2 + Sx - n \end{aligned}

where all of the coefficients are known values. Factorising this polynomial (which can be done efficiently) will give us (127x + p)(557x - q) from which we can read off the values of p and q.

With the values of p and q, we can proceed with standard textbook RSA (see Wikipedia for a detailed explaination).

Solve script:

n = 19574201286059123715221634877085223155972629451020572575626246458715199192950082143183900970133840359007922584516900405154928253156404028820410452946729670930374022025730036806358075325420793866358986719444785030579682635785758091517397518826225327945861556948820837789390500920096562699893770094581497500786817915616026940285194220703907757879335069896978124429681515117633335502362832425521219599726902327020044791308869970455616185847823063474157292399830070541968662959133724209945293515201291844650765335146840662879479678554559446535460674863857818111377905454946004143554616401168150446865964806314366426743287
s = 3737620488571314497417090205346622993399153545806108327860889306394326129600175543006901543011761797780057015381834670602598536525041405700999041351402341132165944655025231947620944792759658373970849932332556577226700342906965939940429619291540238435218958655907376220308160747457826709661045146370045811481759205791264522144828795638865497066922857401596416747229446467493237762035398880278951440472613839314827303657990772981353235597563642315346949041540358444800649606802434227470946957679458305736479634459353072326033223392515898946323827442647800803732869832414039987483103532294736136051838693397106408367097
c = 7000985606009752754441861235720582603834733127613290649448336518379922443691108836896703766316713029530466877153379023499681743990770084864966350162010821232666205770785101148479008355351759336287346355856788865821108805833681682634789677829987433936120195058542722765744907964994170091794684838166789470509159170062184723590372521926736663314174035152108646055156814533872908850156061945944033275433799625360972646646526892622394837096683592886825828549172814967424419459087181683325453243145295797505798955661717556202215878246001989162198550055315405304235478244266317677075034414773911739900576226293775140327580

from Crypto.Util.number import long_to_bytes

R.<x> = ZZ[]
poly = 557*127*x^2 + inverse_mod(s, n)*x - n
p = poly.factor()[0][0][0]
q = n//p
e = 0x10001
d = inverse_mod(e, (p-1)*(q-1))
m = pow(c, d, n)
flag = long_to_bytes(m)
print(flag.decode())

Flag: DUCTF{e4sy_RSA_ch4ll_t0_g3t_st4rt3d}


Extra Cool Block Chaining (422pts) - 52 solves

Everyone knows ECB is broken because it lacks diffusion. That's why I've come up with my own variant that uses IVs and chaining and all that cool stuff! It solves all the problems ECB had... I think

nc chal.duc.tf 30201

server.py:

#!/usr/bin/env python3
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Util.strxor import strxor
from os import urandom

flag = open('./flag.txt', 'rb').read().strip()
KEY = urandom(16)
IV = urandom(16)

def encrypt(msg, key, iv):
    msg = pad(msg, 16)
    blocks = [msg[i:i+16] for i in range(0, len(msg), 16)]
    out = b''
    for i, block in enumerate(blocks):
        cipher = AES.new(key, AES.MODE_ECB)
        enc = cipher.encrypt(block)
        if i > 0:
            enc = strxor(enc, out[-16:])
        out += enc
    return strxor(out, iv*(i+1))

def decrypt(ct, key, iv):
    blocks = [ct[i:i+16] for i in range(0, len(ct), 16)]
    out = b''
    for i, block in enumerate(blocks):
        dec = strxor(block, iv)
        if i > 0:
            dec = strxor(dec, ct[(i-1)*16:i*16])
        cipher = AES.new(key, AES.MODE_ECB)
        dec = cipher.decrypt(dec)
        out += dec
    return out

flag_enc = encrypt(flag, KEY, IV).hex()

print('Welcome! You get 1 block of encryption and 1 block of decryption.')
print('Here is the ciphertext for some message you might like to read:', flag_enc)

try:
    pt = bytes.fromhex(input('Enter plaintext to encrypt (hex): '))
    pt = pt[:16] # only allow one block of encryption
    enc = encrypt(pt, KEY, IV)
    print(enc.hex())
except:
    print('Invalid plaintext! :(')
    exit()

try:
    ct = bytes.fromhex(input('Enter ciphertext to decrypt (hex): '))
    ct = ct[:16] # only allow one block of decryption
    dec = decrypt(ct, KEY, IV)
    print(dec.hex())
except:
    print('Invalid ciphertext! :(')
    exit()

print('Goodbye! :)')

Solution

The server implements some weird mode of operation that looks something like this:

encryption

encryption.svg

decryption

decryption.svg

Note that the decryption function is actually broken, I made an implementation mistake (forgot an XOR, oops) and didn't realise until someone pointed it out during the CTF. This doesn't affect the solution or the challenge at all though, since you are only given the first block of ciphertext, and even with the implementation error, the first block of ciphertext decrypts properly. This is what it should have looked like:

decryption-fixed.svg

We can easily recover the first 16 bytes of the flag by asking for the decryption of the first 16 bytes of the ciphertext we receive. We can't do the same for the rest of the blocks though.

We quickly notice that if we can recover the IV, we can decrypt any block we want by asking for the decryption of C_{i-1} xor IV xor C_i.

We turn to the encryption part of the service to see how we can recover the IV. Notice how after a plaintext block passes through the block cipher, it is XORed with the encryption of the previous block (before the IV is applied). So, if we could somehow get the encryption of two identical blocks, the second block would be 0 after the "chaining" part (XORing with the previous encrypted plaintext block), and so after XORing with the IV, the result would be just the IV.

But we're only allowed to send one block of plaintext to be encrypted! Luckily, the server pads our message before encrypting it, as it is necessary for the message to be a multiple of the block length. PCKS#7 padding is being used, so if we send a full block of 16s (\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10), it will be padded out to two full blocks of 16s. This gives us our two identical plaintext blocks! It follows that the IV will be given to us in the 2nd ciphertext block.

We can then recover the rest of the flag as described above.

Solve script:

from pwn import remote, xor
from Crypto.Util.Padding import unpad

def connect():
    return remote('0.0.0.0', 1337)

def recv(conn):
    o = conn.recvline().decode()
    print('[<]', o)
    return o

def send(conn, data):
    print('[>]', data)
    conn.sendline(data)

flag = b''

### retrieve first 16 bytes of the flag
conn = connect()
recv(conn)
ciphertext = recv(conn).split('read: ')[1]
num_blocks = len(ciphertext)//32
send(conn, 'aa'*16)
recv(conn)
send(conn, ciphertext[:32])
flag += bytes.fromhex(recv(conn).split(': ')[1])
conn.close()

### retrieve rest of the flag
for i in range(1, num_blocks):
    conn = connect()
    recv(conn)
    ciphertext = bytes.fromhex(recv(conn).split('read: ')[1])
    # recover IV by sending b'\x10'*16
    send(conn, (b'\x10'*16).hex())
    IV = bytes.fromhex(recv(conn).strip()[-32:])
    to_decrypt = xor(xor(IV, ciphertext[(i-1)*16:i*16]), ciphertext[i*16:(i+1)*16])
    send(conn, to_decrypt.hex())
    flag += bytes.fromhex(recv(conn).split(': ')[1])
    conn.close()

print('[*]', unpad(flag, 16).decode())

Flag: DUCTF{4dD1nG_r4nd0M_4rR0ws_4ND_x0RS_h3r3_4nD_th3R3_U5u4Lly_H3lps_Bu7_n0T_7H1s_t1m3_i7_s33ms!!}


Hex Shift Cipher (445pts) - 44 solves

People say shift ciphers aren't secure. I'm here to prove them wrong!

from random import shuffle
from secret import secret_msg

ALPHABET = '0123456789abcdef'

class Cipher:
    def __init__(self, key):
        self.key = key
        self.n = len(self.key)
        self.s = 7

    def add(self, num1, num2):
        res = 0
        for i in range(4):
            res += (((num1 & 1) + (num2 & 1)) % 2) << i
            num1 >>= 1
            num2 >>= 1
        return res

    def encrypt(self, msg):
        key = self.key
        s = self.s
        ciphertext = ''
        for m_i in msg:
            c_i = key[self.add(key.index(m_i), s)]
            ciphertext += c_i
            s = key.index(m_i)
        return ciphertext

plaintext = b'The secret message is:'.hex() + secret_msg.hex()

key = list(ALPHABET)
shuffle(key)

cipher = Cipher(key)
ciphertext = cipher.encrypt(plaintext)
print(ciphertext)

# output:
# 85677bc8302bb20f3be728f99be0002ee88bc8fdc045b80e1dd22bc8fcc0034dd809e8f77023fbc83cd02ec8fbb11cc02cdbb62837677bc8f2277eeaaaabb1188bc998087bef3bcf40683cd02eef48f44aaee805b8045453a546815639e6592c173e4994e044a9084ea4000049e1e7e9873fc90ab9e1d4437fc9836aa80423cc2198882a

Solution

This challenge is inspired by this cipher https://www.cryptogram.org/downloads/aca.info/ciphers/Condi.pdf

"Easy" solution: Set up the constraints and feed it to a SAT solver (I totally saw this coming...). There are many ways to go about this challenge. See below for an alternative and fun, but definitely over-engineered and unneccessarily complicated linear algebra approach. If the group operation was something more complicated than just XOR, this approach might've been better.

Cipher

The key, KK, is just a permutation of the alphabet, where the alphabet is just the hexadecimal characters.

The size of the key space is 16! which is infeasible to bruteforce, but we can recover the key(s) given enough plaintext.

Notation:

  • Let KiK_i denote the letter at index ii of the key.
  • Let K(m)K(m) denote the index of the character mm in the key.

For example if the key is b4536f8d0a729ce1, then K0K_0 is 'b' and K(e)K(\texttt{e}) is 14.

Notice that K(Ki)=iK(K_i) = i and KK(i)=iK_{K(i)} = i.

Addition:

The peculiar add method operates on 4 bit numbers and adds the numbers bit wise modulo 2. This is just XOR. Recognising this as addition in GF(16)\mathrm{GF}(16) which will come in handy later on. We'll denote this addition operation by \star.

Note that xx=0x \star x = 0, that is, each element is its own inverse.

Encryption:

Let mm be the message we want to encrypt. Then, let

ei={K(mi)si=0K(mi)K(mi1)i>0e_i = \begin{aligned} \begin{cases} K(m_i) \star s \quad & i = 0 \\ K(m_i) \star K(m_{i-1}) \quad & i > 0 \end{cases} \end{aligned}

Then ci=Keic_i = K_{e_i}

Decryption:

This isn't given in the challenge, but it's easy enough to figure out.

Let

di={K(ci)si=0K(ci)K(mi1)i>0d_i = \begin{aligned} \begin{cases} K(c_i) \star s \quad & i = 0 \\ K(c_i) \star K(m_{i-1}) \quad & i > 0 \end{cases} \end{aligned}

Alternatively, using the identity K(Ki)=iK(K_i) = i, we get

di={eisi=0eiK(mi1)i>0d_i = \begin{aligned} \begin{cases} e_i \star s \quad & i = 0 \\ e_i \star K(m_{i-1}) \quad & i > 0 \end{cases} \end{aligned}

Then mi=Kdim_i = K_{d_i}

Proof of correctness:

For i=0i = 0

d0=e0s=K(m0)ss=K(m0)\begin{aligned} d_0 &= e_0 \star s \\ &= K(m_0) \star s \star s \\ &= K(m_0) \end{aligned}

For i>0i > 0 the decryption gives

di=eiK(mi1)=K(mi)K(mi1)K(mi1)=K(mi)\begin{aligned} d_i &= e_i \star K(m_{i-1}) \\ &= K(m_i) \star K(m_{i-1}) \star K(m_{i-1}) \\ &= K(m_i) \end{aligned}

In both cases, Kdi=KK(mi)=miK_{d_i} = K_{K(m_i)} = m_i.

Analysis

Our goal will be to set up constraints on the key. This should be easy since we're given some plaintext, and looking at the encryption/decryption algorithms, we can see that the plaintext and ciphertext are very closely related.

Let PiP_i be the iith character of known plaintext, and let CiC_i be the corresponding ciphertext character. Then

K(Ci)=K(Pi)K(Pi1)K(C_i) = K(P_i) \star K(P_{i-1})

so

K(Ci)K(Pi1)K(Pi)=0K(C_i) \star K(P_{i-1}) \star K(P_i) = 0

We'll use this to set up a system of linear equations that we can easily solve.

Let ei\mathbf{e}_i (defined for i>0i > 0) be a vector of size 16 whose entries are in GF(16)\mathrm{GF}(16). Set all entries to 00, then add 11 at the positions given by CiC_i, Pi1P_{i-1} and PiP_i.

For example, if C1=0,P0=a,P1=3C_1 = \texttt{0}, P_0 = \texttt{a}, P_1 = \texttt{3}, then e1=(1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0)\mathbf{e}_1 = (1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0).

Let k=(k1,k2,,k16)\mathbf{k} = (k_1, k_2, \ldots, k_{16}) be a vector that represents the key. In particular kik_i represents the position in the key of the iith character in the alphabet.

For example, if the key is b4536f8d0a729ce1, then k=(8,15,11,3,1,2,4,10,6,12,9,0,13,7,14,5)\mathbf{k} = (8,15,11,3,1,2,4,10,6,12,9,0,13,7,14,5).

Now let MM be the matrix whose rows are the ei\mathbf{e}_i. Then Mk=0M \cdot \mathbf{k} = 0. So to solve for k\mathbf{k}, we search vectors in the null space of MM. There will potentially be a lot of vectors that satisfy these constraints. Since we're given more than 16 pairs of plaintext/ciphertext characters, we can try each set of 16 to find one with a low enough nullity to bruteforce.

from os import urandom
from random import choices, shuffle
from itertools import product
from tqdm import tqdm

ALPHABET = '0123456789abcdef'
N = len(ALPHABET)

plaintext = b'The secret message is:'.hex()
ciphertext = '85677bc8302bb20f3be728f99be0002ee88bc8fdc045b80e1dd22bc8fcc0034dd809e8f77023fbc83cd02ec8fbb11cc02cdbb62837677bc8f2277eeaaaabb1188bc998087bef3bcf40683cd02eef48f44aaee805b8045453a546815639e6592c173e4994e044a9084ea4000049e1e7e9873fc90ab9e1d4437fc9836aa80423cc2198882a'

class Cipher:
    def __init__(self, key):
        self.key = key
        self.n = len(self.key)
        self.s = 7

    def add(self, num1, num2):
        res = 0
        for i in range(4):
            res += (((num1 & 1) + (num2 & 1)) % 2) << i
            num1 >>= 1
            num2 >>= 1
        return res

    def encrypt(self, msg):
        key = self.key
        s = self.s
        ciphertext = ''
        for m_i in msg:
            c_i = key[self.add(key.index(m_i), s)]
            ciphertext += c_i
            s = key.index(m_i)
        return ciphertext

    def decrypt(self, ciphertext):
        key = self.key
        s = self.s
        plaintext = ''
        for c_i in ciphertext:
            m_i = key[self.add(key.index(c_i), s)]
            plaintext += m_i
            s = key.index(m_i)
        return plaintext

#### SOLUTION

def num_to_gf16_poly(num):
    b = []
    for _ in range(4):
        b.append(num & 1)
        num >>= 1
    return GF(16)(b)

def gf16_to_num(poly):
    return poly.integer_representation()

def get_eqn_matrix(known_pt, known_ct, n=len(ALPHABET)):
    M = []

    L = known_ct[1:]
    S = known_pt
    R = known_pt[1:]

    for l,s,r in zip(L, S, R):
        eqn = [0]*n
        eqn[ALPHABET.index(l)] += num_to_gf16_poly(1) 
        eqn[ALPHABET.index(s)] += num_to_gf16_poly(1)
        eqn[ALPHABET.index(r)] += num_to_gf16_poly(1)
        M.append(eqn)

    return M

def vec_to_key(vec, n=N):
    key = ['0']*n
    for i,v in enumerate(vec[:n]):
        key[gf16_to_num(v)] = ALPHABET[i]
    return ''.join(key)

for i in range(1, len(plaintext)-N):
    M = get_eqn_matrix(plaintext, ciphertext)[i:i+N]
    M = Matrix(GF(16), M)
    nullity = M.nullity()

    if nullity > 5: # too much to bruteforce
        continue

    B = M.right_kernel_matrix()

    for lc in tqdm(product(range(N), repeat=nullity), total=N^nullity):
        v = B.linear_combination_of_rows([num_to_gf16_poly(alpha) for alpha in lc])

        if len(set(v)) != len(v):
            continue

        key = vec_to_key(v)
        cipher = Cipher(key)
        d = bytes.fromhex(cipher.decrypt(ciphertext))

        if b'DUCTF' in d:
            print(d)

Flag: DUCTF{d1d_y0u_Us3_gu3ss1nG_0r_l1n34r_4lg3bRA??}

Cosmic Rays (483pts) - 25 solves

Cosmic rays have severely corrupted my data!

cosmic-rays.py:

from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
from Crypto.Util.strxor import strxor
from os import urandom

flag = open('flag.txt', 'rb').read().strip()
flag = flag.lstrip(b'DUCTF{').rstrip(b'}')
assert len(flag) == 32

KEY = urandom(16)

def encrypt(msg, key, p0, c0):
    msg = pad(msg, 16)
    blocks = [msg[i:i+16] for i in range(0, len(msg), 16)]

    out = b''

    for p in blocks:
        c = strxor(p, c0)
        c = AES.new(key, AES.MODE_ECB).encrypt(c)

        out += strxor(p0, c)

        c0 = c
        p0 = p

    return out

msg = 'If Bruce Schneier multiplies two primes, the product is prime. On a completely unrelated note, the key used to encrypt this message is ' + KEY.hex()
ciphertext = encrypt(msg.encode(), KEY, flag[16:], flag[:16])

print('key = ' + KEY.hex())
print('ciphertext = ' + ciphertext.hex())

corrupted-output.txt:

ke▒ = 09d0fe1920ca85e3851b162b8cc95
ci▒her▒ext = ed5dd65ef5ac36e886830cf006359b300▒1▒▒7▒▒▒▒▒▒c▒▒▒▒▒a▒▒▒▒▒8▒▒▒▒▒▒▒d6▒▒▒▒▒7▒▒▒▒b▒▒▒▒2▒▒▒▒▒▒▒▒▒f▒d▒0▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒6▒▒▒▒▒▒▒▒▒▒▒▒▒f▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒d▒▒b▒▒▒a▒▒▒▒▒e▒▒c▒▒▒▒▒2▒▒▒▒▒▒▒▒▒▒0▒▒30c▒▒f▒▒▒▒▒▒▒▒▒▒▒▒1▒▒7▒▒▒▒▒▒▒▒▒▒▒▒▒1e▒▒00▒▒▒▒▒9▒▒c▒▒e▒▒2▒▒4▒▒▒▒7▒▒▒▒▒0▒▒▒▒▒4▒▒▒▒▒▒▒▒f▒▒▒7▒▒▒▒▒e▒b▒▒9▒▒▒▒4▒f▒▒1▒c▒▒60a3a0e6▒d7▒975d1cde66e41791b780988c9b8329

Solution

The mode of operation implemented in the script is similar to Telegram's Infinite Garble Extension mode. I first came across this on CryptoHack (which is a great high-quality platform for learning crypto btw). The code provided is clear enough to read and draw a diagram from, so this prior knowledge is not necessary at all to solve the challenge.

After reading the source code, we figure that the mode of operation looks something like this:

encryption.svg

We are given the AES key, the plaintext, and the ciphertext and the goal is to recover C0C_0 and P0P_0. Unfortunately, due to some bizarre cosmic ray interference, a lot of the data has been corrupted. We're given enough of the AES key, the complete first block of ciphertext, and enough of the last block of ciphertext. If we can completely recover the key and the ciphertext, we can recover the initialisation vectors (which hold the flag).

In the remaining explainations, we'll suppose for notational simplicity that the message is only 3 blocks and refer to the above diagram a lot. The reasoning is easily generalised to messages of aribtrary block length.

Recovering the AES Key

The AES key is missing 3 nibbles, and the last block of ciphertext is missing 2 nibbles. It would take at most 16516^5 checks to bruteforce these nibbles, which is very feasible. Looking at the diagram above, we notice that

D(C3P2)=P3(C2P1)    C2=D(C3P2)P3P1\begin{aligned} D(C_3 \oplus P_2) &= P_3 \oplus (C_2 \oplus P_1) \\ \implies C_2 &= D(C_3 \oplus P_2) \oplus P_3 \oplus P_1 \end{aligned}

and we know C3,P1,P2C_3, P_1, P_2 and P3P_3 (by bruteforcing the missing nibbles in C3C_3). We don't know C2C_2 completely though. In fact, it's missing 16 nibbles which is not feasible to bruteforce. It turns out that having only half of C2C_2 will suffice for allowing us to check if the key we guessed was correct. We'll simply check the nibbles that are present, and ignore the corrupted ones. It's very unlikely that we'll find a false positive doing this.

Recovering the Ciphertext Blocks

Now that we have the AES key, it should be easy to recover the rest of the ciphertext as we can decrypt whatever ciphertext we want. Suppose in the above diagram, we want to find C2C_2. We have all of the plaintext blocks P1,P2P_1, P_2 and P3P_3, as well as the ciphertext block C3C_3 (from the previous section). We have the exact same situation as before, except this time we know the key and C3C_3, so there's no brute forcing required. We simply compute

C2=D(C3P2)P3P1C_2 = D(C_3 \oplus P_2) \oplus P_3 \oplus P_1

In general, we have

Ci1=D(CiPi1)PiPi2C_{i-1} = D(C_i \oplus P_{i-1}) \oplus P_i \oplus P_{i-2}

Which will allow us to recover all of the corrupted ciphertext blocks!

Recovering the Initialisation Vectors

We've now recovered all of the ciphertext. In the above diagram, C0C_0 and P0P_0 are the two halves of the flag. We can recover C0C_0 easily by observing that

D(C2P1)=P2E(C0P1)D(C_2 \oplus P_1) = P_2 \oplus E(C_0 \oplus P_1)

so

C0=D(D(C2P1)P2)P1C_0 = D(D(C_2 \oplus P_1) \oplus P_2) \oplus P_1

Now, we can recover P0P_0 since

E(P1C0)=P0C1E(P_1 \oplus C_0) = P_0 \oplus C_1

so

P0=E(P1C0)C1P_0 = E(P_1 \oplus C_0) \oplus C_1

We're lucky the cosmic rays didn't corrupt any of the first block of ciphertext! We wouldn't be able to determine P0P_0 otherwise.

Solve script:

from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
from Crypto.Util.strxor import strxor
from itertools import product
from tqdm import tqdm

hex_chars = '0123456789abcdef'

corrupted_key = '0▒9d0fe1920ca▒85e3851b162b8cc9▒5'
corrupted_ct = 'ed5dd65ef5ac36e886830cf006359b300▒1▒▒7▒▒▒▒▒▒c▒▒▒▒▒a▒▒▒▒▒8▒▒▒▒▒▒▒d6▒▒▒▒▒7▒▒▒▒b▒▒▒▒2▒▒▒▒▒▒▒▒▒f▒d▒0▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒6▒▒▒▒▒▒▒▒▒▒▒▒▒f▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒d▒▒b▒▒▒a▒▒▒▒▒e▒▒c▒▒▒▒▒2▒▒▒▒▒▒▒▒▒▒0▒▒3▒0c▒▒f▒▒▒▒▒▒▒▒▒▒▒▒1▒▒7▒▒▒▒▒▒▒▒▒▒▒▒▒1e▒▒0▒0▒▒▒▒▒9▒▒c▒▒e▒▒2▒▒4▒▒▒▒7▒▒▒▒▒0▒▒▒▒▒4▒▒▒▒▒▒▒▒f▒▒▒7▒▒▒▒▒e▒b▒▒9▒▒▒▒4▒f▒▒1▒c▒▒6▒0a▒3a0e6▒d7▒975d▒1cde66e41791b▒780988c9b8329'

def decrypt(ct, key):
    return AES.new(key, AES.MODE_ECB).decrypt(ct)

def replace_corrupted(c, replacements):
    for r in replacements:
        c = c.replace('▒', r, 1)
    return c

def equals_corrupted(c, m):
    for i in range(len(c)):
        if c[i] != '▒' and c[i] != m[i]:
            return False
    return True

def get_plaintext(key):
    msg = 'If Bruce Schneier multiplies two primes, the product is prime. On a completely unrelated note, the key used to encrypt this message is ' + key.hex()
    return pad(msg.encode(), 16)

def recover_key(corrupted_key, corrupted_c):
    for bf in tqdm(product(hex_chars, repeat=5), total=16**5):
        a,b,c,d,e = bf
        key = bytes.fromhex(replace_corrupted(corrupted_key, [a,b,c]))
        c3 = bytes.fromhex(replace_corrupted(corrupted_c[-32:], [d,e]))
        p1 = get_plaintext(key)[-48:-32]
        p2 = get_plaintext(key)[-32:-16]
        p3 = get_plaintext(key)[-16:]
        Ep2 = strxor(decrypt(strxor(c3, p2), key), p3)
        c2_guess = strxor(p1, Ep2)
        if equals_corrupted(corrupted_c[-64:-32], c2_guess.hex()):
            return key, c3

key, recovered_ct1 = recover_key(corrupted_key, corrupted_ct)
print('[+] key recovered:', key.hex())

msg = get_plaintext(key)
pt = [msg[i:i+16] for i in range(0, len(msg), 16)]

num_blocks = len(corrupted_ct)//32
ct = ['?' for _ in range(num_blocks-2)] + [recovered_ct1]
for i in range(1, num_blocks-1):
    ct[-i-1] = strxor(strxor(decrypt(strxor(ct[-i], pt[-i-1]), key), pt[-i]), pt[-i-2])

print('[+] recovered ciphertext:\n\t' + '\n\t'.join(c.hex() for c in ct))

Ep1 = strxor(decrypt(strxor(ct[0], pt[0]), key), pt[1])

flag1 = strxor(decrypt(Ep1, key), pt[0]).decode()
flag2 = strxor(Ep1, bytes.fromhex(corrupted_ct[:32])).decode()

print('[+] flag:', 'DUCTF{' + (flag1 + flag2) + '}')

Flag: DUCTF{IVs_4r3nt_s3cret!_but_fl4gs_ar3!}


impECCable (500pts) - 3 solves

Can you crack this flawless ECC signature scheme?

nc chal.duc.tf 30203

#!/usr/bin/env python3.8

import ecdsa
import random
import hashlib

Curve = ecdsa.NIST384p
G = Curve.generator
n = Curve.order

flag = open('flag.txt', 'r').read().strip()
auth_msg = b'I know alll of your secrets!'

def inv(z, n=n):
    return pow(z, -1, n)

def gen_keypair():
    d = random.randint(1, n-1)
    Q = d*G
    return d, Q

def sign(msg, d):
    x = int(hashlib.sha1(int.to_bytes(d, 48, byteorder='big')).hexdigest(), 16) % 2**25
    while True:
        k1 = (random.getrandbits(340) << 25) + x
        k2 = (random.getrandbits(340) << 25) + x
        r1 = (k1*G).x()
        r2 = (k2*G).y()
        if r1 != 0 or r2 != 0:
            break
    h = int(hashlib.sha384(msg).hexdigest(), 16)
    s = inv(k1)*(h*r1 - r2*d) % n
    return (r1, r2, s)

def verify(msg, Q, sig):
    if any(x < 1 or x >= n for x in sig):
        return False
    r1, r2, s = sig
    h = int(hashlib.sha384(msg).hexdigest(), 16)
    v1 = h*r1*inv(s)
    v2 = r2*inv(s)
    x1 = (v1*G + (-v2 % n)*Q).x()
    return (x1 - r1) % n == 0

def menu():
    m = '''Here are your options:
    [S]ign a message
    [V]erify a signature
    [P]ublic Key
    [Q]uit'''
    print(m)
    choice = input()[0].lower()
    if choice == 's':
        print('Enter your message (hex):')
        msg = bytes.fromhex(input())
        if len(msg) >= 8:            
            print('Message too long!')
            exit()
        sig = sign(msg, d)
        print(' '.join(map(str, sig)))
    elif choice == 'v':
        print('Enter your message (hex):')
        msg = bytes.fromhex(input())
        print('Enter your signature:')
        sig = [int(x) for x in input().split()]
        if verify(msg, Q, sig):
            if msg == auth_msg:
                print('Hello there authenticated user! Here is your flag:', flag)
                exit()
            else:
                print('Verified!')
        else:
            print('Invalid Signature!')
    elif choice == 'p':
        print(Q.x(), Q.y())
    else:
        print('Oh ok then... Bye!')
        exit()

d, Q = gen_keypair()

print('Welcome to my impECCable signing service.')
for _ in range(11):
    menu()

Solution

ECDSA-like Signature Scheme

The server implements an ECDSA-like signature scheme which is summarised below.

With public parameters (p,E(Fp,a,b),G,n,H)(p, E(\mathbb{F}_p, a, b), G, n, H) (nn is the curve order, HH is the hash function)

Key Generation: The signer chooses a private key d[1,n1]d \in [1, n-1] and computes their public key Q=dGQ = dG

Signing a message mm:

  1. Calculate h=H(m)h = H(m)
  2. Select random k1,k2[1,n1]k_1, k_2 \in [1, n-1]
  3. Calculate r1=(k1G)xr_1 = (k_1 G)_x, r2=(k2G)yr_2 = (k_2 G)_y. If r1=r2=0r_1 = r_2 = 0, go back to step 2
  4. Calculate sk1(hr1r2d)(modn)s \equiv k^{-1} (hr_1 - r_2d) \pmod n
  5. The signature is (r1,r2,s)(r_1, r_2, s)

Verifying a message mm and signature (r1,r2,s)(r_1, r_2, s):

  1. Ensure r1,r2,s[1,n1]r_1, r_2, s \in [1, n-1]. Return invalid if not
  2. Calculate h=H(m)h = H(m)
  3. Calculate v1=hr1s1v_1 = hr_1 s^{-1} and v2=r2s1v_2 = r_2 s^{-1}
  4. Calculate (x1,y1)=v1Gv2Q(x_1, y_1) = v_1 G - v_2 Q
  5. The signature is valid if x1r1(modn)x_1 \equiv r_1 \pmod n.

The signature scheme itself is probably secure, but an implementation flaw allows us to recover the private key given a few signatures. Specifically, the nonce k1k_1 is biased and all nonces have only 340 bits of randomness, with a shared suffix. This kind of attack has been covered in the literature (https://eprint.iacr.org/2019/023.pdf). The attack works by picturing the situation as a hidden number problem instance, which can be solved using lattice-based techniques.

Hidden Number Problem

A (simplified) version of the hidden number problem can be stated as follows.

Let pp be a prime and let dFpd \in \mathbb{F}_p be an unknown integer. Recover dd given pairs of integers {(ti,ai)}i=1m\{ (t_i, a_i) \}_{i=1}^m such that

kitidai0(modp)k_i - t_i d - a_i \equiv 0 \pmod p

and ki<B|k_i| < B for some B<pB < p. The kik_i are unknown.

This problem can be easily solved given a sufficient number of pairs and small enough BB.

Consider the lattice generated by the rows of the matrix

M=[p00000p00000p00t1t2tmB/p0a1a2am0B]M = \begin{bmatrix} p & 0 & 0 & \cdots & 0 & 0 \\ 0 & p & 0 & \cdots & 0 & 0 \\ \vdots & & \ddots & & & \vdots \\ 0 & 0 & \cdots & p & 0 & 0 \\ t_1 & t_2 & \cdots & t_m & B/p & 0 \\ a_1 & a_2 & \cdots & a_m & 0 & B \end{bmatrix}

We'll call the first mm rows of this matrix pp-rows. Notice that if we multiply the second-to-last row by dd, add the last row to it, and subtract appropriate multiples of the pp-rows, we get the vector

vk=(k1,k2,,km,Bd/p,B)v_k = (k_1, k_2, \ldots, k_m, Bd/p, B)

which is a short vector since the kik_i are small, so can be recovered by solving SVP!

Finding the HNP Instance

Our goal is to turn the signatures from the service into an instance of the HNP. It should be quite obvious that the hidden number is the private key dd, and the unknown kik_i's are the biased nonces. In fact, if we look at how the verification algorithm works, we see that it almost tells us how to write the equations. Let

ti=225ri2si1ai=225hiri1si1t_i = -2^{-25}r_{i2} s_i^{-1} \qquad a_i = 2^{-25}h_ir_{i1} s_i^{-1}

Each nonce has 340 bits of randomness, plus 25 bits that we don't know (but is a common suffix for all nonces). It turns out that just knowing that the top 19 bits are all 0 isn't quite enough to recover the private key as we only have a limited number of samples. We'll need to optimise a bit. Suppose we are given mm signatures by the server. What we can do is eliminate the unknown common suffix by taking the m1m-1 points of data given by {ti=t0ti}i=1m\{t_i' = t_0 - t_i\}_{i=1}^m and {ai=a0ai}i=1m\{a_i' = a_0 - a_i\}_{i=1}^m as our inputs to the hidden number problem.

Write the nonce kik_i as ki=pi225+ck_i = p_i 2^{25} + c where pip_i is the 340 random bits, and cc is the unknown common suffix.

To help make the algebra a bit less messy, let bi=(hiri1ri2d)1b_i = (h_i r_{i1} - r_{i2}d)^{-1}.

Then,

tit0ti225(r02k0b0ri2kibi)(modn)\begin{aligned} t_i' &\equiv t_0 - t_i \\ &\equiv -2^{-25} (r_{02} k_0 b_0 - r_{i2} k_i b_i) \pmod n \end{aligned}

and

aia0ai225(h0r01k0b0hiri1kibi)(modn)\begin{aligned} a_i' &\equiv a_0 - a_i \\ &\equiv 2^{-25} (h_0 r_{01} k_0 b_0 - h_i r_{i1} k_i b_i) \pmod n \end{aligned}

So,

tid+ai225(d(r02k0b0ri2kibi)+h0r01k0b0hiri1kibi)225(h0r01k0b0r02k0b0d(hiri1kibiri2kibid))225(k0b0(h0r01r02d)kibi(hiri1ri2d))225(k0b0b01kibibi1)225(k0ki)225(p0225+c(pi225+c))p0pi(modn)\begin{aligned} t_i' d + a_i' &\equiv 2^{-25}(-d(r_{02} k_0 b_0 - r_{i2} k_i b_i) + h_0 r_{01} k_0 b_0 - h_i r_{i1} k_i b_i) \\ &\equiv 2^{-25}(h_0 r_{01} k_0 b_0 - r_{02} k_0 b_0 d -(h_i r_{i1} k_i b_i - r_{i2} k_i b_i d)) \\ &\equiv 2^{-25}(k_0 b_0 (h_0 r_{01} - r_{02} d) - k_i b_i (h_i r_{i1} - r_{i2} d)) \\ &\equiv 2^{-25} (k_0 b_0 b_0^{-1} - k_i b_i b_i^{-1}) \\ &\equiv 2^{-25} (k_0 - k_i) \\ &\equiv 2^{-25} (p_0 2^{25} + c - (p_i 2^{25} + c)) \\ &\equiv p_0 - p_i \pmod n \end{aligned}

Therefore...

(p0pi)tidai0(modn)(p_0 - p_i) - t_i' d - a_i' \equiv 0 \pmod n

and this is precisely the hidden number problem setting described above! Even better, it turns out that we have enough signatures to recover the private key with this optimisation.

All that's left is to throw the matrix at LLL, recover the private key, sign the auth message and grab the flag!

Solve script:

import os
os.environ['PWNLIB_NOTERM'] = 'True'
from pwn import remote, process
import ecdsa
import hashlib

Curve = ecdsa.NIST384p
G = Curve.generator
n = Curve.order

def connect():
    return remote('0.0.0.0', 1337, level='error')
    # return process('../challenge/server.py')

def recv(conn):
    o = conn.recvline().decode()
    print('[<]', o)
    return o

def send(conn, d):
    print('[>]', d)
    conn.sendline(d)

def read_menu(conn):
    [recv(conn) for _ in range(5)]

def get_sig(conn, msg):
    read_menu(conn)
    send(conn, 's')
    recv(conn)
    send(conn, msg.hex())
    sig = [int(x) for x in recv(conn).split(' ')]
    return sig

def verify(conn, msg, sig):
    read_menu(conn)
    send(conn, 'v')
    recv(conn)
    send(conn, msg.hex())
    recv(conn)
    send(conn, ' '.join(str(x) for x in sig))
    return recv(conn)

def recover_privkey(n, hashes, sigs, B, lo):
    Zn = Zmod(n)
    N = len(sigs)-1
    M = [[0]*i + [n] + [0]*(N-i-1+2) for i in range(N)]

    Ts = [int(Zn(-r2/((2^lo)*Zn(s)))) for r1, r2, s in sigs]
    M.append([int(Zn(Ts[0] - t)) for t in Ts[1:]] + [B/n, 0])

    As = [int(Zn(h*r1/((2^lo)*Zn(s)))) for h, (r1, r2, s) in zip(hashes, sigs)]
    M.append([int(Zn(As[0] - a)) for a in As[1:]] + [0, B])

    M = Matrix(M)
    M = M.LLL()

    for row in M:
        if row[-1] == B:
            return Zn(row[-2]*n/B)

conn = connect()
recv(conn)

hashes = []
sigs = []
for m in range(10):
    msg = os.urandom(6)
    hashes.append(int(hashlib.sha384(msg).hexdigest(), 16))
    sigs.append(get_sig(conn, msg))

d = recover_privkey(int(n), hashes, sigs, 2^340, 25)
print('[+] recovered d:', d)

auth_msg = b'I know alll of your secrets!'
h = int(hashlib.sha384(auth_msg).hexdigest(), 16)
k1, k2 = 133, 337
r1 = (k1*G).x()
r2 = (k2*G).y()
s = inverse_mod(k1, n)*(Integer(h*r1) - r2*d) % n
verify(conn, auth_msg, (r1, r2, s))
conn.close()

Flag: DUCTF{y0u_f0unD_7h3_h1dD3n_numB3r5!}


1337crypt (500pts) - 3 solves

1337crypt.sage:

from Crypto.Util.number import getPrime, bytes_to_long
from random import randint

flag = open('flag.txt', 'rb').read().strip()

p, q = getPrime(1337), getPrime(1337)
n = p*q

D = (1*3*3*7)^(1+3+3+7)
hint = int(D*sqrt(p) + D*sqrt(q))

x = randint(1337, n)
while 1337:
    lp = legendre_symbol(x, p)
    lq = legendre_symbol(x, q)
    if lp * lq > 0 and lp + lq < 0:
        break
    x = randint(1337, n)

m = map(int, bin(bytes_to_long(flag))[2:])
c = []
for b in m:
    while 1337:
        r = randint(1337, n)
        if gcd(r, n) == 1:
            break
    c.append((pow(x, 1337 + b, n) * pow(r, 1337+1337, n)) % n)

print(f'hint = {hint}', f'D = {D}', f'n = {n}', f'c = {c}', sep='\n')

output.txt:

hint = 49380072119923666878249192613131592074839617141388577115293351423167399196342955381916004805107462372075198711094652660372962743330048982663144511583693085794844754920667876917018671057410534100394910738732436580386544489904637
D = 15515568475732467854453889
n = 6337195756161323755030821007055513472030952196189528055855325889406457327105118920711415415264657259037549360570438684177448730672113983949019501534456306880443480045757556693491657382839313528872206247714019569057234809244745178637139314783799705976807860096251357543835678457306901513720623505353691449216464755029227364954566851544050983088509816181294050114090489118245225264446360947782705558298586215673137402419393055466097552149369002210996708260599901728735979196557443301850639382966378922196935480476418239903494619475397129088135961432456212959427154766737697387874383258702208776154403167756944619240167487825357079536617150547060929824469887270443261440975473300946304087345552321787097829023298865763114083681766490064879774973163395320826072815425507105417077348332650202626344592023021273
c = [2965283643688403797165946122322271725657650834118374982544865204069408977100427467529817192218591266088434638147575835406961908796948058490142700114753473914854903677886622891925830058511828976826455872503008025021472591972579027082713361732009320952345373684125424062556642343028410543065399505362678488509165912727709501655825854444569156531320085206323394452328708057470758240179308333863947750859320488085377502418183544797478138324220550201265506911393812501011162341323633512630370872470123203799161459485049366459044155649983974513709130924839306783975678735222188598519854821155200911911655552770166997484953961119675666952799976303722150505167965773640808714735513968878124574839578429500867281871827465237926525350188354375396793933887699869702959120918465408167337133904903035726012886858375060, 4227132865334505405626711665121576431447099046828204280925293343496308440814425371806805268307006189047782355496101845141129620154333790686666174110049338804789940753568677322148250718183870294241331437218848785500224046891629672924254586522742601201851444757715381693568504638058458827500474841176399111755809253193225068003840660042561825517688386544180414310574105568494783971244205946339568483372212871799517342061327840896264005318971454339632592895233645822995474165332890105093399248983476758683870010231857387890728894231929469903333064191294330772776683613580235648082284464201205816687624479463350046412230374903689969885488889837082535847528337656054187596601170895545917805710770965742429692385979637510310484362889105586959013900342325546237239405454690579368080436845361299407403164886883748, 978007776857439073066302770113531186883747575374833480294845086314717936970460794815613109007025411892445207996306086971321059675188361562049273659619452013052208718264323279570643343775661046917322278475707954830372168432764669041423096674455058815502103244500339459395427130014846256350114877135323061023290563976206375375546950506671082259405988368886988363093636087671976779262555370134543590459564875109397030508104477254552485355229460628699977798478294353082472756825725502260108311123574687181363455546671169782431840081687642515069527086619806397419734281661971050497449047216876872913296425479966584009211773588072307759954662221405445119047290244837830108565937350242938884390202008568059529709572345922679507951820760327171999202313195683777790186067069165810190549104073982523713399173414611, 4012540845279740236771035686077946945075663819584365711383996967789747429533113267185148410992602966531424618419733753946646387540002147176630440549144239219244225240797791030804102758501904295430386839725691995985768242025564808013561189231128661592239270258746061340243310036895660781093471018688951184356688719538675995765107164951255059187657380924462666967664003061605019800326610146703372921209103901333827933518304226166767913750118428969714111514732588327294342462859267346634839023111410574547979784245995248407066620565983014302798594938771353187605366247317300127780541127544707471082923316540549896871822185800784038193853265469482547429993219080816725578813858494882035475571708868165767020499753797654127024051050601776249472741174090644594012748364366899673088684562335515524422439791558816, 2027623916031759342835417799029931856764320648990118496048994028330076166023817536092673912570137699133072581466325353333069379470654311627554490620116151072918228643867699719164743468949281406924739959697127611471198290842680652409620945436445195969468721067533812291436532449691786915192670967368213290045699784939959580772991779412923361572049995076642502430853451739389446195359495185974948023109326309784876316365022215590215792292740963483827796183822653247341760911818579707093115881498944236533386300410114157677191869355853980266304852084262420505052448574369384495786121979737110286213485222638625379019346402697277606297797582373153657733859766816296197700800371674138995795193706187816902814580644461645701055323767250377769630302686927007094565649817547622773026615626816498729539164334540735, 2113288718037746214685349155849491897348241868848084092169426817000585907211150064501965371278582766548643804627909598851321691163739062047601703898858223165245218896583634003663891982783567438168136030401258454909681492111816312866780952870801302164116086786735225635529461263149111451219202287947609245669192932644067654108697508070703285481206304402149653674645175325551070895508180104114591029346938491540176228680128517213834426468694255038926861976209778047869956134548992706185137614966002861929118006384802057194128286092258677672273701101327162616359792289637852045820180193632641100570234751362230895856743335279380210421986075438909372229782300065126262721201396697897569424558199017986597721774973088314801713455342985168541901156110089407059579474471082934344761807776680734512334380867631685, 1654961716296986128610934668492959136300498192691604012716741124495193945034876342744468010334484513454670846377430827475543701730040320577256986940297236969495943964815390140182951301530864625499149190154085071839682864503171970394581842205277933869570364771153078041055770721276254269524754426607558846545614301572846220703688374409697959685260110561009875045165752130742597582360998151379177409346108913717124515637531627714953311291499072070929802493851758810189125358418928839603752973363151546627578762265767626807155408285113975233668299112695798033615256259784667620229176468954912907390513012932365334543079927500753655418878239416788307619958923540740106212746345944601181037379910665546246466397104572495271636398619030608134226577505823473175445236446340051634410579088270451269164259713873758, 2514199219661111617345493318860356571221448013610977603770771164730918574470283873369369413956107587189531320493269767938487335330186894067878228367127065329394785037633205428809163615825974536108581830988051994453718163986397394701200482810258944195844001539384185272533044157302998515262889660556135449632717239830775004138626531970997301243498938864978747500761023923647554920640122981116269453498547942546357444043792383374867617343672564732902694504024195757734236914408198840713699916242392882446464558195245678246075485296887932699522715002090820291583295941206781734393895709656010142472475147896345410546401543346390378646278602398460727210425476797817267182749872938033548038828483141699205401701309431417934036328374908792667050177566199293811661805883311861330010686269441363833373664694577987, 5663928122304825129633556442363202547304088549700331995887066075761144516743963415080162080690212237208943863556307231113618865424979882212397451356178320424373519528567091163748173584004045016356423940037819676826943091303753205514009104831473198957651729088483636147932157769966950938369688467215003381710479475706267014181107594398437465962752438918884710862576508032982543502628774445665568961555804922260019696292159218756973837038550052491998188589687285333806418814599670512724078191961388698791168919881639030913375281415578224795726863107565185225319884716175535335818104773834064250380490282125431371459651237477347323790062636688389530273486989560343324907201345956582357089891426768461557048550424574890968448440623600280563961382579679275986313951809764199962124546523820086067778241886411027, 5127348260260666408465340779250464499829312258644178616320443154758717286991508526746894222258251844494336223363278673914496952566499331965530251552711489719979864411000681218577559623562407166261589636529813000728939747373498745553839409401753990953487900524594424864859745213737934624724537689399131998207589185052038671160445411433772721047561231234597639035303681418965395964112239803278360841153137800971855655745318516385432610961954740990145613744752910248264655716961623660353827918338205276051491919020492757798743511033587356346953471884479899269629781871463979957393549025691651527978055636614137183328650368207109083295728251379116324292032463982733196874368511572974219420369368231102935911854321477932587902014767624541804807353861138067449917786991154960658347128669770552683844735694771304, 912012498624581200778267083056679535209363082531105800537121636258686149425696140772225405163565427168428111663117692660530767620136690843242621836599477165578236230899774939390469448112872213106028141856748175330849807116955148564901679431405404468462928889073949193856979920916177913713535862159027048348460744841453778207936032561783332805471234153588131501553532803669312842634153635768000220550327689626155378928415939314603856937653796336275450612487503994022530792389665266795642341368486450934968019578307979774249769036887553785123518992232785614899381820392135073030991925032719648748684081869570967862852475542592504028623018033479145918111557740838825308784933527733463956149622551630583590637254426292348194487794196206968681077475975752802894083423248412075568206687554309810173173920232763, 2436866290871628536417176399253999865625254035642414969357701150010085449608502087135135733737697832481518361473661675302024786738799054534300038436509672836934786454901758822643229166902191766802840073051366134583502458578439865812742964330407366785528253851649391279864101591832750884167541280603849863399873087476295344735661992370294467222647274959068415992003560754620574930143115257792434192024754167152220122133703208644119926097288258976568525598574543925452266921974220812847633983747297386218600016427722745090381003576997392940433375675424518922741223269827365370125003345692532810891593728002147524317584369634914846876632331716729874099356119734404421121853894604909945319014253127602074811962076638825647902949553310663878390242548575338618297026049258753261505512485855475323038915946318942, 509863973731844133321771188426020828616580306307860344185239368387007777575603427722232171187547556425174788632250607965871354428139545632567696173328608263396326969683223934174675018171063234829335092045923676709136184701027909455916077381684030908384436913426394361244803797145680215205977118575114028233630314026343220598090674849804802701647841608192059395411274249560862932315689038343605472608699106131817989375813321406921723264222191892249160952649604582009045185237984142365342492932055977096386929482763461190874636262457774184030611558829446731325712378906706235547513663804044779022226440969017173927139651448444661576089718393110349982144235099734892105478043336397198869655306095587133514405907440839353367529359231240217516836823191649992341691991140622924669050381523632489233776062236103, 974498940066027730139205239665168645172707517444311740631079318390826258964568623600473838007239680536388259087271546592818852534756907481101950318596460269405494523349326881019565138508307088169816085666496831026107156494310377745417958509741005431678997085229930046547039908969767410154483930509354704284325423406347306489629090196230034087186446615385505886623143320067908864871762028610159353184318447813107452983993586727675449477045958944519815157229909296841449831547322166659310685752819036216419500203036541609144268222339923799412235051944959751629769229644135530989737679556367741625083603793281153793985494061259765106093998132984667806675113720943899901192577869728211016382092986103461483180409185383217103054964472604316491333418462823730005375944873973283962154306067551995962009460807376, 3054808152076473870220401477150018637982843187417960475915913770453456532748351517063794376041029905757906480963104864638335773094128500053977210781282916940162178680989227209424018145301093068044943636303070618607735909450595965995054136742085200519722743879021505804336053689071121716107573299959080137694851809469070025473790070423349789110772590063145804372034874086920895855487674187846887276054682505860991275011083582588436045514874804537077114926545081452501037575666374344813902381586746941633059882103909481115365833133685608756053206273013762008558884109476908270870158462841713453174751307156439616783217303552361584233046392355922515542361056986274367915723668125712712732435387052695138766755699275158586154116988269220252263958660284378107400747475499955971289099338688725781522467488564851, 5975346691502878700048086335799443890516342421495919055166452899483149423709238266644646284567221054550497300423480179534834600366923236330436762860206051971548833314636810257253854164688260173075784327452207855195466792875147040885624755103105903070022194118839166368480453279222640661288365182787319575088588515774072145152337782295711093966598691679542956425576681932163221309804768997468212692031252357035178959978644818674878601934865804677861327490275944198374000035525232747965242533714692927538146938596623918570236642921906133980892928600586534853780494979757749463972484935981921682760535250626210972122051546914560085996633536011062717883453316002647366077102917517210312269924333780590848342890453227839641393019717019621277391526905920791783500590899237398133985857283307137962943025452852156, 1065178174888233635911326982194950152858239094153840101753360876773827224280901318133570460397941298739549428325012745837560525652191164703678479893461985277087112955862200681242083231930919338119914416686740820058101802987533142277175028029486139883797737414767408253277029907947788896487466602930326785913311986195734503516749819650798003072434270207990934593936670971077783205028373119053966282907508440752923280661797970564984294528148717122875884994693881990432676417801326597007758515920770479718397246870673660729723667767610419602958043326748171120840001871788822478909776477295222043919626233063688921254375547976858246961625005840690555880391833016308317621727943674543375656223235557024379587989137637922723889191033248839514512121004858461584211261852775156811088401541250497076275113053894051, 4894966962897479417531940567901464088225916956065868229183234220904767249278209023441995835205278039314401414048995435899033278539686277194528561447893863035131730626452337185913717191287369516944950000971717626380784614299393398919165040717674104903434231304653915680952051487000087209698653851498041833797260645594247611593304459034269358686744940492816324137572961311301675959421448080776149236709489927785888543320009537287693866085430664262654991468977662140840619957546069943312565036794368259980180906866082155091872067595228387050103784700417788245118104330025213804949138170714214804975133049002116339538977493590520786819122900040005929430084119255539234706639394652907832506574247618936284413480304841938171936109060492746026997370950815520782356026187671673425301381638802378555912806338574437, 6187864170999699979741655022818341902169116147087266073325149932968327840191484255454805935192061162923574475264715984496637258030794980827028443647478092528811246557463061253039263247163325530499219310272590742069735075124634942575228451665271974294538949299051340435430202347497861900193344750599357040348372520040008365748657861533012712694581372536244296302703309063976497067251976116003894390464314619507976995285296786755529221296369822123176131117605825310507038908958651154279772540911614670991857247385388907194601169392071473381872801694347166293026018695963314065241060326454114728260018616333931966409537918815876330990773023826514772942226899854189893387887906221282148752599902448401008305500274080276965097220250384174994106435292650637549765876471398345631299109210177060815303367859691934, 595195440740768086051802347030695627067132713128982091407678628671078394149484223540443512603798169248411293083263008798590798689563220203433620733381332113006804698857068360320873989382608978405484381826051563284861119367536875221064963318230704296292541132050429707304805475634889313519579487909077742354145901326467214575198126410668736385263514994652734021554346311872785344533526594661084316210548085480163098252166732908341341177797223886802763238035804286294637123600986762952613444459409482365942427880236173307463020139788434748889209277009677745636293180089665287060940358701598892358160858467124426005131676807214962342308676249571812484395095382641177328238939044554545853611471664505877465917635513234105647115973209351164663961077412139360785116849288398952127441959171404458021687579541175, 4082022841774631982825721691715829608393671085625282585972749548175076307512734093583021790880656684418091352329742382218594195734113341916173261540448264357416727072161494831330898745712705559066483634893506431429606130532893681188119988857111125998365829411197156572426311951125072075501074963107229153484169307968369010725305735611907776235507971433607888112289203618265225433448734563955199478958874167382928357178729169152846694124504014877886260908946896165211252396644707876619587438685656181120796376149567677412939739272408295616608206190625346385037420703728228966014062318409026362861842238006011144867920874607173602972342506742570825856935060572506407801310312617549150006842266308678085573010976181269266915732635744581416106351593688542682645200780384585020824372248357822295971702524932131, 1000625034113198984914773220150289271893679043323544848411957238487405539807088448919227381269650652881819985406087223999922848961238279073622332363865562164718239220196060368096223834360743596292825126684832265238639502058285165508563806147128967325560390231059328145517925192549809877418413471670659107575912687748135351773542156849078371080529254085385332354404644284669442294768530452675681407923582227672402866748214287852108889768672972124261407058479611417334201061818321604135426287673109160792044397797332704926663324534544385725251518261691236249620662454703036105184115146125134033891453683646744429982787769700992738301150798500746885430066224863818227091133305288197423593720681522540200966976772053821319538884115509238794110502227243100583681967432475694283621601659337352257296771007398830, 3910532684264037605280073715567908506298371495338954283197008948781658305124009965411429370857303666054934292255644338390370042828093596979852116197320475143303868103756174422835246229787453994680814492981577227619679709382612344661799710333860806319403428161014283080918016953726549709841277479344732943612023192181418892843000265432658709892580963131487350277878102428079298132198337824882222899902955352808693717621877705058384775752172535146776595892145233232763770921941481039135538380883943981514523015384811562836294610439862211805518136414752397827373455694922229348814701338463021119779409161320218681950427713166441641896961809089731984679559422271847810260997468490586366756513099996283717843776063992374612873081357851493181966097184774232074030891206253732418577657818081433983524645701096377, 4835416741018451726843608461567628873284992712841638174428313186812466561313303623787215788031546038820774005350472824251365300817456363922933703091836836811461590823487653287837224035021512640832881407296281554602817917135817176396089924315191505973018176462557761358424195382037199596483058038279852175398930264034384648795464557127322707561459010431873205873820298337917782275564139936391420884971115970968773040540894238958761197710033390313992538895303739930278807468643210967318821925170870290879419987593920569385547491319083631505312831388491202317747272986795940693208768005032640997497841033126180977249243134688757817951264406719684771149253589901946334085101468969434527087494441489564155832462159962136561182417312239967589660484424738919341172035904486028520531198468056619155406740421513028, 2656327209467822931126023590424052371744127781485355279771955839846300281832344312453031967659064294533032535864134895271541046041882604228861393280139822899559968423692582255981252098300181459243682685366092739589450654706368921152221976495483059412325792229154832813749467044009700459349453797123500282110815687725281592664762874965916429764302176313503073652232925829076397705921806356042977436902922415885758821094869416402090320367935999287093200215733723964364679902223769448448987477244989735962058851085592301294334319432859475911190632221748542012319450754012462431807628254167252823856471674339288172292182810852880000132761781772032022529382780662205343333940955207905013783228073038592006516121038633188161547791775694720624450011480185675356394300772070035681789786963480648282019154395448262, 50164869718632740026570419892389440726916827821440531479509476275647287547280536553053676341286613970115575317106260196087064742880819773672896122704735946948546607366364764125695310346839730892171483394594020348082775130149549856678812509257427851886193071065805312580412673041312034198919160055923362792200164174279357295126189708093197518422770135255401358948610980947881064663579369805599992162238686676089230051548933673117484175754819739730299728783130898982075258021273658794958493877438579796126108188516599185178178854458648153997193295086338693883297612458734744914007611982696191063914392074170975812359944268021537129416069251090164651337090954693021952206218744031903965229032634994329312544724465381750823834094204989879357548220931685321501299309927632298114259577762986478619235104668393, 3454229262212974265656483903933019758626588456641961020425027771317149080920149117838152048688167966543054951790093598010850249930140100014818483981597292704842249729663185554085025968859530079131307115179092197745467716242053963344029573660786896363309048374206922446366008166479489259672331117524888490234613542759915294342556321458680061387671578180523510170141216693546222690954853283936265854979864210089941896177581869431540462365589663693841527239520124583113748696142928492473685764851570114057344545101765944610769540018753436140988448129249582737511917743229982562067773242310193321801763001513001204093589676309470335894074059700343700213890352815521385807472358355607337851767803623447697589433960312145301912016292057620838029063216980728292763528589926037540216542680082909619807553103606426, 826548835098777277923847135736699934283970207449412568888622780850741966097285683649490582434725059336534844641405834121205796833300000203025160370328286235705466305968840159210703985017592050962054609110187617612814991075930161478437405125922077726536063035657946325204223821540513670083321863439919273829097587749857496406917073038340550976953929755049325425233886187759987093578638898452922753874023299967314786308661248212365847177992425885076370466897316345901696483321157501754842580389002533217676627735985019347419758087252393611802421583103923684440943570593134482198571934669797878784389410477209192722327617641243022367398622994039138624327209326730929146330190800042424726081208058416239687128950518964098082497281361968732170094170150558655630027998359461981785693955522138318209607422186154, 3288709839890549185631128692514787763129995385691868656325302852735259893374418931513029355529733882190004524399610408996521407842602361921015057186597287451244118260103586368548407214787794494842269923680673712130255965084197601297847117348499641725324621966381192960218119137255572975796875226978359189309589649537998906939638700197580153916201741077591610095848797225606755449506179112362058820937610137603897133202966588959276728064128178681654925276077620973520234223324910367213411377993820306702029297368395467317936426367962038808248604424532550226502444202553063045213220842256324432690393169539571557665869934564813836943783772175505012830534252384656839240642710104796279734296786131396067742422757786760213111605011373957263980649018833490738275654373581624309155195725064967872593292865711195, 4102743919293331071906238673828066970469978006603693123396662943829333975176339809790167082394272384193235974598828577736308288212093912455299560732512071187712341289576342280370290273648394215972014839980755716927826616495899618032337559424134698737558560025181774910050108682595753762371233616714870866292378723911371236952616374168883707088522385693423734386584467132629849796309137675672514786412564904650133764498789140683603022649083537887151567970778292934277205373037312457303284194324122673115448379050537322865567569471928967518253268282754689154188275110541904439013537764343231028195491822285367694441517101288626788306897348775305836417715177681571376245068855658521360005662755793748667153660365577389068250669852611225442234517507618157952667366007012314961863807289359057674342618329336900, 4338162155024347269424397518718587978463157917551500075243936241311656146780104939930433482450925221314363984541601104749512215544974220414784883295324170157366563907469046312595311083792086119614659559870220136472378161917775324155584260917363693868885167244374777789649330332484880994409445127032295867175758090881138517113202479448172987036992731250238682520795708383365691205392579384791479307264315231122073124066709627362782228017661832149261595319680713000432367510648250681771051362319923431852919115148202503180821247541567551639484941019465296817957935061971849801751032017748593207899038400448690517124407504752510379477642289660250076887469894545536495376515601248159580175246137201144996259557164241149464863769462825322471042939125756879887536381475686973694449245516323096740614258780575919, 1260120444843160080354260402813838291441282116073103231471051121576264633298942007653908436377085439798686539106197046006434740721757335204713029486562218327364454322125744890141749800846243138757468790686198037181050965326026540978796021949841021208825822571521621545992984237169288233593483315815606709524685151160632367171562726285747638894848065499075362868832612115766996835388561413564961016741727489172545873347638648296044372538658610594145336204781888184437010160662677503431460101212408793409480448105663314805881913298945723962713797925291302551667595594119356651596593092409551920533968176995049124397041209188588914326293746218022586317642309372212086071175098611736812359845663935341557519276735096990376932724633360971418448072320894789851621006680223810044397628115332186252643777505200250, 332280919558832603905634102118939796568143372449954230369557726007773365290465361971277817864639981168327446229183472222832959813496477215098244354086572011695961934950548564470829965662432044903142729513236243720757888048343267080797136142286866066781799170838188646178313502023914822436356085652396640287957237607686410846188506506097826371585120519549773528853244450542233452532260860922316401548669542087933898921466772837376090670545687953846351456458061992391933517368008248518775295395267410887189792582368348116671284042871518398102859873707147213161395702458874839869722823553705605033327461234731958220625645442913591589899041261084105741221180270545427740694101600870994436806875376808119515453119539300846028452365481408093937907924410974092990455031340855032292088845870564012292482940727246, 2751518519407736448731586092516559140399166621137063303655952082820032371221406023947680837748175839860205738576165588502422556604495035963020964356291730351300521059897631943588044727531552676483861798132950114061997160273733978881273206098681091308184940030728148072950464775174628190627425605099480022640340644977912565515387984548197902208125647989912654971524723521330797132689737099218688228988594816270789983933432350907054773614268204230568851126392527229640289523656418279718054476214140035722854162336857120741627462114337609863235175940872193888141817324681007922225640756672893337165843442585634905571399867224652728122350791724168860781237976871837969166065415771274111351612743978585840799446008935979050904583119225554705966496666498317721884836036804073915448054545656591091861052569118711, 214894049543455134054520988213390288593150865943232285810701569486939410186196876360928763900604631352368325027148980823119488019252484316549898083027943163665025319678310791680927435632982680919808750720897966975624068190727485464908514493453973479521912987946654664682607098892158715059894707427820520497258352925034710344275663201949112239886633561490140795358922115534103016011404161645071709001781048112681914673196811358335818386143631214055350882932769367303925711151048554506784773173007599527903076891070270391085335022237459288700691911150184035589549171257246904948147961334686688320221932818825888382106429328611656877999892297671765715042690406730287581052849502490713603897870434964706205089382120253504866672640098354498723947291867263748214148840247516877656116274920339465714348273205345, 3816129680357715617719376392437083897631792768022213246239403723200154317352595860103798570824963105284867260136481633547288015154913992252789018875483568163750116488462091506341583358384383432757688898915294440718527239223967192883963235003263822201150999028299911117461154044486294825491768970353050125594316986321337608104618315075213675196020843644875831037636780560124822668663880028227770229927912575392648517595757334333749751950242438632086928633244156934098628548585919228726453919048670557294116496523220808690702903586317610118034020198792115545984718564298214851295338100189625811795613458058467262210993979185300831292038723350888509782526642018477737546726663846273501886046968824997180699769139574935052497614333491337411436032663676558451958446062658388480129004940459504500518845349441089, 2055482816830904445759164679552167891563644287738689160307682309759519315176861043178381352315799680250771893278565017731726361626997398532428783914801676941916992022050551368255644744095728581282819097618841882011422887504614908501347340026255163906843520538689932886686558934959592811727315398675557143141895953370178527486415121836681534911438361649480802503672578457293626038920408415047349032207487959743344473402174313745035999503104519828934055204370016234259148567900761011612936984984310008635893737126257474901484589028310493214686567125804304212554049142892271654658410362465585403860654613472926451365328681413913850000278340993447009259960937461992326481542853504770279382353924704487109092704051676370205077289012706098922199961040119669035929261649828540147284348802219798395211245756052533, 4263830675967969685898219810990710980903653508514291386027164526769929553947595344485121970099116102588016216347701401838244311918977784474405099359881132061292743493734692135870730726083850116515465172537923308087880560552346487888121037855300032395737642059282552477030987068887203733094662633134502951771855043793771271421175415974712921042511762739230869263001084042710044656312721982287442466316333174092281525007721058341153885303560255598605347410678621323852923237919383848963057108662921721968953131660178582808520128851386622060096975666499934453352609754271414523810103441767509397843281110998517119992626392666801057292266446553075323845480213868347333253225939572437811684813048310822121607557895437549503053966022715949613972066549735570901817282578547289617259539746184400370803707802779383, 1205404108472230716697873169999851037646253141963605825432666561830632764720542711287015017699844294494263325509725470922630226825888122151826930590029817279594357838312925781040439288347906790789961373514088573349446874988665042928890000028663098732910859165665246695992632032486346415419814816650279010365170058482064437009517192746764124680311865402273633838481548999472461604094898348817603210260296963381360661465694013107363115967786367856031354311196198692886023150547310863285988421483746943157767693102561332430390473734089762525463795650307974646687123229983950082356174723092317355004609364383879176657154141583346302718108045124995606207205519822453586956640351067745038539824107970737862173199900754533951224633210608494112610266389752195569424081742282542115081969073287599100274164232833663, 5199552463473347582056411504861687574403344771697103437807567393527312697794842123071744146733561513499362062249734785303524735181781368781393809085376243719006310677161631099822662214100312131409117194290305538487950449023928877229457002061181313162013998787818033985381970384503534954915901898289645912994406542697069378573655951444449589193360396981039318300120157357980203144189049727634246334497887665556943365032873728177891459144754550086294144183048905244167896742920183939046300971778905132235314611637992189716879769498799036674091699571874606862196384946094686055574865692560247862251350565004503316993699097840155044792586105117615676181027986972011588621279430569840516282999645788222716902719577215562558079581449133711709738482067284754328190504436194683433133767594103745215180716696458109, 581619484872069563490025431105035947482221114952857061099639212934916762495277179778982178997614446030300938893214995009097390583853208558281295908768871023814480285349214809356542513912444197402773739631940342590234465006422557930819254546966957422729113364713533426039923470635984902398890777354287760387586745598491179557685101295062007742327448121656925560357186322081169086617107927389426280381552411033798924256333757688106085671302942348856394418914658494644887136222640922581196141761941050868390151628586787462935341935899266893985778515800433543727598797730713185607293590826045505188602886511386638152353585487278906293755755293447019506908624087566577604153434775870142669472202245767355611308894631000554178943866778955716718050935761650329174308265928135659413630489881104244531264410423154, 146864348558605348132713621204264395197288103150813069928433852129098669130242912013054802593549429483631591423459946386075404002388655011510555613160311703493042443182340165386590765786507001908828696291728124144050283407230113994676801578037786906319451085432531406371138301618650714516357347602073862741228064895146040345560056567948049271874788303999858714902963330671321643680402833174189313670616379022369329417339863459384890409629176418383751200754316291728595833094599219930815106543271779014643844805409624091299552465353490808718459842391826844385037301293128441184183581761028423878002293507709179416710457666329066664577282350721189517137647499799539073759115645398849613046979969838609874941348658806908432698077285651150462059009670903610951374875045055122320956716984350859534745397961851, 5114113666161843397490416491403856525307005430255875460335089829495622175373866893205783024944648996093140037381068670850990588181748945638413855587068105937157408657237543716729922468702302415999894939173388217249819192843232160649929757845799338085539501364223189848964531987672723933522008505807701628055158269322091293213706517567560121625144508232775210122414878802602685511122873841429430602897267587890111866221810029067718061129113009394281184963115773026154047605667853003765098231414549916618912347492119699571733223368495814501612535001689871582295574082186778837673327721481085722457053259450712269493189166773178433332581528980584017583029190221261813653386961216840325511756533010806972254476282056041484250393053447126114891493907640009802692094996581684971540007274595366862510303374831628, 4651183669154432354810251079411530172762808461037621843167106726192772625834386604349682476419510161373801081123439198862907470529658087555237609572725596815232780577415900210878839574116224763875998568556235179237831331669966696297192329837153450125360571978818289301192445489170837091888526512799632525421412357958745121298375673214059960843857323118862906780881687699680988462846733446417350423119998075577412693482643783816200752693366158648185669014427488601607798530197995806081871473875211110179479166953293630410590143491882408218100885685588478831606357986041592594288720032692536089013896315093728222479804417757201944093693375881998960331011969005687058293450851823789062623412055689173771301635299359140508814652815913060667249727678521853959340470416698680721198187515113061409119080563408684, 2612039791388287614318625228534342870181051097592719764756696360084854186255955038991023382637759505578097273112841856951004005865722017450299450228004108894277600860726912183800857339165277174538035493040713935073564065484765207558419704947479920217987525717207370638794007350801257718468544357444508859121379937198939895273260482008522093982388125482271276830225064945913058279891157657994729309286941850279566474118619173716540730718712146399214937861846412115706353281098328481837719032457141328712460322499375679975070885565391486660215259137011065981431084039877773516246843490386508686953725737794237057031427243896761157410978182570368292703869004329285329899471861175414406958666597004351230081444634928283643357954096435888429898503988326441951087834408768848788186401736044210048451072941256248, 509342669214362301862117245611275572601197305284569398591259692837425664584667268091589628725182825438074930312433104826517728858036123215665546361327730359003085986491420561922039620460782095466394120262831857043940189820297478991232301278584252153688687409659649627718624098053029855002407452763948780833321107795373293783106287614272211953993426352390183747682952947029446626868098850264772348351420764661057082284815566435262367582663038928406663914860505597559102763211915901903446752425875961048771102862697321478979980299912909252081201599620284217936980973177301788644818067261463263495296858423769311160386964551585065765972253459589694375213148429962427726509692626534937135951077335573982749704589687444992657914408160752467628735165075454841831137043554806354683568354968353027144094026391196, 428649211713183613544419294575075081313923177832707331318765073184523919937631047068103293403896182559407959071802377072603526859390088402033843169116023746798136140868405917610619850178622612996382569708930309879126507835736865658177849681572938204079722939340270335855844540923016998924346929669623690562375346028277218427392350135351576887955030802979114004056695247606891335238071190165130697929605888673899754264595310847018151808069644448562262684085092675978251830201142638883802055936641954212130982826400966094610485003438687062753418478527303800128628033856808619204435515634342560791628374819746114890161225998276699343465210278401839694219802568988134988407961016738369664583094365957956668418423779266935837044292160475358572569112116920239170545535732596371518765262519397556554474145288732, 2124624330568141933815737223139325686208051816040420741921805955807396126858806269802102418946868085469611040403200210918807496284340798509722801426009894423690820582922331698360106126281319361610734091644995860990270120642951460315299728977370619624412502794408424939295814562234340007662724244839796008349002692609207844583340628889115928165195481004435878303010174889057193474937981079902802799393933464514102705521921112362372169331339867541516319941790188297926952784235320880992936861551487623224760263175751073368454600700062198131357693731299606946916383294936917875845936164050776072001233177384980278878677601782501308370211876583721172402165141084797035133583056390372373162946491175727436624199934488661272865222859013501591045562732599723752525680796437171949892981865998237996460488473148265, 3545997720885500590274844039938290183323855318345412771983957673204881997242185060668812189628313814846818679142924046068281486694268595074836441961958941455353447231661412247011228092250977971977913155648562325527280288132440018313374112834626522829330247462921161911350135189378853628348637658016161492161688708995671551383641106373443784483014170763316468642516339227609348584833491065373657354137218701437463411878519883768942157586225685558941588345796218169599016338395659827838850907945457057707562962892778900983982225145809120499749790980924174889830618826551506682790912004523915775515501019672154704609028307073530187645174514940034413170746279739085317886136776633438592742751518523180013565407105685161024149033614244952034816635287940732360127121487220351876443810794719622992590032181393569, 4836618536715591273049021495520990034119922897889083945864590988715621565754124267762984927053606581907905949490321072809602135956706382327378899313562145397588175495119986442877133873160405591938484599787222534818134473777017179552562223378305295289850607838921743168300885124246814645391299280843298903853031537054643298528117533589772617578364385695560380774231918374865188026833986917264103484172278639323215938827231437768371776859981265657769637748249599723443876143996532888315487875485873974515187612832429101144282928475316145248615966381155105118289356192824685920619124182571179518492201104598416267416593120134113607609446202079007593244213559538671036302113247713348009673110361316890964369387032719772717189760129988866787549723271791521552518225304886024211144993593118497343909025367724215, 3502957119642283329498356160960377117289757904337447370049539727917791391221414394843100799078263726577482214728599581295552651468744439790100420384731500765372847825912640243042427015282042802985673553706888225737356191612453108887245617748229439269278351086378271584083631656827608557947158576932572574181403899567567378572555223098757261545985410948002314108485798433781567341812463102029685415370004478655348008152645241599184779146459713591491561891072444377806909542953693509123579808799803744732204439153877705558127041869218083180725441152386613817727196518516568437025169333429358760672673967439394997434105989648337228382441172266919209249711249894126938707451655531929437726577467064228723354053510121214889664471615734426438284031876622296473996163852632832803384388640955881085316704082039995, 4303297839806488511256549607317382952267600971775466393252613611679808396417278263343635933885041031125000812295081786131711443146447221177431029451013727686094083246712095337489692478945469000653414355504512054589422373626828768197587404759884943060468690338141369173700999872864627819532209555851685640353626171008845661585751278234006114268780940186258348439330212768541192319404140534790491208951885684044095382184750150345501712607161060704461740623445772115056916506520253646253917769840362164018407288102437483166855405417542546054966461974805919255571002790229340095931060081152311142933027178328925537297594654296955419011010359401090539687926668687983969740371441404240455761427205801730642614771374323673749354180516036017360109755400618715202984215590551959759508830085132391339920956885971190, 94853980013714379084609484238149917762983393661814583280673457195694384496909822930817613655382821861649648807569147502718261256011545303983418364583103100034046663699314152124783875169746748989993336873289196117946458574157903933155247613801511055277044942753822056068031253452113652920932546118166142432872713137932465820003162388145739516125151898064742266759181853102741539375862255232191667999373583493910852036904767672674298742259043023118790741985550667310375856878291083111302316544462138683370767363016037096281916146059852363562786287932046620239289727352433537398576426335237501698333150702848443450305345451144940859996136728471512610304946013104878735649748825396486293211480350426830860697276547277212458172986662423260234570735469342893970702754776415494789299129655196075479606394163401, 3782526053208039139458042159211966235083470738309862314656341312612930046200867696533925171338470969350773779512782039095556872333848458904982072949940524667445551759581012274863042669396880682127637707195148693294261849956969022184433478322004289418235695697732545760282662638441158576809499328276226379466130708787875672190645811174623219512831011217931336548463531878677919539849860974080398518893656724379077271495932111823452241085953844481769149829618007396593745147359835948083430326252324720796117712446432098270629659725714522097598352142247882159098006231182076191377135242682590838352481083218055914327613038183656622564746883234320447363070756598913420671009127312965944491589168884741461443480347719388352943117998704401003862725740630037262893340459115432818767314982624466443644495885166174, 1720305720651280786082179359065568451743320398205213867654880073921275294058999686039354410074757664421345295182154120953113538060623942657671742570154003153482486268763843364266761191778942143810061393065832584887004991199527486054597930313965930855952427158300910376098532561042701693335745571608834092008802363988534784009508946027149235281841474895502799725763780189929854504149088308306856819943749095604102572052533493464647330519652725001627251354879888641039431279548136021605573146189157189692260870467433580621863555484245416640704516611453795998442595528438856291394827203377433282602127856320211773177468397659668116278315101814205661266360933088395084658785680964164292465400441556996965721918324046748401666176763252251366518122232554538494039946138644446851073750885763576136996805713115423, 2642074969448529729747435281586837589177209911056437758932743266390235247272933574864950250186696767309815480043823559287832048009433746309604305525090544623570773012885642339513177453984686270930131849348535031554208270251420459832215891875095140854008872266839006196797816180794490767486130487888645084565514698474892063271101168414544089246310499453804121782398731092655170401513244795507589927090280990313516594732875196695456800336104339291125348320152658906954058319681389588256002747184594772173854345230340854019848947237507473355371939797921951625856284029884422199517398007137193513197467570752548719660256125923124824199678927467253790863458851154271092783860126791618182745620983025760283536693873428063143695998253223591481579040457482256367448503374744827909311033851075948120975672627795170, 4530741028601483209361450960437149496859556541779851181735053457271243010162147694024118481744980733179640086822863277513063283314667595188493354231760426952834671880917635680673116124766513028886409771072009915650687113672448921584829279303766241604432127031339717922572971991641756796818513634104785508997969360716634265399527893841282450101213998063716917958959500481303927738712008450308868452793789245114280791672372006009791318142399282649862942820410298645929231989001973434571453534181065709024166176629061344877979724507846360610222843138324958263195991341847084147722259090094704262847337455004908826352717453923220783952217689988392192125918914437197700777868638574653560419433716397436194772916860250042175173200908465866868051239901120371161707337717694045306446343872060726579531939754802202, 4363347373519275123024946045456223531653369807261384872245458891248320235349382400924256818395206228982264560645766868768009996069395491797898324453955631971055050615074570795216332078589371065589741059226899914412994607977623407086303412982071607877355876773973469086089303968437712540960723344070432616316294469365358788759804382218297293993300626909099427972798949346392890295994878422769240195011622368743189378208733667029725591653683240168161747637781078188512819869291461382466729170659952731558596135190046675923643636481096930851753496496578253027494320954686914982118206843340871344915287963823546255118515243437983927994327027559591951403925721342246431487818868361016166442309899312455496322809342815995223864407137399007455426453502982215394831796986911609046511034077482090955680547064292756, 4768330140539964879011945251469013615172896748166256801081191060803931381417669332965558579256892503440541841778054850120616240719578089061191597432483021607098520012961908698794904437753472294396517421871130547762137902688013907905790369679664268475911324046711892193039792517384254169292978928774667042613514689045919116683846663366028259390970928783529514057424099915133885923380208774699547195222173243121316609851392969686956620733206207439805752983411754666467114151907955971335101230062330774726725574320553581946892902375231444931949356420688311142632413385409969904783064291180170802626345665025441801240916076884327116454399402232238422827488627049153793641597191526363512654868835969284577420691381360717599222356033022302152431995539383649368930190644672056348116616338681916268963258286312948, 908030069500075071800011181325397537690395531524027763014455374884709154848922724504131545438176934929389728398428432129367100655115898595076500620546646347932609046699972875732872113032632790416527171376899565342553396233381000089389451020883157728817624275700385625287967311432574105121294489421950453445013784658527928360643591969078499419999368434934125687143524113612166589426401102883879088778746991368724434465034273866516494537329031796503749126642396973653817720685754962644269157039588939734566441430428646336374908563836546126578611944893082377727730650610412024557101216708195545859945788799380561906458239431230381494217410517832961354442765373762998690047284556659170563362478698936070798329034303488772037938319179668033608010645439042061376266823227869547001214080959647990265208078123640, 4306342539428766138441335596123174258663194691845662433331886636671590822153057675651222844877975676054423928956287172555564929382178371227142719841530666994151824535745854966848379162916512821442725633495987384502946420183528731314350585291288537530739424893060609838445596979591772348378040751507934662972731457830121029158990291266972758944025454076108114427313374824968088953942825407172072490424309197826917817081219722597645772671794862279881365032101273290424268263869205527935822822586440398969301689845804298095090138475694186254561059368450857207413662870821101096050104292248124512977269941909910689960010487646714085340997110895979318176777910347252121317018671194099811378275607548038565347057176774663974083080962822823141448928370636897401078791088666802845705002704161724755574865685943039, 4033644787341108844814456234785436140241710611547038096264863834093435202169333646449828465265039273983246363168060266940475142425178523059701232015625021008236512328044425602345567528120078867434609684038506725585946869515588651168811402408095888527094177688756161191914352163367981227567188285643411251086879398391134546952800086582660353681104473453620789191261175887552123157708025205808929410638720943677780928723143131510825552828835135617439005624735081478400765662372044785266981245150029168390547683344433361129585807786782685583641991966491885571106939420635938207457820915248044561897192978404731911488812472065667898131915568061716279159705564666347544655147081067624750965904986037596463894013594874965881278355714855096335538097913543913491686480380109086242963803329110096794776110717347376, 1182678753866600847436825663079029964741751245463713537054673427848407968270418349598262985907990455264254681548648654476196123129197901324201154826255267785586951210995160826725890296557598078631718538852993260091273197502656183122068226450340784788517814192464781892062265718283372089032725615435417624583209792430534057085006305074495163272585807779529294386502667740083123064101763983190993824940125110855901491752625784783385510931572168812804353568809293107587689891355257392825105079154710509738240562835930782807936262197738961044822855529996760807022422575317072644730863026450683528696411487306076510353092342805611020095582020475728969457971325292971736388871605714207787428257091603715722259745215173617685916389656731521030229522408444103977064201223204895741925357072022600209591539798825078, 4788045747958974748910376062158772005476213392606373894036012754901131529316461858002592178040553780189000068117310535955674434980266786708117858336019165811206877464520019756765071867339881768008375472056562758178670312887963382907681163962958872604910248980288684395519662323416182589230517364021964050220171098075058671059708812594130483162091685182473824279218244283800229169283968849935552441274005023017650699116437510264208770723153645475872914783476147889940553072730648111917898976827789355638172283121586280007734855993871156069275811273395371897095862660818841603439126575381320031146972017242416926121755084894857845413759589493396833041776919638500311123103611876700875977868591147593830635911547988106490677225544673805963589697607902933394913015388826260612334736479879212836442490604544197, 3370516151190274451801047268102772718336428928685114330599316421569752074456313592861163729104326322819100891165677030745331754207524083079100904233370389797841881277712266742918038062521636680124765796783746971460028826524668050942420404528277103361761141875295284408664981633724568611189126126998592277505067305742384925999667332068209120509530128815286583827500095755461166907476336790902011482343369960548177534713781585187808096591921947662349495931772153468290427531910066689734910224619199590754105621474483938599821333920469235814737104368107399312813611971868668271894229877748129482537979726656424913548561237478864964208431548690913899261209630929940858324470401379952726405011548927794194625587024799077046886420302454933965412146573881044316401727290758928726673877662480999554248017473364102, 2126136987011968728614003806053077826779023710046101746460354633729161615248325542156860621922203252156493756516609547397687614571545719846048743398003344887911985781514707989126490906386266610574160935567822833927624379263860891853602730950827203909971338196040064284672874240730467262780848036256162323309635484348689348563462971964340115283649019926419144512129785635947501479526949892764468705510531794426746912981414232641060244242219724104638651555643475561773899710497117333412003837526384198518172299593283195934482750969219528498434367238707141938847443054464715828333689390313361249243980182559421772842608135298312976871324848225678797591537320566942424994734642724637077777472336645306689712856894409183086376449162599844440406169176797080787614413032580195222366889777065798517194985593872980, 480794750578804874376403950041095744513606240599910563399565156477744476757330102097770718813146862633987510971364430193350414468402016086875481346758819404572814807608266261520866648703404529075413097948576526469713244350898600143422785483918600714633205563778434356930398324614306549554680697065837316647314302614244085437861509927928275478569947198701103307211095952329488539373103885021826683174211050895230947255906276914895209058168626165843923477536385986577500037544332832804451699063444935828558655180851840396288335238012572191110184377053587785768670803755455743452434493311634756669354143825342368293113956532604039227324422066243599301331248219655860665247041519226844724837471887611897858198428617669732500473850132999531911282599998876912929871655745947398429857358683563246083226531491310, 5665993914904865630928646693642023163508361510005278571316599637090919020083257371411762760118643936248179685977319726843161104647821625426406628963837182264621757604320200151085178691545607223129184777291749810544116860585828822436301704922540083830848777751349560925328220168440935402685184284407692248178459990194664336720765798010334604155810244548828689766694534649013624325037442603659838433573764141525083368764041268197922867879294470774779788293188909105514841597067562496067482045699987640278725760439111815096846064159684010308534379824786426101413905982283377210443823127262294681629641735963861440964302037842615293989396185284322353653550488284230848401658500717729743032725310700253815886653188665747193992804496803786527263381898436783293788997794033193679967585127054354184893149702253774, 5759999320558424591998704795256006594141166062047061517582586593216973326887856238454603780511341434179821265598568587316158573966863594393520695456620784873707926266456038874688892014878328957076592540823624326201010867292588109004029074185041942727856174798507324362486454456311456847202602718058123646964384976816471410072995188853679837273406073224854318082835477421890109646034503064022877391425702124928340262255956326463389068414116803320658565702162257969450004970483451536950239197521622391472340567942174368427651542411442303033285160769056046013870359012003835188404877637657866101726947387318872034018078499638880997872077602407683986806401261127013832866165729186887215997711910666403124930537275275971005079142367997505057473311966668248030206719853088151054868337426050509165520907722834380, 3744360228544276703102519898382245783862192787599240608751341463404279615242903274430957767046814646070974319210061547456398923728977384847859201046921400158151243675269070946417560185081000610951150935110043342736226956057612245761377956370726760244548669482842255577870317278626622896059567207593794865356752739964852850940555019603853976141813493393981943916857524016183139216507480999608175849879067007869914690519286376291301851195656514587223543640870653581811888503694178999842885495139438560444075081082353218168435768135790231651715344459553286574340412236137403882379837696398420235507915215558951219433130995412115408050284388881631722023424083829636129726799151700606434829525063562438858460932603559778459396646566451705835606311517892261552183239446375767450131868244476399400740704788979771, 5808029126014770107564223517620672587055371061123971700657883801971040260086331744462773792099120837387779745190421354378137788004054577075589191153105421577964448651621614202807157524966444773449373875039946852971159305814350315868996065362708406967796856549089775254196275438929952222957569379667656360111955336018441941461266417240052269920968475229435483797573495119290939912815287929950089281261208401929631960994691389603276022453375595517746840971409808967015387661091510470380195469735352679495038218509112302168409753636643187117983507418119667827471761473304190178363128527418882887216874729675770873340081429025150941249520956542958418376709117375410279619744663794727451068366999685215900342294077785602491370191165197487627376511671484950170759468928341317526069493768794258510878246195419182, 5692349955983648888879844597938627365340343205885623050038716104332238512175584836208360888570172591472514133930883913225723984113455761707093075772517530759057753309561323137320012878410770591243200268934330856997435659442062813256522642126625506996649657324906733237407635968330597883909445723207724302168379294156584212324632208753234421338906659895207359579020510000917004402910275750410656564885779804673996721119521104627713381081819413687894360843165686316144575315606070458226463552997546332648069918740277659780777846140730616138229521854302860859065974809579405879232876932957964110585168357282777970036997014080351619722855933960217326475826976727607092548480615536420929447495040138639345716455261801907069236880209400354394515195014950862964710195253944451537926381608684969694601198437947718, 3349264946812756276879396906725111361745553693215848410983719290069639489871355281129395150052376358057018964908635896253874928973471313099185626533890141767852386237477313001660866648282153869127554851122908905930026382559967335254278912407133891412473892012486986933808061087730493850667947763008250502903235897911235557156219959067180595580168419637072572883429714133242530479028229677360742626984347964915508744484227345978655672611446953439322403125668852956652009170013729831065466987737483637676063885305719440069379541379195686999678660937057363394274972577054103491231028243169703671030098855333471227815735549367951363109207093898060273875240207330594038918082321566194419984662728486686528291532093738417919025991256666868164241077868984833489831486954223420697841981388442536667427613047366415, 244120584116085502722927374798953527540586789236900474658985131303166622283433087577645115069202129778233005805048486462634018885873215509899571882782642749538548475340496490144109363331370573044806257233620305950525069622854177994791090944401731725815026905529065024002460073173789644712381410587261375060646694685335593192499600479680305914323991117186452489722234174036255831375034141502312135491042100520508342633430105702158933094273403210641690802129010970205802849309350932934493273787238212022196542818782875702748481055975986982737553759805970054987189135573883595360371143329732221129732008968918926285763841604478239287625996364955835799060995150980254961545080239334791028797119944511711045558297383700706383497606821034584943280805880460267910718030510253630080303589218442664342601848929939, 1842428298834258756219553300555825371398352919818667188162389135884475766300116404465618295966969132220151809903167298214320944686061091768430489344667196820367681256923607218804781700775954826312901990808946538259208586400780028140830312078437057419509015481935715619090925618506794158065202781285999607276075265697416453153041565555737714888644143030793749915773267876750191322575311371030909091280360548945707389969897850017063334267887812191711025598922467162430259479438412525533491147423537291987307778277261743597733673251725425970197199855083021469567540189913605243937046596490953342040544283705890194256781652025530076571102174095601731399652043887877144979138371311066085136556228196592814207603581266755579873143004840809854453344732422578364297309223334090534372857366122107092560956784682395, 5670307615755492038914786679755263086647697594509826310344844654792985038206967504827715685828133385165474113395859894475675283598181474164446733986519816500692088302881339706771592728601325216432826791938579598721083360930394427458404784645745449809677469629660102039781852070985101410647909211805099776198296233243298850467508795357649863120010364253462918564036428485472919782301594400299528752244370880370722487480869283720440119088847009937995182517190382616577881778589296963785780148924028657437511358986873984181888723392205557116519897007845899085419108480264683303434894341225386988916846420402917425565977773433066878269023408368210657781544180673856455171893681956733683875658006451047002157128128241719030602593240353459376468691725977176050757942335779664866867383773506697333534401665719545, 1501079836659981712773484330509913688794882178378280257599527572656080775480456452986400004631023666338817994149838716423612191073804108827225751047645249078687619200420551307223334856506870473666425733515869601435196326560500287612244898540337450419089062582056884848200312469871810391651262274621307162086749330028605366589865082898444281694093050920200148035530111921024202736540547564655115034023347880911151018588972706761287411419867848314186739944662018183554452036636440361788722978706146317371944260469561897236441119945451222863982382627857913591765899858295608496315044913659942865488033073847742519755862366101015644337224156481431102686343485855548664607232671382255384707467054402144759878056473367881121692849902917239188720456085722615774465878413237424744289066337888944176059133521619798, 4335647893172213108520684366070628969850771046285768547291254089276441372811032927580221246873557896341140575273391163675367886881989599774952177722047025644721637113357309934279259664545610874910603596837568984725455540272567775606007073164653894763345673882584644002493953336481563291732656519554923061280935129946086864513917668555506642469246423223097688424366278661274038785613280081349828543498534642100672909604733388313829308547754441061931714715217861578937223783731308925963506307135955441008499475436359279135700163825069178497939379125101175865573053094366492025219668417552762950390252011242995893316374383683455965727603277223844671035568629058462375814135557058598609213369713148379747479441424246921884714251733779799904512488340752044195387519442605573911900967184369275607273879095325070, 940048325767921116708416155662029449993249989824906608670738013365248264269276555024112825312946024731239454170504738775236125405993140424146968548782074415906517531814037627895322687094882826114855937455092726886597638568820095835217593865574459397280488251290062818167869192452904305113297940315078006397930295736351369716417547124894636062401177704681435780006486275812201765836332116221797653860834152428381477995029816007971089775803313790001191028297792005291537673907965766884234243695748032435475683568666349112886250435210186141719585231783818883550125337584460802477812809008013860641797948589024029522313767922516412242453935491209616265749106418085963590635674161422170519286962760196805329029949886126301905649866995382436877783443111944665920043772765596712178137130886902173915537700466045, 4255921075751590228044819819817850441324663781720390107584811945749116521371778823384882273331470947904148001202819041784080420713199244966336784573605524730320889874735809768372213721852793227860396238605435992990088834349611978966921470079798026441437775956206733138113289985007445854517136594173961869526195317423365719506434522220346677571850806616186340720560443024300442398075841130723598309655893269355014744268204535972405293419974513963904568559026570541376879884799763806306615854921736126168589284471292845796251397434279360182854167555067667176441613454140896614565508551083201003014354223310064417613160328879975726037149711088048226124912223987763989795025330829205184892019469150868856548229116283941215832067946413409419071709941974068016841924417751298904371725780040924838999593596494962, 1754589970805775687027122324051143431525649032348284194102403028041733534376837995585538009808874037572176331048927018068431171062208712042238491049647394232799231613835935104487308131008029854550755518651923573319591491508620882927499495943541610459870044667606456444600540730649994617472075519786142866639721296713211144780761947747382984741899073005282321495863240921385934782751356575123524590010962918762480970791753882651624069776240922538160332400711676952648540721309482976242382499040943874058505136587983557243588264145334665745248385593300901788714549171183823089629880588303012450910852637745276306765185906503545398603412869135710863482229928324044456207687013080627614491345954402464491307059140427929156868212015599472489355451843951061610394273256168214997118918626516899076695731913388524, 5379775693207328577869925387363693302165245271929853014777502862537287949527900759903295639640154888683780615513454196268291991165001951796077734094576190847836969444074425597842621048940813251651406571097439485951124903485768584371916487680799205414038439689494389484332280599417274737379860512100053959896948588597849124623127665270531012111906820209914143332307189762938124664054837760065292583804793159933012933972079331782446673895895218494168005877994152949733751226666609443467235291186750809466915305315987085605436820404752827543672666651897271829857293508721564554441360298647842211184146121414799727054717766075841204929036352479447762589493020749084209955777160845857361967281241888985774123642880356206835438868152469124664729394759582576243088512178195033012259615452919133616733595323144859, 4327143834505171789500542339114097074875778475973757116458239580425737301227305068822940208805677637449870264842138457318666797498723523089577184831013741684013679070069695812498844695511063398469794739220297034426120211701685547984986157861516468260730880150255493788487608203658690983329065751844851423580778218101000934361489614004920626706455878066447441759343188347227895530258915148818565326611305814990357128540290258339881693929204916856823952137371543950285802970248151291428467993815497452450374472163052284301626305595227105032841740543007447283952781551873630062976309093984391912132571704680329320502309432793988128427677711603340317133028312706709316357546652546816952110882236434933857982822068913705406110955708632468575878707228631953684851756402866726306702471435959662713497805038964760, 5384907212288168025626152859786915889809227912081107889400227209357348128686005128882859042708126751890976739721003227124696723278916357145402170243297927802584246512843013054873400591944170122837373800261449360321100928395320166672900771358587091790088716210064302339378987538435091923092508553664067614922925912783183628884776811354393399607364199801812288321530755823868042771997736562190408456533303116293488293973245242955793312258130873406103342709885814608301269701249197965594006967158501928976480617631724309669413665414198761490236396809412667727031389118173377943758671469921169550089622610414612980271533471937514629881975347888322013980545239023596472570426219037704262767460458226502248532738950714484730315309086696334373361064457770892207326242652397395228296118258791436696854691050525650, 2111550388071552195343894225909423066511951156239573060164874429898413721767095158340509213402176819079457945725000503511781005505671193291161924783337482126932023133206508728080948275457410005966930119082750724523190167281931536305292013396606108009449064079214087257052929229434082005604850997541161237029847970603709261298147442180593767974071943104502874133816602999991064713761587091774082092865716705171942151761662194292635561510660012416484500600449534984156509812088382359566383899813357184814318072308872491717890362402766123385340044217520225179895248071566027725754225661734238129400258617674658368227462070040168366474455755233284116230675767433183317429047381626805896044455722064137742928525005383557803392989220294341327160857407223221894255110294341711146818171107145689308538599736621407, 813252198722902269028716929188636466592835730540334643171007742785779478902989754325831085525633253304816582533919159431443694590076666738719396847275489183492151570527463999406411576752370916470438309992586625928501652537223369825348589913579322581986907487661078172595174753281684516920870998546771290035610028962143966643082801749891504525799297519056720366212517437218790154641507385845882573878121860534686790307939967171689833085292119207322896996271390102340016124994446428965650694600450959309885826623503639424633341547014640003923470392128941589500893019977253536957028210579389638924372533864680986011150240996862777517172134139915887517702232281265690526260197017202510551996794840866867123407615031575966160207427885939690897545711516670634155769285297471817989641004871333029503237818417042, 4331412364794021435081415435683973238137499361888109558288050138062557796834281975772660762150674425315301403829149114544928549682924808520316846689232454757647311408456551540676318614971693776997363713609846830220857499175582470019421343558784867637297501505515081554936624155737322135102478628884562617583060007379288615040558706042051438446985071741409541291065542896270508589499219419786660834945796414952384083966154586824769828071560480848193201176304120431707478941102212631105641053781708843180417539979859674902232082999654244819163215926269288247414331743993965386578070032958020277893135535578000649403679357638585327900585380686247811260463614892734922743901581410424874177609550945168429358610550159969898957669240707380777136459862721785681097669098273005765292209266356747481315761594461673, 4800668456884097215312636678566032278886539559789949593471996061142576409281999731104807516707116857350954983179551220491677847810940130186519571718752921734963869786299641731562823430911791869096698482152629677585650213491318301529168191334903042188919556364909545276753102196541379230519300982139997465645459206639964407183908304404320249170411775468050550334197361414864358525424998014166579982326768765036855398376793433890967704509551412212512981506857523095803891041819173263389087564910030897782095492351238004803900753569816480268829164760021078693179221691991853604467989724719864930774670138836921575374856850244042653938498111648285975864084449033178941824132761672454972654381233304993921346550277062688350343039388459632799249324273122440820390383918694405541491119170000373212409421633941392, 5694469640758631960991927893360123233236545916513044246631269851015562135884177139814103440207972921716675417196973909570743903751083782236464995197170255274780669554241757367589457741020530783243753730808076131540525217069627939686897306518076604498404016640161850957973569018694923983037661966231191867051888046577260359697201945516628318945695402738911938841676645924703178982273514531091594364124045318963248081325189055912454880301363781116293962712857108516897283260234046023880596597144222874675541502822560309698906734390961571355455596030887282491112931144239254094098329598655109461727983301622560682978944787501954419804393680574051910387198571159907574403489797305356324479401874857920602825688997358797550090312560382870653641724744238855732509510830125904725239471271392236349850099693873627, 1624667139283252137353147927783846673311937275671787707940525060398769979163155037863210065528775594680386586467825000615663178375354518764334988769709371188305147447944399204636201361843516175771187963139313918277303438549311072895842015636120099473003850328002446628385703680460644303675624018608578341296179548731866464525665348129524723666951923871578837752195706505951472600049657359604318925453342996937399337723565992540972154186263379083736280951663847563608846133587965899582846795959806172608744856383796523873279750965269668937604701215295463472630853952987229115456540705684872772407623436546846745989333259952453066312099828518613706853935716391962433950576711949207923642880765214740371048408033738930514174280993288079055186899367948914419430849746058387044644499106411146466338595427194230, 5940445811097625422153428579546634689382760349907573282570008702467391978800519986075281875504808161142129582013995372136101137882912776305125099890172332716667154102631930318328552885221477406605001166388132179885636221421634708844536074804816077637103137510949941402689376916714352665780306546800782274433210702687435709203148246215714714199647919304595392076417358087409386388885379047076890038205819775845175877230780384620272193427927388352592475987540681954242066768250191075156350063026160946679312468724473862009045497029863430777841760987086552896936777726222187873775697069122149269521806462095595390297056686733263051408029346131388903392154396290674968040366370507915719119666903281633313131257742906301791774368787624692196623660976282159801229996629864302431443671353403561825942602971208204, 2022840005632754826034318901697010431156231580372171199916460112101176713464574273783587555393679015038425091069536667742877465466718108530018823539505874016381720368771234105883007196203965801722022094776108335248168904503109583315156990072766087325371012358280799057852498283710402558204133978763448706626896399964457059866011714461108032501196403638846997423407776799854993203080827214078540977841476412841296467364968617508955741143363816728361636713681429823442760865877268925053807437532081115432759651868687696876044953720225855503418181395583951750756155942698526791353737277414961335143944403957299754786452423077397013068858276687967237118664395368026157646070740536888776893677215882525298547720949569983506201250086894903362405724181085797912370275155130211505900325678419933256059307330307454, 4677877635156988672627884143505275687983370042430726826266974259186643647230297834826078088117227585555322194794408710050532060473255554635493357099489681478620853103204904581911316411960127645334381546464076798061692544367504376464072229989117582190420823629489651380097650805162574515155019346360036474343911115340059503297772448593572454963996035179774302071982584419028038109822791853965274969847759120665116439635763040098888938014616718517498154750294686133931769534643880186282987192874736969613717967124627292709340600837936046414105932149532866404338836997392131595205000413238446323171915127141893198813552431799313406070706320437940265807850826556361332581519362792391652693227205143076094531995453648600798546495269750070745322436395342215415978233799638811072203816257513123171776734789245283, 4654474529060753073388570965426775501338433097450899037349456201447056213325019582572830644525486904075863497157251431760390994047859823670781301084868122115184472856702889101857468249111825686063950680830860728757980153535069524109562137334059561846546315188772527736476655472697953443992754970611853683218466248401430697944040765250500325557718440918718457646329877202203318927702990741326258886623992864698177027225936953390264315822796332851513635222117138179812490616253416530304743043227758112935522543054784852835713179355736135640512271916196227800090969244451275367804636341871182904243009514161653574280490630298425239859556674176740412931304485536918820793892694629195862080798581926318486968660955375198544298326367470113758522392247303379632609373058719494135017363357117934141560890795670483, 4637084523309848128788048619788227246458866788717215300440446259012717714197270847583995879441044032991280401276180927796135615202190780881659258759592997304502384082151214390638441246908488303044854297361607246760641175607297815738675012458102064882820845749994063884127798684790849157913349232816322553140037796509629501542649283254326546354049513703443347388436786327916224407463745360476704245776777231121783397439975547569061170666810608606987010343101861397227278642901274674640053772098888745416350352218645526377162561012689170451446853148189881368851410405907215444409169041489140223496553915043733270666186126637174750818317319860039809896432894523076567225931182569674504632152259690858437015136804193713468537188111205204987983607863169498573718321387021694745101087938482693083092728539842693, 3078584890347883258552412097851931574161389937623553599806652625565227502976009510080510827024146295472492931939481832624790408549058019789483285169541775246654642252892605626815141973127605791987520748818272640145447479151702844008229132454473120571824190941144063533950364442496248961068337655624133330123451047833953617388303441421874131709029095125101652499373939407223861316026762803174894909050352191167079360699266995372768406165131058130291438154033220908114275047764951374000948495571572110575818126694572560084183378274396687855064141638012457462625997042793937207956673115443915726108710829956355456701852505998821602852899261261999129148691362519678408580913054071217300459700552530841684002407068160929829204330691054452888422531140700807392397218458398989591720008436760905482607948652008671, 2339213478196447871889986076522351228129343601907290890170466546921708466220683754733042230306330735766172149073471107225961509893988711322131147086481100982006726639429281872550598791145409845490502092152521372855684759257975728659105191921553304305158842145563336305079323658311650616624000782975091392599149668113370107790605424431943230035615744272411113356700483228115978192858075060463272165271602204763791655456861792521760581387537164562555953945238186285865751074111785903927770954167342385851013207886558392089581604152156291344449310459044357536674282513230396007103220624589654541034713217808589297569640586355109492207392893520469457072499330098411065286028952970660213870248654629897551933460690707472151312545893502882502277304005384518266161026941003240710729024464476189715924499709383207, 860388247253120281417416291645337873351701752340551384674304723487437247332494046918056239173375231252637481488863853299562918081643717310553314586756585523968832208273651114549633772090969710533804406559226540630536573792393890878400298317721430906246397819160409380912463996562138153234257628035567323526487925574049142232146041723075064817388373625474011803665284418323448256816880559955974186590936958470700658941470755723026673596111347485706212060248257433136537829254719662859753047523393031960616511852395902654755377648628190312465825846499849532091608067763532008430410045337664796009953974620797456686956348500788616031301034318247950832448615144288837462675709453861513086506818259241649895444642254746401615277679361670861636319670116309924852327916556986454396596792644624452175270816958301, 6084192591419385257634032155496680873687378669948590054750510012683578183150499369853664090624724910162661468295352547997448896109619850326918595242299511191100372968913845318792893233639307974490857598266954305895872868230536471794471967347447484504359171183588813173609916340418797066119678737510574830350122330189582352730743896505484586765703373238584021942823309882565267480759128607788674355289930877880422226012485913017032066788424500716949718273874085882618440104879303062608826540504248018940840233497885654768554518503143280567351987634111776984551187169831689231967780938635281286244997540810590765049021959813290067260657933425011043275889716283456818927766773340002888091429972028426450002659083594388479241626340711268535795694463094083208617497307705286799518272922700151367600540261306378, 2657365843223379193621702679600873554893149702800791765805301700556701293713368380182992606979772818288061763130902196551319754392244736323261107619497622394675395127594641226740421740182602589440198846783138478813208062430261736949423464392519316807595784608479607728899181326447600887271286602828066825781812119881549300828686618087380772894391214607003061386874128059158330781549450703550372628739466011714235726472937746203959575086969886212936123358391618600544217326464950282255045829022430418097203784969989152955802068781633378842678422042543510722329518786705186739828419386740246237774052117047689945706189055818364044084571976827551262524522678900340851270676800899442325310529331810917124391038183576572584674403692021595296490599859608639077305236440851544606890063980172997954785962741488647, 5305048882100436192912108465034926452983306049682886207615265836048329204903526070538091648414175535557546869027309482323244145527761614496571661927248658110620577450580911623954423752673563101673222298615118738786631418079602239258349688275775688759149365964251342211711680798110651757158537227026687302134722278372543569526883141920395420351947061753567769080338131270425790746576597498369393284574814627195448281351596653916221840320397750661545055722274217059990493443845017965406132513750371889796967950914175391642410567356686592069715265264339828054752525713393805866429716586199867116362058594276650802153019563183431087775318083147045287400143662898106538482908991995940901902198593703961682359273313882227371679637966336480900775029014326929624560182567971609138445682510346070338460524884427772, 2158834131592283450660284369333556236161359897208155449591513749246568424586781642779490716333149465380203293915774200739573374045135100733591596430725265681580278319067568487782352877730426167794490751776473585179338257637440289923666789755021477953615688462572422805352789689369328874634768896900174443082539348419971813027893049045450596617197340709593409779735859623953477380318589329044929141492106087490096011484901274129511937510116305751196920471218825302931534710325849074511755202541916324341793469133905822971469523523803622409164401955934737102871149500586590379264483914196047243722849564304167433046709004914050929708435332483782616770505996246562893735036677299817869494333479123437962842782257389995298617649099129911734013494136088353558415101133744514949675794255630033704329057027494791, 3481826798740493719688297110855930343179285094937101949744855921499058746278416024867986546092003564522044607401120537187365181298926152963668649844873739819611608660600015483167054816037275189380469038993676205151550221687023539791356418539041505023421726496141540532537251523992515722892901539430875724888586511936623988993852346730166957073295336085438059002875633677538768417848884827656904573550286467492991568690313956720104362831085066391106623031941188457085035442847435008423162221176304100327720561371191375800547276779628695951358506389594799881451141196498243381869365241076456417603257968567231774525166471944310463302884444707931868511847429377462581474390650433492135640472754938872134249324395002645147980226769088444506325296413400690410346545385463925655472215833727214826288427708401084, 1892675586630333205202917163120284847110376074780895574147889795082385665919167472306142139345128949178524894001863630423134557741631841001516486285863735915470553761031468153813313129840675643099217378529253354052306957156674626601580952403543910107951444370750587708392962922690146445265700849554878475198451130470177588141836836042460748972964116450399040600075646749791764074642255126145053342550918816055368018339773893308532602672590134364092393433391206759311347756618941964868124938476527645094114423101207899349001576598114423356122041013556860021781054428685914205383298828329159584118612879427554615446099678120690720414535482702254563074361367327243917503222852825884752715884537648038777827239988172832489584819241163947602456277023644401105168363011703449583408523900397801712411494973730099, 1138490038201425451858616612959769920004901519138072354380219927100729262030538478945703925431995041052806952662054135953961461902429010490233880054218764497766588681580342669821455015564661636123289752493420197302461007406080814956525768783889115298580285366725741473880174179813858949413187610270712620771578427544457653094036231127794231390109166151844784418817443389190958809028550776932811758187555020132810580343851732739346961841032606710097728890736771436082109552137415698035176913024842482182459031464467175875324153240875982357824065338179002640736305677343979098314479554282992257377209532225631672427967302874628218425244213178563597380817312901115208045720157288822827507415126372630071540406465072463763441271437325113356975805039145090753284657539688369246655070321358906036312843109207492, 3122754096805135536693823339429811713719105344460458505699581925723802906095741566794491310651120937696410128421086201211593679554079530300235688013903389135624789697348338580755435088047886870888244715076765941573543404754126088918408107128546772303247691650141597272518470858903961424265461354724003752708005883022980740437224996261440030872402024004384520228493409862592444383809961876991649223186814796787432570046085135354457596266836349555485305717217897676611037763247362843241069196253345961771179970996931717658680839604546962558936348343857638774067560227036258696811456918703592922718444763450002434137149988966375027740369682753378990371391094393653718640882011817142066405448685282254353714698707755613784870713161265224825138429861988957364348975867152235106699326641206616046969145309711005, 4402962860454544417405055138088034452180051713786019610229069439824208007955557082551755460138868728720569629847492093930493640664133708618742891075090963899057381589434813435990367837980820742648880815204295677581464370951855398603033078806069609973290076125472918498284143632736902736100471833852013442584438615944625429430188940045288296529215271625300086545472261252806450725442797030898159517738854477826953215921102635026333843475038798081902157184657863742003846134917789658658553945563897191059085134379926772878181550217127873181293104770960372071778613648886384909729755054504045385259334664191315294238557422411467941957678360961323524835323940517370482429910606638981614678392474199189108697043934978929444308056273410563457549251491127271995619497508303238006351393059290863361898958737639706, 2280968627961520099060604984259197137042668814982507971947447290165742547351228378790762883052002072191338281289526600038883756953536142163340551424212598112000472496123804526089575228064756643205046688042000780436534268635128672742880565284558941036874442479590604092212601226541679634847844893650593672750808824061245440253218589006884020082023950135492007631302649922722182950539881596641277503809287451342390343988906852492032225457130273239133939830083469637773392828082122468175859833150941141531082223434702661306626787135931284257491413415613706692404722487077514260314353969988050109460816824770177676093227835903844831608467216844686992017282108691774498758863155253721696442680148778898603375888361702067410050655732940736278838472285252586505701568977563420007030634786167573464921713916230201, 407125601660350336653136254124138071159126031718431606829929603345380287484814162909189078516461813361378396661066070681154941557951958528434075761971126743871735191755900038407144629162320674065055846726240742891050916727729952972895199133312186250458106787862519598067927251067260596916949765773145381132513718563749197696505289789131536006107691632056279966944268902916163407172134250734445821584912620962559223116757022069361989955411722619713492630568104843927114925389641587031486110217688760862594223191499532459788203106152955505222086270052245168838061984810802818824542436923321292667213358216598403519308135331394120241399164452184475379640393082597083960694959730994110491730633804467081745646239045085014802297032064096152945028969676319164154058247676433866000287336513044666289155358245194, 5267051071248735905895036805934744518618665467328811724443293675515955433225207600016176559563238876574840673099729317924333745446066744249979627887347998097876361976662384476389632101611640952009441170775514630860086335794879024380801679870312367392881209890203852401543214711830067302805064213157084330127620116649082504417819212466843281855480236595498820540475382620605446170324311830027950686787081625557388939395309180467868493373518567741208191473424385683734944462736887955971143878179550250941112721052091205775770066184012430042950503594203965492692087727278297764005610887975857446981936510521823553712506732955159997583278433918400850928509074252735519346117486689794309379268548692680842875701267568521372644187120258620454938091922310905551069062226318580548208694735488679759746092693089617, 4398895309072621821898930860955792421402910216493330529957418559934617446835221371357011528979381512162249947823009784051391623995440162579971269576923192912172840103800137561525222353210869671784646426165683706625572314904082158518027447142755878484057836244283434835126813220546780561683963814536986042222932509874738661582546243295864325697668461153180667761652318891374444877866713188635087800274543701203576152682982993117318120539279971845087990557870640645978822017056139667505378915527933117706510875554978119083742751371887627492747195962537292279577870226470721532064732700847432656572805830946658181991304848053851412078256179537239949738715221360567676423578732417170999310240290744722990576954107416998087074733002906829194999711352120189811470398409223868870876970013334601416577812294476768, 3940779042258327835966198455841701404787678721157247850290586884256398127799435220759686502715458661440850987621149194931852887176591843447839931326985769571730499151101536847487009028001031467135977225441351063358526319655037539288781177446541131680968366279433840441198692392728232191697068918314027142560106838696841630109136445039290070489740259117743830426356092210017338747933181571866545917502150067924123564039437180697876947467907685405132572427507804394886126522582961429115695572098718678647088048271116560985421674478295354238198567021404167292258007900579716323669185909834861879681858120919552074034583970276592925282233103485239877187913507604502407657334700634545498411920050960574298419019438344754848952881871519912365155804910736537025300831820689114454691870272166269456317571555671349, 3317979251191670135678732469844560287386662213673350103981922715911870488469158631865106585910317723945430311965380617445601562534758611320654928216313428515937992655394293744803179863557668724831294278172202488400285007539405753202452610969395992636106524797289699716040225527738355142542169069295136289408741346125359341604627363540622207494006612402475421894502736251475016301081207232332733869730390085649188051184311198252378426585500518452162453964541577147235265888879116492252994277140987144446235356245858735918095634742251540340467158534982577326723457772052511343352419921281775039607302675645932890695490122850361298722690359364376404679130051453883456700255036917213592837666905198756656988358633156808859465917505713560731339993658737993914970361338412522645751210182892436612052362187485419, 3013937346392999012088659183193388935605335884623367190544539449928363888972520586490605470062110600627621238355856997106376023391458031064015064457989067027027414373185666372262450927151185508586838651238180608201287992998427101961830053872224872863648323549319164443477531877977835641213879621464458102319689981116895975192522252789412700944528767931686639694862243168041726106056420062053155519934006485427067094828182162527116669557355539108564146888133008182868937776057405067256035331307185240885023992227286895826245663738009194242109213074792648973914409150647923451645322920956193142760424394596372288491078608711740267965960285165716699412172301817385367687348882778597619799909959734120551284054982845663743430162366379530284424242654543189178692766714959208701746171416988634249642171318935916, 2910865803123041887638281895728841494151257915898802885950219203559763967249565455820294302228637647820314426504387029668533218604966216446232807851535975946809816976840808406923587556361588742943709155435771235787447753570424267676471739496583518785195200704129958648189116248677738073081013946583340941782717530947908489160489022240528396772232487398336442709160666173542037262648638695755515214927994147832323027262591099268214478990382944127312198098084286923089225121841573516895893289068029297776141729160721835007126562506318005761859320440485401576463819902889452600850561066066594235919622362033661449942402128904201060921619814209204582732073875609652614719131042183562913432752691152046009337992099428786819463651178360904180566217570397979952351038060620369109359673677745933730834482150649622, 657044566615661373336546391059920270475891944834194153480374396669487374235559465368849376105635040123148028761290226717427710416280348048588579095633785862479447104472765178006487385835597059673571264666708738377588168461228578293149275225589462251788261364277251080640268107549844385945586298877529780167122678296730052167724326217434245458892910407983095659186749218472781056828881161814658855357097942014271863512519967336451324269403694941128684640979838447136110129874323050379879930057195848523308604214572692802591048266098256903508307280917415214006853640994961422938065681090546814249209649766613020708186920083678019287719588988880303884746140402426496067889183079519162309238506026791127000387135981780362989494877938509428118525166069014149051242176775380128596192420283459629322886244668252, 5443946150855223198252299418346625503055837412932968769587971496337645759499707075379475635797948518821801680954470655021882175013248855261828232415993320761880224134240881588043712511127497555826192474293598622134347664618947341098173746327205779861542156236376808537066863852422869440205314961165352689489767701675330554717351509722457342494517994221309014790723245487458393260942371978820619543739409569642861470900626610565297635673097237724932556279104376637835364696040004169874202153656143866864867488972565566882721993684328230965171406353597728263155831156375032823349973449693028536937443714507029340563935304256429084722446459587607847422395459003456859648707905818362737050429747921046615903328858674822799588166782288756730102889737941167489752846735417203930436718648284139037926308057368763, 5615328890461779252840814268493050337772327895790030939785627911804312502138514348277631795553709989937719297768781604544910208298541807859011606890942356268551284924412237407497096464285642250143469807544976627400397860705184722861516916796373958532478445737777885032266964932131417421252126435696811362325294305639403372333072923447275702746588423644236219293586631023430238835440565094989584047584253985278801244744453617356273640380909193616551318323162177487087067176378607309833304474645945324027312925596833725066929850077136759622761804313144062061720703090734161576007974211223507058515207430483824884917959093842558607016527754026122403668038494002343230807405959960574650606121050122071685368417983385521854343332867236978436776607436422777272101459596557197324048930547753092428260720967062285, 6078466458944568535398759323834598075180087863483604694692317687405297057983527467281454600222070593874943077845546822555667694943402855678647156442938489032673523601311734858280006583285444546252211117099943630760806567097006393899153988273250798944731546868849156177286142086260742967449630425532524448461972316236956455409465427878654079183778313136547761774463883993167417568055552120977701275756534380326128104576303717205180876944887899094891806911884133344733651750896275972582612452520288029741564878750159666644354851380809537700645889366608421068812268533230754196476336625411862874485171975981542102362632948781104708819653159630310554771307193638530823555468059201048728980513109069286674266703443614399590525883372941704600276182046549594167815509265020987672647738496233556096538286465586094, 3597680747420570450401846942642225469278358524615380870096250827765814048783916689221379233724222129054866930933556716328910839387068228406608582165062673789342125339866822574973233442122964859275759713872257896213424103445069041112369926429685292749066188480987750111095166949008525178171511640767963021243111325052655581173549360128157743359585705565615203025799398870379539155999060575018319782934484205692310417606019950284695100883429602118345993153861698791884981767806899738575540645664539956428863590224018838873437733687768574024487013178451200674906211969769865652503272605311201938074132478280699731568117417007261769082540010389430805840850677503700023567844486108439157264573161822542144025941209442354087090907772651236892777809038833743429428788455364217827713877755116503636249010693993819, 3814076980384527207606190381983901298824677248788093317483279320039434677151903378170547140028825495006339251791383313905336787641204931772915205323384150131601886541615945890736239168031664507055694752112356388168319395429857102316166908493083821552796895529984678504141489203001622749426987511941821150465377763259703254423291173583747176470804116331089760115417973391810187714672744628017102494154487408268107662840785803460289657519259162011385829706209086048621554625133310714099013809135951910161714907997223448318858009041221751229851644584457536357171595356922274697815259961878449439619398233655617815797233360397082324863273356541632706551080762497928673536208052697296839270388261289641967021045167996876169506524059168592264164200382367391925533082162168076140525902051392996373937237469220617, 419665598723753325615223068252123639386763365933932252593543093078033015713562786145747477071197808939581328079173492447142081904859873820155715673258568425772505047835549776168232998490314167125045569537850662824436595817887278253310776230835026593519852524878663898619949434832261743445518137839043163302349878184825995237727973112635786474812858515241556306510965276904078508334037196164535955407090375537677895367034541161832297529500441488749286102783849935974775044062100018138437144186056263832167784659303089899968300676754857554410043846241042154246797033274946503987525321388751777215694215559283718728596352359774464751134794874711918301438512555993050297055103946310902711918245426198849867611402441552621000541476261712836538651758424394905028136112584991430693801642376879771434856978805970, 5903338559595718449874713412233034003230090621701521720587171146610265534814951892575419497065575273002385547413336923435471380559574181474589857621055247372950747616624120806866540606867337032689881532929515307537469511114688299127170765022996353110751353397001605284587947479379602393853106243266649152547201463330263701269155892868952761595763164869246415923776824416763169881537682095440410747554815506863191094361656376856154975923595251816908178525089048196398994402833358408921536979493320771181567050552538378961379237049524022500095139394133347006440442256939098831569216151026987540368025430564301634498273070514294058402325168751415423836768837877290071167658551082529350629762051045779293948208995796615614700202344881269002559458136809649947530322985213709821775542466646638749130952063989939, 1410172192728095661058476532156813843773857813603528401802216489386780042965559721021864334484923988114262946010073368575356402786314091309825817803978164065552475835383987993324921365606895385577511275340526527234617123133504701881483364486571959430121784766937202617708293682330008808162722292050619476497046450224201195702435728964741735073300302693382845536378808550464518076260036803805909358846818299380585780835964435853285298276766822647241542414143690960189973824582123151384019310703645820486523330050903674787415502138502590261865627226956791021349790525996387514685272508570264604793745706817300855032143880078261100425072406455873000884727039770109330849695773231295343781803474645899963675452641387928758887198756205967639186558979965693152151816182230308832380327353760914915042004351986871, 3186670640445000222314499179863762305235027640176055611537646721937471416842632495626093936825188543948365494238687179189348149096856096936010590354051181698148542996693741873446698147244261539945719597423855753473921480170874425724584275391043945818413337203414071856664209131158833215283521860694779844202102287994292311684739116936804127423068751087200531187609976609959853384626118518476126592806983849057240810116669888161926308360037110085667986720526452757601935581574856808034644566323846286150067287265287145202304194715870703642208174686005063147259156197486422269245510299252162934599719574215139716851104339057577758035336253501825175719109981564385198268073162616745515799245923089560499720270952621593358236775441412720297398618760142060046107049547392089997145434563632981660175739556620923, 720990811952199606939445783328639583558721656530461353967233863519521854066871139906922450252168065722983951324515859036518509415601351590429385435420788056820854243573342768605214943575975236707554997947276781776713330641921386927615563445241942325422786824834419973778685172441892645916574281792711124563022473995093357524696809028842347611367010663553140383614530491140890215728909148714033587746389148762587536336700173423861349177606426746463772083260095560433909179121597014210937955536665272883979511025459227089485552424920928458362635978664629487684020437014352299769362496661760435591849331974458649905752866107719467320162904414417124477114397749781108190958899167808315737779319402276403878601992303314947374194447615069732261798160411472982096265537399580555488366130365056170016238424452654, 3960562747536219341230941184942413267901950002079367270998881159996207908047039937470740054465310306130858924698153673519532701298670064766616717791819363271347057012964825613990189444716716299609291026113106050327615649139638067508061649753603686774084364701413669654342757294656344948285816850076121497732047787330852809115618956482296104731691689434326114226224242597532999104040423627497060106957414516575780473197768548432280380932641671988371461910239139876078111856906837955310621525239187897857677994271689524847617404209760538004365039909065306457107244741858898887533867324457269795524396717775769414925249349670670304255969379907179572661259837237782244828050228079714011360961609732872429940023391675824694369583105616058481556897204474204536784301591631004883953459589653209357923474233833828, 2755418496993511076412022314171050438154011150484092635326582170226445993777205206065568934858543436220137035548244124704796277552558649237981695285919144584273860967172012835420399609945753464166276473708366280826433342316148628434277421399335246416616682680288794334601258854475184458721315552729794148497869655268615363990124418899177016728737710870260777220289994400250865788624173320697228438020356718201629596481656971201890170183446847282490205969018249149677440141638000958800595544233662472024190221352005685813149733370853325630380366466495178784534681600296621460528714280762540354273926640650061574773735079995588799157607758389330714085757991199452390412837327950523048510834205144305790975468817705710052907044446237429105978010586700878212380589024766720669853099128367689692645340161274604, 580781204520609143760771290684752576734438588342096029194265419223478592500233186167127633388725031459906945074429063877420687338090109068500214952137461977543157117409838837502552972593429524467516027230612282036151487976012069716654651459646270471438452507932237294720999541841049377210492717803894402064095587749218110370123850439135382285673462923726014850372918238513516768818143306441368719324746051321358229659479253393317690730473766804595017929891370410245925810317312320169573006359407272832566364608927631812633511446766465082649499463294299840640822215715275585698413289206658621515298316198707561079320396699709354542370961348511758667941760862373509972381120014866085006144759251017498839002517042421573597052984760115370644185659157756669089274541588439605516905294707056761637458747865675, 4652436666037547663304733852146660090888476781641288486387034641076731363870123728226222066398379627559389612558393059956454738457410785037009862942691755379991302478507437539630237499242431922366486993172938835296263301485840471744650209212169683400457616095947407431773471313421765840564339158173505022737165494826937160231290769475495066126258299364372024817991678025235499576424266295148580890493167882282422782314369410332390451974789670274504317612194432694698370247832981579376859772933850715701556223776905167837926275465692377586645539779157462128251800316600746474584238230685240473642168623037726059661018475377362394959219925794678443604903380238780283536835860502064294131681943008927104632699733639893328607404347285592260252310002695354628746515441951305574187125022134581535726649819010927, 2211994605847136251375139642931877339449492733803624434623797398302083818249000335823184246906199276798448431592478976272100138154132003736411787380593347577894861145730592068079816923170991988099904542679850000848037484128717024287823234387373751475106106968614754589880119983839060056092654846982129722549842205839005408913233601035403569770195670609412525416892398529865006937691416769504950689131060650534256072451273332398423312445965968806207378363316219164167240804406394732051690994855211312074059497712592501887898261763436725753767035523837302191869721551532921254424208281640331167645458543637830413324110717564730604776242370266766797705156040231779930865868404709379274401712589972074979845178874836639784233913294927783793685911931085597995097200544568386283012315529755123383476682572663549, 3605264854384132900453633554145342813135475903902768841205763450568804521365135049573336565199100832297125590204813615587382239011484824440333364730544872541790029015525023459503823012332868327338822793433072773041376087929404583052423599963413882853840258896113826551052094287995446479402700090673875727942825705115342155483536051615501542655280598354463852325489106748680636510151144874793128745064007367278546500528023146019752409579018093752312511154603921774856168955357060282625008199433250497280043674854858440717116715692775254881493550626245966780300140138451927205220602505605450897484583480141231691273199505446547549273314235614308750667099223992709446495781382855953739131215739594608181066054684492592760062252938504131678683203554572739448463316653867064297108115355109932977673849055417170, 1402052610578402794210041973208252037843574397248095462320125304904494599456669598029652993404830530916030511403634600326277206515553197180992795422196072883834192235860092699085277287446316205888437431829684812463308693133138987420540126719177416632404878182655185621022598733123568464240175856243658362794827886011084268337361577385655568744782852400460024354116692763224588992685035143267521270116674115301505121592655411186542796992046562832818472953407426425791814912036216749982783116289446867833916477066651588167011219641423275741875132127215940431932465645439022112454081230339652144788728424271281431395234448104887310131920786416441219654377655906135340526069128824988199490331340066825996884800787115925958460133125682264393406505299199579487939865335394353955247617710870387912816140175937496, 901873796181849579218851391967491074492692885858333430409891110473164198281734865417396012830416252855555573687869550052200373644062677575658225920327882385824340976971851058005031780932575210332190373972860177702765561192813823530826488842209729052754524912814745009360329168627928126587281030387753733100803964169805628929589742345588988600058720890904104678476034692740780644449397106787236785524743867660111505123975394511832190492173888187743697372463886043716891567302356922477102606637917931548924487530463803705368874826185649826119366626284489702240467331936914579039155867635495321428755267674736824447487347556530969581747851677315803473873806971462156768238652624534843202665904885225769200207335459843886902405500618112203750817337176665730686498874870370828671205943691294480550308479722071, 1687414509505577883015621262851504450646626943270542362203308726351290594890043679328629382937421425894386964239871176764467516045890387587707697913734031180144346504509228288509910494890208823721041319055770348311749983240619325531072868587886607367608782047620100193345313261032385615918491644525193673395521220179593496545588788580678618413363459312649703749068059677731901615579263962913636159064932239083018055378500556458036005144229558608693700137808647201976300090517154692997678105683156405904405022300651880923562686353910127386099099728386613004676035109526628824550764725526696973907215539609165005738444311316731672894058009332119630735837323736760879006685164176098680613494502001384287851586942646675012818548575152126302873933054636867515171460584368099214461730725517336965325578818745613, 1737845670203023287492598149246396371052616396240640008570719650044332974835754618474248721506593094521875845055904859066983293099872451551325879967792542146046828264499684120073506031319640532855619774070184446543006906720748134409370934680605819108987172308012453494850417982923033368845020389838780354962437202407802578674095185575303136621467606036656986406666418297451145835920250656751258987429779867417825639297595265117129391836753617121848392427732870416463622432932950263822566158588254130242746024387714250269871847658579077734488355877580253052122067132507666668371347033086400090417131667585990095281734876421818245603193569054976005505114206255571539850330042323372147548759685681942900502263724171120324216601567219625441684208131577756961388099129315877460062444742399308196765725411009324, 5788113301354501471622146838685525073039668976866209196514655045375032548933675948629347231202110051492068915422300435839885706329084529268255734806844077470203463309996827533232565379153471856030638549832034751682382076612228406351442910353850075991028400879806312732693044485709368721282840997129513811454867953850324713611958155252332967702353447405209373857323130586373188796472308030168242967551120047109254987815695299988957345140012396736441280018098911634449306315846120390606905461280273817213976882389693267204852709345450140967454318390430306367824477065625010040235687480531589217841516113374115988265161693683014265953982607264149859435816561814340286978615722586417371858952042412535317277205800668743045808916608807194997768145411835518983708226007697259629320750659375185163875074846741812, 5964882306632738643848466565378184685988969479209169055540225176796236117620990358421451884362503346388123013387341575872537710606365646774459453155726462780691332334102453033577088702080402617809910227767929182901533592853836249222117199023171687580105114540230290220449554192154538671084743555550621417488146869904706129814570041913767378530741251858258621710124578609796358345794377507868991775710398340297194654612832439471670600592792355439516983767901339795984375167820319392373220904297613318384977576237375758334383393317163091028231037577747194786643503638245165142064912284696582485862766639953056400138643519229155764930225766972522048139570100645601544620853088694170467119211960664939836185401657409928320785401493192585514016151412736631372199310907777168904475757187675497511814995065553214, 4301280030988092728100266763904383749603277752188941742977671518066068469406548026596849326562290650638215192523215665267477679041678494496040627914790358693416212407100512768863228943017192499399773320508809749220271281953428044106834581309030885226588869606444217410240556081871871011421645905784719225443536476518153380755884930922930126305077638859019667510148998182108358914541234625745259717153213973225091078102327119223365989463521815531071182205836333134789670444635114070366105326482506740676553494055311995622534011599269596682119815333090941817532026061387508989949380332070659473098559298325931552964273000176396629289560219749452046942602056961700836462677685599135216226372454577456046385918617043036273429281207432394527941580301411274495236757143343114848207627117368919740392900782972122, 2962885201498698367784884863572045914418461140657114047818200617144911529861638565761090590660879764288682828003770277011427147958520571955272822967297556460284451108188934245960331826401965677919037517083596442628415463536391030627817688515585279695528396320130569173163973070989622641876756568215057704797287847113413591497378071391825611538881438295277337108172476896861079847813736593722481982336466504225183251162456130782546281825122009929555813632127261421771764292284869414184906666311373538103418771173443512602546159102734815124948468175010457346917861926911027713977938656605320071467379011499192495566667302755716541800546910052429574074268930719670577327359281903234164488154711607819405831330021171961073891631724492635906961045391525169946192844973719974052007839053070997032033726862761198, 1916414190874737521795972777808894738081170264238052176617184192450089191833299311604396833154089178387775296782764496622711153007376592383539594146126759641808044815179313469826618467768468402575177137639627996628656449912900380330532027916033624997571372979303973453128044974930743969237552795413533113426537652193723399637888364672806790827438479307153462901098979004096313556338084414466874505441200590434385754597192895562443240858398220688801731385378430475220510129492557763434076657637043669648836338770859157620382148496511033690186805801873089370589447900356246098216860063589591484521468297144079264946277494460600884750476188158975534143893658447316508466922193436420903890524322252920186730449295195313269340090427124645208274862326673391468989334257899670923669923888906443721353286264408886, 5300938850076767946525779499118710976983456542522166349305382094803969694229176529576136208948868869324023486058226471098370817595608270707346682849344307677486190174314844143854478455743552071776818118891984319636968735695307844910912069802140933561973796054913010394873816199327669603525058619534238742707329664836283924102409955329772534935502883212930207893175471208539216077791571652562374274622996929266223383364785548943083460755981361509849830825166553206391975166094763271511682557907987913756350465386602324096367326594176038420883164190293153381237328854362737867705040461149343581570562635893538387610556344827276786861232642428100078218842097509706740829629322110608272265314956704562341875896529521072535214635920667288793829043299706984872991453239906604058531873087806242717602102368034340, 1137148782133494075519568442473947946255712328163394257584510780710875234457126299567190350786261124776914742646941778738340690231104823682899234225685350881505193366776934913720123143929206503176524278757623026055320984344062949461500617997223060709619923661547780137324668533401049485740927742777580718724992323722289977486917192407346254767554067786056752185182245551731158352263184345143188363402133667766008255717985271168889777082603593495779613907161350397686683986243137754635302837740702058852978293610297981874678294758177497100447943774582641624115796628252211705868751622909515429458470972692813008465049690329780677064886631222235123926490880229508371730286334482165992251085674627249820167615764356328971521995899281835717584028449777787369731277141449709843350006634298146633530059599664270, 465867747465363105580810629789166603379578115351074755099991733879290628733209011653850709448944567076720481839663341353229149000446271369823073548578692582270095118535320506137382221998041809495664771291294893668711634379769096860253199286431491016049625619247038751476455821502872872956542787809480737871827083827334944851740617269593403529277768717080331705305573400536249420246457987534139337110587420517920299564421904015618305719808411168533169936291254311919591933780856918636890732991167631330571023581561005762778257967373043779757381095774057172019991291349213825042018534253247708365544297810909587677559981596380245807336058465323759900986178720811572343281041663345131639998649631162806465444909715012438894294691056510061330605024809004284640130383532624068865720367298865869025580777270977, 5096457698501152756387944905997903519603321213023190870262103129706709369693541374546420093816168025788904056261097724387079829122968181368230997019600346002480884879095818522236866375140960194021391545251508217414384127571837933555831333700990364846807553455752320913745059412704520753749430495833624089440133052239560438201862032978455447582438181800608042306553961867430428209668799643113410115137278117476960469043150319036862145800578010859211712103294286201226543797854737571609645433074007300148352928270697239519282193554102310019780605642201561696874371520546283613243797674679635802223281197720875998209543706249049069290933339067424359828039546702853765337793942061633055049561135710620952434944458089611030397036744646151994556133151051098727835467586231089457451880262065824115137195715665983, 876565636049906973105432102905499419824364823869690963706165080385032570211831056335023803114946097839626315092022538532034145833307828724276138936277274413691526577412096764176475621454075051225415246033152493081405269693526775424798934827582728980292169691487398226881153407371494034914446468853774148301012907197723429541283627386107221229317353332954321779443006271864134056830317293629725130987979347400632104583773314460974221698484826212375440111484433534962813724224187895479808954246827991728214677695772293489230795677726821697837139229603238915018243028990978572250963044469408866286634487546395922342699900343980843190514283463169173514956702131717977504463767909547564321215806393898257641305419053295849709324312102387686984728543576980651274384012830076792231432693052390130028607047791852, 1689364175104331462859123480156518512544796581031750472639770727370464130496799705251586633244617867648092043638130677001376757209826463898617957729662133780191746227450896851439018067771946958111401555518334781348964880422195034513784710870463595528376527744838263942573267202432389331096554838206342034375304985957383230146609125410651584568579074764756196584589714348915054130172828363972667554983518340917077472531256300960398522678975904488977247219219263852335837609026660470479075645920070017890406431731185324748295045805210408055575973720663989252745732196778188720429309887310835165453439003880136561192837289505552525149503374691270767989171545237830514935839921181045921372265139572579822198549028375283793598011554894503478325639861718647452398978470468522561597940191505420997378975129780952, 96228809920293378750119662665033052473779369522410585392483140037042165183275301285292549673971797118596138577382666439379417787224371323774525846690703191369116749650140843962015358570954687588374134446384223127645695360206764003623797539241831640851215848181690964772922681817732752942640374017475592039758081593810851274264965717055845893048574767513017521674687191209502121836442241289895713489185804567983614612104334333858077857451455183552176232042143386691199660994906048114396640045339582298303224099425024875289562531867582688565109050378906490882940455659178563230194283924594779339426540887566001073720275375653822381463938292444864286794752927189187357069101906141955209282601254488541960292789149917747164240860034368100278303219799606680138055165697152136927767521711376799409474792402576, 4391834412283073352357271059102375867340993866595602150771108188724730446069516111684085514494900866971335308840112589938370094356320205628736787687659737680661037537415385225056623191860743474439027522000695506433659701501081452077469796122749411639600452822853288049533615721160889569245512237416017051438253535070865570001678156292413895502510027557871147100818753680247928575058868326054799909058178924112685499092216514832938186977062657183478069278285271068294345733722893104602330692965267707191655828488691213556633590022388450360099570433061656849365949969956910586631875028801118579499951481292550228251892617046419656296392977525463915436570451294189540117985930981659910610613222032916576133782287297889729943027318356733228135941331418523064723917542068362865530083012601576180222556133271013, 6087707378942796477011000142596035478707637507124605229138175776537604169667833469184734116365348530114519741667340954381529079664304073634652084243380373240062304299508986720391614256867653304296083837213259841023318290326105359984632969055540574713275619404748731958257841600385785192102502378214214443834497739978788228324132346946603087780188819275159580076853693852571255764736045964790459546625089679606642767181036294576901027772420821207527294226246108077379542692920815852420572115362024418304628430138671057705965998165337149294141746775019453862747640188651616642170587982257293602572334057599431841073235586067079742654842799654937014706861295513878606550286515404459875691350194686934195559518299562927552507922956695803521406215577264460287171688411523128657517857051922058217384962503972371, 3539241376854380362259560769585005957849274388108128706856330737458360304183840458822448207732969262015523342130729550584965250247568623822228960723537944530279261938122321095075262803234997324247760178974934899712670372627099497366169578547421305834969226103754619574406363040091604035924333593987203955071498655797407549075541786737845714411864427078525127866099169514473302432087642547800302389498229254605277951386914056667416019905040938623247190772964412378613185263524598510079102516624111323399064231594614600328628591737353911507746901530614617218507681022918952294922476555136994021065439870678066359700779164024702958008370262672647462651495124294382610648143944197553516791820283462065441983061902228736970107067474405475910678817942849587829505912098218774811875562188748171740159871803179531, 6018470820109896171589826096837589522733804578173324335732595433376799698929912108788542956076660331824292775491062988261710030815057114227316043563660859789172675194739341191725274648520164744852698218114457582265755432047748288771983959941370920612582442079028634872572517687355532392846706418836688317590124694803361336923410454456499376055744155592598657605903040789950602799409077010537731063580063168561990444219155016867864398943636537065330049648696999825208017631332688957066919855500382963939873845584593133541273383615874654047056860136081235389138220682120277158959731150295138877951433899371718550668217743956164391446530525822354555200888167504702642499110793836642014981664857578041895301674553130172309338783588377446259822631041757474067329998225472269061865723219602193021192542420974319, 1097527198098357524347083385805521580156816927883768990797949643282293189311463600930660668903228726422273473601544225063936231294140030438176928115530550506053819786795797394957531115066605665856815168452558122553567864580495471218438913784018683030472671131964339396649650883709062966162383719842903814063877591627581467162846213220709332038689671424160072047861057737198761003743339424205962331738227467389514759470346903161989294634358625420476401080281358489507479503181582925523824851165860826055173775773371400737915980948243584387531327464609232002877154489671155336205913921325760264939163456036315680833092601438414257865977486046536327718320172865661849524377768108548453065758593510504796305128284996852660545299881419508443565152816658214954620613407787111060974533936337945310276054215368386, 1557245766886790904884664253004108742125208794374759963959157625620837757083781781291607951779712988972817573989388246741691526353193320434504742992470112128346485751404841827715330965149919163926870876562344732163102104035444888585748509427132285057421202486474872021415201779196579056979104672173515001699904144710998550188413574148897457838640180476529317600022036475049340425955590367786365224234381421878968002806081256688122005789739595202861173370482775995931525625816563923143026607517677209181870028304411298692459225158217720908846842289551705392952328563374543037825068248933499317382331309892438955697193272966323411031665363404138241704760151911581954678748965858421522006208450530644228570163196890400498599484909712862733566984536788640208560191789452014025833308279853704781429986754477277, 3876630789946902265285275870508232868070284695733861955245050509991757959387691444611719005199955323538973234295092904400769626298934702096233623015231142936311279602823291381541390021257856247151626320963380255700954125485569780067860373071877062026547540357689214123979987831914126970847872152513161540666261102444180110953624186776714668647308516413958922004287485023792215880262138352875238160038430026021417884141312016472308413867409610772209383331092978001327307578307198606318441817337837236795107128440740105016697885808434781285211859481988969910441395210632143340612121784987327035469731329409189072714157107339220450407132197655128689893188317104782114231576126196154441227553900534321551058782946577148011827022619747806340091725458037694760068079723198466572453942853046911880583143428942803, 1335658418943898201571274730478001357530622134400642307138847760632081281617716749433562266732498485024156602779616468059701141458695390523947689970124047047167919880859786663535088625915443778605175896074768274121520447631314634171075971631199547856076912043664592431491181412805063226646968166395022889096838433855405247089235946625861620522753684449925867122151581275498509937569011623959120370354534015989744351081771807944085755973084609000811502072237909986303920358266481859673891571437270673693820881405039619862997862475388599424568028103694078719791610754972677808810266885672415297537709230130338593218605969307328104446911022248443169803981475342976463518856093019952779203713469873499302825154265183965860157167352073796252718559533425995297057877837730727382956747450256571424842838341226156, 3185789976851950149242850570166347236232201324530961497619225538275210046517285440868194532431785479127300254728697133748375487556271216813350269330053397457471028203009650779936394268846283701772907689249241354891138881040883583350467202067190727477028469202799575199272447735252080503019292857533708031980583761288478366136568649108383888822467017890362289870286472516088995818885519344973409803650385269600524908242451814830042134297327769726615252394532026992282255378331447027305774881567376985999191031939705715347234120796758201254055490120084583333407221578901419047331284592409946632698719679977599379909089335186011570155581132613206820440828889169118951821039463582547646268399455348399449826737396433140685805703578455595489110439898929776096373376012661474171526967268759324236044208480949201, 2816778606650051782954288496177332614986993989280473589367925377434401312124639744482744410431300163792720785506275025546193432600375403464056361785827387876883603393871390495657332460838455477811267772502395174687718408990275985594200007763136654003038191896304584224220018550847012051103072901312221491195978392935545278087170262481296690045733944765557299877895270631999484960916367469289198447213470200404210318855905864740441679925277499288003883042076671210605320646022175953532727553256977051411482647160184030787978510719664030949388824164679147511844782850209158646434973428217208055367131185386914697614418139523250907493424585592614058144703634579015237113586218360669608616663562590387907455392465471426465840327304557170213259166720626270858182920151974293531784428220799249026612381744574192, 3738222694580470865504766892290523013331463386837389830654750561990537791980658452879816056625761969759662243950657599225727912620073267684382285695355320092465796114918675799613000968255125810775176737327607845085935433657730307997646026487415805952917813901126342329732971907950458232841277821292065312341626168120205828944549897572741903914216905721941835024269117760189846792386629602690498660390969951946989106029535183363718282664505137721705814012752531067116803568522855708368380584909015927894933623225328318072018097956880210646552494539386474821144660709939453703104270097469018248395425829917791760936837712685319260551447637490101489948647979490160208489087261340246975643652957378095162311484414929508851341667579452795897414884087598866216528193423010289234794249777963326409352029936714016, 3593664265493429057993094155220502559011903202491180968798487303654572407151073945123343923838710372367715217904180868023609812505786543690991847097786276194061304560042950278758657297744416808605706801472546678787121876917299494776865150163891765473211815943265409123907308624040958235370402355085986494565968489087549562802634345169603815966061231882058623791813283346877115058400012832230129065026260491585979371690105278584168191026270091125524240138908620942324225587670208987616910532824687401346368169031990765134561527720340005965391438697872631159160230088846745172715517974118681056407168135184534472863444186672550002916768421153276079352005296298985647817428585949163255213415568012093806282851900304197652661349997576841614095370150928411027221308747219057827870305377330793572327113633961950, 224138891737874442833649352956471628329815604791610377116517734380642225615809886256800895493675798589203685445680467389705825331867467418631769833106842520941669472320049187159774567028687742769958490226244258010967142270148386997452041873672550310336645215099050930064986964727462765334198169863728375081103402338434475694426205158355494959459213481479157407811189810364317152738118637778378449833846519178992628398786083795632429543539853350042082509346803082037457111608016312054846252956549732936869862497377441074617357192977396534083582053984551883448590026323117911029172436392495407386898324168961629341709566437104296695498314762423232327708994299680769823035400545394099643756951595018066700432557370040114900643300113319821995034334118254428963194603251660134556154548790447162017453157198081, 3711836882074476562166829314957303462582569886993296436364503193778301064834962185246781936090594312925009018958677840619165375265644332306883784720208122996622834186555130220849482709486712471009315767679302200606601285193631520823058338538001844868635336751897401144325908574516343660837168957616090388462772098966114943244059737785410373681456902373574034815378096209768872673324388695158250478767212445881875146793557200702399820164041520068854401080294186552354884436317311203374385117201054643082846756269342231041368613417773166469192582928490607248065755306030724489353026491868554760664927040990285695031537139977518495469088034281109680194027912446618404521414652030415656464986172356995878043732363173947301729723644563119470040084038540427829067485059008941407144632078624261629804599386433591, 4702502341939833753144773488547553377998905441939177334131648922657173320469089619926594755704504651853954875807198120527102398434115802721040596187328731331146402309971641532309068887695727863549862306286226164538517975416115227294849871593287065164892876787141360911029815541447067643482285788377154211438911210145833477776360906665622959492858069268681965108743421454488059921426015862521982127595000904043078858328817437903050802582312592899070197835828409860686215478192458989761104325822536571617608196793239041700169035082321481395657188591088603662708128469104561200938272133790195421840414256408154435506349831182343794017668507710809413645538485738938664336853428668582450666090585233585775921510690772778393408865788147665291022391787333119972793149351838659292355734692104298012907190251931250, 5616844379597785733532962706855110343387986369122667249366820511984786559623935263101234485865390343707078059841835078373384763193159218816139930884496357007458745379657599556869267110237771452124027524644739111609156082135371010648616109108409242863800058587817218271812139164774061796374197200602918808990942341494657474446206645897206494588871687471909177976995118874787246919688907775685793077351634014955944737069910857389243362322825323980736494235385298437171693732934847187201994349793975267031323003372143931215120764592152732742388885015987115061865370545108927517063209846228401122694624524278427430895091715002710637235399258446726298914552574397708277449518147332582658764914107487067828400744316006374984740247378980627296194865845874688058543850758246605076210252985599178396247052869434485, 612995545464628027543820919920637526380802440356432397197235319677445391991098369023334051225885863360739764784588277915075508204659660659401019365671304717137661703965705039919939363712794807477490873674102935020507294532387336904622088232669797318183244085957712022066268103623909528403117486889770432351242699889777489488051081643622079094538759039983368288228315147647732988959756009559855570742100682926385744784228649747216986973493844680107337088347649242082390772673631169633782545116643788195993581788510295344145329433890314506887052642634873452718760582885141416135665935137688102614503098800436153535614302562443267189411295697775318201207110490576318794135847675880963023447275996314690794297368669136129874374665165098807670947223462023036920538133035673075697935677112679955736462311388538, 5549563151244805917244176658916217634760735861164261191114330055602223159205883498396560373543370732123430214542142527186889210200304768674732392958021149581036943761174273276456200558449210564011467552375172130201173371793576995999415640316948396410630839383669472976081347120021131286299349973635029371228036906912069916205186640630174024392274033589316102450430400257853121988479352733033209822267365846262276879694459579587533861189671785684298023814537978116213327282570086489758308220234755344754115194611678711394707864672215290465917576043052696114676829906686438555039641473166265112258080322572312704246797922498582208074831301124886006062410537190367792200992383419435082672638533042106085579555729394021937811300324383031764078306531799417799761971511504785394731579815480169139934490807852074, 2932196470797903375709633522147580125943491782872401855274650783821790491121414742818003662216397146951009536888485341259446562867097927258039966393426554305904202154645469555284347387580741196035187626653483001348960986326967249836837381513956311102531976287531249469475384025964395969121303483792851669616171705779312448470638917744644257764250811843130228002054598340576187586086883942283009689662949412251491608179192560478989901392061878728196849171213464312450389323830496576290073881623091200426069890859063840041508562261367504180068130670607402691105519761560431648912935957562110754232523729409341382727030422874114636696895303846616829749002166440674124002647477062947245321033407862219410287827287905436300522128637125015218137570775966792891673229080108755934991807901202753136786465300411710, 2691817326137736907887171423828519821888254116227905841044470302735866296383497629100773367325630195793388338175439592576070472441763061422961130735454293208355584736097515005982692191525094384124933127671225278994197759209022351601795370974257408623933765495174585220873684898456835880977114095026263797891892136306501362765077078856967024694962661614647973092443953821131056844661005930315264378318888474557239468204601091159040957124317551251491752105288775779965911996503825259637926684194207345677343826458012984041061023869178039539618380470451529583564450168285373727556566193315439276007034348116768750809882194896806602788338066147202223634443004837324535599574185596565102017897537841329186540716215366597916983663008402441789958833940726083397389090081396654914817002926906987481828118124660189, 2912128432714164595303007481305646107983530246279711609582504371631006652459307422532259341847822372318935181714977617208273340496188858202363033863247926119249838207124967590379541745954487998939057609102418796720275606509726087130716473056244880007914558349786504929203273141039921206069988683236257239449394104005371011963463510239806903877576299117744669421482907775477790613688693622362707658045249690175645407383613063042490053394358042115123460273549533043158058400923317050168305623330386327132394579499407587335497799939366679672543177915245815646030851100658245993611095102559997225342428341926008704839123816832758144960956562176397240642650085941287666490365246605878382729236045557305631145162748604692663702419773772299365947219554678499214343694488036565677568072414307020869073186922098576, 1955685657663665268710144750054120922833885466124352569218137125982764269223468171306541300253961739008102214304198239939756824725894225229635535524401171901731834861002785760571223688325185821197681234546283056579053056074319989593963295502471551215142280502957542487699477087185688421670969613045091808869296535278795474148322475203263671784369514463538225014106035763431438938782792311565948955569586274064194529577708078010047395657305180718178714241944111221669453895286546511197232462950264768657262518125211570996747711274481467360999414966796120953430589590474079603563126211932737542447047036138078752204427681307814522203495732473202331153563937544458639677118559653635385311454126484160167612475003520390295940904417878959181070412160160457260391689010356670691021099480104207968361923913058369, 3593784732146299986125910335240048846868340827889522869450968698970931080154579994373356456588071199246190398895987935673715962820664135260556486156241302044292361894795753993329317680273515031912505637278978941133851359727018296116076228024883423339101172761349872795257666039555360005989767415501561695378598177112993484152690484898603976455370066146167785819804765419032826677725159823237973749024305341255223102488107568142610558022449707646846927263714547741806916561596965419055416062733056093257468704851598632392361942549941944289416392641274614553136087220150870852368053269328419215873126536107515598827956353811886163813978697245548366000877523458390579369535697338407834219824746814414424359841365808985597548118875933232628747470630755464886813972388710813174728259506887008148176484366061743, 4923249840277324743733318895779178954937707469717212302221183041506215476844126979875877765764254219856108750943040781730005921594371045059356459755171104921708926552424397159938878403472860715633892851033878028280231657715569548038478876194547452490439884173017984459754428189239317703462501021667097875976340511456616712005585092684941972593370477665207619943263765774009748109879905271839141767041670431860176818163051614138839373476303460400566485212569043196830471160683424484047272830233460905865322040542074530034492668677259869851691238039385494055091079664238254807466877248837931463373365239660829149661314737858596536660638961269618536601341016507928716862973680872970146234929018666050725718773735892242841176948466071761576823622847800864708279286967989904037320445022235223385888838736261558, 1793111143758275595778552766815987375552894837068630903492298417569525357907847763704130295757429195928699282720207818490508741748833323401351668017997920630117838387698124801248419339161527934076142986139836703921009246431891202340063127153272564744690271244726020153965582787512208431009941323702985848195554507110528756201574274711844532890822880683386233011221646523548098005451812658463274534073763236913321499811423346864513846570210946832913742648994741353020085632693311580395532560011725609379158663289293024844776989281873042043049852641220499135405351350187197540809529443740898004841374791963178632312401825799805708110601201938553991866331543648713909145245161788072947558710971630229350775671656006135947263528743815669261227964240470048253313038231932357823443711412572608417867698210217078, 392654680014649913495195961313342103907858728145090885680805786512101209705142709650105734904815504989385152533975830316691328767640206246982790024700229467797400923287336875760097905344268087820393945493465210384107210620908111695115114666147306788307699239664345550828893600177416779013810113529677084981773012694341994870801705320161772637151494478955784038776055748606167094159436604105895279773559755784552843742036303064430977951951677323617474371585553692222039936674406180906978686440183790825693192043607170691178716801402079551713123681783618590742564639655637357381054345176009335749431915434141144476737380890925244953567341187833346719747432865280260680454711734225501348432721150377279571642978926164959972810712387385504372643387875533332463767944070074779571055121132557617747456372806565, 4954755965600839369111320415437590874877601391315525612338427609194355054410430507070592753202630337129617429077077829132184770412971877783363257653086003130473442380845729487361313814331946713557764830157364298256844861090797395888240271847290687659719646223012580705543543860528134160695497826117319694413431036783236055674001864471935325879140287050420820916161964655304174265424712920683432277305272777183406837099721886966705291090795026706766134590362241156589274891216846143582915205098154081552609614697767278024046871985790780138022514741846542831628615569044916688426009367048884936257400076482120789491600951089651105660647695157357689756258585335552926999090110371783246056457714427743670689545623280211504411922393505468274089107532388585514850343005347203508621190033000065970912222462061581, 4420572315411678876502624842620660050214645757560379304837048438590876495453627395397537062528696050660232249198657044465130045997586764706110112958755582576866438917627781537988958286748524932033416556428034004109381702153484499523025642819388336142427978598663167886775519818596157789006184936517719624874549044633036602470353852627568358653265383042179670144601906348159232869248485905998992851100069336494716395741176330837825169751737179237093513362840000301611492099668453209235270315982202289813405874146090684987547165469744138296719798499385262886232115107494929598030471584094121406143118041435652165307427744070459337580963372011566020985187866441844534222417122885883251766523079370764243484204516666982568752012859849876796689091462461567492806155404968813377002950987618735525318990333658088, 3197209282139974744618194525086541834318039410829907781704100502147767971441420801269711995893260201004873082408288714485531721507910934348565563580083968034034610138256023271534825706278683170769657739708208749451813369095051553856717837463248087167457400932757492756352652559054801621991676593299743314244078775976792510409551652449425118709603882151305997880246100324868403245547383842525508042465533667375449948537733660109437582170210632932124517907284841425709440546904532213612031862070232182866911768691667563466887429317457662782438499693829110864309014978820056761221181618817097754064697352927904069359738011378728755909259876925246858605608872049718285670731724578255226217995209634719495523686265778235776094353288406812566235121822499026139342010241826821816981693245755249783361906309951565, 3813122015704815955616693337284193779544810463468956150304441260915374305570600512975203064039362925345327649519663635341154406668232464385219268656630614073858622755849677280167419515948880033649993582109676056059413372526752304254630367597580173949293266482977530140571621876892448655468948062738999988789315861391312588765371170512405637438722371147894583587110270670599945687449634688541559779088412759978028685014744842745013973160080052181786268876174878230101007716351211201673574799883549945039700158343799459788840183576734495844177712663496604288836022750771286064183115279175044941955710780340679280032502292215194509209280881709628199710416206217064940904202474872476747132992108015546217066020459375368435651053247105209630794590116354601782497377554184231780075873385738248530177746173442982, 1789050849153781968417700942734634593084341527556316732897758335133548754462708347349059726493477036263393046959682090567419029010801294888304912793805585394335190163328693114670263836877307170069005667998308449274623963546124223648958389602720328774314865476053861298423536403354909561284251072721398220684090273457208014313790540981483942735536498282252219286367323230010494013431635949893923497774216260077594461342720369725114989207871373056171371819280447285837117729380646133514722595026225544314912791679649668683553716843497974402715623901789677210016217651434141107281620767218407693813303857634984468921043842219415327449226974865140263617678622230675544070292936433668057250277258823789318222145574586692712897544955982260781683477182874787833177682874576324583579173810718539325248980082516737, 4093562615643206545156695616019964097787065401759272574330067777535873568516602384221829421632417409547240084283237038256925987482735384513250256845939206061839072279440864541109530753242282811179002542767779524232638232191410281085303536289396114292835543831625165174140024108194371963435691976124454151954105561931077190276322267131951080327747863378211162934561799329498877183249848523457130182629042570791704929861884274417797494207960139119538367260299053738536498104260813550365390600930076766220878898353186513899856388171239328895996496829347577472820194338735069726213899474074221735824177487724817611625919349060981942596703138034138932652158491149695676314245598803943219294140182838345098710081851548068479981032859296469080975150983837812134420446550681600701168314286670842567406001115140049, 5555192739125095757613105603310460839837282264566253391052623393175153057398262717564701127255984339607506783886454778896005798379300608278963657823376065450329649106301128883502552100222970540132581110553866797920263349996365894082076075809675471620278799607530538106685216533438350174011455393323972091569030695399472709598049543788669725159441764030942310634149545661363497038076391138986776485010189891393983140729874301203919002066230574321916439138770229733918055562008943185709618145692068248365183892220195552339738805889217885931925149228846491000487435028658126706944406204730106024656811210096333052361197810082660507871323169454471718045779935389619887377184135834802658044266226098997487240835192391742737061952285571853034898566753937832815184109464771544374652346993021681813535973731085951, 3363873745004455798241660982702026920167730873805080668802316888387055706261504466889267494290556776717527808449453247803831757734711799037667573783359338417744092010842516413133152225158096197843185115871861503444041303381677151479837092228802941616814804848918720257859731992699793496016450083873708950645156987396738450844130068729021626361639158449881694003898087972958223441777288096156051035282166207329342672431384609952611306648920279790527120566910461699458157124134851112154854411024412906884704189311990841003059881335558005702531168834007261591592506684116252251126895260826801223442834725155717533514903009806718126864873074962754515063023654644482106743329942144385328467193417776989140934579046773150763265753052181625020879967798716351591294287831238296441210612154384390499363949154539953, 2680786769698881073176898683372180250334261684767722565492841679660306605766841356135816345456534144443224384971017946962661034940924821173815114119372325151233911095111178620137556760966126592214397346616194250311073228988699717442490586825207590657215057186351379470830121739389034700847678991240373915206698693918677612909269623538138485506897924745957582527258236351731541837420481248533411687371265239013088949284687897068307860068936128457097668740526665751266779522367763065307030985663455574072651416029269928106362730008130047865733852197597675843790808462341024135623310683756939067511963575009505939466936340545846070024352580481059840511890394240764491345606028068001965069224881380520529544701658630795969983244472857943401106109504520947444777272858878232005132247587794378016738939193113851, 2620305196016791554227683242009594362346340774918735536909755347871823775361753366314078520754381271506135185093593211771935875120540366858140646389593762617968687173619973163099376202147679128247269072567554705831497778656608676999747191258109820038053526927480964121365155219353354963799483637465092867047395544006800881563240415688476085139101662333598054393374068584800602249096099885479582926704148040870431522695247946625656420286329259948398610538918903066535762596501036182621922082560851947860729707170232348982550851063296465128432802081407885069167740590717113274878161434841945932712899036970495969029540286272698985465925321475669658438778252084355247226584491938220140893633545855140228681787038249917365385835589600605506466479594914134949137100603382203113735036760362519843589526792844735, 2706110189191863659273395684680595975065721723841302148487904506501392929117399983751615134704886352609958503408504767046112907414480701711438948937236619140199991048299308681019798086970246520336291427330875239752007815708997778315420469423423251096200807972500215164346722623521586028026501105974926712089956375879078349468023541070081552619036883076877958344226673161174570028033176548435866238771584287299640275735408210832619900333165478987606876160481861122064556046377014594312616451289596882054356638967057044910505333708329692221236174950138358079091856852031025320811066589364320005896912825906759639339290302142685582413275818657000608900995545801791161206760633208572597859918146436985773938260427105637709866007229752276736732835808491925980702224181904078910011538854705235921747011557952041, 5580861430451511448787247758781867227192604051340738142691045914224677760211203000291312019673964849756114457123937406641057779864474264033345318965895947188104881565483797829431520838615900628925099867670236237029646165233811231730379398006691570648495415210276538521883990777303176468406343502137441292549262664860780928689746734336227540979028007545832550559695762690875158068964340050947710622434389764196434533555514566091503204495869664967315922033928412899482456004764704431136721705034261559001161033113353626603819811889912506765700504610064422419703723530121253137034705039259309223170853900945701172616068993244018985548937056952413732119288917234571858120190924987611112466253626419730653787974215865045517507008454836867696852573043770406897555411346713844011658396412615003929614346163785939, 5624345419940290352166329496591449252268097734951388036960812177664832247176365482634921729427555766416826048699798446113957269959335248355301569111633141919099644735808819291484431282919932343448759694655140424175311654606014480664640605269611148754529868753763399005531173627422573754014092595631136572109350932960951623392224229940355226654340958451804466848488975756409580445640059534115310136809684936711928086128948364319345492079937600896904450495315427271205393947632837385244210527671109650564162794337159787296822739137347076233285646278323789281752814319854604148871020094218707796955147102980103793212316792228641043814717925244664700642855057294820972490516688210135241230245120711231953548925136562151509335553220086391668483878090495341775797280982354765392793939547446324617485029477433737, 2966296341472177392083567948149474699733843810434847850009500247650945182248327321351977193129357033399549762088083776166858528910198656433678347748746781148655155328741539777043326399881163154682416257357019492242201499889908289602637703303008204287368380457497279877945079740794996118749126787785824535590550338347626332187644179079076022642385535459336875697581006056341899055555487182867802303974131729813785135775865585419761696888795407147506371009996271581677281357408074384825202973488384973740455023176681390951218122431149759066475082134420863621086821491302468936310583368954300935910519759441833120593710659542790601394321757550983568522647734573004807960435503593474278490271325597482236784240492110506665782134884474040573876475484549325617032777774441564149036277813052762166765883859360169, 1670544695549168896280313949047229063291467941811592602058511875221607542635308122548425869757243602385351641339192112626161864833793071763308293687281118488061685537493608827237991870735631011476248221338763937462453926209157416004480855310717954728346159030373740239776462438236783166708064016045209303108958893565865320002247391455533810049503033211721547169001936978374971056317447250352097700122348108370392547186052085687907436889970772784902364498857168820870468173076602079143205872817790830231660247724070044388582366832532978775526390563765853019240529182151512117457755805018661658249498259774899118812042669345966421373755167785612278367511818875921599013653180100602330256479350016781308724516289640255250680960075297639844812869712042610301326533290720476191328247125578293071914641237638707, 644827783024578909128319446177698711448160693295914539912003104305652488223533780847361979190596053854414170084494828868551691034643008286582283887255222704510922709611297433336676068309493228726339878670238513624484089494820690823653593974483603016668217750684040586069635969501158106133237295044954582580018650925069413198932077570968017129561890874715736294234190213614098483580573124363836448341735115341732553611415813939473835144542823887483258822728877213967218122481177120305980007039410079529068165876519588024764834435258788199779252758678992112812861698016594443367813249843947846441258889405373629885198582663013424254458807966556104961636324501408444934110342523111948025528886431350328892357015997257741291175420473532645030056238004994809478708363301482169614950829353038729964930855165890, 6035289943100514795690485059385310041386386011596139999124745610221246887765929140725632396797747158959869243450333251962726972259497387998721615004162696307052157219513866151613512001611381051685011136547949954180526130478305356259146602228101718845229740837666640868019668593748245267398165878511288154291885152531278463460878463353012157749478981233828883775630166320362017901584373882805842612198642826299350254842229535497796132435491836823638646758802782571833285920568454039827298680738057438433568146713445400780105894132002833125541148952691556720104989901049409544778696151557703904675881366832235468490265518798996906365688181119733907534173345846595313470360158598725176268772492995675723647497822181669898506967193413184054936685295951365041568892713544288054135483963829053697631446020195433, 2963166625418088793373436241379846338149272928329746985778008666307646525464080420163285599416983123958927977702530976335046855313474220434913758540567379608719593951877631558339422364829657115375425754779813944792939803981762513317614792902051158843790072336025865863154396108642910203500217160983754385929989258507533729849701991213443222110890974959934777161952586640364888797573744515919944114574289778231924054378694986354181742805728539844463025387971373934296331987686013434478357345862133207245350145331673691168377347603096519280470197072663323161793614686599310392736729855587902144649763691039250910330837305228558439111244314090996567095195375657455691695502789321850778921306115265116397912673804888619699712951927047783402552181109543238677546579487190455279908068494931061655864157983867040, 752945882212615032510566576807773501706605879353425234291549370455170418219248033882228650777494168823838343229209571999244967094573666018872907794650115907416866224844589351255840227678343401347091363087377226446374216746607920857407953425766931427850113907753626324354245090692426360059168231234052390551106266278380035423182434654841267577950677776657121816457607556660710646878729681443982354541381217878548907211932197205671292825076642412426667527476524472734277792998312620899618971873280622870476781757577688632097843910062054947255575360800938524166177780045986496966856107587647132875832514943983040477353900902638220503881702485440430118268816758303676789596232457534370738493003252599370469473153875034906481158345406113882547501278824768161816694718031978000193259326735060992079182415257304, 3780058391686955347399322526562110153159033027161479534877390268890154224855769110215733073109838643713992067617571653548387753943414991278802895796071602308137352788079233815967938355688034424353542085744114502031669697678087026867453940342165224855035085411660216950123505945503244243007188464206741709320442278210566075651086731774850795816838334745507867362447838277151173385344616916118680117733336644406310734031534469837227566096497477176540936785997814130804381919503313618208286710199575387780278200388042801535338478538007433876342579100451045920189744353391545736787143046941636542524642484950714945344169835917401697370693802111238282361011775555708526213658532387012143364667510612405447649668032860990503919033244908751788310121530618977739324913261722191456151578734705338364987400150494611, 415049123935764074460067984397217144683930960542992257936422352983361821393745531778133152582179322085934305349668369774989557338111022145454792937265673647275460053922789793958960299810282600905817466446653231994472508811301646643087099131558864363187740619424204086309038365918597587751231605342701042982792456445828441219206360116376758560881802942286362452788340280378616073162280262478114324019466791937535124986930292382645107740220380254546427358989837350290797456716345478312921569725801304581621222458887913978210635259143190744668587673860467444200951333053650590347995765746771483103783965500711774887120874072289265977202631456394646544543476566754848708236505330364792994730310177368391546962329930322960343931487155061493353168012670028715811250487133945385859585550483646653047930576380038, 1135597310749662686125285701868653083239337541230856541476486381053427807308669538057000648845889781687765144368161297751359237479702044062821979993308256712309982931465611965472830090761842279361889888308066074261951567784294654826611376549475500996351848800326724984693344299912458250770808275352855747282188917794267302256941363543261776897210279791481792250236771297336721524829052998294704235184270252642161530199728320292004974854922670967295252987295911054836894884975374663277104304604929073112577038336036672836624433214068841850608141171430146513491973317364894916985669461062285831643917402449017291994644923925314081010152067806808893403256904369486007336596188195902076223075496628744138757031348032293217538486519222008839659314402318784832061137821956763344212131887448577060120440266572678, 1682387299388049811371361527061585281795114986643846187700327057387292797329452597185846414822658440724731347985415716396290700364217813366036660895808880856024536349806243425837343509944333953989282693098744079650712457859612868302614699488837530377988901249280390764370395791458180734833886844429620068408980845172358224135790317863549812728381756949541090040380421962781663041131256768118312723594007172206717832408026481812278323693080550911830860495531000977349392459278573595890335705762380650328293167424892801491037623524335017243518206785744864001540721223559575594376840760001491195732032246100562293174824582095410067185220859344259239009317560162299025155233185447676091279576011472533792315053899646620095091765260312488330501658597475827670507792389412086737460450681601649814702061059617797, 6230484973975031446251887832637044591263007739783230096068442278304855322257097806621144571954079628293486825968374024366159239648146455943960459389209914388768109911750165716369949073316690559693136909691034933315201445874308473141220356678532550380079845383149157542327943866327534413574224802472246463009364147040628441649209500343300238214052782790646095275304728344689124102570157581808351425093928550302264057535731994193647892226784510616921339065516399078736196442686431874026315710640053764010923158308772451442320009633954261430103601799014367746976981583698275029207213777872341904536971674287775579531355589646356820679038193590467207524841069398505563597304263816739834517228366368212678144127821922067914588839657790008010479339883762734376347652456736097160280765267505624422690139823636252, 1025461359830355505960195670779528497358526611057569497967288360184054921936314432477340616254365589496031420818773738138130142031280232236529912905955598043775026758615872528309398138351302777997182359548976121238546332816519298205102999203563716365894270965377048852907379113949545869482977730428363929669513170576660162202797820516205673783950082025746247259957094218155664683411266689934828004522369606998280458364903338571616889488849348330218541072874138288980309866029022795849768247777555127795313204798997479399877840276016221320650463679256151593496028031142973640922623787183549118031845553338785829828466402508511686276184841772637871147360510600750978119551250139375527789725118150256986061789175967083260092295521409845483903746806084894656548564416093096335406757548024016383308792570172745, 2889900813783682616468642654870893866957620774276355379029701757980260652346608665015868322406770034969734637136602464867728774147556886529921906261510782515068775708939370037392478821332384416002671277071319467819657819471563670763457544963202034230031113912690611894684989390203391015293800290119586960943973944853541409532830244706786286581867922165378571423993994708762650919893913710474645506951211603942897384296556142718912102576195753720903240518830035536924358243858901010571853220736854442887299886000977198672842576422237171431962156786696162460123318890255593721229808453087232783731122319608199204130906095295875032032794893024115098494616107704895551317659163865504796141730705096879912959140323692511221902903890925639166982240160902745898535960013919209853854520205632987338998730721704691, 5965993204154894818213705491485529465391601327899199907764885210984559164036629987903958483317746570775773987869716248801535398446032654764633097145934846118600131172975218619703974685105592533153340690583732937249413886544581672989975644842299021237897141238792252234703456857657404543838855776073933949045450942712327779590532065456707249374778461478032283759786375286540146195607971888800523058674718283943656249171354044860876931701189106441805772715230714534661236483745949304172132356475254563374323209510126067610057619722970267917414676986811718571006466977168975255721883204274503829239988780429200029484795810412503825424958879359544733277307110601712548419972625575471134125136601584997591821137366262304672582193092602524836890107096438709878518914313356367633652686506209037024100746390583849, 680122703209362562166441535308553307579773495339167385303914220548843440229741260599270493436102771144612852795300452275609685886192406452558912057783826457311805547449068540679603197808117876307356573067177469171405069527657329095652126804619396937415938656224391201057250160048268165839379637332598701522119105598503385248763733921267510091604861713478510735861005532328964233288950472225828076561432597714879140087870922730359181882035716885486821625138119605565418829715846935209407422177701244506513679202928696401857875806360842672588150936727959051278211170427943829718121147577908145256650999639300462166594707426083138260102009722809205283790383559760750372444817346449822732063238642596218212823456803590639511641456893363876888776445437082825674561188333226343788720742769262907972232680525676, 1299157002633431026533501903376580974679587508843355276462797439780705940839180204441996796974867397476493339716597474953352510635949637878364034066804031082931437719402852966338194091052142694116302065925553508132697031397708708107214901748541544103912819007235277136993160111518812773357869833090211691829543416631681396979714604605810930462358033338050851333591040842092626535047557629745023829726619437704353937626828985309614491937295061424470138567010669066090740667458863291022055246717063456380465312392276416447566723535766558408208330455919696388007133894986953733774191977788804474710430768420827009855327416035370610614842512348635196052927921631249937160879832080008239838161468892907850864095239462459555843975426078712759055544971629792284901033969086506127462878120131214796347719337758666, 2044241237243956798676193525021422212661647653189698515441065687500974887904774086263872342971460194983853160163003978270616814681020863464806518391112313086529786436126539887740060681924102341910843713581442603714462331403614277642239512875732715666737226044324431155874797427487468051508933964440802968046139956564200089453726176235094455877026521526379052085439164872640722100636614350474445882815588030977633364289053321341381560398202120713933049819565468643359303469259511852543425645584252948174015060657856876836525376229862636427850545443214136345305959648850932432060597390660886403856075047297754509086013215736029436366109085836905199387994799918935729627258465316521708899414327559081912958123174249319632167681672009322156453605902414098100677217902204114175801235648304275887317976037348821, 6041079864305394509446617900304374875788850282059992864801571330828465950650342798983776557600596028799750576949798388036184807578668946412259537812501648427398783568594554689139726229177093237005525810967536247692034276491553218020396154729864631127080596942772631151488439023523114109535676451089053538114562233645926264536354366015397141956800679636971355001916916831510132606051987860107055465433962328962896888895263560065083649566415280061225698191956596406609258279603123482851445338400189354627448836823312064891153131997267235175841002098925360830875051961415523001072150087417190039571711204023779979591629631415327650828596081078122242197508164895209109161442593909551930379724893641153622249536580065050576205302545455138208701018556212970547352091340397499088149181407283345778635241403152718, 4158166113714146897857940981369365738109654372231580636326801124710280782036193068570656017260399422305095106944133814027737630770340507692506283808928137028910727620574827517211848246215448862250124421974439597847862470875298722793651641854151553889279385509009983826707741274840270474527475935654008899051331645287342768355912095213168391492734791534876285415614587806420081096767636090301540180456573138353031150318139684057051195634095643653915821148006840003439638633918392189363702991448686703731543233415280440571546941525357809674982848008284364917706386903172402652530131352163456558735538503532765582480231322266093876854598412478768717037062462172413792209785411412879705203816158167681778395150484761773764968782873971818050777117760260115095449919302119824968899331113063265261532570114415807, 1722859537564111860969667061681791058647855453040500904760949668798914804166982710373138169249554798333128738338076736393334328821446585080694516329297676054227401336504334493245280389612912020204273699654426925307389965388649778861784834959352074080834568760709601795301623013450266863762624036405060418558792773419960544062625021203236207942025751454604914696388755063725659843604137007075667273816715083883419731980508444497874495178303427860440604922823389165515601821285405860385871406913242267121141577891121818646692536914257447083372426205591542596852781376784206940679539362950539776602064718042149768704049927337507030166722399465273120779243434597716676175763210204748952094951580145141078954123036369083176571286526339252394863838131061086995372982102089695906926855894013316901043923155338445, 2013520960730179200761270354107781799129195291749148889752039240546046085410848717699890142011765386517408102692346849566772679175214064430198224324408776226569019659941958240130795021168954421810655091740413251542701058420655670156506341079311111127067613789797583113576555998465716533269229218554661650633497748633936074586647390889386971415359810376905959652827612851056510309312059263386362983801002826771563150113201967851538987488659688079795146463767513185376743828313716711277948143159948870514724863077998506735491755920155883472366890567817220529308150115453683242199560815404797542121069170502205051709343306259424555403656497343366114118177214945803749630670175342320844296053024285324879018296669452964479139450784876985325740514712674588370840408280756256997322243966073024453754221442486604, 6209433433875044377176306018626807725270215556311935478949318002083869850737759075015413775223063312429202436161648177715833384018499244449654309739600561112533320626033605365419534868996234680772308035553144173210268639984659636495827104378888432842637492374412263930665925719238522422237228170736029011363656579367252093790596248776480225050421785435446949219022510278943157697233775841017646906866378165809727915278973243289918290104979564210544264204370924885657050425241903582354771077872512720398480194213386942205992217551644941494739905954593653816637804285139666080458962836333973076299277969333499908068589622313122786681257599130268374490397402058739121077417221543598586855759005683269654970680363759902038140756241686224636047427690471847941926117410771184566241475411371344655714598025782759, 3284414927981730302811459457314608173917723156921349948086461292785284704083434482604140204619688179137225018497976908320033223591830381489149316283494963236938698825541944296171174085121211261649027510316037306692196592306941318038106736810877705771620609084050255209742492050800478404290339762086797169981066178502235954640693304713488130585859868567056119144631716185772639428695882216421067158697693608512801022979496709967122746671850864801745474311723354394388787542306095160798086122453188679058112569704290211739270085617863598156935769664954349307715802129286511619871513682718658953496728643183171749577916665547798538863004945428102386000023592723316441773801994955883098515657542654678765962341474307554207328066416226416882576190714993591808447418698498214236063186761728107074180532421928648, 96832444966321809490081115492760979150850208504910843018197581169946976384392434148715904741117823798777719824046889743447106993646684893748542175716812585762502649856990525497685298456126897071210452502075922879948254125970605208306254657680404537713131671769774529564053277237201679769716014979123525465645191165921091454232786146930865738738075507315824802184016073150357065635728564579881712191596073202518155055628718721884799385827292128910196387363957712191348229381431751880106011325061048013869701476913689633873275000311631575879220465988813120729286396732391574283218940440597238289353919636350635714759866416321161962089092200714781552753153114927533675088126696353848657335382151063063546136687895558017574287451204548697034861100135083742448298788048100288669504265126862014703710741748562, 3284528483302975483725241025187476219563500508904545801603957469773002384101119498494809346633181564249696342256189296470387381015227453167045982148882657424386975178374067120092233938772701389449730499217356835316961785152173578963474945011312614359731463365960197918126349209723697651659067576969659739499876181132807011839165923960707748875733146177046000275418298401410619215327698293310631333458282980315501557178005043193653652969507867196610037607542481482860557556336891673161523407350143323138486946636011371210166527157141733901299215187698125864601885400581235322717582724780526453198164476352338717931461389912417074757678435677169845622448546341376841724024838316475186284333331941669062997233718866067665074932332065582095859837618372781035764492177750591037653415517344340970634899667856299, 4118556076217796941866945025249022697788762535563099551482423126964834437802731979866217409076356446085480372432593119034741728796105506209486900868834430769149863574712240857066863072370419507839699561402447786333666697599941113166492096587682060403986012187694362655834947134783245149320637669789854328214860230597984860435075057465455474638874098266285671669428389796198435714706917584817890540965994689890712904701666006005917640503124953513127971988602580031238275207390805593059547570634007293938455479795263497615385557560165430511980459437204076087124323347053413690098754613745484615973107942389073483155840286712049685598399667060006057127368527289658949552048523569955696054242911039523158952604941070364327771577566026163238216180737100349708929009809518453919678382380612174374679325985089079, 385050967679922328078625802069924731688864336726804607438683311800316867334201121509350605120135356309859051562494344059335626650098143073921199275441706114625743901678045539059089730398230335445300903305595524124882763556123536458454357640576540961447242892846488934761900345288892042960792584871510345347719366344109619388108653382041027857359841773315608457180496271549279550702072614256538396889361116504111249224544926467294299548595079310734861701347076720848792489967464972534564244123118181260776796649448802494007899493525520058207132292293477386121197640216592028687228518426300659388686313131803458440581237693590558118667091952635359235553072535334883532329748398713364458809346042693493820808336389633817384571666049933701296548075927476325909924697315208891807905101276607821992922516946043, 6015735109080579399231265380913366135796424715513385571423688635105169000686978364891380226096265683952226153154453356167488774845733181627296066083938506036502981341339449243008051957801244167448917148759700051714774598908261444058968607990340393253836985945825626101593495781377377309566083789574234465141570751480019031050424539648683971237710013895531504083251439153270923201937919364368689903499239244532907035290812222921397865884091083288133639953933732853606901444283750444513585414091446724092873704466984184407042691162721717659596203358995483903566141783246190608589640193071776017480294501802446190334539399325536031344746072429422599312893747816434147787848688281311948521522399005069316525012221107328915356544798828588907928886546344840210511295816372046138981773247976797861846416756782618, 4651866654768602298707771051058713520468696244942224651212063717209218449189960414568054095750621124106620323699613090848903286419318020011743107289767466989807173789659452789386915063988454823843446705025280063836477546911502737841385360065925558718300157930099114553931994730380839943160114502541672124872452963009837088739153438517794272413927913337358574283799607312680888088842883400997612189657237502340456999188335424798115605764900120240318691652279246196578441143444855831216470670889474795392834350304981720570348578802939349503752581217929797802099959829009985845779118223333941404759714961252140143400250012356462536393275470107832153108060984094756618178930504510847172442399729437143682469032817515987559038794004671019364900728632230784233178740278367429364214269291629443202531099913926934, 5818805147399031777735584986257382517994520676270335100234792829159087675096489631451455570687335669403359566381408789230878772498997391942450142383730769802613286328348340867305636455683234114066363120457064874690352470055765467099446242694062218016403369848748531540988704916306292347952344374997378508214741718436245331702009413902097833714516292945198283502361399602034854995646341098472490054841318902134447282402997009634677440552137529037284730726396138832762014481451054807776351872332975442984774457736106041549975268103177445326944330716674859196381959653659531535913478294829662425136901072107549715964160707006533531811083250808631937977161244711421219127837502406748698249332000869138668098219839717645565187335536701649099326856089405081236322157506011554129935856712076045828973574940629325, 2718612398163884966280237016431485031589991250288136352740989287080363257191076926545500878335959358408535025392898534140478051907192381935253485469887658588457266267070085910322431145310442956510614947450139029789777965793349923370413824206360725543752098724270326517580793605736600095338878625328888432196079912358228409328841700737434394118636006551137837986658210878948070970873213759004461157668887862759308444740860875653576954812986276791883891074187276588416159190803394631174939120225842481984820579869195266033635886925603966437962391482009655676007499575427443325431739245809388529932295844962388600199488537029688551729551176563715642512295158076171519428521638451064121250760607808270688953311979057194616687601362979109913169795070004818999459670676181073166199622219989204631798882740785519, 3572251546004909759507618105295200706307982171152856412881531975288652285769999459578080893119256834808078458257642791448344606878164133959949227031970183687608379277468874433053040965958732267462759849690887308494793572415881930604806180125431182612545250390762029682026365264693322897271249218725515439245790814256638964286995442158139825754507703837315755301535661244395624482338734522374395813723694173723947687206250001952949080124581031338423584746161905392067449160114153291625493498616440095321025418045281512610038884281549576080326296193209562263112381578479382220796684527806202168320364205705684652245426098502127362138635878838979377883909600821021958343140245368576926252226185739357601606227909818146971836937818065262307127271792282509141107342417624616505200631221176315402313183888871099, 3954545264135053784614396613001962288899319131043361579259323634458425992264660948104904720511196667463651544545816502422740428400994147415048155248377446532474283718796641960417511635080483620066949761412577035077340707016851465829332202517170943110325645522734654481003155708235918155956924768299515574418025917663082795369718800532960958809158150509394555176390493942251158601566575822444111748247105487610583529183931486962564091297239600506432414437497654011047188500321008363598982574695616811707618257336451295521212001698180257073942388137555436636734171931252669995263446300683688490569407566517361604738154891823173578199603783464660795428256897860709745374289224129170659234526164658404373171833418367868713051681785436022046458765101319570549379079714171962748927087809732945106585969568194718, 525707449455160959082870493714517785030957879719111924656749793545168680497972031915099792125013690880119958708349393224342594909262008828896208080447337075810893279469720133540898737650452895962685835262068316916683346173774843911942426883080159074285625862745728146477308138519616078756764434444646717828415110064840734512029732944290106726561191814145051842457150991102657043552237300010745381392898694180424809944204441528395005557070449187779489703362540324338548535586980470094878355345018195628526895012648874608274366101418233000005299648357216680958363883957884337769726089541615947080028845734929029219228665468360088089962390209038196941584069554091709198276237422152304794920576920339507118218080127555106478724217401347714567093631356114441533823165955963838937022552840705872970791759262636, 1744838801675900329876459881649923502525404678130328821866342666638062142186110322785667112912411713754407353725965011140177501111130458839788535396415823884914902775157764723893559666967646557323162021860250342287285748471232852043210177518420576277648034115319694698846586688344391466890670916040377873359767738559916251822981660037726218883697481925518068685713518431339984909889240204098603278707359712535808446607117557113664219444217799230064184897220991622410425768382292430248355444581662059992270734757552900824478572352100015849522061508718692475813132820975576904850037506293000798940386590038739672742015962321530373024066246764574210547813750599323656215610095375240092836606367282690314451137231341075551120478874158921999939438024777749512336335445866818817585437697262326094918346418951503, 426108225897160512412336474823118929681098027225658218637311671869114908377934905042283249331766119698151532674038193049751746554981518391099250741389081578394930509455615406425236805666789174655003959814601057833118611068937487267600166994814487512731098436251310385163448167196807576365256527703100684728917529405313870489160490728955646196110927127929991304259002282762191023033602247140114815039220036167835687296763954557455788036048426133694567169658423017106884853271995995174046194396765413963199657145636874865438161634522280604812558853020209636798907919644103626761855523294267726718387272672551983458343381454140173427859446952105597294643170308378026053477375110149400547168307957051258596720142227021522998137339810852488497480061854597543872690028455833040447461952970198345085745387058941, 5710509472674716410282724158968008130548360818542759492481214421856099455479499642655113049194587340739183075107977010355027564335840235888799816808052639975871542104340041891729001673331894560478525665200441645916503503861779769025673502792521012002703533792015685975388396318230952096110962151346264403125892712429381692979118043482971576226642318038990790079102679835419016690640683331411210011326050556245196721762848332156836379584492426840160267929738543981929106057584211330596174748411211131766211649323369665605848666103085768544442193993040290036201843519712003341093230002464258141824960464333372792991826538403921435137254907763561404597472613375683230697961337770750841838536206100557247518666994396551996625446625601639977741309529397228261819632043734304327133564544837523741813158579111233, 565750169138010518525936346487303332718706798057739898438392967201628033914055394781900387906105399131134804413325358721855431665481768688890500563734823562422305388793874038027055743523796953722142962889490854902417450311102586373468634655964922873972316341047199220400862632226864607145637426452868440344797640870323044738155328136756998798259076618502998926194130632405259337273318090830095954732584256466201672129330710232270964198483186202535552426448287251329561954668264742773645669667903560256559041265572974374373069571139425435936090246989762196720218418569498240038891249409931650035005412225199126314110686620713684396620457029845417760746892210990049637500668775877282189685087996219249729392794104520285126640454535753441127447106479981658610910300377813749310180090659070427081933141390522, 4452161625072088530314981045213578660703781933855195594099335752052555295129538396463306159966918421788444042036354507927947704504997540748609218473138580864836324427293541571651541260135555064060483354272437516945568860791025039834434915229468287687378240308975754077364830269240258294712949219428563827818636684998602113502055983851516014728762307731374700811912358141447779991122967528666759793764345262666639641105641751439293032715636338561747821551037125687330994719907980740207449261472210279630333815942959473421749128737006916195220326906653748085572290531264256568158531935678957308440439403182343120379513203382599876548070184293757848974904511161904567930532626713662837967753406206712783150456889914831352750458472349907176331739612505891416264648100618042125626139459048545848744992682597632, 1490424157874342568043980518426137611160819958857855652086053218156883780809585210557793472985363097652987683757844277760152412794677718454286841949371501964576843212946664944047982010185585926778006437905907740384055250718867807956529707546854731604595838425642838983342810140528455347721192614361974093763618042596277273657753560646899551508203430530871153046772574510107622603638956335348760239973974796899909760028629786105557925194178122017001349303596060252069492461607657610585272354973789213399966587993406126867928473088383468119201036355967742305801421124114079556874252396183384931260910000957887346619723541684508934807643971732396344366178946743639197885431111940960999498241278460473981569100513289372161380468173083820253542808359609021635755292903539030934609987279964616903419381792358337, 4950803515054055691290862608416127648299094485323143085196839047834898681328293388415952865186407144821288527513440917932810025172701773982612717615284468879524589323746258008296618584672894264476014853105885910055267860808285035932909464119381134054298388134451666764241993893041925257851030509066660152785798836927174823295937436357320685249538126572123071364633686681072650733339394858928351651439699860922317755138022679207530585615925049383727538890879174159566853312976438577065065365389160312947779854375680780860343969919504928029704485915137459491113373101657923408114905764009017334398377333850049213820254491157879463210336676905412858271252331509988206218150511278310212599375549619356388902441793575372465881512128846421846159577285814061185162881130434534452112851215878318760542514450075901, 956107022936447622780117372327843554287281107214031344474634024611734880675480247644313718323695386441192823652674084671451262635173475626517592877880383333523571851502851880543748135063917898619051227696396022658124573051174608780378034251572557191246572383307316393628376816403244619725139896619489556534242832332037320745141369337753817502954958511214754909168087702534646487953201118496287145770473289685613544918671270390514372515151479150282494989207288055346216441491665019750850578621995855125280698179195974809201824610213910573060176221565459205814478531701954954545119522774441384174081577047714972078892136250435568122174039070007118536951165706097763944709450538234479533636321843531629136553083545593260749509169501631765955563969386724919345927685385572717837922603943133573750417668420945, 3948418146037311110162714972019881441228210051175402947633562426074973587878991021989071209950721841213724577970645947570224843717550272383633792483721323348028810801992626272530076077959321616006284656794957411089179161793506436564613190251156690748260180199462803994089007572975390494861731895546698494109395984659763209182772378262174941187470858823741400704016351589334964576311375214657521301889207683794680922820956561508193218315210581408764221557276828574981517523867993580339981544384596999058257157774002729917129029055679176937572627562912244358703943701088727018194106421078345504305900602396798519927941976611915599222670731628449854045357702093191939365149910576507268295718118856129415250159212091987602899852462455350728855643027294202430306931405421821374972927361131269558666712387374765, 1151800316587201301180487022209897323064964455557340108972402855190205563951610032134955427859827351399035394777629753709685299991284316059105309701291046675733521629943957680555429277129710184494157630184032539270575735903506492553034931012572402099136383129106354750152033608690833998976717033406210843620893823400958945320531533479881606889501624807293431354983366836254013702938227146311277721647652699042587457682311168015612139387805513312182006067922931766172385642321017292840303522877850166358378025917001467006076534605463869612356561329445324001102932086454886916205771986066033569445991100464029045398012495104413459622574445125659325738490086431893100653901725792481545990004182829357791418575089814467845851811996190553893479156775408342099342646252908078809444945202551059046824866674609021, 871385562420267698961080966476031601527052943046892381525042538570376896670929077281862148785422797646556779865776383719583422795486974567469984972638006112553737666687919965951452253837399940639819353639954962465242641347073526579135356473562759999586373116438967246204412500676655009985149981668944199978823383168613039392912973133614791171764569172693678390071114798601416406391159099274007432921092032029161986404118253318899448229149148387693918741724232648461112730935478150503836667230081800613264874340054485018982774816153646323878382581539529688160975807754322350157755786982513613976441870983982494309625955093659555637016945700512468095141933093133170940093134454795995116566585786173166332603320833249202625326550018700293121492171405219700359681161845433792035564746786084851846717540927227, 2260035636329087881682605637078093545717151265323441616002388882738670984590012362628822576259546247813087031462488951657666418008866028594869666148444170485337803312913071224364170897832248485491694249052654812297957052765197749791943031800258035556367029817242328210436531343884069163215471403432388459852735130526589480855242577980172098895022904102515824331735819032640449606532113543179605195080296515790014824268567868927476643633324558506434442757965384270239605845236985192259140281641957085101484045669224479876610740808214863498835618808675768236940521226476465193455729159361084448981830959087208921836400231953217977774063728229373773400499734957325894663710029384697631283756511450284643926272238119143859582427052934199843316934907607174366671209723910102609455514863913082326873516583949124, 457900657604670841621272862933013481315170236752640272833232288915582061070610848687803887791432521492188202997606988545431539574156428140872294260044148555069001607740958436388206877941415872834436388190632118873785802477015978666880915077680811078919332721226104357846107657777839738237733730904099774805672459724520524846477535861638962581654834066663007656514969618785930937578734437193546929629505515600871173614012685128759980613126163639802583050533524883494137135643810260792424624329468171013807925365764697189045911589436800532569347430273784032724227185828154475091889072569897947916859518978739916454837991368014428407604159850951013437573911476553354929527683317687829410724549623291999017414066462818136007257981100726626190906974363647285491023827064850355060611530442206460742996254050022, 1778396351449505116252722682714855393668860193355644524408406097958285711912473181947674382415930499825004447985810373252866822089300874069297198077610254700855056691794381984267202202971863626975780239211798892041123929415722697241835146725084531154346460218288814970687077755283075589522276865077662027227400526286579439331937955873603353103387546962988633040423739944993152509842791272432990277054685271431853234458839025797890571598386880019030666371992804613128820945080603048350515765787585544899990396312557903614332202192254356535317339310424756619445540381614257711280270108858434285092399562260722704630429112955606586136287341877081949829536290820667170567417204349135948211068525360142497952755676716538516774443539842043070856191940314002572644123852083823719034224334684564497955065034046737, 4589539143074888818328729950140602129598790606874521380829799803721810633069000640877450120598932030832467752526371048301695699946610908871693133773129645800362009784770017280318012386289873065712545106558409524859505846389407213927845627282056661173421721567913057114933729347168874879186336432991252783399648078049186725071899395275657287331645868162113996833589768765774268806717876510439232117426683054432216002185066745574125146363420430396370507263445532604491552854635156672688732246760293781928054507931937182814322836172233707714495263942126661915112987365830566425822579911191019738396943634556919139022912854058286333386119733668796763752629377176679749196761533217807112899720469465823417693538130396581221408765552682384073539435973029137413922787136556486135884906876886968276678192420086826, 205516392862688154473109013241212705533369037596874178962239390791447680606344115892120721626593706314120232677478119397947330035808406464516878424242487973763758258068191023392610741370291991186847094759560667523303967153541500064368846195704674677636968902496265351354606175102692504861764561698469737345785073244698195692756707478398859841983846299404245145971857188249115649063350154095897998810457747855478741737527841926766148519554332334685846735644009847193902224682967710129960479552800434348717683230956629468989145653058410871716331618299233727404270514375271605755159481911563107346159777559182688417222527096690443711612235327867715540359625778607295935179785716695986089343149309231127312282070793805849425404926700984024421655553271807505108064251059756327063157630938359423222888889318576, 833017022024573305701747700682830696334898890214561015174240102644355323787199598219864620327310569454881682049245738648904190221080922792121565040677499970189573815274483586212318081470419431156305248483989487987162954543872227651138146452845185020132693151840167584128362474865691138796147418874016378948088364741505455156734136916957942151919563513102525070658201831423033484324367438812179827886827627316227391395001719429104458811517575225149298797243376536406629454270545151863125304429218815282711502879994012651408911974797072010081226647686499304282867941407365879771133251177803882831734481446769604692095236525789865424155017454820968171850618835751318160281162202191822415356094608131032453110706339217434111840312043525685587629036505965771360710878682035089518342505581414122803382493719648, 4667231374449760361710620858711640588078566911225426769219318871515440135122717344874922443231302286899970093367030469671626363038263282008402777087740416898070496590600357685838526396467237292486959974775515338386837601165200318671671287063248922405317946674725862886269940528024834238210240787425973015862802805187133639591791491969462861966239690362226680001391272041706260523761063005918575737770900583612420375115010533360687234489191493418492567804375994686343736610452344792532468497362927433273694960715024594968198318177224821227655679674981406386587456744235535203043263536622228086341715862947657631549782266750008087330717923276191993462782289231978271324260426937609324962249864215084025736958084797434595265858779114900395662913033776516583232191239691562069925418003203876523954359898093905, 966560850352411427304494599344726799275338680606282935634651561049947316448271584595755897772134211513237589812404975876468677363733068861139230450599919765248251151060046530678012311223137536293898776739672858833319636574311424836978821253360153069457775574460902028472288886030951226727748735208852078395654154783063073642094987772610669540591097745998670593582076673652420888216216656598067307867334933679405112325990865224564595733670084725499162272544728572474431087672457164724607247311262062858460297554924297648529344918549189703512372331598360068373700407974366955176528651424923854668753210376663789214803704806661297492116395807820192523470156082102968745907529561577290549242628029428591020502011010871039212090133562963720880856398765134603675860404983327127757412433908852762798198970490500, 3615779977393933189803462295890332910879113742495780809570783967128762504299935539030270083897436641491153100105052688312738006462039999165090885298039923847473568533666127276777122186376250670429991927750285814580152452256562805355240369034421593847191625107016126859470155794678394010990141637177853798940751294195957132008568378559619522542724461903969148265291833787066100984714433258077096131132954872951244089293551038053527774499166426493927036980180270004645909650110541327336260047920969469920717154496094379896754478489834603773224747093155641157239920452049880593810717255567051039419876118686617520893612320247900824338551835063592490770118756343116890856512566244242350539279433938399600963488565624356653854541274586706589626830586911181424613006531538176697659656144058612790707154945370020, 3990413811712566234294010647987790006068380477855974301211204486226164920319102472304268702995329876280944547056511292892236843633226272552252221326313780542198632339205769866019041568046739708214701761736557204826444421300888335641347310033674648441411733453995675978534198636787872885699709299064030903966115643661248851674363504589524063821456759713206508002044403038692278891834050333769650160410919439202652975659186573385322418900777884149300057126547365115056358060636535558479703053486586607248983152687132794216385482984032678316437340888145539970468545474942841750352594815099796136518442124071737073265954712139264180020339594715953623304479398181993577936562567562790133184846300480159565987203645571038921700534538117008527734922600810812940171523265528386055105234701343233358771326605157013, 3965290806798191771644633247756892111210325990021690329814799310842517366173288233800150756777888775215445967138077664189251326944562468351863314805938666272498492940702141537371191134646782430986346053711582880007657630783729484350987574360728192226241994302653163200115940638193199456215697084129811247839588415969172224179328333528532578048753960719167437402431842315214393370845014266723333439943662579546457991118944067951084676871394126953207101592455897977756498671546808661594152713350079415971634246460491125240741522600598750389447386729332086616547604161061876494407037289986177804458789756699616594239728646476433271136066042472090951674947763773489090277859920010698451853083606092491188744180602188821556985739916809832389915206696170621223795837455976647751768897270278955422449419423723530, 342652100581317405708143872227062698256963308973418016845599050093985697857833392304091088317670291616254446128156515944747012716235722382697681247167305478754037394569590437205478826412312175844645142254480330690796005837098762705286843270794450537099892067372602805029207421173117508714133343661986895269175856880781218942115301038760691573531195777574080839745717520988515599302469239556110705757302955228089578918329005239410120459577222966604146174756111820035832253019266832725904959700408632091160723595271033108481043447978050104146441037231540051154032824753566242689180721380132332118830677481779926995636555312822761081647989895308461335333724481825391926556791854825703597937675617567172867037582078016588240939491029407478808573939000807824261667765036342007284247809334508005485413436982252, 3082094517609055521574093492760692021576517818384161262851867454469461163974184225705317027723549010514760798993315280051054948993850778854199114566433502786737495795181234210279223700155349178121232307619110778229133620056339759029521412294365075381379778718052565649103875871727783558244605741235656685287264609365890190259191263757796990489715822504667015679749111528189440588846180455158702420990293501399979798928100445614254508996658020996306640752039344540748343400158417075551700803868631407849573415401998578081147945390544638464178385630088180271453360144093135466653909960379514768246867988511222414341423954691126268704304057763552115840375818782964157516874652643661988548387045165200016207222389022613667643002674141607036969507033856020359094232530676681167624184919544986956502984170047546, 457419782861252564147667607048547171591543656545027340245409254237539761502929228461928224953777294790210993124720583119371875113217451335035926349316508797027975234465599413602266716772206556247487823119292538005431696629126570343902140785088764071805453346872367828567943626002573543634924869271052539852103179775753740990767067336303978976781060589588110675648980429552990873865727929404093518152821675763630220958150330295641005677230056747146187922933981168705249599916322303520798518866222791055613643921402980653145686326494448102664617407930016490761225983395888412825648304068150011722071508785979071556269686852121953638084392197257518840514708669514484270458710242833414885693504212730801879118029854698996713911366412015174880236542472189473567200354992866960507614188555224080322946466144514, 589046764149194559185146936732187711443164149407047954566718816061958795256638935826035689976000152613489312577038915249008259503095657864768179723665237203434321406462133787587630082475729087840727797993201741204975350973796858924097473886114053464289379198353425183333096696624219224322884255015450457699816587941643239184072752059849474033005966479032666793170305493075811193480128273217518204838416791044984874269065993878852793042169240156441579848018220871430227933674817029619473207057547283384061883022500509566988102014269240194867070710280550588737316518534342769502303193841638270332516853554071441909718697615257978744899542383503255614463352229630112529629045751547170782495371143838830066363037624127308052829251193336132861476271231219072121493213551144054968160780453444461677594585216577, 60854559040926502094442123314840279977131722066091457182390069229466312121427760216068931343241374984183498220341343526924206210070272790999307167729816092171537409897339717867200556760186827189704943317433957305372565755836416662426291032854548755553052355533659698341979424345617511336419688775850384831075885217036586341275285187210277874659604626109100420325954703739007128523725727857995063806470354608080406545639525520773663700283158068723476054750566833412340673626974388438078742499882850258790895197088762170423602428800147225809329677505177587691893958072380355085728197091519187168898662136338566287522648467555381148888495248920179445140254094538445942491650893066217036276462808179091439133043503889419816523210667311969468159720268874136807414354670165021903443843060657452854633095257852, 2164790364662115476341473835302793186270641838997285062097313900995391333157880940667622542063797525826499734135107066174317634704449057002739459221513758076632753578076956195160298321797233561773149566955817738428568769960577018177432186747949216901205644781181552339069537035167013155167828287555340579434712833003126895323899500587816414576375445869484045133682352034967639471135727867367496376638053752991858090104702483582065868429503413855153233558173821598150816969511109043199962472236283830353657245203336275989842209258989328214686046404146130751695889771755252882092073509190760606795276655836468385220344840094076149027880713427099194324730116121541159340608959704232815005378210793906408231217811353335850731955732651134899656073842030174738584966763862289233662220326624772527966471028678698, 3228929136078126873933683879525840706161817151042219735523704191295525531297548508838821018282175868593075439720969359777973408256009389874768290665670509056428878546246929654383603114265551174558866738543706991731029834967929515133995268589093556237508559132977902394747241664193621050541115980671187944213958073029798614605498128624822988989440283579244657932161120980947795975329679657773724452807750358929430926799565145627200273111257923035895600292193846355913380874602292900096788374379023947077421006334633156126937460280508893351641205430376464536650501132967835570978032184507942480700623345094667948631538733759245425663091180496794185739740232582836289971694844891600629057114345004187606677612993161759768887472917069501140541500926718121255875812754489677553623627993703890571511948222952540, 3263291942024531193189836474537938123444689810058267768445739107188515286102119625276983652613147347053581170773642481253187615196079063584495254408234737162292469994023647116093335506211741292713757189054711208829077684075604394025702236055446968768398201723219581134559222955856191911406629437057326158593575989179312329355066449718680834032816152581327339181306210879505740452392565396171187764959289705646851119213102808421750619375579059467047843004946933108067351645414914605141366477188070818036322582691283214650879162497103573211040204222386755167813293150320559142448296535721723239882782674642180058586117033640433934517346917907244001624709414889379644364307759937367706127201421443777187205597239815710701790371373360635761739144143813418914475028541117752986562777675586296933331944520501276, 2789776861304988073337544825733485801363972092184983300475054178283990741999166701896095131518108364981862103554910362932688570056338412324967300047344349554603154831038276699949009439396689584265701304830848723298484016010275230543894654015613944602184915619161801454486190103490419007716850784261653226897467437940446189294398926410384823897281821903483404387369850749738498479959368525620220418143133506363720315511274013258271820201023682609319513652609524330042570921273205319450821204669014378789898780645710386871516166624320111610582348777648431655570679498757230046666357394738595848135860749449572185419429808094780876770772277362231134998442563003587232638774741742421222738463643688905423031250468526321674158958847240614677972668865245931092006345296611849016462876407874863860289479767246790, 2135139417138002009948765121861604490113086934695473756808403200197271036902631037508748393533884753105029311526310914808306174476939059537714612810345085563316587857878945500068084887969301982300169485862128269460299381407802516445463617569030058291353601465483008289258543688768245929603335128655943836246245159514823314883535350305268830955974787739929930069991835841806929897436798895046188285693950981718740582291402595852513286162681362300124093984451450077990392543725123913641041914246059965547164956544446284460003375869083479864107601227514327963142971899730846636865672565884185104082032462466450682164295440809473756243458822804640796166996994968601785582220628505078963396389778788378564964177153769652033280924266221111096428969321960687410058135741147567401437315335061177726152269181205956, 252757324469398385044433874710432171153733731513210224502970968572779308233731715205162442319111937630218894640676741523154153097524769369873665195713371184674691056498030263565348554574945916529997517206392185174039314892327509466754581899489384674509268829953922702855849528176055527451722786948149227144536276838675468451816044372779419411740149328279728378938193647383904248265152661261769237792482386160159750992316530129353418834579343243877775582901421994150769431131868197118321362701314377263925715870894999893446580926559594001056692859093931361203159651365692330264537601998216578911502321424746042699518982882098873980106288582134904167147713198645332561647180183058980995471370182671795767363589660975698245028329560716722968587589613376106568819261567097819397815914941002131416227011795265, 913374121108503814986739228590444892000824891014546017288563242725910860651361129581684172090043766299402293764490112499807876634469966717763003765562987132179749130837760017712942459191429795857748130474206806506655330842780846689799762671916241622064701897016385894725317866530282116261552749816114172100532807372748288549243667536351979182072120352148318064437234572976320114267424755184085758986181571986344576863700038188950280095186995021222467832128752138646207542876650773789409043491175628916067356977097640712215173631810785557719571764151821810938440384413103228158624575798720442030247345492544397478681717109784687121258452795508774388448242443213571962819366983334220179295852895632364485255189927205561765825879784989751608117513429391371469089801503307878596363883533398335071692812819708, 5362752260507901451221752668758780162285739550652587855031910794862478923148156601783575470831832340278658842078529069609842707119569157028911892886961929539687719490036672058068817240325103388730513554577446108805682273777100043014092524827931978114192717997259633458301415393428662774634565506277898264720654108185555947842159107217094312964490015819447947487293241383341610583836402620321674751041721569860608911122413679273708473753101373586545123233941063599437517886937391121467332707077908971915693559792635111099865586104684464571928858188881429468782889444325737103467112760298564525825841118809632295362383682194850974272432027691198043635688570049278626546364546811956228068580642156057512589484209237442613766700462597823658552173860575762640450900746430489170529444623543190743971474230346160, 804933997495923607029387703261609097292139184248176299874199503941126306327263528531023028432280960199674778011614183896727444438953427157948881960286933209110256176974307796758257843493848066172797800692950362314920479548451323282422647411512889536406596386121600184889092894317357427011888595745053716123050839243828326692327612337326573966625480135946321221990070282405326308831319718350319798767636189758123897719549830308748397017047940428275922098646383214289803738520495863044542910539467686366626806656143920892993962551697092098632862310472219657722530163131430609031317426341094072299051386250608264663677660660606736868667250620095442170915554877461551405279237345225366815113508978248596020572874410950491166440171727414287726943019213002574423053580312388304153751472120663274925730892768462, 1936850118708267344964921099620352434950823189794883745690876624667937107882281964150699842480898661522913299222912310192078341097846501094146823779635996439014539048720600664551058701136310688739988395443037139210734062240338914591433411448988276884037759641921410082766227564367205914872960159208694686915469117978606956758902380700178357510207239086362311465361272770619584969340230477084035868504540908136502155966985197542206202733118081572972652891919678911569939478953440332146803034654576545742436957022519406509812052287723424871805924182929863698832008496243747915210606469993831611901911979340010494799953949198349179406877215877898983005281461237093127856418994091219691852010785866315592295791666143547933084932036473284017319980040828296149009258691884925196874449418452502375452929286164554, 3398287557293299602208378076605449877130723285620167049770477774752815738205693478219165489435014715050654143621502097360156499924574387806735331117994104097101260814152440151457947781402827454300125397429290499660185202777376157605776441348033889130983855209126411164701839829190638306464602576029777289764216038848383517653098387466277523780865672715116661818848321548561385313744112490659006989933094371612288689090767516423550923670781908962724023878422738365665336342336521654988632451222417275829923389236818078025171162872401344731694971745469055101729547134982705003335870972564255822489988607619766705218825583844620319053742957060034285595723483604603535908000117743961145604309590914680159139335678949911692067475116891481171946263186860878569212132167787396904607664492047741873947702399913344, 4421520452008490050798908230456185909115029444054873895235493746516664503382932303858357268829346343924387641513751543896569644711920378846293234569467771194686180387605327509035802457044215260797490085385045992097691738120969982243148924286215191117369478656712983396201350115289734020776940232885468748609166286726023036493095411208748421693744229841615160411399500727181616889101581802756830287452691954293996621906222915063222944974076114287734799053345611998535551023999704467289706950934866018719047228161962471891737150405413005891427664317057639437180664828654810873063052425472159998370510825642724080812421275760518385008546636886757603191673242409922055621519169497901657539621278380864025470308286210200975093720551559165751713734114427173582317368644480307918796500431275589682933205688922975, 3288070188305646479484803506540598947720144744296953750116885800281220306345817471397270393387185280853993482038346942221956192835426365448714504544165619126957808817528514668985207889620180644106518740217838058681288741353604558267220493953958304879187428023454594634567455675993148446431951476923478419359832325506512965607104281354405229693678393302117737759833218279723014424120053515447642583732597507677889609073328658740965155884812810618685121679503995568634596957477041182305691141003719402404544196298539184933804063993900551710598011185881845229652111550754583292541970058008074140756650671249780305863819932305845382385537379923499998461389672086700434390174645138410124056691552165654934022017460223955245504207863077252735523862100971420334101878180893130316555491604528507773339935244135295, 2051635329166650586620089896984497307636932641785022419264678922135626172775992123849464523600148410055931113198136807315889928189363868528642125400514393079975753186354098658434417522835989804392009333951714968086494743095679940158902144007389514553192792851612461778649121343707905069312666220136913574542476362111402592173753601199562976451988930076620002012390129672927068803479001366306848739581869338209602378332395413059587728838789824808735838976348903487213394297639132340495183731011285566974237345180028372883768272154567718936334611506285838796465982165903316255331502483800199535388674986481506721643240916346990974287424370454943409327849125778692487317852322554324336411656087587338657135438158131183886962030213378370027145798630068427473964390936281701769954922109574562513682618627033738, 19674935552925219992454648217801714841475429678085982184724187186112022575644117616514726487330827795191561041825079599880859560078383555869046626089223770984178437286210635480634626956085483462698468392647973287226282605480042167614383493211229611194154601522094532529630293330910524127316502726291686309461816036842243756489687626876007832828642971146789700613747731913648485987972149868638140072717287073242086249461610015827738260015693907709019852675606730663834386051014750903187279218344948209443949210829525986776375272978721149171040117899565345279934719817790300190928638929248406978851148937343508872728739953469056822868461162213363787080285803598385938249011959021584410414957257464953206888326881000066502264949054483445345019239036014715357188710918209599732215088145947731179560461290120, 653866550085224484382228464852649453617199485178918964412048373152655587599468375900555367107679966227284963568799175111123077833726340283543811368206960051232781627499048293137091072755893118977003516337150965257661269807600312747022397696092078552712809314917287760101223410156611222237413850982107865080673297352870238234819611008184453468584508708900334996277607211285559981331333905978294713959781273246972093740019698815405526875203594925095589554171136700787657120361058030940896719452595362200228074039445435057429124558437310212732814750030770304530757106364876305435771278393149809262310918071454568670304305177639706303919885877948244099702377996860067642828349375131501354466097210346855372739689837065500938851397025623952474875687317700522836336709855543090944019800629550776244347464744373, 2152571386893768361486752158252508544814684148150753174506417625341331826889678280946198898507880030587839208666599310442553579563222360310119555653030863361785177520440343179331858246364481721590043712574650658663435100869146305663968479264492530100771895140213699112119352038957848633060541510516850320861945073332947049344721666852639354797976887262010343486463209147090508783036295623794149389845515311427958500367879329754132655498833827307032371985635420388164313199696829429402225960968655287709733182377081193033128869924728269433294873450734744607416005707739508268300180293995684632462144675568294753128352544084378512159925885549422723709383025440718258865065633897520308107517014767235043711926646517813478840709748747391115756473296275796599780316462274991567923608582535344995295353248289009, 1606845711519850206689800312512160194721081317047604442722548553691179215230695015382432020908438046641038717281812217004486616107774972459922606857079504557953240923810029284147929218495470277117309957409081039343614583378532281345975953359318138322803431737162090709594903433570607662069542968286886883190757658585459084338237568296841098963450759571690955319389537254918778442007027241534569326932790743143333667657843421014750781305458293463872105466691021105002807317303555508861129984731318127257925118612530158337381100750397406068162677770131130147468892570343894099762095136237957345432859513853395901522186731340655629277388175072780730135348601134877677405498684265747519368697177892096270508429512714350948347579397594272690962732508242965899046495734065209595948270904006034794464547277010103, 1828026132056322591363065672032736893459561930718050885342438742972440927454802242831138955903631944265232743635001534587959772075801843902044496155113382934282271608229251510734088325543863997529005097896799378867237416656742552383206222131556196372570985726571614863985063232898678915456286539233548429541659946305850352213928166307288866984366038026766473107841426340218586996426238881384816685834863064060335909246787654397645681339729139580850956589420732620234965229143931029725247294218030996296778286089235297827233805212765756857496511092705731830457873737885769550700044415577985315021678600894445181563283780692268231503969066882300421563083233940171876663042947982509553022245314720343283319950240389157034065505117594977020560550691577449186881870954827027596698578356818094490186404901851077, 6140320750560735450268760054844516123362775330251544766512938249425486070624717217835249048849302051564835609656148213057937415382571985148624146671186583446152758061495995320347961711617910465172186969142494427516281047754925386043489930567076763010042471246020640396743793670948070466542661104683670172434990635201866439202241799589715802300613667439771584348027521845081690151847208224206017986615420484560567644258048500706055670484353974624583295234588714208735736666566386760571726363404984612841858522303805755899997279193116845306432433052377666632816665527066345194495938456264983552218267591555538362058047102925357118508414470793627896322323289311687049770401039852780623480720211321155937451975142553595462631378068758706092272728376863707990934054102678258980533396750084117679203405259236364, 4634708066393168659039559500603070220082749575145414341817654780418429006105463109808406555738326051946610964870081744436640543645037256094463641764649771769520752521843809007779769589760288122755197114267380055730324306373313037426150687489791662265624046248200352298450158787216116583898718729714047233003249745116040779808659978747208498338818874568969249322190442171378621004452904977820162429096608795602334248521676856273808891787543402642982745403553349235268549245008882228130074033183581652463254191544501160013484179483748412994682765132514393017704261096690121807965500521131028877280577880332862613706273075334405408983859136117030015931987884666619715506693841936586906267015379548716948510270896493339138590241115865177905557814093354155023510569538729494370734027918142260630815588882560139, 4871069881371281740225603176686859906485969293977458240947835882984097774928442444012151276644388138395027922445433658803367421918324062644982838139167661418332169573608798715341798423854493232055636725772922975188825365563054671593831231697944612328759005664815934790912279475557151474453602797991211783493288466147833218512662950246261563035210898136957391542080530742398410442441489167625444647458658503425987831311362562907426749522782885610978985045180349114584680041779930073101391645279066376201125474842888366874552124669488021337193229191532355562496606031654961722279735537869537907804453908674804149936704834153837253209501875091688586338579885250497501767168790418475024726699196958756963343326249971420280111400939149438943668844767471787906596666690843260525441961092561730465377361905656929, 3228225354808650736939915362477201955695160688229221477792646955483870654039399554330012372988894101360677056787140225118074422238386302084220529712665371845952424292699333871399091370255279456198360259554991116127985156750001056625776337981599770666640633298803100678354832226880523302208822892965791510466924014743954193955457739403317517669715869442069238609162780482691519388847830793675723914778716919380780734993410317782646117314011535320078973247716980314284107162872303291372595041926265211161484743170330551432502351761092242106033852575491493084539608824479786840361070339477474868020738397770628429623936239359096725492981556777558949619874518318939729874236535673986385229165454825723545947428850795078525501511596668648971866823513466338906838056282983015805758512585932816548529725571309107, 4542335545884118003678832445012786882793531008625139489696577071741675956617464651183536574616113331991941750782887469470134061944819123515805274463428384212712668156472425896975841868012009799200716111616670228084266962327444888476808550964839061582331760058606980967472246700330339904999006523668487283767741657454406751274527534736821466486820030231216237780333483189834212341214017243466965505167260255263825628682645488597266347464674197588807293380217855054159647029121185244212643904298872522726783113607803686853477518252642802664271779011827300127011035780621617903593596103420977413365081211994651520353234518104191251276867555324263094124742714428174529038459218049695544975513969799704886305595388247100789350289689385015212120830575524064034411873264739219392579304492694468850478345164685756, 585538014427749463285245449821588434914589376217171132024670708083378492609187571488858406062858532307751133919749130606227033185378298608799803646851445337472293780744444522530645873484684056040699345162144394683320466770568627227182077057164247057418393659741922986278003123536204906325987779727418174757835713239467849180996956886274043602716871111497067264272501656348663267537430674127387244847607114494514254495546128849954143511644683698992407794011338356565219180182784316128805989997607123605010453458674882962569376903020630247133879611227024319183656174576889891852276870310050294464302644173261626018557505412528767853711904623186987517693402261027434460421144161794930581572996024898502771431045187113412513875305237238967408568940209924339832852154998865501325527431105854669458131196541393, 1686617782060296696636542194251628942764272407286809595486790015261990824208348154444659000476618454419838572116618776284127757459368747245424207424834389655903312664131039318467004561339263539406532564463204959819962121513383793331134227204099589839549385907743465844438788243458623724250363308830580216043850092883027413324156018710742891753170015726679792578100564652155323550950717780315745602328855816184928943543912649049341953329701064703341655796473654021145766879890603019629466811162504696289175207750958713863320638127939536175729738886429658502244455701976011402959316275530040855138603439694557714187984530829060044353042694338496239348774931819615464859636032039563339395707276380241903891058438322783500892869006743449623452773212404991040680473359537126088846517093171264463914834867491411, 2325227489456712959333465884359420664780686111277644335753206599485169848368188445841773893952310550661174472108049860219225224433317963391882980592341688168817178671773998619515913367835889141808125899010833914014905700544744368522978160709270002510040469244044906407758758844226057002792241103412301311796383819788565021287639617208057079992138169983177274633076894525162372949576947915466395557106837752006531566280734562218229783171738828261696937617654654837546546829040617871975408391979574000694499918640482251648940494181631694032848702281895106258004584141975680684523393443567403214543311341096508725464009493513867459531981786600751396098633042153107600771877768807313708439378191329083941376367479429576996904374130575108656653274920494081386658941791290446761890071583740259792642687958248765, 4864952905003984134723139290112069520751123300214474992373899599117522226564725210155117023000105074448220860183310745842346698610207400552902124327326740306282198846144727476470898687186893321970328453095426746436949396534025119731507976994820103358327627341277687865936719967468549877340271257806385662169079221157304282927479328761862243506861061127478506824488179525596586423279877248628756397813602301037755859653446994661124924024260655841289833010552983282933768597627174568221782885369723191474565576984873881760146909478311427797150756247061545347141533375404964543364106660089222512342287702956111247237267613877276118022362908167047708978748587387754150793677880394800649294967396570323423829067800310773529470364384980866958113425143607815355446077594824867674859378135198200477966475940320906, 243738580167836961086053153251996520331692254164968528285401207297138727113215628355646710879782567718508844416506007107157792852115638630490442303360136559034558733872383973187401044375362096730264955703016359471543439118880925220064420226000736684156937062023153903514396254180771706114397863383145419851892370895837976622324468988929228021495076465867530508915579665574964499940585975084175952475858669288852868954919593496957611026746578677810972648383118985699414279842273595454243707479574296992717612889656101765184981059282897605089940090373864265855229172415059936836970595702660958249626953318657739101501884465227310617395745393210932629597834708171711359441785452197216808934738283419306013738588072292255723734729395761955436845647479281674822069872371329656152241574326237824958793029950358, 5589884764614781807996330990129267759777802307518904867992461652133399643200335061348196047026755923877711871212693959450944307366058348280410295524302528520444782362527985606220279652561536601300368788060011657077971055653304671896186689589722193389581297912162763388905313281908980527861773324571921771413081581025904096201843267242915284567613721843759284609521885620353099324536263451320037979013376129541734120206991911965985466616558981610406900216008986675566877737717777557538886612134958969444091628978992400139881836458039486001504578769925694889761500151709313780293249479964409351317441868901579573410155733742566286215967579065784314460076688328017015142054186672671245665897326311071398943856100766498942123121265822583275077103188003528972511064116785894252441773557443688963143645928874523, 2181644005228633350386304178498770321876311103336629433895282919013585118516501428464768468514280793074261365220716139394540637359351245576541293511302077348647590600388893707101420160867611432197089170947971851078279513575657812573817202317728723730477050685647535262192870997863401583224457104322552753574962004350841367551677657469033113996728732332699465479124642507241775741028765179083466919260892826489255551125616339414319735130179533687727338363642327023359201251110912283461365652092755891965461387264778761664437343293316172800449539258599742097171825912153357238912028141285537864773301673136331464703584039104723956773103731487438444495064566592419533775795976541985632245051516399510662224561531267858572687999771893826745962773536971478760041023671971432920497925294503604268003741352276628, 1086374604422678695466800284449033176334196051983948644777962151369318481049182769505184724287247106143310048363307285911955510404052313157450698614919664263819445746051365800144693225806414722965403678520402145196636012352558919792343956969661390981537821623182159784491463652223495310171848342985965410051973384162574017180487191295428963507042977861201996717797415835436198446675676528736581227131368776864062781087239708944997309194159545247243535262463607152488461205205430411366313078754973841091121412431775183954346321132300537574867641459746867751484323092465780566578420609535827536508028060625584865868918105964527359646534614300076912819107232221267437987254665057774616331881489177202609174718469623299177176843615127449424559814890991715707330137372532185892818216154877828816681989239168457, 5126901847135172388252166092839850837452754706468228809026146309281897094122007189137256234374314176957254905803434453531992098599756076047450250106568602883643157810412017317180839161395291794335745242856985816302586540077661920755777335009961730024865500836446713312421500602907959732436681467224378791744728724339453057091473338679092979393314813936693560060823203302071098598337486206093622981372651348854275676955991688339619711468382689534348118058486042000786806019106224584401435701285699004978738027346824754788954775887157025329406402867699431686468662084246335332826190601010670465279262283485763289106858766805899130382679480095081158407265554623160171407654248590285670145335943431477509594000767770449402730628089487103368349890167166777201168988163416120176838089737041535714838700790146099, 1445500679200514597401003220417065163509705570850064163835396324898842015081317044961561650950722027626546978285372884125174716167149842270057844228477387582762457088016494098307276899504650411919307046741426761122691670389916909909249454422121103226900850707669435544995821733424704250527202371515592172685492211697989721191870440732856662398116716344446197363421603356609955067824698753506051842478298118394874480839678811308804923199773542652390085405243770568056814552242803119747567046907205307763073348789550312695055162292508410193442712510180562231330176548887658004451923896369962972441808880917704319290732512961099217088908478248128623421755896668734024561505152187535514762006764799040486172013371933988454024820168091458806129209044509042582583623071540726524699895271288806711212011023393198, 4034885712525044842230574567440344454544952180401324017936158995849648291104780426912724341132119651552025649552208527561341816473678256962476039754034585166302465627176139289242267060258784311841640890427615414196806253279623662351040014374139640266352386911391848539230524484523280180916380586266951350605282546949528381164557555827666213453454247066947763356939055799600249512711593041044675439465118795779318788382166299214006089845085091376110745829759078717833572410306580776647711997477100857660325073261050553930761749937176936566825348247605853196161211162770917418435689281618728686221937680671156795160312757246892537205155947535733985013079128916181006233453879259237115518931655544725537117659601988299894495206112480343001639140954084317789450630336103105965759357523684323548086347147392769, 51275491180819590867429337110624755328897360424914556745758788788812777326965343083611943553289835054895075693605539150792129735581384555737438875157665490398641056866787689482768809736584087001843327572351293450409016660326415808585203332096395847212838197933207770548463022723080198659495846600299614476194174040739228945313388415293820148708963867784184402188849515811400662481336301474057539018538098277440651198756523543990403402003587164894458573938053049387488252639431168999507304327756556126893517133165232235672204860421060588989317334063920058496206899111873950663157224100509520260000718453008468200842939337026496360101589518315404214265160236463224155537023546102911039367020074947758353401150491177500387196912225018200615709542455602784748552162595366160648676728955759211732782361456337, 2804514942728857900098032075646582571091522094967231038577173774074630398600366102595956471770243873913586690545181695822266720591202807291718113009288815327603342824013483626074868859416267987667814215871621203548772352878125487687595864876519853656564601107844886030155515530855945451366384891817928303626829129143885772606980795434512714496911278341683983449324545232360040525462723085812482692447693259831686085798908998842993715408455753781636068282339976310385443330736610457317172002830183921644672001190544578359512282856414138335291294364227446569631021290965277000924360284299312685980891713864560714870448476400261846570515614921449711967632665696327402246527086355685048174148976830741036926639083015178261950165914793594963697557709074141188660058100889361691979646514047686796510391675551872, 1372103987760264020685762496140737795010696823490585369760553536923775819700900221921165203904944911751765079483385653675652034368776209059399373748894318522863648446522200724708429588894354242167033177661802486968503379653089552886430882366368517466792120763330203566092276128662362491751396849321766789736532685064296292465336778597821499904734085920173459808619794118755630766300004864664625125273476876977851357544665044306579127614702101345843703120939831481841113096005572749923958893350206043365267363831377077595260832683567419703045612193439885936197815949689607610331007664007068103702636499367200506367521542800211289488126456180309979215186965718204506350844910482681370573119175235551480153112132448849155629695306038148419102295737942710095041345123782846093299246787246231615731931780655768, 863771512139825957073491057548612043592811635214122846914407281791817405691320364816038981296942012799870835585993834742102961102783439039267988749244968430227073413061396272762780636936417746639924428632953168774381131478327249286235340955415270694147491242487969169914051554184923710868432966301642821421665453779825209638184687645748615255659240445194185919390070714321779442155621048313545913835539856407114349344357831876784098540332171331529736336235557054724350104451840940409789176840088732431045236615987278354749113241385626572007798826393105643290117871886724199022763309203914961509957596731936226054010228745518463597868881817728313351805611740203587900728771133005683622268522031711372280112135960108450332971869801351775167299141097810040156526960309607522860490803256321549850475297600449, 3682712894786350897239517998472561613097347753864715197820635235793949050392441174421859305376095550689689595450799525208741352856229974182176363973672396969351681004446546736052412532434157207139950346347886270731896727948017573013043693627427962128773363003679027882732478883015309294468501378618069193449071997446072330499005437724929690433232351436912148830242908044088029897157194018300397937191057904600730508609976155970946644819059025569437937113060349968696413369058116265155436932305891316716659562613387894874549367629273852025378396795425634602528899052724521711195054904163298575631382166507184592055993303397553978629039395841702073192596378285977506213958634113161381352157848240491230236206898744510612948592564397563876010237033459516323404778571317272072973064782114649256832766428448006, 23182012971528854585670200871743483681229968398372166021857595984453961610806155985762164808207624531112236740388224114916084803297390268837169089761103929320286310342378029363043174747053541981965975253582805103141661143290755592281760544536820981439659207565884341158854653367475204581985028217449006204515974800760425497408385904390254318854289873957735297065330767537758742709533261336812374900914424755774142965769059299023255492999732270953222613016746644915725846967360790777539668806136182704714547619017232327609645545905827344798849720086599888215612119181985651271653220412905163914467974275454267634247794677428749601022148522322939200475492091375407619078602365422742109980004859272712342170059576863500727023425820703227925506579379075384746761579729627051624298815284631463426842282200265, 5862355924754868059067472728386614284363586369791850628048810210728035435769361413168866292727214587884955978346674772949226043145261020224439401388426596037683721526245353749244968724761649386419424754144425005240705331011606952259780413181853779718308029284960686019845927851965833899686743630353163413913703687728588117360543425974954342385855627391305969342100715124127040320427723053351735834115603013068784065549045268700121119512428043343836058752715249431011765747973407559401561115956651369910065836208102241382301277200198462483660598570040685297882946351729925425910041470335566819362197279135118297139080891003203328024200814426840319433631788472405301667771108021195098222239057266787833004897338717431090282017305015609164011030940991920085418252027051848403001352356779648819925063448598411, 3157353491300865433185041796092654835720579330302928621799331691068914690086572134807279888343555103878680960618877407882212390535976127464838735286564381340135747010849979685524420266338184792619601183013931084688803664711567395253425010026950357264058708821958868747753366745899567781357397828276942070333267910347722853476190998097521519414361955019440260978815041121460877263358420518174635887875182269075257379483140777330518639974942843997938783808587763777899869132992698297291096152391226942845056380784425634778091893806726434363143045100325730095340277427962803486146702634648688528444080350515429879346410250343621133034269098048688248732136422973407046496636249164919047636728454008238053178666355645615808617634949658738389333396489709883841790989711285719578999976290083872250078320222355916, 1271580720006592087045592124611232624520512521388399885114090890788644627005327194433732105717014636151925809460549941764005948852322203739315733502294280043026015284789786902556501097605491247679703786094857373339869202306410819437205096025749236565061514290081722726417471537180443195183457091582917677609835721952463650778506961937225842966343837095903064464887091444360945695246869404887304944086625773929829997122375985989147930494308357349173557012237283882394151224764267926082972656252462982648149635766968102200171916761852354513655326828507218741580299618113060349435945611530728249298362649940390533905902294922309383273367725451667205876159422670427016653842958006769697642769761516245325028201200527901201250624249480851150259966741823239460452136001369812627868751061184238550764001991059571, 5906940255868745139782847108813116253951417539762232699909808824203780626319228631513556111154142864430681953214376458598157510734959340914015249038408576949846393473623719414525887521788282224664628777770910477355994204640626415939573521361391159463711369111723232769758363572697234128366435318104091153088588939783507692134305363137206422883312591814847588799644682729560215766635680773175843493935093063170967873602477274124871538185258611560698619193464683935047598757333809808445656991590288128642316284119304053500942544999987672826775313944806002939718021491006664364069566142505547688110648471696436631995943223129449172072427474564851111370386986421209560584333423997793377964099336750111709397598513368927836312387367481575631947040199290347546443672460374144276288979405313342204258895733652037, 638318862850389477394063126127029970281910596440740289105402361229423250586852126109413451992461277689087828165393908348086304611496228971015084651892859496703537205597633368264432295495583719411024166618358258608085144764481405224143159118647367650363486277144413207792568936077938054214047289271388354021843073104367915305988142380043680050467764079445861826323975357739436177845875099975083884888232728052371287963030578965617842360114183538092680246476778199932798872107650508496655369069245289653759254018595872968910345639263942104866865239170854534109964037261842288794483726008852248938402068219697192180334870438384154449778158961323334790800048560513367118969431881987023021894750185734221907734944775402775577546091704274671185215149169447213718662199191549937963612610601540678782119700115363, 1571049445640155008339652603004541621905009384158420707037389346695961211825014429880838975484530686088051984778300590719456633206495530268309819429205285071546852278208925378684713232796643133576865449773597539605751143151747947648200821166022780131434936386537655538097095982603488793113974657411857785845667730243428789108697994310255693339262474876458305196159783567444620899442989113787509041300150058405410733153493052069113960141011336265472610167635509100049922312611979973661194860858760148927459705063641625878251619225779118617078396506083583002650198241613943304307353427012918415462534577919523904802354140266558789756726345228049591445316582944785089740272368356016090464897072518873613584881015648844853518458187518605342594930089977234770857789186239067377420492080982058660597905428917467, 3387696444226705202712425023265793048123042385424788687942082703774470305831846256209604311824382894711307685343061000332010506005550098257172768019565630739621999104073511966309198066815328589854544121136538175943205975959072294374495983473980235238736714682168616066650828699499880531445044786783423704001318173693302800457218106465782316717883605360421478171169729337461565297489407383920567305866401277281884315353950408935338044517441015493606534959929459080201982267250840059136699778912439330053415436824629317962588366893778184421319032046436162945472138945648797976828066842820617982827408178273867812282187296671977608899326547540373925430578905665820504317198025735747745612724645172386475074191396887125183216406869998888690999146539032652832533811530711864764971887313704303726627904872498953, 725173035183281634815868753219477922541464977215374573381578669201114742891500883716202985013411528554530237524525165108856856731063369768064174197786034695214328283949794762498662900717065527405066470479939288282709596146878801736919747835657724851654255188569423663835598934366053520760105172404804661870529909864754216668143615147406472127006326374867286522260451726330397464926938960785714702945640802212211507022296207728027977832960311853995073693002007035791773487180004843863816055013538000727705111751341936796372549672755029043613483107822629626280670689766681275223248677666370723860556993591870867566958014283915793714996651093298751792809254489963197028581488069668294121678884617092187445241088790579115003166318260517305694421419203746330349384956290026409073450087003510209205472464691962, 1636161273831025249556864060161860478018411455487119227203214545168162182833930198309559333168098149808779518428216695452457331452388484366476787616684559315191935276106118465080337917694337567691023657991812396368810137800390708303756253985434259867079569000182534501634817350281818348743601490731428660537287803441314285349423242092871179228068510699883578992730832197272881534222588037806410764114735639198760843990963676217274553721138232125748418534071765473098620382278796863744721136138364583992631300396195198493579303441628062052365031007857307046871574393485961457960722375556001371492530535950924875654251181116181633652285959456709800956156488537754189885703860554134143439378558011943343916906733960660095320003995074865805133819698831003742815790995115800070442542172719620774561971003033047, 5564338777897257051018038635285569053942108713414967182127215033433021294821649506216500977913037391220381253875443263111381233536644483598877083273333769059235735174329654974561093856793047005294540027775629811877202934366842518652142381234151903698854676973987548192413805903583326816811483070500089739402135967735839450032062136257936240747461040243438335279314908396831917304868576425151927180065767724504711134030167038808523015012735766460955751473744043972606250873285816447179265742576412368655014738612248043454845563836746407372625527447459369316346306881155795357799976510550423383081364115886487592725948302335617395225101158420951279896277727951034750513341989209325945624915736059746447304830427846147717200554024067079412571995848460429729538330774429668298591863167586955672747251859762747, 5566169473627462509194483627089282787403569910319178361064036524867607989663128264546623590644350117288890307969315334112434586790690768462920413238960494769927232062492615446392334414080006665883879100157484042292617091193130981419456162449895184147430292745597324626774097633339658227802745229040124869561052385670746158119262067732774151443851440906508601477672179661131657029195927537666177432984452532666907106279907900040842890951380039042868400215136384270605455467791548028838759500998903889179224919003842784006401720509106874702943273680954425483447475555297204461636118138637192447128486370554360205458028588387373202364544213118186388278449666525806309147711007237394051958385528313406334110093669762080551078111251119995928049294143927437735993316443748151405767129001956204253942435563911978, 5583723859472167802361037874869592187628001239051452005405396685803244065115648585217552184921534233352714566600291842138159375122616727368951021949354992636565581873532987395832140261525332273058506237742586054589214253190665848902167246368729959605607395751217491375787722105271526753845443967965673607496949703156586616012433028417135816753394282156227257256239724487920064935067198430020860127938117810261605312366810527491170972994109488715539026318709476096971766654565194360594580421009379641705372216933617807139368026677548689295043302928123313504886440692672158116042885102211307432422330125970504529120491718122971371524039530507885276596348652814112585001498667604274604829921979506465716186016534630931259286345349018384638232148936085313668362122099438179083075596700844346139130326390476202, 4402092354585586457190258796806649459673061402868691713917358283274956699978578752759601718385461588960857839497500284320704063212474558215197156586933821791363457384606698843101292860848918354989001572085919946379482957767896037997027872597669493273690234491613012575732446993329356995106619885002744993425491829793259405874899844346663104211789977912511551974459926749431187018000291619002632537101702866802183652084866881113691835048413617298595496924314993629931250618602568954115165241114104047366708452341712925620266073986262813731117727690555964376301133064373772475691843318059041902189242182440773528759599087224927772576834739030018595496084110273588921081128650757298896052744092359750409977203884447210414480262457656843384028042448729743122216349872472357957611523210812143611546744010727971, 2774600815279834452868034369911991968539952485098667543169893082455506530288592922902873998067130132563613074533716755256985906399553057302052516673224984820225424815159389782300499179149219953815926188378647422741962628688216956908175292867720293929428950222344845436617954661775735909793291000858043893043529230386889666346353244742853643601927780724197161705547419068592258978097730205003143662116963522404703519271240910129372003863061157206857468528425606034982394768355439140225511314237422663475455213037953658501418527293125731516368247567706703119503910958624760803349022933386068850562380132124008892840266469618559938186196401518439110068890515239724320284700675056417217085108463828822646290111062811307401058137645002677577310568475230633881385808677761692899443609532972336124746915297109708, 965839866785849333137642507466154559055318208308166798472678028121663094243498345640355803585104315282129915991873711787094366379985333821378619747088416007690789646913486408908638239914195402190899564043011746532130741009976158669144849211372971255815409956522660926940691807169920155076262823289702031224785859588936257226279301054178396087471752617719678687702061561684541239159289046747472877256649113067968437621543405511533493634764986073487186481399826502469450595504457783687722533063612222048103730060678565283984872085930944086008344529887794534945904263438793375644374853948988783226841456693460557931169968383512964407497756654281074898617613836548897676704858973690891109631582147169524770117625577727711324309247859470344938725636481913278409205733901550841631912386439704675659947967855267, 5084792877593498791622922853797453470641719366412430286271500901925306427818767759195274641837729251205107514867584224905631823814420467572061995723678437207458943222457684448086009402153833712558880204652078768608386779926852936000344374765556587847946072412689021057871088118927343059729264586995258122092335122061551131036183758116653475040826158470875356806534048857535467843891380804294711615247748356451965355775382128293060667317728317186458569504621833747117435232263715217694040802730336998927729793456678139536057703822608364040409585919133717764760255468391623320899909940158815783154014090297263864397150535587890409682340032975087759669491240444921843888459053001158757354034753557670358872078083645395287280020468648590650959039302802816960782981035849569310870296580731615843332013186234280, 2957467061454536631972913392202384481390537537389574156671590160384249789378240524786415125834833212800294352305647247305179108720243524223305866790362011026445727671209593436289018131358461238109480043713223368840934307377880404010231293351909839682262682582677817638012108856739031402629845688218432276604328783989419364887613198170333170652600293430805646104581500756293769536547303747377616757951009618960632218102256267165834686032800788224098973404482280737325220030367599686272612746668645566321411962891257945022991860994584337044052937042170541161728368307619006302056189230937206403270327151102207743413888547774098489924921170689431004091767873177545168598661500100889115002244985219924860465633840436226258033889285855788722452293705804123330281984286727892637694258574405358836270607341864486, 1394716886983964746148439988197847597515931830190584552862503383195768604280232882713419437094439921464075693471276578615710317281161365055663141951377904484790733491601474211656431608399296035037790342312131286349731639227987907252721850762879532160174500470777008167616285919609647124584563771751958445344264241448322209719843790906327458879877914691593008544139053637637133630591199592498517308638246990599127147893170487044931180486698544235525236104867235946909722410036496575498769955900988964649641794754629990574638077805087327224014324143569844495415044244383374228856239151788918058015933035832347651661453464023006409549530282241922194848058183165898093728953251819912053955370871802027348524522298616956949362162576459207809420093824962710203518873132037429638087570797262117378243668636521254, 4622568233459005705100240433430274864622296373714260430998261244124981169584636334441968927881831370823008606705236664406604775688776011627015910339127831105872880972305055838706006529102242898644382276601710562548254276083251299094646509224790898646039057420195669388209676593776963869464598244749144833177338307871983380784232700957014019251339267606503635805523209113035187264764238641520419685278606434762768418951872774030185610144960996375438293442883320409915201257240874716398208809630623781352423831663178738834747673760262352235113579405224600084517119039985043203247788607745948096762156142042643789288726985955991978462670940344696650520776647004549929816949796601644112726664791250822156592639011287714808979622422856500972083378326042176152023944663510846832316594102344004132668562870625954, 3849965974651260968815052847542707271509291737787952394848177366224218157982344798252684897718221157661544809928339970822732955194548871593542411773068410584937315147970717692350607633382063656371815403408073369582458962783076938419378251157158735928248373658949815459602438408581086840549471944121103623897158414016633053196980115332151742245750132382754412782672143860105982710366210372315438619466994868168546121888541417195721371837514661480581890521082029262431606364852802385850000368728582385413320365217882855112764298582051929848981891062436698277395872949641435811886364620487609407714550460781852226172156527350344360743535094201891115870550141621065876825269858876499322526875915448428726332147880916261015911917526783661204500491399647395860881398546454447025930914452912534215332850234259286, 4689835447098486606083522803526186691281916756354705622951523035040515837354508227539240221300686738641262154942364719546026271149556072470653517847015225505008312179216376013219124153111432827922771427926632030244110621070018032643739613046379080793392117233631320205663528952558727111106532925150466403910486684422774204397480841099475380347755860070188025739168521617736814311841049575841178302730082631911753067355669324507466464110728807904051678929693714176219369871893364890748982626523799327656355453182216155585546905712024830487767536664320169351021740483353478125100883741286091943242066605656882160670895153436258401935985123358207417481052696539840913847544529809479959543724387579669060701997551198786382924524076616801648206901916647114461721231954929333328721441139197658950991300775978899, 1410697747610205856957052233273873016298060859008744874825259011045235731676063525352318049505634029642923749073314569439489552470995935181897254017271659117556257075145886215204656605607378828174988362865412485883396684013813420203725837476068400942079159050285694327330115100919735466095221071892099926595921023994311278596795747938482463190974355357060011399811491413813988072158652749597057805646059711525365945077690988763844327766578195041250328648092194174476721768795155066031038424615584996554813866716161442956951871950631290671207811061619782317802816286558853320993723716909024920763073441424006475313330443620696241171171609924060625236078718240884003497245567139724554347656264058176851278019401686583837437490785227047921225786737543494177000630318214632572527462849568215272267430447675080, 5597294664088919641470849990808885199529386541906143979714905523633425911159392449342605768629023279490064957675482969120059033185202685871433531715107611912649495570844800786417387459179193902598025415836723337836565712692157126484933651207802946618640468928599857368602479729171625207677792743056090047189027830438324995551943529687884620873206803859071486499542039471520069914657706905366987554443654500260997166203545758815218811159241682938318031574637111183894901090076383805002875601682311345766680641894393297890794138151010364069389954015517271268821547797004777940382160202948627527900956347300494723221357319181363127220957243973706085735317826326745227130893621145197594744554524019784331279422658506255164875311667258307455199111246553826058684678608360135174444986322726472263010537879759508, 318117781881901577406910742014461330488911015442800218726739045048669683206816412185668793741056121177027680615046131195373751514235531891646594248589120321210282159995752534984885468109056107906931314483245597932919511786540413921208617178985595216966728643103344228887987006608048021222123657171107454647511324012320922289668470614039755876117170078021011303647031465748238875636967278069909365109785719573446546215240642746568643099342843570890611770842948445499970135362980016874315931643431553871076596966108539834435767402960687597405877363028849438078755179081724142943334522868481272734091823581874920909668840256441184232550977207732445881669816752111053443694500589090857131750862390378722145720662149424597471530846377204886555982303552973436515805641780487823278025730172177719258038152100804, 2972343258430945225147748472214472141470830128179222606579438311253823210388956989274266567932977683214553763712586445839271526975193768306160301199434545269011867381757678343505285579703925430676948207554826359296899856714244400345615541590726438497306059442023293465873730160236322359543843855933113392402657179025133532965495624916652071843400388711143602327607347185915151712134204719542664434931550391799917556122636211535573841806322625512534778221084772017455305724834668735231067044148904493689442771743764058356638949210489413858095599039214309357008043738554117888253039841388543716170845887672487760113633816664306937396353840060299663048703291751735984168388184066523335574498332705683573332123547907108423747529688488929336341299415039556083393444596395776373649503715495734679294788981829748, 570710712310147626640290978755764174254933606403021364275261234018196966106566708816494771543796286207463600295636126572258596785747913406536848885875557160423555386489852542405379031521514893174747411737407363089249151685796244195731565133900132996036826250994499064625026398412265114864351591418696557958551167876959981306055889750478278187584564365355676348196710872593500140196163055699076106321594885829142848255039441378052327332070702042313118933459846825605388616689271864731696323744237425833260648525143475030859427255997458506558154148925542097286147981920034724472448517589928423099634573753219766453956469513475946607635787974711888156789758519041482673085862086157058309179410139795829183417287692915980610970200695379245313652524287259525891021429656496004440317941978271353401276274412123, 4913876233018487596093988602231000100338608983083764879601971522840301717993626409789559591192356616820442370288169101194846382622347886863437294917888734934445659517987922194686512415702003407207196153680665830005730890744921027099148186169537493932441773377244778836480034365783983252814884508055034407255856331386386059230357580442150888831144244322319877855611974689381207203554043299700107292929503256168197196394381655601590526037293152219044491194637954188104657289176482754037654250977604425990102426170747720467256477335030292832004433472125549191331538405360715766507118332715259186844094177008055807325527621662280179513633615811267599988379810754153541978606551678114352819277070042633510289390654107868538170448937787247621078352486135494508196036531644170582013976409828865054571209910958991, 5397319255834455174046542285271878258129058511484603655239511915614042209695236918054792290983360429437235940600686545544418449762242504418431839282542807080541876202701539966374340184316683330435119013109629327775673800275950274271069846240859173228698876247634122662622357745678292844382550557427746262219970733327999333918917604436277003545004108474861829196463303394242466566317112229918060080008777214887834899974358447136040822855948577238952432106816838664104713831461433273046235225344988851101431680362562891093523959327107680731814040966459003958356091095566506038237574634141934304313673968753325780211753353796280684878058503767437032889488350620534028727346437364260480430281355076879010421018057207621389782847426179673983735317146469391861503211265339562283393099900447812012783681471049570, 5943138069834226501050804442554473992119901431323352979689010143493462423276122488388082754801987357614236745186139234508393132075822758740555788479787260416849419582948309323014734593638576894026727904511170173161258807488725097700344282157880594823409145693002451885999652956062528536458752990843800614916460947783293305227119259747042351192719529789579083813163311458260778396238293252445681478013133406560534156463343264691186792465322617976832548955175162767593662842845694999596211317185342227984457333787659132173983111288027356636672005209689993102714382899032430997163709480696586441463911814639755873277579804992072398836044768669437312384492484639085126579612686387778316097200791103092752645917219395136538861370027684131438536852510383110592409917133886387956680837242987508006480517972073409, 1169911942477215286211788972200435790703977756394578953154153306556967424065046872487153956289531491573839147780056699542329975737943833597844108470960964825781280104844041746594902817645649134905089457859010697108897391995297715610428955234014508028454170464300455488561362170046201172257833448734884049597835783791864760241861871553584914766265845719124666904422583114745963565721937704626768327505067528231399349812007930753888459979966511115146429344918915428612062243071181538444735408115982174569630999798328938089051633458802776737634767133221683831322330553334456704455469424406043985147280685840175122637081531634530470655656876291418030392364454642846981665662543477366600324861883083399975987758777875022787409573767065170201137176883164589809480464794858647623884047888276097793911758315312183, 3812763927606798900432209566116185699229656788935115021686805121117219383688050582737786347132003693783984042988218090493795746652596597918977893440370165856081932175559302061021591639501811218400050784418221276549529016316212050384649810038716352330884455266183215796129743147568356792484149446347789031423256706388094957166740159877278526169885048798787909730116421265633664982959543022802186267908070468181997708213663209608272058953026521342852891588391868988011978417629510727568055429298312447944078945269713194140318738133786584222813217122808093704304398544747468462081663742067398312624474058224389314158270964110838256607363385015819179144735056840843462613901341911161977044983602741099795942780631845709337792148524271388185319995963350937474292098667584789888516609368457882970596246320015152, 5969303579449576930346232303323900312497569709641848521128894929838061452830562936085415439638765395109620379709289807460861836354865894770951591575482156112276163612160041947224608983432832623759973552465473843832647484434340399752588809355022081915777441958438459370395020747118317522087815312062319104485867386386940947354164617865270293034679595350595720654648640201552894048306601355596553136723366349743659638408860860789386233471274661034853204153943227401965866183527818811981019330669637385484055956898358375598478991890137497806821065919700925303596415342102266550003550958226881655720343835719430643964027567001688573211145499436675713765296634730585674191495094987355474308502383095138903539929084060260911848735461349723974200749966332077624908737370446191036446559433560952963844806913517423, 1483497456185408866788683736410044162016643019017726477218784183046579862841645358260392668814130141726951052212195506321003822383674056164792506417489225725006333037244233984972417034958698414711543478263744618385992649842494523236145000317880293368681959816744567039504620176181666164733891733612423556232809415299979479043437104601819406360200821265126563306328505932861180816358163269150469238868818343655225076040737484806621439491579950569860942933024351271775524122520808613947892206122831702936224193919746388677886955521987888020681898567550359019465967677801448473413016567983103075514869826244748235107079398010160137107651715831544834929381033649673684597886101310220508811698713510344112745039774925643897628633961065068797027821711453041229913651519292466979615910433930313538122892062456894, 5991156058512406429920741638463715357854685146991586724140482864828207147038575416572512800689219428849059319876096716615167892999505210389968181665582258138514881143937263239623677009815672398583608409942852726228200651937946299659355665445528227045978014330284198784097185498006443761185375167053463465319799607712087302205850706895887438109811234563771714569426368716136556631218527253646727477101326879943434698654144225008168860958697995899902483987311690399075850000242984072043092984466270326436052483852215719843600002103603101635494988921803194896496504125853496454926765696207395734125826305025848978364261167131187596068450757769564716294527805761723724695977923927602489082446575044548361117696715837729829457862992941825249548627289892935418945255258322937968357997764514622240051381575915394, 2919693292915402579081000651581259361649640926125553477567883353616388842965612925289327092205369911034644720997747768145913445574049448819385976745804280763122415543919785045120496440962934421266746828953027507246762772411534336376777364918270408387432174990594015334154037270038081085571500011716856780527025135233378533096363806259680899614626834748329841857876928376593306509729138902957966463870353200799926947356124236296427627034021270407837506531630872384877620835783571506072615408895764634479066123743386126438292363637912286873243012264519165903436856400899830791294227911507300672358450765109017885945285248911433618858264605924688000018729215645173738044721684799407144358867611629639100594402020073612681499837150880539314750412310342972514147199135830657052104463036213076242000461503220378, 4328669334274516612251385946482585808159380778906112312543383516768906965260890208204721687248007646972507532724877393211813128032325827167162425624086255624099412255159353463356166994559938977279501428546466133622795554012241562216808461797043952917029619263241733120485853290815888092204944351357654013486697977174102329542722226341337817908543063749626779939841533560550008649962632554718007175180582188414177359952372367379752691216656167886054549756432726394561271798145741305081249342254341652025240618118416517677418920252178061685099792404529221674117084137419906878504306530288040909024460839668094030736693532596954821945455512194757457661350484897932638185262354967420856035294735291084897022997716386699595406959128750919275255469604581712215010457986462920001640566780025432305616442967525768, 1527950627678715906739188012837206240675679197808973801217067493070766374597036394538582420664875280119283699400804901233791679982560558116477102862456281177421093782478886791509157122803848038778755918137923979014765536796155597812049041140714866584687393113931088532813237657998562444498039518153053033983990144742162476560648666346799302662462224173009962775882103570479263508834948404295802628385823228062645928303525762909529557580112326997457127191899617259947952345157249322958491918098241017411843012679781914750259676469574619992837695864654276675615662375849453421511361292777097009141164983999538969985063178569847586348770660694021997059918209452439295976770277089703712214778950933430963332115903698601829268310170952106058456675575954877273967456816459572443495020056569257967278445870083536, 5205634283851026320999587238145545769769445878128996322101392930532595376053888787008863046801204353872056690579434176102217418551078813021104272309552260664022510681214180527588720860470068267587440932853273400684463946695468160548362587611667746272325682442924950847235824907171802692273661076113445491916432646096504659235620967326696698771952546708903852609702574625186506111823485282231576979409472978013826103599442051902426940094851042107205732839434770657486167785787456162685125886519785174035651297189531609857067532610465872913685500939276409710690669768413067180192305270734787802394220812342312642488375224312197071978218820663373486311052633258867166759575399609744489635137762544784906265976824592238646957270932159166739143177493097191915432781653013127267439393666749779766168596044893067, 2881000408573939613269327691483826248709499235972789380352893199676682727909989594780142524700324791186566163279338847944598874368189696502741075711816257313704485786336881155493371220557913973388951119462736780397155137103971012409741473179834789339385666793523299842735869468987868932691295204377352012738854502153138502698175458799789299965703122696892010953732522780001445025818426852878400636242237709474514108889936481179811045124528368332094692068163049062174648416870823317711768332781619204943738843791907229380215375133755039991268639454779267158912134019433205312677627016435617506729342607461591524945897575071411268788409443542193842212438351335786154430313614429972011739636762810511682086103306978224514489310929394705251774480567607571233545868053394841495366180676604422785238225919055315, 120728634292340988816332177232697187243433774475491680896352733043553234983970404950517956687908812100120865600901604940998217791166575169228078391568565166117923099591724587928215337757088568957535421574261787761315711665016492840400427243439440892887627949030452492580043305273164923335322561848546709150366349218756012222191778611588031384854919897822969573510728712533884476116501755322963592013734915902293549778722399986687899229556273816283796102915777175415500704564452045888132779795370539094249773228316917103058917846763338501162440468039431847789118500227683516718215733533268273945031753514601072251571727742439196314558173351555241055717479955151520816425815542972784595728701657122827723261631194044290723892620486012111216789985422106395244301803280116640181411713880531338165132965006598, 524027320760080848546722899227222476413824238994656163221938547729353450764872797263823064373979637253254093939685281861187820538603485090087063227293490075644036814273741529121663250310733403786403134529529213646417784142061975635873244342260305162481308587904872113420021880033036465456004903254362424810785026803135200263441784511167194402293361414526480578181629900566173115027756539819165868524582476482898148790510755970016894064838041826362563647626995446401350532565054636457486870607594856858558822707358202149453433792899117771192478829769136713816322234392157291526672082671273441469830902312699853911304901189448018384858523864982266713945095760768328915837256612688568577649993986750994211679638650524987899061296138652424749988311458831287000638021809520119148536260198689244415699779712716, 5854035621142326921218535457915741203536496277146189420201832282287768127868162385005005154922736476886379042911943353008465892791754901218116890553366651558985752006028693667371715219216459354179322516821837724012611018651055474202204684594614986563634805322528127639653081521046056433745694728332283227091566825929781026461228421408694943659413162455865441384532026227348554346440921498382080855716768931462958189499293122710641514322276522358818272566304575865885642386232241243200731814574811973457473682779244662441343888225202094135622899961558852552995053121257187242403978303415106380947170053486523898452535524422680319825336692335096657829901980032976093927482408598649891201588836016804814931173151746608160035151435548161841522487129638563550511377774381113303509778694122196293342284623537204, 2983809619633924024428706196196181859339751323749398073458009797273454139955407185033142287197994086687750765017021235782332310053518601946075757069383639347211596782519065008069252407574796898156781515943177395286932524916695658410855973595674933525407027471665061068356718839316192858232804644506475386809882134232831929674882455923486776320629049877900028132050188271836971308194643190039044805481086479520990835566460067224069120485306985553471015869595891554621051880422242205450893568254022103182455950300440304921243477302737411485467297786896202971495203701624228260137739779356235402628320819100035961785798608019389556229709964367129610518379662000201260068683168162968348440769965735043995194339110948036823638562932434286066900278139839841787478222506958024892457791213799427629449512150362014, 1818163847100588739670783470498247618920577263675476680339515588305328215038280693203660953108410843056532191185871042981811148827857685302175496978308667323951630973636821889377930439550797705410834006694829715903131816430949099572651730610008818377486059138166217321289357828497544810929693402247532867661186841122171942800143635172064998499840623062821241789220741018344559434565808286828936025181880287982218578366789883857467364098311465260040505975365871837252035076345732105715040052962745730544378962683232662352148689616008141032254956541060885510943786400656921788794489477735975469403611721864873374925578374834811722102714726338295937767365576089473067099892966958841681014562643259437643359832503850866650302147236829624366585269646466395729903629493589272800655826319361832587495064594928609, 3136831459871150571195868721420411431064180272406334511222370859325770409078175862623990852351520988660195942934261164697319665395501003940884305445488216331317002865615044866271414053915958775212826463064483247006009979401415487903750847507399877822268004955812971408752409921804475043379884795886078726022184616800864585603446664921237298809269263830747166185250724927695367222010761302378341099713128480888346283091748505462849685139555456677686861067245878811339800472404700114208326552963844220753266583773683631567459296027255610156305700367031609232108356051138218132717314692505995212607509327572919305014996401038410756280976057603439846830465861675287326245415004281064643894379358810989314321001647426917577817902426689984467014933469488786197762461942631814284134566141694280497350100313685333, 2568470795437104876308292996758520958846451889355470443814087132313214272726898664383183066839926654214333319175415950381578154310319611641817140903575144831191535322214262360957531123721153850245328664079071691787647441381305611460759023861950452383538320064971397212548516273540337662828862315307762757979935624912469305055316705959393834085644548247605041217129971136829459831753965346220066722550642668058296687298879688063593079312110189001441154233062682159342598631990798959419980524914838150892237526291402241050795963176139143410231046480021226611833535132292532387809449556490005666459243258288775860531673885058054307907644691469279019519964169730026685376830994921210866977946555893475328862515449359270186825208237893794132368596256050219264192467591564649399320491075757558026092333089306270, 3684201749753358051264169686695565607197016110794919250057665380857449892937638227222785486774674979202737685477835410247107689862937423275135620822433115309375600844528362521326174739884099050325156980853062246552068863444641104410466287843651122648775729195459026759627198186973080762587013805833140594328578094776130489039919303187758234449087265747211739543464273957742662657458596089778744857940141891584179435793570307046285759664303134197736667494014959641171771356243073566468964294495712652485425327676115056319085512537359663492186104119352306403081770700020432924852825846144691770468794884870628771834360156827689527099139836268851871903373197905656988717718162417894880132823920617334582310531325435381458313531640316014993130126481938664325658790098238614009752097930009412475661412442114099, 1633008310557199622772792726517088505000499455837686622281112541813722068578046353594283055918501842186313665874405102775653487816326665159401143763866837596022172856758121795056550919926147687992078026535105825531660567290006112748372119112986188931938211040921465082189361884089961276499147699480754540905863514681954163476071581620776467002662327504985762666121610220241519765246700831211428682013398839082805846012310225235780915734247005486342353661842029066285737780713765725800730450924173403848605417587590420857116426795603159776094121735653242550698972613430674982761016918930471934070817718170413019262740073962897312325271058745986503179777239150487427519817086238527418956841226372138749150298786328419418426553074866530600966524628043704944814556493891978466470266218071330333723086570293403, 1681157737508863549888683618693625292685856162914595392580834135712756828364998490728202979261355160339357452994755688003394529138173130537591264557475963707862986272291839419705669549363160597747237836988753848541110253193123532116826322639083290990541114910610837608940223937884420908421924631327361734128390452151348463302371967686051473438572219939316694658606526259450884621778171160584830620787656499765301110955907277720008002490270992981163803805116848350702822381374217039383390101253170251531996826865921577327745312022235253853848128451412931269209794098747034945098681702426246250662895618577459932897637937493027627960504108840368717039086991210202592534415896338836900206667611734688685040284815978462121716068855323840600988642703708811867581038036006029063501684921022651106264706898936780, 5980212638955615735246642225715173711007450140913331784709888971931626082417821569917919231236536506917560322440041131577318264278257806722598498127358117479902905810674678161159190828050636090154095155733497968923022991937151336167639133585665930193842447520635879954639217188083095236002815270093130665773437212529658859739054647550560841399003745319195079420573405978390992799683435791001101934032235423634398176743265248928669185664831389262336150278243426783819049060791262951302475273627567978458369003563011054286274536215914586062170080507335516017480137892105624189248064695512371984081721774972339488516290513844732158028623958059740294129236514859667473133327329463405566524847665910496561618113879769845839712390963184165585386689521986260601525310134499365390482254799797218981994395391070617, 2743497082222215777053424939540836153391858973196939417491504030614430804277699416313903984127557958200526915706439533969401775452884253157069002261474849385610810238624818956527830404368572315505106475089934637129241422511144115509396434908013265462045180335089643720456533369333144299438214510670435518481102609466529408258109348047737547950570449075017466143109971838555379705037042129143706088999229068019452043942615958987400495614554005592528138998444199752699473646001217522404268798172007946958062689965094177144232559160256652357332694883146382907211603080796866803721302279241880585739005740105973886378618284051155302105066348529702021498354714168886658274228363306357903305924944661099607089413380434164246686597062091983297243942077413006458028241187889531753534838909118561691690560305071125, 6106766033797429068134550480526352188040928191845573706086812210408881600565091853799827225391013661990517801861956236741545451251277294024178865377720945569702498474761486518086130666818626824687304125724877671771128290714273347827255791506363560963104230260368090681992108947265345921740230928893622757874277023457016385333841219575282889967934641650977229379956403322265041567073714082622095036295691306339728330760370922033358570133552151515805688187242766961256698225779416718922326688617020728198904389997269818252434543191841966253043679189887643883344548310205747403174056644320163205068500480931185466453701231122071917256549559502325227610435088099375016391030191466707844266220945228856653996494821844736225638594998326299475383135860675489309843001875626427854848592428767521708106777954243866, 2099603865572340170685184261440047913712683965303397132537953641183922372619031319698603954872201947558492207454683905629180936836910594319774135280953649822140524238184900213872335713618336117770467508326416673475992545171606967929931664639889851725280049959616577858310474982670567996789763814273754707580893300068441127651907638720350042050366690231774743283216241831039377104803816391037330699514364001927407624365644173653539189742758763625638106207861537987497572089053501558572500768927002881141772052242876085699486544132774492673204516521499877609648833182768500279748417381009685340103617938052319485516500026480628903652979318287265420712860683218663603477214395746063744907154522423533857730122194474281224720178472905806006787614394492638206740370957211957838802467911133550282632211366829218, 2994445557373505669974892076414418474611634774094780755886911438373538458919477833744917589320938301202885350123018183272236064317323769995872102238275836757905248081602613000421874120214626141449974470986728265815118136827273107624921920901088239664531040982629037961425006205117664512860251785304749710496851226254852037903953458037675919843174637039333495414152918433298437839042619331938285086029693774833686256559309881511098812474729231581277006941553070528761464830843244061851962485438487368470299523255373611818437440644098313738343064317231725480039662566825871589774114856525422227536951569325536185398701161365577451999938519507177488159670953017084191340760107593329212120923494472910282345543902317119296375905141909073187413199419396531360100365238392895813162735073600772528145038221954421, 3641548828669821627510979212294799148872259276545002725804349576128271639416485099022165587362624395969895717654157246837243412001463293507806286876335146322681573858676963684660509051519432289985610822901620056660860570820170143104111865851768640628745414599981640284750058320393829543391282098104076311736017107930506452589234228233561706705538349882081768961278589696696924686717277821312932184450214044306141825261985037810269517470745952223940074836933175467140270231168598726946547418398014020216522490849102163760899464184725170016184384083058884038695333915058774708032097805674764829494113802994416127037213333108643173122987919377315868609500132862417850286109753836854779769118171750431930052372487310632254202668044542789329199251072444093431535885792138675922205293651437331058019766616547551, 1774441311650919261525665201295701681722987509776116883950589695719272150462679854649655961644516527043132044198537119749578435182167713637224781785254081787013041668892697109656153337026482987270656559248052816496316535172007606307108578423836006204917037447682804705258393103236478295786757302043754441587233268728129341028689554981228935413721428434048833623309906071666142294147360138508658281050572273960748696754833824601283602778064972279047574444146042686589701887337304843691615614757073372367294785559827414049748931124705416818797418517099129908880186828118840037610323111319069162936078232442473233037091672120481391776241686615370947882882797011380303116756948005145910195355711250848472701779020063332729444690683298785015414918679409759843070563775687763722863692308575594465598290585343345, 2975290900814551068373719592444634853990627791850866535012560193574321051956731522106633820072381263165645115047889568597038032761503183164882566388085919028807384984941275725671995550926400114009946878622137732440853263719836822937909807250373848004808414676525381982594278716953672829159192899958754196581677260778612351132866663832815385072889156325214138121993879138774248579560286128529024867338526771145756139426555194140349958218771453752146245869774504012773364188832989000851003542764446712133168322221214474489318528833017636505323820881424924968414321985638062785472328202270410995483489094050838477482713529172710020642620990719579424850620439519811779514788338842520884039985131982041954551134547876701044489360877405064372186343002355274301220437502167949105511156832099136756144536012989342, 919708477641518283291405567142900842196878624096402525215105322154165021881003713764945316234759936472738813969561525235358260812942367615936761362908371012545894363786778878862404722021039834210438198675336545015287652714669827757674863175083548063255458441195938971586116301420998691233536416980090619594027404969712829228168008428262340281893696827111813555321896900951598150991630522468435406173090309881889413711576889131401391011100151542714385385523419769156089494552340990182008018978346102409748677635177037446674996085386338410845735917431147267858499196974412809538102525241922144397692338423239247951582052959407119710512870011545160739548997796793025037461922679666214523467570847517210698432746159232655242636649020608976105776661959056650818019721117292044011889780310624219967151826017110, 3092650609360424179042711204553303503294281505529732437669382404337218963883185536006511348126036212687066056368324689963961653539209766768074989539984656769360041184348998499261716184672630168182623881096874090387088515445398892642702570273584592005255682660753638323114734168221828283947927755111296309057248646534979857152900803827001185237912963434033925282689016808334572683339594237973478070814063407335865660726803501530202400300614640396793899441509768802307688937050184382639325884688595116457168100676838476028088506638992776268876239885867127687928257163746640202893515782196836121724331400966788097696753041890395639617444242913192779770249364310736372346753208732168148075810398750557835335895655342340910768864346978118189922094091164184687804899435437502149123013000852381568202902953768372, 246045358684399814856098351508967022603825281102504002940237957353867703025045040857592144998827735126253248770562451658903815055020607227343613903134974934241046266688468117905322833260537875354824814949889951992176076924317574494513097345646996277929934032916225447738611867713119838464082898918701206471622758544429800362778330698449803638827818504185822287970060074796957657123071226380417450756601283976576292232981193449132292214036905423529013980262697472193481512877710241404113890980973214003856817672980991180309304648776086898622892633202887157278515491662737933782114286578099131611712715523646157528823110821363057859230542468379441261827808793779598236798817072370866419847832211451674913847728691016051678139850759526758806899347256403773322330956646148385437352186518163150731242064524093, 1822596111517633193633294383772607272175371895020697043810178034408756828498047743992107031022809358852364185493917071280570825037935681647949993447117108466537193035910591430366434272397088599653103451608420510019759811727215732536098351353670769456390056538274765952380536266661919383856258836562874708613843217372220098895195417334468396335633691981119552875693811515448571155692127893169547433637199922576756125820892583638902827020964869875470001878615638177293650954345205079085751271795186351992483689825702845861430285034643786956748890608246911972780980136061126581779175210845552338484200775727374177919323019398464115509074065821464686358642093048304648278762776175923624430967623887745146586251450921694253908770026539990982592293171381046753982219009162114737811260773291615244234140494474503, 2627787156645611173752012852986433101238267783172081390745213760592049371677014228217589416321048621311330631914651095085496311012215078065743320536198713298053829999435997725387710953842210521954855140182695988516928387900437673655585091544003640834274172306442930771757962269500580398295006849528915917806840906280346101496541680546418261467984223831822037724589346960018009760549540794261136685477732037073001036398170917299986303939047937744029683191206382838822414774457294173946835527922586472176800637143528702182114381536852246711005867042856256868700841533778551015618353306242824324970760286028826490034322675514832201450834125384294232651571189340353941710942737358084942870552253119758902817500469947813513447866866505783565866228594433699030918234498710574460788591319986998542610807045099476, 1844314835445913937184102173899625534451432029887328931800487556857744957976330320896871266459705601891698120666415098512296577982377977476499733617602778009511791741026849042865463959015022093051452763863378885183638539985204676000184146097705073013351799604274000808197719360627954452111294537698276010342978729719892292052933981368588085357718420734222086944712640945937928609599905468423825205409713807324601106283538455883762075434383369177186140260534786348967398234492077505076436580115477210736776750737999764245895504223164194733741702839108936535317803482057249937230900287826972738982989022489934011663026920018191550859676288088422002133888660959404656120517293332941719731918770604818826142801754573260981018669158770614119470796325294566189896742160718134410149654458838645573475627160877439, 31551319973961028560505580740774845953091406944299651314762518280693096356169756619271726257558311374917585521810476987689164249808990917907031594896128686290623591546442670379966789318904224772324643810012389951599383257360480389266719505452309930721523473420379370827294080412439006562664812507558741998708709096363213624357556621060767732491655908394872768720024452674289483162196706865679680033489889101829020236052697789626760555623030125642710125086191451365581055236002368249489985499546184209331879047614862247286603786193676073033882916971846343881356377139820471340563769511579250469671902849428636833663050544204295427846776438691968844877344944191348317648567000697591445045644904125834923111605336666568247046027650620711207245568423591084304696110717155343637222690803764399088062621095000, 2328956592572496881997853970763784642351922932434484900938295654705378436964515036334655717294586151822985296846407338492013225026555936233910913689579949754602421640426517126498132018694338836524332228701598675230565257634202398574420644174542511793109254348013973437676279507940019578992008033310464078246731210664295650886805357583972098906980038980664909886560061513075801916049878124780137074170447726532671623580715126103322730720151190469015737800925981504781818038289008036459096371992381512167699605366692753104737600487154517739553754778472835473031417010055721758018412460598748102197880668202873599056037813262138619258579721089009839272180191092333432287208305833756538635306124377810730604920552120145382763145615453591366662696478092880259358917204126297219284684236486650290980353659550022, 2370082756869965516316237517791255175040932596898329305340546513316865263579553511965713863458175297291265704141728367302794957918876540998521682515891054570005839274579702114895969458527475892668448514195650444355592187626629824204627552185133951211856505776971840105155709102910980190808300475384855175753267284782637623485183876020418920177576992840401548911738979659609971958266840766599770037146211384573085683037776556068239494821806353913430516679002167480264317174954022907398026470686532489754094778658555942239562135891692731529923188749938393576752989832633280365860993075506945790920388613135528809584122426345179359787752745146556813168675704009308915284369040115004769570400370539650009286998241814456537656798987764585057467474265647439352695794007797769265216379906275253052882021010118337, 1112557838265904363049215589539122388533572949571729169691797907776769874889947216740432569603011987860113338843781168184350040285317788094491546158404732052543195513089549339576124616831184706070957261431546595603627680007606540330080567498877415755603162173630426211267911247707952090791405774627045208268975364392085607489593626189166483044615001185205167208372724694270593825573563881291942898548070013616594261028936664109697719616921887024183796326015673342482821689145055300885584547581580262149802987450007615083724956024666780026479881180225802958733638419462647650299098592952193182299007654861931570201081330608415308383704754966792552239471192239998164199966393985195547942063301407631406347572681742972448064462890434039440741229750068209445876227021199651193308567688932366417708905075688266, 5786024270011269805710337268643665385320809624389169054501783937104283626248734309402538526609765222722185476457688690801755210056568382698817468453594470912460928271325132551028228333073222076027294069107850174576796705658180844252370372295057877308619078194899073080805413977158499228754823531513430952961063099543451478054823651032380181382112967480611041765882123911756907031298789134468421940877740864997643004508046780992208149774368829546776841150072726397876818715103211538748752325438787072241693945645723846731638052360321025638012136420594245704093145371652777893920091727633266487040300156697287832662801770123505622548909791291044821294841148218391724935351640373203406722462257757412292514904793330976048873889465137011885703848882750611590057243543877743283484946800633852950905347818598877, 4396497792237559360721273451255216944126426658993902330701590689692017917702038583041539870513757577822106840260547728988496120947994220709883327552422428245510780617009030287614496944724241318873587984204202481110976131833875870612561155997649769855775328262447670050069288356650605530361566336242478500192738019543834367957990323695574231821232713269276522017026309539952943729021989587762522152977009834939650472371883877775686822065965794755286005784976353531390791487778222567732270618426654802193154629820875456187953168182519256239202967779813921787288083184432187761351504210880097498217580845900747459378360886758417983219888578354838031943533335522503727660413227957031997080886392095423949829552084887533577061598350371514887301968354976442307385589312874814868018731127669486789511615581997290, 5529794549241687965890414695896996699618489608040033894899234986647645191473141310861583079522822935955767105797403834947251749452747281054839561569923007197628537514997240589706926571343432734357565967204529105257704616356627378819050916629660008267673068362633059203273439687147278584228226874568874732904832486173373176037997869114374070496351575512741919411419392644871350125075275805839364703731170940712889578255007044279880542181285553819170610097894010996242068989855503482909212279305932157043359767377721102827681880513857843467366666744953516393141475434769731694652307610710264325604407572703660438683757519172014413561850498627345987345127505660450584409763417019791862749774607271177226081578397278341667167324978063195966623268611316102280944601175931682994168067202639425098836129977009152, 62810054415580314210510500578256469766043780420419523857079285939182627832949825908931818698501122569798315192350853926424698698925372398378579441798994418100479842161624408558661981355680832146963883118304853312766788166428291423771932715297962272133524938754968581852711369877348819351279117256959268087050347485773436352373172456859588043552355897650961691153415978167713327682391274223769107518574625920281349904686148476431832831891685931960046857058276539991769656255935831258896336401693545904354353414760995438756907948931512735854017375091528092729271830071324315115835166170026059667981370148922930004211950240377041159823528428355197878011513593266764265626758167827815532786248441078988343945795861046624707085089400738829598936549794965237777088147501572377732620661423596345909375421105033, 817221822606292444701821575555807976490392464376771434102809692992114733751325234111305764164778160753780871997822617387381624063235951786788386045358858687052057765426319079020591481309445839555181909701569248976174893693639976309964807547309241907789277038427396336552077129721079445129649547124424720825748831087684629843542286019691891132976303764958137293544213430410317541271322488569881285347137286586128080718128616212350056304699526980349959655124485969569488688922596485858291226893499349923494257416174726988891008250240211772364629266406212893512185014247705512123728960533058294727015458565741273430473220513150761742356887058078185066231166782922077336098022224060253548594255479835748426687325489409815813191506401520753691201840630542298601547627330142119373503611974196777203025973581423, 4462337508293558798394908309222833471331541277905428688083664383927153950598766962748709121783579060008996691978769089267869648610858355982406886436315361728312420962033268530983113083703528124402929912566179480328978343272017675320189119736732938243128253303799834616674746921267583491797607063867707390181997766369354140947734973907739278733595601243848250412317778271375649314954625467585691709656349316850380844164302805582186501946431824799559379581133687937760171323149405979352248407978868727322879411144957524187245907982754939965596647291281114271543522171251484219164749296485430396708779138126519601238952562531534965555747032555080757461051220702706874132206511153863093985509857608041436750158151172011949325279006604986857041598705108575217757719249596144878452970605459833957968866483956623, 4864974520429935098265155003909226181781514007236702427346615061424936654854301271257415727126862683629823225887110565739500438684061704649944321080222163057293624678644771172653368897322250675774001603580125264310114276175461927717335600597088487335463881125625631158570918111082566252731607272373577604813243385815360515530311591455622941340977874233697374871140562545303187729000405418028813516041432253712221545409688566595520639311697904386840890978871682018987720236131343381921028731872179498820039242463260823174662501631489029307495981262657171899403707364365547678133380877750244339326499301130846237448668472920353330717613424652700385077275676312153121903927082476171010034580078653287679681513235531557023960397321224195061985568158722336719583282068335706024101290522662895384511075761504823, 3012753612760138864813121513441940430366271995401352842139326750915713474777270880830339240249256311809198550261705638964311166199420360087962660100188945970192432941420321105940873510899684637886930607238953847679382121896834782959523797744515972448490999711154907187724098979646591216603792671518528365630234666371773592242107889190566347269818653275522573012496940752329766859517387918179537340841263935737598089116982968707487390713163451384715880695892807089702086816398174116212350965360734223507317844938457933168129980946254077468054442020529151378558519132542317122642928719285060025779786179020146148432009487697310553027993671082894112278034723316840370634091363172162117462828486486067823412247045635673109523658729128809929610053675913447807424589703981127851566677087989728743853668453914971, 1221308854637856738197092574443489753531307801657050389043788550832620034593359419736686662809396076178360662728415632241674098077453852812850518486197344307032057543955050940582827441343958673383994731927938881894875815619814648274294077479044920385053166619139180613601536688105232002137901467815030804422557001513029542225274327605961128925333055709778222152701423737823553796738086285098643926592797292938745774874825025958118121125711727625671677435978570220761140830927462520040532607011839628174315384551118545749598687182419989698204798531069404797262010587246992114265850159103598541364510023860093738415517352172107945256238361987587193021145816391488548055210991142344067732189884855015316438935303529610453572372728743298368272279013003122009851200130064845286262720780151954562464334202760970, 4461230546925999287051942373119482522676774303235410511647196208719988585440252684773574033909550891203268847265590802864453635717652223171638416100994491952577631669834774804211200142946250807417218056139157618601102609601683443231243755051653314946804197813844689481488595379032791339076234679260648235437145217394619103428914551188764922834974754399002721816695827219602901568306086191707127433795121646891347816312860132065897861420412560214501231459187699022246212607640550867315319946225909632971835884234193029376847778541154089722481277331619045948364359141119883337408432991622785759674585800680495296675481905051341079750298875481727380746153405587466254455086119092022183147262720176127056478225053132851204472169272213183792364351847117074608654953271719262820772675960035999047452397219737621, 3914303877410891060025690851338749569489318533671636379099729839730887474542450775703344840248376644457085184905170193416419334619467087847019988619075024187212514847650099417188190553052530442054332767664693259265046224098970579249122203183565217134840478532353640283751345295452096274921603840937290312959718566827372666331748624969238796676029018804052284945188754100488675690276280758893568874596122217301734589050127268491325087812503539702651508799858211254804569279980411245129804717462824115616379356971611484600259406339719786956745311413104903423470122205166435275743673052177036325830375916345911061301900124037711533624686105566695009324723307602393506276632989855559566062457888689194553630652549921764648011947930562212970833591463016073305493505797205808937862792680890934046537182753419490, 578244336887077780155021330561669153798381997825994188171336627086928281584408364487747019451281250685657877847633026640833574035731039659756761018841137772957243257940671058502300589312458758733728928253316300922302953259175000660890044991990664571886861757505216120195929614944083087983847353248320587378521485958797886931952294616707379890116375130398371379263182554523364387222140291306547334304049113488073947407883219302164547848136772850955762240175956999934104705175282948967003721189375292060268873364693838506628832913853788691125595070749075102885927685458740868440474020225906402209651941947905384201302286097167980849988468138278323452241623909916356845548870372563621184090300310231356013988414997526962190601197686140926533862282332454037807101452208881858149659072009822678990329319201387, 3659426383859628625029178670094524930379722748695443479665078389183401857732500834084962131186204792138249241300500299577710908819300277369535618487448745436596903263364209001742284509266532061679439630493939271518389473281521149508761668229273306878906903763091472249409479665063242692219086374317215705410037085087545831420920096659883847110456504379245149232377670581857107724209015508369549487999288276473914786563547992858178282642952730032141358963840476931352167586189063941664367402350568292387908202592395514844000394160454115203256202597179580726647349793675639335311867712863639889821142074794626283227031273198262797799644418809757945341826753605012906303835941360199582722540919084593402625314593902320373605361556190349327174968467035985268277884804092718365706789180946706575326175872547276, 5334118776688897162696620237601642709190122320353862582069808816620924801955488632220948129984813031998784526636203584517766866946638143548542294691386625393090421120997866566410833567966444057348891658323985416818768585681827496002502621650505460346761827919940829961284011057158283737877564501536998489962838719638160233232902279436664355581862011583936377066776915355248319218465608044610810435606738778716797984006021918430607348840427109864012445577262087812170898164472899678396891329220830161777366589476160666441270110354751895253280823340775667452321122850556900007659757512446935449764548514995395687244711313766539177911605647454787720625109494587025709386741165428313206319852664671230934319457537329289661022266988992665732514212469364370585672844660738849456179211444863819153770431216696338, 24235592396520825120571631346187661002771306659344545759160634234459561390786017435789772925180540193006162305675032058653665704812653753597355234338181067155421773510268621452798389877510062979448112364323482938821031659997793907592805431867563883548659573696354982084109170623742798474760923742661560616032040836368508057235293163595016959831485625449825454835475464373708390259715943192097414472702434629766147055760631862429956488178341655388116080364483786023736332554859238062145685626094452323903145228886145096952321963239893073938764630593791329196013836059668001918891365065218705538104196725223429636134574011210984543085493952275480340555890919925240722836717113858001799872101520253837645794782857335428497456619244571071545856916469620854707208644467875033819292970016298990249869763539422, 5459770289667586263419065435281161337755762803481140192083097456130090641170585848940236228446997058392252811872451058515838247536045926541576746296015876867086791148221980377982198799359003402989222489087468032723765525588464318137973954006284401103802655381460106140824850023149185481366860855546308436452968414328838851174428530779967216010749483490752950873820706389318163510859496855986167339089721319397544575534675912461677247225838916265164162689632759003194625222943217364249119992678773694253953112925874932076697473587146979498457920693105670687653287710786927119448579943221914483466251916739940380235988749861962917202227272677469858818109591585960067713944178374849408150508584180482655200083817039581792037849965379701599553619236361580180049712395086285336785047164953596196323436402499101, 2045396158600006309763849183846664868155239986688268689596751177937634033829495134632439068347083657471019133319454976094763626212910512571725892020401012282516839705407297142269692266200879025313159656682173374367971183298776529500571081120528800510700458202228036516229428061906520699806180667930699259335677858259335896032987534874719638993921703890967015653497185866824804606472233065486956846914975140930496867662154307076607926412756954425776029838624571536196744420375131177043466417689942334269133084005122127758889007459988611171525942536295014412622794510264948437302218115478798294152210428984297242153447307306431033680408164548936607233273452953217371473440269057865610798673288509074233946853048085008051639111672826946732838053210765293183720790057493509613375638752620068949568623758821113, 305648724044706121794792848919183342004052849028057821153313294911842354835465362903473902274969633677623969889912546501155177454121002015930980594532851193953461007422130158517650414824873692238282218348736257443912434296976011626090330757283472881355946866799378661856687497942010157408818046183124942163714043758513536421745541654226381713753246554198706396811395330392884118945918615534435427216401208681979467269846138038469120036048752524005774836178956724888558100731120552105688712069024775151492298749699103822887120654227826829855111176083055982102039410118206180284274063323926239579959581841437149090609645388661454160787489547697610522223383275202789906555121617586189977597884751124115632098751899038231205847740339677625429178984862364812253249694666182153557518194225521494600011625264876, 2613487298197473819033834034889343162075679183869115296999903400339992219096008123169759253824003579257317582945389415869276377537722922560567321123711309482391433395883719878045549022484959833623994053555685726402177723622627418845626081730532682425412045278730558007440266040827396268352526045474553438730430984682623081437249972396212528193192819228874574939887619158912762412542561736337477338771659567948172372487197872821141233403017605975885910594781835457332762845507545303625858830093604941017122896120848663700335915863396775323242618492115708239459925062638041869634176290707210590153670462315378883538043252218577183277868215043503653115210139026001679623396856600357358507670629554141845206746009800328822067670566906659114352676958525170353898634978489277139614197353779340027134476458307032, 2921491465641282096440765227162959414468757636228880724796982243028436742570788075469682371643870135805151236484479211366758672840947327014033375717417681013377110714669380414625160320607176506566729855462855900870303096254732861538868176716736141460428574074501463336007678702567930686265293428273660096407512929514945355223263401186354882271037551187246597764744760784410811792486644859327752503036021005733559273246718400114224177487847792323488354486026584981188126945544821764255005360066150913606632130135766931463195128203508306583118317299213612846043773251976128873333691936283998742046254588672742630215399928919018057642722162100829234204587564594556523112605132774413736502113270409016081595174052411115235860558303426407728946688340500943069402406523783308383253427904801767870491996467991200, 4248306658458489626326329980523833287589171423823278252215092343511858335269877356699353970521968577949006952395562942887684902143167064621631958414309150140255749107423741797277407345883220639256787233227613909613862356272427206180269734972742823708098107226034284572110944833466272293523090992497383215852967772438301584058027104485837917507481792937912055851997884266906575876925866594880591042706849770925847444216967197828681545172567930370333005137935835083567745873703086396214895764566810795172180081987421953387424933683324394874522679043438018403848694663308242091373834187802311822406885769384938866978257547448718369050609677929623259679330605315614807915183114635846887239864382272910257101104446958839159455130103952897650808509550890796631118348187519856203137034394308784824045690842196031, 4451996270875597677801201553191588358057069969048784272947660031850462470184946176485351470355150630332309404607471298643470292080243670462337820858058159387745345954784978522854915266160247169191784419582318922345001413816017530086758351972831535193981302751525611366175765849606583613845502368337733597416185436791300274538673522264149386103024885574096521339556342195508276728102429323844317211162560495273432268421065527889274770066150938253673083001009908634834961354501985077735036541014278065672621068752622480217883464398915182499682911376419287314536538908937529091627008857326589080110579373065763695401176766263867960152185638178025383971212022702973691037575853315297988397362977109849467006648170593752366632103881995102274046749429000869509060306620731149231139186831557432293033798311647604, 1729605387070013091270292297744675632988751593664231283337930033717829605631550168834972327787768159849009130398702452533344697755630064792335387625144858888996039953567036426466324110907203680200928107026055064250749622310286251279336362433366637322856600143856669132502812420968010373963658031410127449737892065919932425151877560927288042788682748294387041201142692082886793518249795088647044753776728845402208537722254969066658015542205675659151868748611450060380497624392584407525826600385592752209955628388251804160989303066936372032987016461919654349647429336646912261413467300448718153779280571289822420360187463756533610333825974853946729912469532046184475454655248133552977409083242343124664909076701979940263349790989813783119897394615584265322643237098579149738096697138659425603018534554443327, 5084240991564366362120637788170192737293594315203923711241685236239145378901612159939414724455108866722148669272924213060153629305440043362252364145609826871427507253049085869276238825779661564314335569190058483926411937925514172920063882060753923992646352377560585615659302771409319164391112944773210750873095777320308847958404411786850566992164251425079294670479703400848328598154483191837100855814591872020530267407750257092196494994621109446308289485161631300243397307732471337729674739929096744547838986136513971501527563351534388359838504418364605625392734887770955762224346875949930815416264578490557895918140904864314085990930934338705907952488853442880870702510398593313303812618948359530385758360165655443725800462736177266503843849473258273047686885856706383035987120245617047635056653555015983, 380751216087561767597556354681076484013122849687362132274631345910578896445025966320496876109008868844913204481485847427964250642468271040817635937143446090217367969150821500416565930392600330343724672268852080561976581587072303389747537991404833247576325312636007903492259390666817949777376313473918914645273792726878645105695256508556698529685035702127525731069451950307545112727282045387932595921541307268199825483004889743020202601755804204698208724888608546656083681472206937817320323700134059528465065235751415168497977694733879662081396395423034671557406916040014695025032325239468611582322654507685749660825487667690867183650414573954295746814491094553419641522288542220871344844039472548721099198640593895890960701416574679965410468423338823987572548010736395478049155101227233702460750066560358, 434983747904068133884546696876650563058988952352146075361246404890218005717513871976235755993468417315383974872533631120512615216195606752809459209562658577423373393318564459917101815250262553251238833701830110534428620033013973737713219153879462494677140460551414008994239791980250168690237027991909709826814065598377895686807727767488600194236922155779710369439901764796524601672585495343998794238863307229390136918550838180622547304059878498172878225480444859368560734303461051208844388719972348039992663886040321838154818283853768996461733254604523906780907981522469728005251669684148044209746566616678147752131555724122605196788907559690262948437708364263888287778756545225542119888154407323375549329417318931828915156969004865942536301238345558839224196367864820605353781650433771691732241896843, 2490807692942225427387932015162155269063465769284270998974354601897903272521087059543634452006615337311294148500451009510687268323951724327160930269658021164601951063412936530223017859942972954879456685005298694728890889711920732769582776787474513927980906618726872529776435258295321474989050332942241451074693477104633733910109803442713269089532169059684378879341105214570055743471380584319266218265114315722650082217049712316379011238818090405765570013508946524123956569108803174347274611989869241518711167696714002811459398052603994256374664297867330601718852670080640530810398835432853458240096558338142006035945910150447338873455643043630432877684974435645717288067421742872701986629449284792802374522061286737710987996320989324864060058513489832869998394106831619751429804542855245307673374127377110, 3249062274026211956905374890099337840450201917270369280234276789466999739384934319904828820667521352888045361748074188357385548740077089325705138712013896255805300285016926769120165330259207143078467516311558840090883878640490296985550753089800948005768598135181837241215237105767950485750498657434014477612885303888251364382696109460137631295331402518972943273224426830488838277593252160715606902335110583588651972400348636637247377891560160342716772097314248785656163116265662619823044212278196371728234334847498703930172807850423635081492860771580143638385150265485699170929638231138667657156198495267474933641318457449875748724510367545072532874819942693834216312622744988807594067615814904865785128942078025657236668293501842995911482259277116239208832038800795601831204595413493764288339456957367717, 729239604572940709624574556564177651331479954824641353710758731954320773909274390539708540316148152165232326171467493348809479551639460262425082033762319536422338196762490085578629270665925424208752835150669163393255440205785673280629571285262346958717655895025353395143485160911339086388838515399422562836248496853758033388671045489218278280340213316370041858274860829745020507958834753105791632366441423187187933486791079700290314373091730167598531807208044433440487925861250823278939592705113118952788697676886895939978957636896309450249879470792782376116762616544520982091010068617465316255874576672356567396541885587436977969599176963989101644690137910977162490768566642592616322331275816676015809034903717976080523285462859212555885704069234095481001834705759623812232794968053650940990709952288787, 2518273305083824046341939823313166581461215290055301343072674112955105996000589232862618419114074508413863553292170611246901595449830750074091394557013403731454269832018220059114691334274086569151795178306296218487381699432151752458839498496197408773173906597039274770558725533350402326665055439683029806387326734016093624848453183518612571702923611511871168067923121625148277334012449612995779431496123737556415342794997934244714878652722519002453703030399636689755975450256309296594363546742580440255657416764473454832958831350803596866166634912347606052175268767861037675054198826821676243994436155619002662310469035002459664635640711254396840443050470642674847680775950049443622558266512526226869882676057473454558639017160840784453172994803765190656066417174734369123813305592170804388654554821856928, 1191271956849370494900711204176353383979623521960366880790831996265668509175902781747132702315981049687712519660459942412720011809675862841572302178519688384578867988778011858976997789370437414553491676845869779029613599375346534870738441217782136084902026514540441100802396471282093996563563677839171737047107322028029081327816562688767960736655376400036716234628923555894610758836333357807142928952673914835753229585573796180051342613667357955981938607876789306793179985631820946858455073742221978117679855624933365474529155034802051663811026364414624351003051675852579628227942273475636292062892166634831911884720058056446566510359374990057063978936037583417352885108917951111371010114927878284449768421999917001354187334257012325990090177196888790224529966607476906824915445610492747802594627535849003, 2471645132555686775656662525818903945441697244642940257594412847519034951431639020853021012943332783713875384704262919534113956180430553915042016485604240795913373220290552991685189207815517045248267705774468850189626716990606115629001573800455936046256386135825115306266274215045006783255876527143590765161356002492455917174728859032921925332442260720814499259633185878294326219406504270796708941421118752594484218577340308517928649576742501864295820885300717842945157191808936450156585635557220023883597864730877495295742049013661332098847544545667451129160708964410385791567063116947074316124804310126904062080313881749622140092620579738373592303639437732547812033500384263769934629787588543872058200718545960071963976382354771104478371361620009072498180509063174950020178453438575728546144414661549438, 390116117895624414068399242758815015606870422087347154031286590503873541005720814026073797676090795669598237604733987827375987280031313293987953018993825545226750485406729923971034793879680663861564520160155139627015273297051056404747099716245235737065632426537330242209238125449797101626075679271205627634750792500004004620118549962144259048640954388108533332396562280654192191415969710676259046551591861157765167213775151465156908806611543843509638093034237077148818110209510290537976335316463335356267434065914545120611768954483950321166138053457320965215316993614881252390448075690357461378931819051973066320812552603125291516445755532176613776989706543860983389197707347885254579647521410401544498506209912772415860333910101860978966154183112692990510048190092662962974014172808560738639243606733432, 4713967637184336187171872342314704092185584866977209571707107527325037807910569715139327538051446931525332540148118190879754596987973874427492800453321387492430227226402718278823137829704335752845437960933038934678363653946845917540689295384823448712387815021716840808600027195946198756406438488597945633102843387969404869955930710723621234800474547332266824259596059633766683282997016312663863849385102200742959687833316350118858865606442813608809227959802154269605134815507999685468747137435272472816225075121128480997151659720260440337357080983260719982490706185085005816670296506484784088439581274740555444430530682525513351586986808054944054987586200000765573779869623910163227935240622180750046646540613692141906805931845804910153957224233480985432537888907724788957666129443736516679219865560809441, 2141676449528899316912499465078129943000288469295714303233568860586871705388748693869521293917698516268980648320909156737912800591475676817786095730359479679839846100534501669760771114927133748122953311364917604552062581668659432510313473873367398712776598353456999603124652768620263369863892490976403849545330041422252594019073314155056575681202087178776896111888956056083884401207912899228606682212959238593802743130101788201506285828825646027814760467167842055659794518374847022984136935083056776940672923488083766690166215989543132524533407718904054280236064304455493369821257497393952862393006379271281861099638592892400391676202915248557121828211981106339101940768717526064190194671077601070305056736649669498990078884432235851419215382933819643742108010149817707830215201545499544694516819679175482, 4579464505578913238286786870362823100519659167453607289231104048697238250794418584882780650486795283855159995269835793293405813834810577392029320999750463853017671282572485069217877909182527638847104496728991859793585084240598889952873741874862134676520774521951326306246409711550971352281840104140962392506826648574350703299911383412740528412679817411243020583178418820021666240935276740289467467377768742978766887168280982384060769692583539609182994677374068536872981645508988595239053744466152117373324877991203817267164988004112121464450953285350110755039438183301556613368054504353402453246031702770554109122686194660284998033643581475351144595467282046366639150250327656122809174199359881635661181454511244149358437321727826619435174101102533077458995300478944047342646266860525670627367552070306450, 6169737449529570560094184275870894273132079220463185457705670181286006719382327901124025619917569661915968200987096954391247477278456801132963133529083539360707513427113345277535523321488437238075571567214363990196144071702507022499632109388368386924605031755586656950868032149454780966462126663675605325205557004266794258333722755198306601241240453309396985696279851113365818174030874185817992449628158504709558605463100357818954355356723353871937676317399416297228337520184289587142284592078285040788961820609989169481144894357446641170719211171498531359475093071297050159173433695320040325992533407289300309902279597365034256459300785702928481730145135741245655678904718795944153960681663761300939366520000505146643446234262516766134537149483994560697614628201538152506921069907838120812945275096407368, 60608068411605854442491563050109477663875313914728901504863156345019694785921115509014279396205277075421532711027984830225096531455304729516318498422582908342008415182840903433243212025657220284824498745370506550398271653293672460419062086141195676219117369180385961546124639397204094025638309910187848630395512397788958013992012413972409575258840033202349806121058110236104887725528799481524527185264186015882750136776850467524443801041782717413798907273451570884979101584239073199330105039275466025489746577592988813950577868069837469085813360126787660184034557833161471100017547342819803065821665507583629910143284152094341151656300346610199729903002653389757287812036461174928502047310129682062560985808555692793379170392094713761417580983324698408034168606924938869700267069556387732152090622755250, 1467910089467376274072813996137719942846862404043515675832191813364794398360300690254162945643345055799370288158304018006431463656586575279813053035469800064959256235162257076629164033144985700453290067606993609962756475311515987341022427341109484500760203102040262687745861183703325954607583589809093798001414545010187305370268207727306696819410424618765067879657293053887429592787038626106526122707817055378160825720475940163522302563928598510352483050066299378915071037152736341840393728649497437258301074453391085646556551967668636502717614554778196203206148370048292574134321334622578957380178027446149582906350473422956360613117029195728968236743449758796114812524851667257996621240717504617073924899467239542237934178279567019056889100355246443108830945263588284788957662420195114666263831499833684, 2320940394644226268376831141996599268487788320762287065852549934858732099310874785976419149846791513228428744893437701984112805736258553752623276628632517388899180630376453535372064770366186407279734971211076992424258585901868370395371511596324741508308830841962938788184767232968958101768750163959366952424214498878792854376509465825824163029505901921779845650835329774748366016087486349810091441961335595645681133778441391082449532654579689377260899209133631600263990227902090319489274683469653395970010124223001793315909932903593982596648436582508654323948685093317280967377179079733129752710170191888501957356244038321214834367701543353062577314917349747234271238691960672841569266925533556334753492068556998987392922542903762598603397134410805663076047574952439706974776064458805900976397914527603700, 986370435167196072635322071606441664526406130519266507060128073100853289463660939007704767889218084470798210529588235966489865683865249059865380308156960735580023252771461206541152842847159000476994516149213960725826230818728216998185072355428660467678779879479803544700020226386288851327288476305440260614697265139393455382539638007261648546007576834272415906924548407826569371151379341578082613369699119991426717218400259811718021072016120499017978889132032339257475905667553388627168251228836171784013948788657610684206626147029038849943576638202023068413137163359522762863432920974566372159580089115934990345956922863899752132963517669310380000921618090250906339662021621240532713357278698280955475479247527308683824271274328553261784484867504521900890003380879406851737139515533644078421782308142026, 5513043319481514055176416609639822677407559800518424722273656683805433852432612393959759218489969886786959410379652848031993796963083730159925632463649923536128283345775955503122053362942797473980168066403529361986869856658469716066339332579547465755728192321346053830182628529027985570736180815289679555457849552806551695542248607273048788741754453842570167900251498468467293770350784644616513268826557455281508184687209449000613455467899079402325699552532040932560676388126733074037299314520859854649137885387353594608341886018409198884420740988973612618987231275950226278588153044968395981405816146291740354549438208666832044098185665910405670881595043997072347034797497841830317531600636097256030807649327170689881475271189016942209401658188466572928749453122919851796771069863879305321178147385075783, 2421969605603080586044591353517571450160583809827670418965286856716608234500350588739822651960279779332102820925728643732350491907203016973629074824910561202980983543824469476778882042702820652716490581059737508923523187408245344983558119344892239491362873531385294103737543431174324085996873743604582989601840787495616128319923000701641214775816662036099467530678258056685309753889539527778630748654680934198240927114435054031638775275156393833250493996552465575942924863344079410261146213610054504721654736630622467502270468431948873210292846598674050452888061480669779887339740368458676391527598569040508270310399370301047553619712707477752024916999114428357950533310653142544845013367976739143250894285025334945710016834751717190195617278899407433672516803298175574739252751593590379267046847500337035, 2985146706117109200235587873412331975902362492330519064860340172276707522928190756358075310011424131159418668211494436525468682594104056601637779023465434121349450969338433016171611818469070852620895007845636860415636412770648042312598637222194299243892897171462301644695600256995743575231092007136693080695228632727912401735114733515697538230217439019538905881880338673133281922961779725143297436666263677783262764332786901187207009695041323179169660523891759092752671938800301620294809480639925721553175775934731969055923916784549184820638302609447210458536834247656670342956501423549812017537266353522050065170255922516198248679140345038721914606079971966291461027829687522249526715038214448312707544325239936245396547465435464834291035047135726362588723537019131685907570307150435214527046157846335663, 1834364189757875568440056740560775856442090708462714808604130978852142177663283265619419138836493567560824814326155415067625445478771056378044364118867195004961101963405762263883163699870817373814591765770014612387833657711431433283957946599992818723728606050038984412861370228987983337861710799614543846947376484411664040490001585118824848871602709206161864676380256764340086985545307418765577444489563512096033529938332348381892893984984355344071448069629224550218173569387691052039129928167461501184900023989853833714810057015218629673412471599848971461178260312353559252308081926124125468899361550034606856875749312880659557106888297226178663679344657516229198606999668797843335044334679379082389763429481625002191512173004124693577444986941036656166815274157330708309498178025518832532494864629214621, 2450358491622388034924697773382019880509630464367892293632365903122163647082032053101753656429404151666614290662904809476483005567326926910348394025327451310757284462829196791025849007798207673612490722487970590166025297954676209137893764137199056376089856610129658653238310359422486176448456384360174382198348654024122831159418150522489184341352677922987328684046968674903680960778050261670805934746242972963664848519487760562203614383800615487005303924197649207163050369245658962285564485192442263506212711874750561758485384677772802603862222034261840855984410189838749100155171671980554982756771584594747334328832412521434928455372555072888380954461350178703074214941745616742585190468313765549994846418737750896704203126131126581159690849007333117611302075981274693168083641747079819660978600040069076, 3133535259456921250512509946942849429616419745108149929462178369031458355960000907482322226841414275447836871237972888098710481294725426063126879566756277093073013492570043999896296246700370133349882201674211414197519887481073761308073617071782573864752085306319174245937317879333510661742209922354067383547111259104607050825770611598952488362762223972309355128044506711069124841822637619900889551711849654404750581206423409940747926081678189314990427834574694716553541841419789950502545456410187280927988175144127592737522992627735049999840001773553476093463221096853581251309931429941940323630733387534866507624026890917555286727171048914566648105643390588205955033006086221427136016585146275691026567702893506394451823683768891607004864080785404773449575236864809596514371292824677444388345937072573599, 2099238855780237286706780600383060110698715465843177470912840850509703803768478291423793173320555094903363793698531647258936882941107859139967195937702607945994706326971907910162574353200663221290784502150061067251990047697194319271785613426671172640868515157478291862331950481353872972633202911087288387690302790484309719195573865730129738571007520457493059886959598549402958725991722127308335346527422977951858877721240614422464018319022122912968972376354282171989838582020761147371463028999051651622733294555323742807523023452343174318998400176800577181809656941058658606350395759618850539438625468445527299517091461803971404594350171306795641292902935379727106761568719170947269223284459223440976072066230646497517491454569348685572269717858501258981011973580741596891841143503958210893561027522889324, 2231507074751541777498225472634127780980507909235840432877272678546415822880763768742817629716944626332916154661730719666024089824210058566707194286170206312421360585783982646328713716516046644128186625960389947504228049414290821272175585541620431454949191497702314753068720959765984054362697277055085378815731138327132004535429511606138126498931477286457996825749667001100976691280493159670007787750301441994249356227387585087123329363253682007923436591714807419685385448515272108459836789641097364666372257407052809594121614545548524454344419954016479803092652081423977259836332048311473072032964952477022983750923469271522671931883583578001633475262238492192739579980051959115148617405704196142890070500504884289466252224370424219876825046186329047071717088647533143475637668855282857302371439464300804, 1300940256076474667511798670888201566578842547568618402465462662604360108110469672857063598678282218351968974160444377648660010918672606215423919875976508897817025113044780581340573659357473036810656385929200719602774253170959089815111714957982787617250330085818701397686881370874990484154510072292092760176354383625253868452881733492604819604931736304552064100489414581685719555134263272138207872334336918720255131772791383465194785361039807141142742012348296215711046814657616835822302452610065023284231311693646939513910374164006022655585960552609556477934292189629082345669743422067325478054236749249855900034991342243338029635971501979509458954378646634723625269731107890151129959453125337339035449364516917716179612231939234877632008805292314982876350544897826347764420572946905660720185139301799523, 3456309664335576294948347940605800061393153242866845122377401538071376549751527139441846571141338510963209480679431573241053806673302727830810430843831061756906937532599437438427736805093302695855056655648433348925197987983379632892838829368651489374421122138658813841733175117837435799542061211147687068043512847069026631848133161080896576943871549800604812193112212998546088340674406709949767362942208144446882333321965041880579168092442186072452734687098448705250740461249337715865396951566302348243265404261048976104297273032069455191173830202590270026788100324659779027612141009982775927599771538159279743180417510369879678756037347973507224519213185725958696824384924240596415906038086139267626752077429932595487309777331686628763013487823702617573679554997679408931589461240498146932135308656150046, 1355828726763881042246108572674637008643777142254527387522801004072186372441671558307117803477432236419157922835521445796435142582830784030799351666253405723981589022956292130403843484724994474620329073037341269802788213885793786992268825616229589872538878096547573295679582098796282176235816382538534104637029006902694103197765831725544061831900406808988892928671573270767671757316927758622694621440747689672290229414867184728334667388477764689296398418504421296228740593039996926447081726637124639152796149198221304745355304749536594882690273210191300151401064322139003470417119318991826598263479516377423741792924297146345224635508010870244181086371373773265292720899718359826259100248869377657710777876121417657730390943658441465226450839920929384671711782352031091874771121681519527747867028624305509, 14860015805822299049003175149407625031539887361111537761331804854372776155261544855941056354240154380429059708111064804780495808143009246344812401496149032757161837204061111250719345769584635495115445702953257062817748142820530454803327720769082594912260161805242538441344855840483141518166492845592709572620761629832547229942372031482303639154557212421245309682473552771082298879555517605488049434954192907902401649188151492251485193452627267695559005475618853495125393457485280728801065556105925498542658257153229771843334644499074444055857276299490993143728613736262253264104624431294148081703654817990603566884030449916193836895747017922827361355124422480887792388848985705619971706744453104137242343167640750372539753519622022881545576562283840208028064846172008546703771780653510048416715302370534, 6191697122862666423173659696807976317607396925174029105118425363555041066523233390879845060644592224816802532953803970728224466112508946906031756468980504689588256823505952007402417973251199916172320369171023714954003423526667500920124835881008504389194191438526182911863937148870731561774300824516591776162708354716167542412172249724215024044482900682353378783768344031049228915983331795464769094066468522651221967340753709786753907049327048002864466736351799520750520615199207037949478983434264621634847583027841936990060938397614811768758926419222942907452058456003817492216778178369826565910906379496580319514061543271375045500124450500842312494612945678515028983496943194915010849469807442300965536836440753843685692536167317441028426842383289014501047784199268722353271067935136278546590334338650198, 1712778058081482581256633072127909717448128589483616214785844553037534513674386916501046764140154187269925281355384843018680326133234630345781358853295716817662744986641183827463290820925643142110470436475127082517239518485219896115320356444700701049468560914348622876671397659740381646064983302771820660815861244345366566362403835228382729969978873085500706691203505169605170760487037548945917606679887981130800895768281367053600900632770132357223530661626201881495324412984418845801552803369992401602959908939437281202326598853957550854479988383959240904587270477600815799725239142561150509487282661093427936114888807395975559403205671313359041145433246617703941489013161980857816828750602608157398696274250114549932696818631466198325751688292149993455736998254255282642759830902864725702449050843506773, 1282995368512727128305822798190532897514902556147858400455124828686528940516814594289211014011907615449855288854272742541094287546256437675489765629288065714766621212924003454206174359199442288414783912150382961892832120440122655924834742341984384439532361743910350895588244404617232956772406633530904072024455137718468561978387223592550075233092920774789362765593694494102171974542562782210675353752672269254846447128514508104167566578395759598796754165104453014327335524975014059514917782517126539369123785422158667832523717095320708286606991301666982785676664553392946969865941634944072733495705560567215087377123322233134634767337898679174350842867860725736671893721053470513334865145651077283212845068236628668887216414341618992648111336039722183972270185005866058062616092956510879164619230481831148, 4921039490434520351149604805523025037422094362856671027689453462049012759539327967914659723478417245208903082284879724802774026575876082313924284766487806618342418032846556454286257477178032446731940665950220774229272317052776671439332962497891453600647873246435135490968258476707112842832803226573975739254088965020814497091589500085182617151835216790197718415572983287456567110632251423298285056375050109871090881774957730896555189468441734139457851702947533412026433740946313191615464034375052092393868908706370518514997576216316970108886359535450418488151079855508691687950285754901132973976041987631801089288959365895916504432315333971316958631694213705308524419713348885620525781154826645972088498497218969078958536731503539744716680418094325630189235362132362935249832638826759428523468239745650887, 3582458252306413376133161363052522935192492169524081866510506466658818336789373824418606877975047669570839630731714514376218983971255175533973273164434490982723312830622032978372385992526952100116898210841353281402330148115846626833232799074378023667237630096045750247800098058153810651879441435144972624270871123490405755705361668921077790824513018640999833536204380617990887841676331346567580527736901168483968577448306995425238679139884039685669109293959670429432660133530737857398378005683004816054172337471271093936710920173745012063107642160503808133567654247041901963558040246790457653248879038061468466105406031368346495486067798035191451983871415903380625380792403780624860585524231401164322496755398306597942266340286411933501952771253581578050050764233229759378641913253192093917731930973002255, 5254530884634630612280036128709808562870882231288592954964992497743949338338127145386868345823604807891233204853193759873799989128795155325509341031388704494788611610535094789073461265080450696760093509491971556670214800761667110918450015404972106388942505296384985807887909015858016560229603869447799341803157101686025984671361676841936242172608206683484987807786592124099426466836530206893601129642336724946348089966559648564118633210783970013268185503064213349715613551640746679536239250225389724952872421031979632787815705288105126208789401146280461632581406211397437636704596710383540080945720363336027375915600075929765047447924503494103558169453694664593689489931823419499255982728698097526336189772203850529605800188516959499389840712793159969856684152583283268498126604763161106601301095326928652, 4452749039857091953653421742678829395850206209476638964054891761220013600997514286009261276286790678071747942758187286400678240133281006594247200880838641697980198595140189514079712274784849393756119493870740149902008023036400005792362555262986924670514825415016100535100105586611727493506402853521948845522130604497731457208346679612465279866705317436802502451394598034649630593396572661231868705970253686619082937923922155209781268556946150743917154199867591491677885440649666933509093705508898128105433596416747257568776329026702283972125331835548547857537571361693728656259800852984581442073797823029958770046948871266802733099795146373854470792117751325340612433807096808797474014954028388094409066990409805109327024368938243256141896133463491036061204641665634764896545997056406943681612929620801315, 2308786760283928305448986286162000921981171591582836744016651201588827388208770308946090065973971868435266928405170035842648859996260013799178359848222017176199067606908302656516256104935925151489042702953354084729879904157296718498662257459094382494551888110700394600280376514952638953499058292878191039004936554790962010990068974848655900623005118960088015545332507116279733502420587757554104797048930715794378474796729514158756957763034135569040629670025368465095721068235735819315048945751477646146675823727967716218828197898463247693591871817370520846481387825639012445357221622287023262501804360489980790516886626038754782449605765884009037669378222090695115852394763919618729511218654125599132834292645568760684194734974219080874601405730882039165358890267217015465935299962388336523231589387221455, 1605206745140302625669132687184174788555417230056275718290851554429218058818782297145744118899903300053003387604474980191304173169023634927299713599507613059966814213108749933056845858731753262033361689625238982982157941036993641927738859730663371624149272317203450742756649049245855499763551586929809788721385291763808087194805311147349427035920631499954665508643569538081566213355529589087358563172527546864189643269202538339518991510092323632365631716934632438895962299699888235432603478244046465244551812866417111307631184009782710902199260238295109106025112763623604838475145853837334743836543658729945744228475871985011963200274634323387853284431147025807015240306481265089646883283011117340570359016043325147752871976093532383716804578258713731347777848521909746535887226456797227717530859356589000, 1563149449275953270341582121108729995549641115356957473482244098735210723104989872043667720674791569057956212988434463430662605335882963945162553484899868271364137732317091158544025047639087691110875170794120775568389018294845889375980451943735205667896610004225783320209932942711119922310526382872953039015639744483740129020895518462667058822852504812184209004491196437518706533057437334109552013523455984946612887516723411843972763783817100631383643768545969864387867598153062197642610465875885059302524975782141289378565379787554406804609387500788978030344729431372401892097521667243230402624644911112892705416035485847288791551896819178053203368671392316267609916621492220855368886974419909034422931153054690780034785747138152272107119690888796345413084945516661829059267559067340230074135333000133754, 2955484058994860261034282525179955972073493042041905585469142976795008821134036246297041207106457828390839641642922875068188973750785632932500938113421099234104897298114978697352397384988270154081595996560888248891896148809488075826038454800221153767479539465334706662281512004905908444563741882366940717399808039370736635994776197083571046797885051818340211772992728629423262081234203520137831727118850659395668318631488978676390350476330227626463043922958007071773012745970916667666874005770786772464693642713277137175058654103689389157927246323616951897039969161294102129576971155337782057979513278592206825198996842494999215616700789549955719754797615059307939612757917811326118816224116821790909681401749238162875484807034191210261460044960662843863037981528624618099493084444511351125402675416482462, 4407284476100266283594838175503941302521186662647315702567455691329770239665852890338838450701068634766432263733134970503778705127575063470747573257156126831196967341814282586443103272379321432316131134070266923490476752699398573698832286671216609120587883218230463810080395520180955818011868308488738214876034984915584881890990664678573452385513921068027234521461855379468515443522405263810209409104347824697668530419756486573976411976018932400551026858362387578917524973431523282583809920638500545144787787585924988426213854706982934991787043872201561007649025754056976710643566179016483246285039695720662772386402663682892865331391184751141498497608930780318299356710040266787098548117447430884948596646535910579504131544871454378736532443104461542860203462665246640275350985954326756159047077480606920, 5228320661217348929323551469461907583108969402168714357035749981984251624687765688901223381725560875676662803330467746610983260350972403942125932632765794122187945264160519119288489071745187667536901020914151446910320108974601473904330636733626423275166437930436662380923204992630527386099299983066222506044749825318219829865416153074176381500365543053351212383920374261094917067822714341086916579292294276305039956143297871460910414941275439383884729287377138635623522176161785792745166914547778925898749740775448431733487905919845685547133368242097328215977782740551781583264813686186871812878329336496232785475300812630326122697729395705420093936005803917574203212195098514909584947552063328740889787738636917894981864318633970544521180063184591006767630528189573418266197321202185140959326435611740599, 3538071924171048779309904251083115989442110586094126783615566921358936949946456567322094760772152579840014970996293613733738679680835928822449436761961023811314658272317540688955860276239646416833526877279792640013075134918681203213241223700856293483443935288469995658920524865818449983559615935853366554353062174578539625810561605923911159034837951251222121617631782002575401513301372488934934534481600249896377764662130526025769671652007313803517762250205913501346056652074417508851312988982086488495421894011868997368766239743019539356564021926795625730798117482964724102700223853563077796768529133962729007965342401259726547015818205395134093029229088050306618602424638743857579005003746353068846282976107482354416274480741094233896913712592271464686271996652835871694606133710147259330738177072885809, 5156410813740367547920480455287179917560478085662135827926280014697190253628148040750634471488976725706875903364022174784716207564807607037100896587900063825555547649753258090170248189239681594715567005404958293079278992810521749129982023543384653145525694175395933445327906974634751523863256688427144688627528631051673055243682862740404444385246583615162164850821423696805396989537913487815533451251839531854669230612331758490396691530089629116518664385140692022050604927325168591775232444922570270448757484511586154850878341303741565914934254920964608163319036104195898742933885604278864071739967256503540151833803978884439732240419136387751281248949815456866326002768332106841318627889268620510270994940581465137141382437734578048295308779688667775112052488687582874545280736653506299979704798145810335, 5183145428027463382982388223237035834288651424977648520449363733147031755851562676758023408753027021462333562613383146207292156265876736039905739918139183002773631461823640141847632118398609229065919040140851326413030613934230640748851393383316724803612984908740657829722723020082698456733168718301625374282270792585801488748640556312354525384966238145126688077662794611783981322520488453000781362732510577219214307078224285082929640796080404515352172453538960852455298392753636910851137890178107280068843943609239550761669346328959921797918774473298700522295666872729826926688032355760577718120197765899641190123974666236412664793979102493730023262876951738860513806831635148318821927457843173651013806587775305059906947447382499465879469505264842586350078160316093719719121046900673886585019307865173728, 5081626430886952553682838059799656351113961829121638201028860096879184455529021929349598375015273266017262020268480735411874656968595221729229337627184774468013755750923358978079947435803436190439572793907704115619088684093874133647349251583004378693577905006869941810817519445367733461312095157342860655246506522761524214398288615004586784222789926814816188787716302653319018742079203084137690035366662936404361749654463191256002089083375628327227825607800704188249184031571395463660953417098404576853819448845125877755979561832235923288765337750177203720416708447111358960108585239626331876671399945065672229044507000621965640322741880574274288256685223561341763766048238351218130520204748405486723734913363434982373707181528436610257178864853873132550068568188792633279052785731935597543305933766081108, 5695555423608893168551650943355490548729057290029122039348046822691085857717678862683626277013927924547518878764084800956102339381981827928362330924273475988704592595127529384865974183781080020870669219496168612866135003024780712965046124871555208716112366882926319698715291465737283808411822506693308738617007156562439016017757577921915791271566363506826462725145045494670331042923912466086828895678263143863040627692798410607565238404505941796539778235831106915655838494605512576710529038527521603178470474392105925711240417246265083989655223870299653220250501569464795544351740964832044738898725849769555660764475521800176234438154514687549039218139732110973020221217194938887019627481589688429487679016641641512818768356057659299240115429277173187425282841400341598490737792996822915713719976413381430, 3732627149726505130864835663316573419255446931102543324599506169175965689557836763305445342780151425825892043217755513175153449084504292082955745718383723411469429554365885257942232470085225776904910754283574434942931181045166232987614180315138132727475805088994070739540960669786975396599427503415706081571951849220503861080314141560702095543724179653852292315576239997530914933693562264143351320640988149935126872312192019945811911581224076338847250483364234918221200750019079931585454771630382614354151176898298848614927032492117424074117683051585830972974662246133295182785317030135334325065714919762285688041351010285528300979271743181081724546435159876891376545532607915411307446036869933938998703368373672050401330554048912294707623920121972056575904383256447176754128149607867299718302089931475481, 4104177583198855233499115895028583788497123572568713076501799396948626398857069316939640704170933403513225487237633702274373308018014470044051054240916388764801606067119423430930292905376706645548137517004554276664692775420093664273772284391535196726480522552915470869987208889039139630237409020139060280624044827041656292141514382206176416006811875681074161680489410766891359020353148379894180443378101542812498828909756584845834490096999557825891518851369283884408932503729204203830114560748419876700810053587222802996259350705596334173624597598409864657880544142156479890256185074033369227388857572748394957256032907360261273183349853021440438593300565203118497347232126227144701018211901627721180208734261885408886671722433259163498940276839099513935394026734981595746661990472569291748676788528792842, 224684025359460170105165038280933302211541565242158758005233041754319147704065741662533214883666098260252099190189727262556466288231221793622240706265226192823856395348055833235702291786613154870081952606089405506980795082237702399168382283732202681151166130998909112813906558845875886711878693063346770484663095135099922215444212828110080966132421246537791943441985959126145330702561838683957297825341581393574931781693696774854983707501851826254353899259878308776002487449432597137015890783129015153756902108054502944429959360142562656794241941659205239398474862067256079845129348279878176016293212200685207580161813130167752866068828252586505887883470129762293845602781565979546041269823331709146099427223484034115469513518769953702288375093040192299450230282475847223608260884854343664600121975758515, 645256539644643983473340005506887632286042639879685909419175730361853190219655796243983438193925407706635124032466866180396698808014051994748494218205565728144458662916791133778011715001157829741354630060556055322008919194693902103848583796576314385499226662370641668337804283421759821584718643608737803281354767987081370303216159145401065818805402047310163751766924881222946268691474857893979672607052750558949472505337658208586386891915289864084082915109951909001919442176502794219358526130290917124003476560665812821347177684866245461913539591898687334655257791724363231467422699834119639130318765241198232558279296829571632747090405105799203750959918795346273533513995003054966601950201419639728597588663349553462986868455181470392085808765911516996199398998540262152672090162217040925196098552174127, 840557197228469999292017953608181134144337466490963199382639176783441353197992883902307835642270871441987178587955875713192330294123223492435599133100202024042072456120765885380307211085769003833171587373371971054879921650754088882749246245090900317231593950934915164356108124158019039078822475782034297430985760984488932464561869796925361177600700798832571846052007858077977901508262905247532344790001799991189607262481264251560767736410946969778542560642789336250378861805863917739252938425638311585874477932465093989566927068544792134710622967034212023270157912239805808992044737162450232380194043036976198415950213882695109871611108943656521391864762179977292644434386356066889445788799729426040617137776289449883289113798443157046493980175545113579642589861835682374661026043457843866403059119361707, 5361978990726958911244225734767251359274162639451752764173695057855293202346427273317167707801691258514991103537805455846681438732375753543091431938743298754377989242645105978025329988728319997853030739301499941186706693394087164040631796986302836168257867687974274559893731166823064103482682053421266237825612057837825564619000482423831312142342496159031366869268548595220279598006914013207630395071489487488172260269249821730549422506366689031315779555338624184989663056570731695935889059832783261163373387347958261572891208397886894289368870373050571176996261516460650934007996325414940662876393923081106518522310448378913213676388090943632914410425771961099631167329121815229782267347343409122429318235801114740116273922919014999623237072166296669467811210227936700090807055782302821768622267700201272, 3964255179548678029698135563783389164392176762533243614727067313960694155629006011710475264562354701135461482733990957579757907900908521538231273993863449733734654068844164300894833824340565479604065460364519955752155172865813955400527186713586314439816226813598270287246993979364320474793398039255067154927783683818478501965368881864040524501558878126677951916095597729970302311319944444758833659698039734444374498619115105369135275257135752975143724216828479856190998095920099353849140943327070100646013035448908716626419147699519198782805873738529864058323656788614130933525465570160057401576937162056605279780238446766125571229398254202580398021655819182521759326366239593113901929049693741829335445187764144734080452906120696242949119781440595533282510101910432275461281533020285287415425643106232720, 4753078708218408321117538845606288144669672335795948655063814426454083811304848899131785054850675291006411269060691131351684564067739029099489411744107670976362980511792653036640594846361342201114358887917626880572612360569966265292043744995914628961981247112117966821759507604911434471226903918207248898546320077852881914549384832237489037649719453406518721675380202411781313299988954172137358896062274459647083609516361079977108438367265681131428560061944593772977030353606521050219915528137515490805129505351091594488637457977020619859804317787815615513018457768592300048236450873782805820941137439059903811529667513823185381416473896804715802092550808762970851308531666243637047699589700456456842896831948654592769523113250330404196144634038491663049257298567162488043090166563319140428014059817062312, 218491383306266823894439821478081015831883190732839305248687452261284631727824043325345352350752015078641488401159868378722873630964719212264091872066198082734032313455947849242853970048013213886030439466241709310724088815235719175075914177615223479063950081007885714095718750450292979898734327096964476259477308831377432138118587030487407466587900989821895682504452056518707347060671694789647933073386291210770832130984272441659354970041381294697510125392786867381447718136129584795135897225301166345317286592521867598703789107225161375454283353936064788648822968067634795831794190437563951567703590778034258164903650077614552091809142511334964011579614634865504142401332363104563847015827676531012838105012627877928990912560334762944512013719003272421774488169969769903609727955120444700240867284807720, 5430687715987806030048421498043846098042952030806112547935507507831211154725739904023787590238530481469287491374568689259621034861481852474704141616960493710653095374752201774784848548486202143533444358511800840365713906965619879573831604867524797243067316764500575734124764687550387803063739881145202271037092828575819927125773350559506282800561420590047221600037029682082933386912984997734355730033764970708776581449554650879259598974907447020731717887207615082040514775379082641435957438382946478651321029750944264200606646836813308209545314646047193890817956545196880242294096256663255056748713002122102497607208987563582486477191810387784655023626922561359701691376602113792606882315296089541108132709328249605169469954521777941591495806988296878915530387616123735606457905988235514666955113260281307, 6036861113191041802202061509372837241144561620988448755139842313545032935257716179288941388435005028916387225691836512924422621760206472296325410676967946744828489539154615435991086889170160618145959275648476850998614514047599043794303494513829866149216673294347327379675840870090094153499423969658053907145751305279129196856020142168200429930476920696932316038818165496676742657085896226191756230159765476677742071361202943767111105110547031819214382644596965933526741619691391503291430598112318677109332491079250373175780507394128097973867785565014884633974686984865549917223367008618267948957746897311806122107488271041914967853783435175719489405346050361061158002165106001205377127755932698287286425321345828023010297454653425179993278688298945487357343955761705406094250418722475785895565516466813124, 1712512222799501849350559889930243327813040873504161862428049616992298962098851132303098334910534628950591154827072663033540814451584547692039795019804484373999476755700832633082858073889896882794436132770218736866114430770585010051796851244888958159602197990374070395922894766103477764569761077675023215035693509750637781179571913519000697363473877965160644562774496152923966714443126323669677383597287846967041286541294189612342148200136209056412687659504951823810673694989133719761268037063694157244840113516667317113345557381047164995849038813776274403994579733986629512840722873153590086959778148599270607419667010328561850913389746031453554143398571305066508699286845524138906005400192634784940915307437920495134439934527904012850274513721486872709915710939269673404012080186297678975882955706548186, 3176097123017117758596247710459195980177391866628783388162510592686731095438068136271349705156738272381544217422689927809916842259705859875204750157816208458014046968193646850434494231379890705338164357289427413952254653647262057499810357114830039648909995284640159014646746757519771332932422892287831060031967236477461755235945622500880952687611367371800085801282241389977216289137445790349139237552525738105250806987013268351881282783427607486625013987540617473950879773514951183617304921964459594530647925105299627236986524967516818851715538227892808576371441080170204761861651626083597334158442713657051328783013052926468195250139709589678907906955165316064367046301356702070190362651873375674512926226840259940755395103515292043537567800343111018097275809261710801809451966482490074250474591861339583, 118201859363116667361591398294375112853394725214470494235349868524976568481458699971925229453845062186402165837146787570756635535720588170500029202863146307190482718192637833173577705871802087721231550655232374104293048719766521969719137991304239125989834151134892012819980378649740370830475402910717693126442085221307058491763386544261650447727728263651482630622633104324988727526740608291464825342640046982531432686723074293980174282772926300300178900918992148605515418022832789311282491664840787738339687888600888960282689783277694849053541544453430465656137868116091908798193966405075692591096961332488534026067682523159701318460385718647097672384520009453238131153326084275753360830927495605901576230738103620614380159041916260439285862434196368547301890065005459088714627784886080065293528032780244, 1966072777580773856012474385169849444836550136079959581871267189854104445526574797289993321115734602174076821995599463911442062342222496014067239173648102704876756122156617268553880647787527652154767604883704071046591111208496762692960104636972402905084310006134504969054451613988993905907985966362877201137541168395621913529811368183210245195084550360089315166180531071075838037082393510092482601449251363489868118749470585233982810190174434214170449839145889870109203233437328198892851685396425348639985520571495250862269129015752031940199934901182946452955457810363496632297414497917685706200374104612249372657338490861443723116314020025550164299425935335457886340561467345584144128052059172290189778224457404591812775028256559194997606561232508006501521806544003433425326878679446055071314740543783747, 1265948256451999470443811351163413814077030625313060117850566362189182402630550050539999244699602082891435788095807339317951259176798230633576358325622757049286918016869677457439038421707966776415501322775037915380051402316713165728908146633474022508167746096661049641117586345580650608699836835932968360059896882812459447582891634716265260394931846815305621993183753875990778399932480725149974247495523606803563437014063563512898211759170429022720415299226904013890422401828322555430947064978455041284990076485054958281164943257682048429141849802901919640958133982102281207110262660990759905028904647202144042978526379449625020612640560995283016736651388593015163876316577616028252999474012655516339910859953267338803753775737660562617081743428002882064495968936773782931695038648045413346076847954044444, 793122687817418579246707758357657871352301790287052173283976569745103937529759741180346732903195943924739159432267425387832218281822431039207936901597684452738456142011894039311855631234575229465971369812056171159763234444773183356055937016015321055274375741047903417685746857106752333252825204980074299449839552645190676119834309267088625525952202085027700471939626898589235945681253326061062770350365420158739029157376098436132503728146033417884527317417962964172221669237177804428635375847005112871963544733334436261408913699815036709941144904983018164601622542071519946320749330240891668244117724097754410213608395719983439347120079591508431147289724882632982454241996759272168557126478529961100730953870914301208529363738222351461211194468784431917682197519397355350288191976838866808254227110483531, 352303552850933825243288062897216788091599645646353640265348354812366046707237057254152770887652300486640871597731940810160905369366632391109041589172963579808285030991688760236507001395851895687627259256011133540144868667961306341668553857553529301949712347306329815687627193621462009176796206415649414234003109364746288276883314626663084204653052301604347839842066774775246602740375922191925223230242397383227234701055921194154052849662939618616705959425863633772772150324343323582542993347892650598092099656019129369604427271006445210976967743654747705157793444955960486826419967610351590619973779581985339133824027401180786802923006832385566593525489285083063958019457863775426855329772692330472378769223295606725963283596649875766908338634988491206605680155225489284695946498649318788691528279413654, 4854384814507659754958115001054345161911815555518419728414047323707730060190420900779203388455930174885292259524988459671997185674317854581643807059031843109587672955001675911797721610532503522797121179135271271306157851484184649229677894217433359850349785326369275057081508341751071546207717554535974065269446874898725294844780062267532914363486560507467847719297640514347751182849881691482829105001382849299866608993362595750192406253187052581995766198742832809869366971072918660311526234110820339474142584972897118432831570062409777882058541197773786678716861759509942088564674762841893845032817248043620022711454276706445719728615581202893876943236049236480904085137705951574969214684745541710507994923443688746226656533631880353785495701526456530858285742862694915783861064976087421586430653561859333, 3387182045976700568558872781491648194478306439166888060347475416102550148760468890858238446619839679269362891951857092150497779107031567294407633662183026702090131331095658306713641153103471137803385576932938487520856686331906533410311868270160898747245870222816828567405910102872881115539652329488340215398368413609222578464082121228434606660894968323876999364321805135043616156572626883426785717758861558666200717207555449663370452734045715141244422926004203763537959493986685816880272830915551522409888973199658684280200131701542499195040849842666977798112161935148581440667035764350996348968960310145290069942449062486387086426830357186384080380457203176486579588274687715864770082328096758342342094101331507943906736115831836653600863006909868550698487060980621760785806876276114410745250622924374413, 3209238749645177418334815318537116734404375422095358256088613872912272642575031538541112756222261263871715736597232685710290726215379548603823206588969570363142034533588361537613749207166735761668538471646701468084383315400026671546097006991939333593108022220258207113644061891561958197003089311873490212232721377343809101215354567026813495102685335077526914666790200923844605650720172905433637912400128192020786021659266879912896107136072954621398686003351230793130856139327818654447738965492806983551738788704314718714062164836723952183811338184401301393962529674207673242489451894187217952433854371805718602712510374801220414552188845264721317896758954936194193276892528129936757184232717981712818058978162346973695317856312215926902141991164449706693744760197958265879290742892842790643781460697136172, 5839345694913671521963023900474871512604171430999664875391696415252516374051597576129566118829214818543735729493805458483539815945703634112476246443496396052824041667570064294362721897908441375195168036063500533689696754947846432851594598143759649574339696488532021930862567905772934038509479398977181313716275910863122039817403308392578174353504428664532715290702596207723194861530331659581351271482213293354878386856570421134061057804234956798526563251014440544891922602150925515886497068730629790048994095829939942121177817491586856119188117404674940208019616664108392039234959669398079543161674629649530367421227094159122516444261746501013702957573698376088866518636798235348031892769938589678972701572069927024500922127240051044566205396658133320162439684167748008745382366410068736917636956375272563, 1174483608032804596864050029917555374196944894214126431141271506004271565887495198896410197610715190167712207896264804403293225272667098286382305222720584084474511483556680074844036502966681677859865566449772212381586708387435908409980250879499117695436422432911888151153198039308619860483096177607480217696989035905717329674282105119163133836701892216383064001684870837712348821930193501535980646192799829804673997696567343511114874974131376014885727156945780775450582509294718776653109907265381149556080530592306155940863610642513990383788660261638850033102101101268266667415763853741368646332497730299577709277057183337079466570040785224827468720729736629984618308828135899059046424195947864996356747560368176268394401858049278433299302806123396381167424784036315222035754969942859048510652520354375432, 3459643194882539244046547722631758353921164741409028942045939493540695796743762267332717021758744307190256549709774359501755274563399215499654070540439031785022753881093934167649865108197123268392990028752432882114971278681749423300878573672877009714558594701638413822404686857619332836450169830873304237683978284378570337720311769889134505002706381970144517208909419217099556287608338687874044475849984413889652271359545030639910951198026004139700299271111253173627941448958284953204090987763762316145196253525482212344227336704493038998720148613532657863370803369010455175465062257917511772624912810049329738025357559482535349983766041094621505326978261967421184856913066937652495955569699166531251921585274274073719007452392821363291774269625901575529327106701134123769116812286445212859507987400072476, 1089606145792231715316806499307920581194179211164126024092401813963335667669539006674806795638956313434096218042930167191997002888747851878959328206838766498105999459665126778884444388460389972271649050003823020789006264383758347815704060879364590613946472454037342721340999494724597821838363279881222297214655984133672343362627485302153770682161025243733084138584761440647799677003868830057772455813614164234123039008284260434503201262971517263978296245697914773436170426529467873869708393176252336565210429107402014315406337316630336129618781431072187756805072448887555825397203156820781900263534226645999033773570020729470590068371869980470454302932005011472978352151316471745314651987331731273822312414078450287409631878980800711929173916224768362002516377808132534813836989998593258274432464353512054, 4468869480967562283362900387534690613354912686070625176297608891632209280924697246965574652390092781966765482353499369112730678925227283521373723424958487510456508727688690405378423818626784124191480715817847335498600421813166257412243202315772652919697338635571461426814018618609168041547883877318599700106785891922693508640342857811821928465840441200593594411562243337819941430865701654787949195981659313122819504227498044711972990728133128549583419073582961268580326166834474882031601417389812975483859044138408577598685139923061441068193293228706791753622422401889166720453401318459128268157423961476073701268630505559048341916688573149308728306738255813898603694424657233716219559743001868430697950282603890637867873348347500946183144230710750675568154464716028366022908562036120497339557562790789045, 4136008893322612887118858980126822503391013164709317605218614524825353188791980694012964896884636392075087288044027339209700321428837448481250343490902710169567677477621158202972167624496577096655321823694787936758137147037582258751499677314208301646404745907534119047966080491399338492736778698695844410953135833179883176340290080605767098893439275784583481521003954558783103381671818223853792941405790882012311838610047112747629050017834807666582819215237953359009833634341506823521816080701358569275691175823741829600333569776991956045398465744318217810534297627200716589815837449003485415171734842859054244526330680448781310093741699646629380526951776264143628309621706235039339666593976165029751009786146122152410688007812194275747947194084433571821324827029982799420889145273163425219093940881378543, 2967640443615366725848616120775829442693069559869165372778686923977905174261252745088782471291100142162285842706688408979026585417232563092280263328862260890115006696857991807542610628046570845441715042474984858790774898189786690803384204098811232095434273917999644961938983604429136899897017336041375188522093354113145806361124815435705148131562227412648847351146196101910735457311478293858043827576947026742519475180324273132044066772664948390557263910301930900263614300838444649751124169560315100111687815244506784798782581731400654420430940853696004990033029702308752540315178379052157833637020478345472965247757789531878604516604831891642279645473138390535152832637327282910784534297436111502884336356405505568210239692198669122669240573518016458090783940515755146909062923542263815372053634224455435, 6136585613553567526453669291694159543666244574966337149847536212597742331084942261599489949076427194030871902669932888532036917589778746794551963642258501228806614574042614204949815088715421984208892000254566298929125603083995642480872145639322437167205642545316052827155275929583464615112055321840585752378573690002553921808410606432883296305643042045379022062589983130087795730204192166310569811487029633691907603629424264685010533229846916111734218805230315346383573791026584422186230310509849498154747992700935152859773671608107271533956423765523454279027129642980213477416324073239817678191578961335828256375312183534164961700851319318243109371058292224226686285601723491107466722567784501807374309477926525576844620668990432106522198704224187785655474530398072152183504239693707679609323930774215947, 3674029367224472441071108592591004842736805978334444910860901384504265504160970143026747056718848045411935160275701572657628562934304580402689614531126871716130676524139752769041183787681978503972551578336792892655671271808684606953972396376124208496617263309631696600756290856330386867421836086127973362566850243191981414763496329418350532484226259468623546648880517851743199246133029503959406718789616822323623946195212162855075860690352224465505711476184462274580541027864946257232775579948612302430417051927692845327638503132256111711118580639756518027291883895005156316741135682348161227518241942867373792002267079014254035333145028261848793158662362241858394873405664035283338563212756845194375735811638485035261070828779337960944870706123513815695488018764228658398142598235784468129017624155979817, 4508424837297017222304490859105684382154536349199739263562878822426672192941660287460407204869456309432448210968724480419509950822666409207591254948169095623439365134152100358708864263361502129278345008738297704129634879842378101935597956750688167093459793660096435152656343218427104487213756921347354248036481495291362527050331946175357590282699476465183920796216486428696947073640377239696552650185618544988929041745763564341769248400210003118405901268934402819318795282495235802138685266233770578660294247460113013529892900880730037786395935673126756677479763111187688645169378596562248052358139239811155805823941538967470490916620015610691730886507347413006723214673786973352713823664929598553872956418700619323976109798115219767778819467353441161411920378576254059616293044565813627846264254844492764, 4836591271129083357949015152350857719788005699217505695472925441618260663209350132024243663679518427829834385445294104310299962349548373819957672641951156780395813965612438645677257894205079289593899740185652759718262106106588209855310576485902788904095711071206775345229949752783159015901142673859885010223629136354685606900474725051004660993430595815317102063017903283424440067608022174234670902751665543863210477503368428045174593017352577598691159663853504169725683398888303894195906408158557659893135628402528250328640095072753719206844136711244914501527146050427936999717659247508864117653194977149626516041438121856421092124833243232304527428602841464014068022364546273046667664673606210537722125198094413823507945805143449359857180923682920496102666487509992383955993151784263526397328573357923335, 2092543182347877137913208267541231344141083391300526916842333261924367126826449696067793837142617058721762607758547280213206137080089418328479048437270453454126029846369883956493345040948530762173576484799366032799899309411888596151424416982542452000255965990460551130737184908062585027639700021915586712010475807640425592721642891946569698073124257239751331266858721660773747220820021449502135594807727469252436159534731244140694012583378913777986258596319599361657602201884724045227459295346858897917876289638316123756676148671300328360106327057644966437788755402819876713441080011307010219437756799642563835721698238844110275427028120909090411461105738018066283881048326778825037259978111257523663949274493026536587928740392569530694712971485672700064986294569263306009720070222156580233962811221029308, 77177595783421586156565978655419598287462632185606569239557924099027625289499802241924448286886344822823316301824134759875776898998668861182918955050673275409442542030328452692309737115006661746689102340608622181807310660018955792953828498016073810963423603629886769641974485390166588422126463216488028571223001513008439982309125081136308961091714818109866104191651746061615141780941866065735419428316913785968152381034779974890844762925548073606366629014651384416598330037615905699017200148915969621349964916730462969920700309359972832998471235418006892987981010864151408138462507204059875281106126965790105090816413310526425478740667330427654754412035408282266344127100113631309002224782941533580368600504003013038868309882125858837378274305745556766415895467701601064533756944981709186801676226302094, 3506100135971842608635359827020468081097747363643920510644984934836405526563001785205625190691076243836588475741547088905103897399652888828444943779075059756713633191471411819599666390086952042358683501287664749907361059087880878335647022842279240030986010251746195109706668712200467675223792387860077537840200102707709641516953438366330259681423751688393343989644744218446160736318637313213415300534197262570893933477024741695996013331134435871888947142854594565841920380445851053496402171563257154207151296910836038872727335457928099495896753421133840984400497880942876821199194241797787145420450092800491249641409581123201384178177184364473435376135615209087872704749277212767278102288533516898113694110894664449784356412548442978220420354315630801513312528836366153820202151115913768362244004940562653, 3329977014296819696572578358034476387601877683020238271350756756692434332832536220938627490931465121635018828921680051162980627710456704056393763272919608076372301211567329475218971457203599792040964087421234047006061442092454954770122648043289286195598198271065544715255835996691944203322090735828383416258465969412145970113173126048920142333114486745466873098780769023041226428630204421525405538653829587271289339122852145762167811664400320816247246645217173835242136111965504161172523185902609377413243579572694013426044386738073327496734138925512605126772603073670995206681815784705269754088210952699415630625832917040419818644184385363585704655100538222056973606567553796647237041832675319781297538816179548768066196893350331419515870778842619281708970226421667306631315050698369824659057643019799549, 1732532533441734978129893710182933641787512542558543403438124111582237311127815336705960294341590887971479103659353821887192231866977065076092381982817675095259566500163612815482645442831625007898776011081190383245519065857806815369678041797243296688978698954388507291486624594125132432243427080015078507533300072612899677443987496775292516824722363281143751614623177781563610396464099307512985543555439317756564565740621956088831577596763231229210405122847598669173938427778857368636990163870037958369171569332689852599147709127378171486845601442009258571064164051143125208200900867158569753043039689731402606324144737339252289046518507495554171132597380381788182617331167667504094785155764096300090853942117317757331010672811087834154119523521308732787659119534574841698712168792740336057681995172154846, 1712405245876350463667908190705149624791670139679222539535261523115881918569697777417451513345354287105057185969670508650921692038268242634808751631882685912991942704254647030632114984812475461255129035544429709912249917666707702166872605673015375682256686934056571800271528428807647309196625859634265310226473302532207563106496004146135525606468113925340949983894732238983789839428646928294822408942241387843675575454183574428306752187713248710528850436493783042126456396015385413356567691662630138373726961544719937811419952020146404018181331635774626049029589879235959428117333562196301524604395001728344471715019287795530549168055477354089667527755149456044247524899203604416127467916977776649594054894470701477852711016810011246452903484982769122042772601200101545229472161778777887842426447437218775, 5640144625501240158698456910949342199036121517696326964311690335795137576598524795165951565354304853834054743272525032159946137419315367873763229067543829078334748668539902795327387926470388468608956845126595347026714915578213467913377512104947862753153517426124034731721054789173814101457250733400249337486759089070107706247378266049615229390032132383612138680027764136334621347023429044295745816883710855435573941891576831747718730516706090123723631235232068561969833350969726876803670200932287335095904164041640137828484669071080649100519020659956865072887086367714586591595057596970093708814758910554786810851705049432248507560329290769440156724624289699061240817898043037305134361544321600410333523650202318958174887717976121222606675466854142693140875754947757004732825307879954189665418280420769463, 3407370867248912172024786501980451074077711748157563934657844069882466956504291072198890413631694337868644336345408689234928286511704829436026118305797416764492853019338611651889921088926182739951167262324671254254455036089782248515306041137353082223351272672171181424672969376320791521707724646333126224822776858528468654640917034058835106760627095672187204375756542552362981099437303426221054648774369043453427774936098693912383824150400916324346220198355648767794331160966687536962746905296953402802294777434462867973838779391596417429312862181055834855322915404091410651527395851067900555851812974794350747460934842994317944139997334658786868151737981446608983407564410179071932713964995446789922583819648609953303749689946472059235936787185067999258152722233022322576898555480503885399301907290603358, 2408113462901834212596484927136709678196770941373515842398255574580201281754772732400668316236342753600949676050856899848029658767610758338219449524369499446396605904014843127726076818256187532570235751441718732308032122651656103772175846497159416840157376350898327574895995183736221545104720942442708416133079653007891847423415019720607095618896947830464968449785039932735071633244880995173928584105342281592560330196631765468459767975865662206405107145242751675143869550474021777038199788560122528852766772292987162370898847877385447634913749229945113619840319644706164947635493970473906607538425475089226541531368607905345074362481342272996435730515748681058144001759610098071397546159131112195010804065562913949438454546947326869296831074852900360064156027431267033414527642619528299126725101850529326, 3609669909891552116455081579671167098526846505623131590932855157441253766587171845562405144034680492784047537247291562568002194178033902885726900158552352687187864625387309318792609642438117065871084318759202253833926782040791026712301065298158293203191066479947899780999498295689556805923241184653373134735608340656603874472245600754719557021383939261177781396186190272572915513220135902168366444866125169932907943970392251434661056134288267003463072624358776506891743456774934265238807567985409723233365640318397881010043943237444867828188993125351030470440089878122072193155942580689846035787404313643598907308891472099130007893014430446684988330505771276722589326319605773737193600505902214363297450618159137100259154988003933607672507059456272656157317139927913082625210963917454147519449942303754413, 691630110732897026075535686966996251149050022964094048779085105372689935782963064156441270441333711282626306709184332111361027795065771024257182995975175521526848543512983719085816489825771328632304715613966974322086622467129878319229921844050696797083577138276484144503991395921978354788527958534023377311039960379964830945785740260016823699903817423380932669476889679802349874865560090872750853158719187700028535419590999676649269773104373079206869269817921503236911253084280337262549993073643995261552676352768252020600239151678580427944654778747048841081074636204941205780091463389212868581121291460122713177889408802811167335158873050088123051612674282171373012358584000656595043066596190818469413544240156079690912417378908239610215535554964571121274673153165252555279684334635050056822842431700956, 5353137189604438154643367612453139737083471771607234662975862355071819287624923923415071634367120144345484720524958387060990635821837366332904115873357850844856739166421767678049759050753908569185996477631103760117924348028475386296421577885940239360599935690314129021375376924878972303231672855137989369578561364017431503612273217787257808166787562233728158474982410356208465010001383980604433877931377852010528368834565602542574518835021176568272276920288262738101199228308177370482709746839640273861957145041950149318041857416534857988269995487517533120502703992506382975263290479986695242998484220639270782942186681911486600490494225119207221093739966745133955108934578458050499233668673242031047374076172972192288289917323544086729273021156053312893509631289084792709914087171925286040919862176798720, 2969441351177346671732086074529004344042466425336441679572745009823024264167378996088476296356287884809790401884273940486220198725529621130492538232534167699529599334438543948773065975312872116820731521016012720605469653520391680250955646365191209987806981591251944580220043845519371893024031941819554065518491013754546820164002057883986712780942157969071484644469202398137639050381519620981816665962897440278989075884256669975499612899793947778980681506355274098274678678589272594158549818119068984679470984999500506497125531460009123820172589868857898699572148509228109746089524341006934544719041822475626020582759038635256836178582992186571301970997471312143240525990794992157556405452834474611377680428262151622359800072752847140465410001475825454796363268009097565580866580115506462289725424149044337, 4432489822178017062805218516911238282988486243831590040181402821317568495320255433816651560558886430354357505365687881147638644195284752203377252731084708935805893626360904227627164093463685258433201991204051814176709331257927898485913306910267304948083922779530538457577172286464743736774318559912244181103003530324335198473886105108271712890260475562882839836749947033247524712368506160757901076850887770191560701595551468887310193526143918625127734643756259693373354734904448889398167945256296488904256858611162687107140918066292189610977341912927395844208648463417485507755482146914225782338679537932880120870153689234286140939956457630946978553277136533544215953260357471210599639479007608601110742621462693361009127435044220850910215424458004957368100245522645659103572455396945950557627123158902633, 4786511154331009871639241501158418329260993445004597967884680905190687678723061695183912671041334352222004056053682384292143334853852380725176423488111557768386191439312443010234191328406946833730541786235596550067978796344642836761260631634583054345749551372049441372436009299517297946539454758435033717574777777795007850426307355389819573030470401553827196953063046412543369099488136707766141480841451941311362875627667102152139266895665236280356376335403922939943334602841311442110352403771546122691386720282258458233163597364583859724709776775806979600032077446681556950294399771037238566046607842499329175511944904292188643759796722994524810607969765582969603553775372726095496956201766419540851605065943525758663612209682385487260547868518351157411807114787207534803289324869530115591567158948918630, 1428003093807100335262873733932775521308114092664087193287261950789418711630220708232736012574792488706069631113889983415298258580405360636291680910329326650539440154864346170677593714679737923099476228640971209604608025890966287496220398676147320199930866468397065910420016193143161397783471639322732032361240185674012922737671480704284348870568749682231889863890513084335093239811251488927671197498960642393956936785641040429413363737098089197180033885088488713135729840881855887240847766117034012397115502607257778397412497400645725445634460037222608799047561261014420259443533247959843921795959139226656166949309460988400268267086962810581969110338486005521792939697316831972108414967259985589793259915297859202074294960156466600937482560403920582409899741802797183865557965820813907319317810929253237, 1572639248852242167146559650013186383324493959349455195762116807309689884262407079146383033067718517669359879991624216589715009433999100182437171633527953691293645647815272703469443268987627120659505493807870385237204581445238429105479679933853871972313569248074194023259756017717267845918321477452875237123092170489099793898341404373775392276933936846026709933101952337916691902251803170976638803805390995218598386559262534332189613598465718851944314962647597130983983454253436387520164692510757792481432955137409937213917373411738179842256168587676724818618464940403461283676362417292828434848061042468447218217470890510964489766049023994243850138705129582795361503401082917392721593279032869498038129568309714009975819832438420747516980545357827310774720091171894929619663920340815698422237359541556281, 4513514451536361434071657967320173466437612089642750796119174920033345660781843608151555535685786558842970674291541566272824888925853848940045506370905805909240859440740907608845934014686179588922485226676328502998525772102533047801461297303433063171055983831492276010904801142504552971630233267928265476285625472459174215805167513354097170751437366288714431469207990307199046654988094458622942970447284109476578737203935188740590768867087431624201920337187888420655520948833122988001796729853221130216733174126130660506057263333755561781450831765335322309269156655792756010240266108850109211630312374905050866023505550998950943769539040826689868446841830687510268921399589252469454104160886173415651805385277268467932304150143088865749025240728610572932800512252412961961523200393467074160093654102531220, 3286378134376867366124377133218361431335385761155594709268767775019778681953138896371813797940247554311964926952582070940301824783294624056122955368128216840927036214182640880641587234781130462139913319300143804769040416569704551608404468745955178511256862919320816073943553678208006570220867051587594889961939361834207355767723860438061784594801640218092306704643914376106253288798655788652312868501570530206776095295755905881962515887610461283042217518523246678651610089072042574418042818096495157488643626049413459856643874042138747553122521548866418269706863155410153605085958735705613021434930135187495727847692603364029558196271740127669151191536962532182483123001599261039034518514638141685913264301910398379596982617197509917907217336169020444002203235764307550991909518203716826785551791838904732, 1675494700194825179139270334546086534451072389397913814577644551449672807116767076884070066771584677878273885817264775918724214343273636787694180866201996751797546891451767082984308025696005115477233645104461556104093603209218585513913542999474641428808013364896266726717267927919975926401686601766680403011222655755639927719478937643500625505581323059672550768326872526360142055517013327337130520387225096686924042066700349314743395374093823412407728727072399295915867310064003384162159113631556845789857942649980093209763692077566506319269688246904630522641087130316943510724456271314340073665269908290552330982023049656230426873656022692995874135923444205961330698039753105655428146471225623471562826692598330393545755765672397847361234648565136427434646638048402565448929619347076428200958775822027052]

Solution

The flag is encrypted using a Goldwasser-Micali like cryptosystem with public key NN. It can be decrypted given the factorisation of NN.

The cryptosystem works by taking N=pqN = pq to be the product of two large primes pp and qq, and a random value xx such that

(xp)=(xq)=1\left ( \dfrac{x}{p} \right ) = \left ( \dfrac{x}{q} \right ) = -1

i.e. such that xx is a quadratic non-residue modulo pp and a quadratic non-residue modulo qq.

To encrypt a single bit bb, a random value 1r<N1 \leq r < N is chosen such that gcd(r,N)=1\gcd(r, N) = 1, and the value cr2xb(modN)c \equiv r^2 x^b \pmod N is outputted. To encrypt a message, we encrypt all of its bits individually.

Note that if b=0b = 0, then the outputted value cc will be a quadratic residue modulo pp, hence, if we find that cc is a quadratic non-residue modulo pp, then we will know that b=1b = 1. Similarly, if b=1b = 1, then the outputted value cc will be a quadratic non-residue modulo pp. So if we find that cc is a quadratic residue modulo pp, then we will know that b=0b = 0.

If we can factorise NN, we will have enough information to decrypt the flag. We are given a hint that is sufficient for us to solve the factorisation problem.

We are given the value

h=D(p+q)h = D(\lfloor \sqrt p \rfloor + \lfloor \sqrt q \rfloor)

where D=(1×3×3×7)1+3+3+7D = (1 \times 3 \times 3 \times 7)^{1 + 3 + 3 + 7} is a known 84 bit constant. (I'll omit the  \lfloor \ \rfloor for the rest of the writeup, but keep in mind we're talking about integer square roots)

Note that pp and qq are not perfect squares (as they are prime), and so it is quite infeasible to recover the actual values of pp and qq without a bit of work. Taking the integer square root of large numbers removes a lot of information about them such that it is practically impossible to recover the original large number. To understand why, notice that the gap between the iith and i+1i+1st square numbers is 2i+12i + 1. e.g. the gap between 727^2 and 828^2 is 27+12 \cdot 7 + 1. So if we take any integer in the range between these squares (e.g. any integer between 49 and 64 exclusive), then their integer square root will be 77. This is clearly not a one-to-one mapping, so going from 77 back to the original number isn't possible without extra information. If we did have extra information that would allow us to check which number is correct, however, we could just enumerate each number in the range. For large numbers (e.g. numbers on the order of 1337 bits), this is computationally infeasible. So is the challenge impossible?

Clearly not! The constant multiple DD helps a bit in giving us some extra bits of information, but that alone isn't enough. Since we know some additional information about pp and qq however, (namely that their product is nn), there are some techniques we can use to recover them completely.

Similarly to the babyrsa challenge, we can construct a quadratic equation with roots that will help us to find approximations of pp and qq:

(xDp)(xDq)=x2D(p+q)x+D2pq=x2hx+D2n\begin{aligned} (x - D\sqrt p)(x - D\sqrt q) &= x^2 - D(\sqrt p + \sqrt q)x + D^2 \sqrt{pq} \\ &= x^2 - hx + D^2 \sqrt n \end{aligned}

Finding a root x0x_0 and calculating (x0/D)2(x_0/D)^2 will give us an approximation for pp (or qq, it doesn't really matter what we call it). It turns out that this approximation is accurate to around 750 bits on average, so around 590 bits are unknown (we could figure this out by testing locally with our own values). Despite knowing only 750/1337 bits of pp however, we can determine the exact value of pp using Coppersmith's method which finds small roots of polynomials modulo some integer.

Let pp' be our approximation for pp. Then p=p+δp' = p + \delta where δ<2590|\delta| < 2^{590}. We then construct the monic polynomial

f(x)xp(modn)xpδ(modn)xδ(modn)\begin{aligned} f(x) &\equiv x - p' \pmod n \\ &\equiv x - p - \delta \pmod n \\ &\equiv x - \delta \pmod n \end{aligned}

where the last line follows from the fact ab(modpq)    ab(modp)a \equiv b \pmod {pq} \implies a \equiv b \pmod p. So solving for xx will give us the value of δ\delta. We have now recovered pp and can decrypt the flag as above.

Note that the flag is encrypted slightly different to the standard Goldwasser-Micali encryption. Here, the quadratic non-residue xx is raised to the power of 1337+b1337 + b, so when b=0b = 0, the result is a quadratic non-residue, and when b=1b = 1, the result is a quadratic residue. This just means that if the ciphertext is a quadratic residue, then b=1b = 1, and if it is a quadratic non-residue, then b=0b = 0. Also, the exponent for the random value rr is 1337+13371337+1337, (purely for thematic purposes); it only matters that this value is even.

Solve script:

from Crypto.Util.number import long_to_bytes

exec(open('../challenge/output.txt').read()) # hint, n, c, D

# get an approximation for p
F.<x> = ZZ[]
poly = x^2 - x*hint + D*D*sqrt(n)
d = poly.roots()
p_approx = int((d[0][0]/D)^2)

# compute the exact value of p
P.<x> = PolynomialRing(Zmod(n), implementation='NTL')
f = x + p_approx
d = f.small_roots(X=2**590, beta=0.4, epsilon=1/32)
p = p_approx + d[0]
assert is_prime(p)
print('[+] recovered p', p)

# get the flag
flag = ''.join('0' if kronecker(x, p) == -1 else '1' for x in c)
flag = long_to_bytes(int(flag, 2))
print('[*] flag:', flag.decode())

Flag: DUCTF{wh0_N33ds_pr3cIsi0n_wh3n_y0u_h4v3_c0pp3rsmiths_M3thod}


LSB||MSB Calculation Game (500pts) - 2 solves

You know the drilll. Guess my numbers and you get the flag!

nc chal.duc.tf 30204

server.py:

#!/usr/bin/env python3
from os import urandom
from random import randint

print('Welcome! As you may know, guessing is one of the most important skills in CTFs and in life in general. This game is designed to train your guessing skills so that you\'ll be able to solve any CTF challenge after enough practice. Good luck!\n')

class LCG:
    M = 937954372991277727569919570466170502903005281412586514689603
    a = randint(2, M-1)
    c = randint(2, M-1)
    print(f'M = {M}')
    print(f'a = {a}')
    trunc = 20

    def __init__(self, x0):
        self.x = x0

    def next(self):
        self.x = (self.a * self.x + self.c) % self.M
        return ((self.x % 2**self.trunc) << self.trunc) + (self.x >> (self.M.bit_length() - self.trunc))

NUM_GUESSES = 5 # higher chances of winning!!
rng = LCG(int(urandom(25).hex(), 16))
wins = 0

for r in range(1, 24):
    try:
        num = rng.next()
        print('Round ' + str(r) + '. What\'s the lucky number? ')
        guesses = [int(guess) for guess in input().split(' ')[:NUM_GUESSES]]
        if any(guess == num for guess in guesses):
            print('Nice guess! The number was', num)
            wins += 1
        else:
            print('Unlucky! The number was', num)
    except ValueError:
        print('Please enter your three numbers separated by spaces next time! e.g. 123 1337 999')
        exit()

if wins > 10:
    print('YOU WIN! Your guessing skills are superb. Here\'s the flag:', open('flag.txt', 'r').read().strip())
else:
    print('Better luck next time :(')

Solution

This challenge involves breaking a truncated LCG that outputs some MSBs and some LSBs of the current state. Some references for attacks:

The intended solution is to use lattice-based techniques to recover enough information about the state of the LCG to predict future outputs.

Truncated LCG

The states xix_i of the LCG are related by the formula

xi+1axi+c(modM)i1x_{i+1} \equiv ax_i + c \pmod M \qquad i \geq 1

Let ll be the number of bits in MM. The truncated LCG outputs 2trunc(ximod2trunc)+xi2ltrunc2^{\text{trunc}} (x_{i} \mod 2^\text{trunc}) + \lfloor \frac{x_i}{2^{l-\text{trunc}}} \rfloor (i.e. the trunc\text{trunc} MSBs concatenated to the trunc\text{trunc} LSBs). The initial state x1x_1 is a large random number.

Breaking the Truncated LCG: Recovering the State

Suppose we are given k+1k+1 outputs of the LCG.

Let wi,yi,ziw_i, y_i, z_i be such that 2ltruncwi+2truncyi+zi=xi2^{l-\text{trunc}}w_i + 2^{\text{trunc}}y_i + z_i = x_i. The wiw_i and ziz_i are the outputs of the truncated LCG that we are given.

In the challenge, we are given aa and MM. To eliminate the unknown constanct cc, let

xi=xi+1xix_i' = x_{i+1} - x_i

Notice that

xi=xi+1xi=2ltruncwi+1+2truncyi+1+zi+12ltruncwi2truncyizi=2ltrunc(wi+1wi)+2trunc(yi+1yi)+(zi+1zi)\begin{aligned} x_i' & = x_{i+1} - x_i \\ &= 2^{l-\text{trunc}}w_{i+1} + 2^{\text{trunc}}y_{i+1} + z_{i+1} - 2^{l-\text{trunc}}w_i - 2^{\text{trunc}}y_i - z_i \\ &= 2^{l-\text{trunc}}(w_{i+1} - w_i) + 2^{\text{trunc}}(y_{i+1} - y_i) + (z_{i+1} - z_i) \end{aligned}

So it makes sense to define wi,yiw_i', y_i' and ziz_i' by 2ltruncwi+2truncyi+zi=xi2^{l-\text{trunc}}w_i' + 2^{\text{trunc}}y_i' + z_i' = x_i'.

The xix_i' are related by

xixi+1xiaxi+c(axi1+c)a(xixi1)axi1(modM)\begin{aligned} x_i' &\equiv x_{i+1} - x_i \\ &\equiv ax_i + c - (ax_{i-1} + c) \\ &\equiv a(x_i - x_{i-1}) \\ &\equiv ax_{i-1}' \pmod M \end{aligned}

Hence, ai1x1xi0(modM)a^{i-1} x_1' - x_i' \equiv 0 \pmod M for 1ik1 \leq i \leq k.

Now let x=(x1,x2,,xk)\mathbf{x}' = (x_1', x_2', \ldots, x_k')

Consider the lattice generated by the rows of the matrix

L=[M000a100a2010ak1001]L = \begin{bmatrix} M & 0 & 0 & \cdots & 0 \\ a & -1 & 0 & \cdots & 0 \\ a^2 & 0 & -1 & \cdots & 0 \\ \vdots & \ddots & & & \vdots \\ a^{k-1} & 0 & 0 & \cdots & -1 \end{bmatrix}

Notice that Lx=(Mx1,ax1x2,,ak1x1xk)0(modM)L \cdot \mathbf{x}' = (Mx_1', ax_1' - x_2', \ldots, a^{k-1}x_1' - x_k') \equiv \mathbf{0} \pmod M.

Let BB be the reduced basis for the lattice.

So

Bx0(modM)    B(2ltruncw+2truncy+z)0(modM)    B2ltruncw+B2truncy+Bz=vMfor some vector v    By=(vM2ltruncBwBz)/2trunc\begin{aligned} B \cdot \mathbf{x}' &\equiv \mathbf{0} \pmod M \\ \implies B \cdot (2^{l-\text{trunc}} \mathbf{w}' + 2^{\text{trunc}} \mathbf{y}' + \mathbf{z}') &\equiv \mathbf{0} \pmod M \\ \implies B \cdot 2^{l-\text{trunc}}\mathbf{w}' + B \cdot 2^{\text{trunc}}\mathbf{y}' + B \cdot \mathbf{z}' &= \mathbf{v}M \quad \text{for some vector $\mathbf{v}$} \\ \implies B \cdot \mathbf{y}' &= (\mathbf{v}M - 2^{l-\text{trunc}}B \cdot \mathbf{w}' - B \cdot \mathbf{z}')/2^{\text{trunc}} \end{aligned}

Now since ByB \cdot \mathbf{y}' is short, we expect vM2ltruncwBz\mathbf{v}M - 2^{l-\text{trunc}} \mathbf{w}' - B \cdot \mathbf{z}' to be short too. So we take v=(v1,v2,,vk)\mathbf{v} = (v_1, v_2, \ldots, v_k) to be such that vM2ltruncBwBz\mathbf{v}M - 2^{l-\text{trunc}} B \cdot \mathbf{w}' - B \cdot \mathbf{z}' is short. In particular, we set

vi=(2ltruncBw+Bz)i/Mv_i = \lfloor (2^{l-\text{trunc}} B \mathbf{w}' + B \cdot \mathbf{z}')_i / M \rceil

We can then recover y\mathbf{y}' by solving the system of linear equations.

Then, we can recover the xix_i' with xi=2ltruncwi+2truncyi+zix_i' = 2^{l-\text{trunc}} w_i' + 2^{\text{trunc}}y_i' + z_i'.

Breaking the Truncated LCG: Predicting Future Outputs

We have now recovered the differences between consecutive states of the LCG! The next step is to predict future outputs. It's unlikely we'll be able to recover cc directly since we only have the differences and not the actual states themselves. Fortunately, there's an easy way to predict the next output even without knowing cc. The main thing to notice is that we aren't really interested in xk+1x_{k+1}; we don't need to recover the full state, all we care about is the next output, which can be determined from wkw_k and zkz_k.

So we have xk1,wkx_{k-1}', w_k and zkz_k, and we want to find wk+1w_{k+1} and zk+1z_{k+1}.

Notice that

xk=xk+1xkx_k' = x_{k+1} - x_k

and

xkaxk1(modM)x_k' \equiv ax_{k-1}' \pmod M

So

axk1modM=(2ltruncwk+1+2truncyk+1+zk+1)(2ltruncwk+2truncyk+zk)ax_{k-1}' \mod M = (2^{l-\text{trunc}}w_{k+1} + 2^{\text{trunc}}y_{k+1} + z_{k+1}) - (2^{l-\text{trunc}}w_k + 2^{\text{trunc}}y_k + z_k)

Reducing modulo 2trunc2^{\text{trunc}}, we get

axk1modMzk+1zk(mod2trunc)    zk+1(axk1modM)+zk(mod2trunc)\begin{aligned} ax_{k-1}' \mod M &\equiv z_{k+1} - z_k \pmod {2^{\text{trunc}}} \\ \implies z_{k+1} &\equiv (ax_{k-1}' \mod M) + z_k \pmod {2^{\text{trunc}}} \end{aligned}

And to determine wk+1w_{k+1}, notice that, in the equation

axk1modM=(2ltruncwk+1+2truncyk+1+zk+1)(2ltruncwk+2truncyk+zk)ax_{k-1}' \mod M = (2^{l-\text{trunc}}w_{k+1} + 2^{\text{trunc}}y_{k+1} + z_{k+1}) - (2^{l-\text{trunc}}w_k + 2^{\text{trunc}}y_k + z_k)

the top trunc\text{trunc} MSBs of axk1ax_{k-1}' is given by wk+1wkw_{k+1} - w_k, so we can determine wk+1w_{k+1} by computing

wk+1(axk1modM)/2ltrunc+wk(mod2trunc)w_{k+1} \equiv \lfloor (ax_{k-1}' \mod M)/2^{l-\text{trunc}} \rfloor + w_k \pmod{2^{\text{trunc}}}

So with that, we should be able to predict the next output of the LCG and grab the flag!

A Subtle Mistake

If we try to implement the theory, we might be met with some unexpected results (speaking from experience...). You may have noticed in the previous section that one of the steps doesn't always hold.

By construction, we have xk=xk+1xkx_k' = x_{k+1} - x_k and xkaxk1(modM)x_k' \equiv ax_{k-1}' \pmod M. And we concluded from this that axk1modM=xk+1xkax_{k-1}' \mod M = x_{k+1} - x_k. This conclusion isn't neccessarily true. For example, see what happens when xk+1xkx_{k+1} - x_k is negative.

Since we can't determine xk+1x_{k+1} and xkx_k fully, we can't know whether xk+1xkx_{k+1} - x_k is positive or negative. This means we may potentially get the wrong output. Luckily, the game lets us guess 5 numbers, and it turns out that this is enough for us to win every time.

If xk+1xkx_{k+1} - x_k is positive, we can follow the steps above without modification and compute

zk+1(axk1modM)+zk(mod2trunc)wk+1(axk1modM)/2ltrunc+wk(mod2trunc)\begin{aligned} z_{k+1} &\equiv (ax_{k-1}' \mod M) + z_k \pmod{2^{\text{trunc}}} \\ w_{k+1} &\equiv \lfloor (ax_{k-1}' \mod M)/2^{l-\text{trunc}} \rfloor + w_k \pmod{2^{\text{trunc}}} \end{aligned}

On the other hand, if xk+1xkx_{k+1} - x_k is negative, then since xk+1xk<M|x_{k+1} - x_k| < M and

axk1xk+1xk(mod2trunc)ax_{k-1}' \equiv x_{k+1} - x_k \pmod{2^{\text{trunc}}}

it must be true that

xk+1xk=(axk1modM)Mx_{k+1} - x_k = (ax_{k-1}' \mod M) - M

So in this case,

zk+1(axk1modM)M+zk(mod2trunc)wk+1((axk1modM)M)/2ltrunc+wk(mod2trunc)\begin{aligned} z_{k+1} &\equiv (ax_{k-1}' \mod M) - M + z_k \pmod{2^{\text{trunc}}} \\ w_{k+1} &\equiv \lfloor ((ax_{k-1}' \mod M) - M)/2^{l-\text{trunc}} \rfloor + w_k \pmod{2^{\text{trunc}}} \end{aligned}

For some reason (probably rounding errors), the guess is sometimes small by 1. We can work around this by sending two additional numbers, each adding 1 to what we found previously.

Maybe there's a way to determine the next output with 100% correctness that I'm not aware of. Please send me a message if you know!

Solve Script

import os
os.environ['PWNLIB_NOTERM'] = 'True'
from pwn import process, remote

def connect():
    return remote('0.0.0.0', 1337)
    # return process('../challenge/server.py', level='error')

def recv(conn):
    o = conn.recvline().decode()
    print('[<]', o)
    return o

def send(conn, data):
    print('[>]', data)
    conn.sendline(data)

def do_round(conn, trunc, guess=[1337]):
    recv(conn)
    send(conn, ' '.join(str(x) for x in guess))
    r = recv(conn)
    num = int(r.split('was ')[1])
    w = num % 2^trunc
    z = (num >> trunc) % 2^trunc
    return w, z

def get_params(conn):
    M = ZZ(recv(conn).split('M = ')[1])
    a = ZZ(recv(conn).split('a = ')[1])
    return M, a

def get_next_lcg_outputs(xprime, wk, zk, a, M, trunc):
    def r(xp):
        zk_next = (xp + zk) % 2^trunc
        wk_next = ((xp >> (M.nbits() - trunc)) + wk) % 2^trunc
        return (zk_next << trunc) + wk_next

    outputs = []

    xp = (a*xprime)%M
    outputs.append(r(xp))
    outputs.append(r(xp - M))
    outputs.append(r(xp) + 1)
    outputs.append(r(xp - M) + 1)

    return outputs

def recover_Xprime(W, Z, a, M, trunc):
    k = len(Z)-1
    Wprime = [W[i+1] - W[i] for i in range(k)]
    Zprime = [Z[i+1] - Z[i] for i in range(k)]
        
    L = [[a^i] + [0]*(i-1) + [-1] + [0]*(k-1-i) for i in range(1, k)]
    L.insert(0, [M] + [0]*(k-1))
    L = matrix(L)

    B = L.LLL()

    P1 = 2^(M.nbits() - trunc) * B * vector(Wprime) + B * vector(Zprime)
    P2 = vector([(round(RR(p) / M) * M - p)/(2^trunc) for p in P1])

    Yprime = list(B.solve_right(P2))
    Xprime = [2^(M.nbits() - trunc)*Wprime[i] + (2^trunc * Yprime[i]) + Zprime[i] for i in range(k)]
    return list(map(ZZ, Xprime))

def play_game():
    conn = connect()
    recv(conn)
    recv(conn)
    M, a = get_params(conn)
    trunc = 20

    WZ = [do_round(conn, trunc), do_round(conn, trunc)]
    W = [wz[0] for wz in WZ]
    Z = [wz[1] for wz in WZ]

    Xprime = recover_Xprime(W, Z, a, M, trunc)

    for _ in range(23-2):
        w, z = do_round(conn, trunc, get_next_lcg_outputs(Xprime[-1], W[-1], Z[-1], a, M, trunc))
        W.append(w)
        Z.append(z)
        Xprime = recover_Xprime(W, Z, a, M, trunc)

    recv(conn)

play_game()

Flag: DUCTF{y0u_4r3_A_m4st3r_1n_gu3ss1ng_y0u_w1ll_g0_v3ry_f4r!_:)}


Flag Getter (492pts) - 18 solves

An app that gets the flag for you! What more could you possibly want?

Solution

The provided APK is a simple, but heavily obfuscated app that makes some requests to a server to get the flag. Static analysis and trying to deobfuscate everything would probably be too tedious. We can set up a man-in-the-middle proxy to intercept the requests and investigate. Unfortunately, the app makes requests to a HTTP server with TLS, and has certificate pinning implemented. We can patch the apk to disable the certificate pinning (or use some tools to do this automatically), then set up a mitm proxy to intercept the HTTP requests.

Disabling Certificate Pinning

We start by decoding the apk with apktool

$ apktool d flag-getter.apk

This creates a directory with the app resources and smali code. We can find the code responsible for handling the certificate pinning logic using grep

$ grep -r certificate
e/j0/d/f.smali:    const-string v0, " not verified:\n              |    certificate: "
e/j0/d/f.smali:    const-string p3, " not verified (no certificates)"
e/h.smali:    const-string v2, "\n  Peer certificate chain:"
e/h.smali:    const-string p2, "\n  Pinned certificates for "

Looking in h.smali, we see that the method responsible for certificate pinning is defined in lines 171-699.

# virtual methods
.method public final a(Ljava/lang/String;Ljava/util/List;)V
    .locals 13
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Ljava/util/List<",
            "+",
            "Ljava/security/cert/Certificate;",
            ">;)V"
        }
    .end annotation

    if-eqz p1, :cond_14

    if-eqz p2, :cond_13

    .line 1
    sget-object v0, Ld/f/i;->a:Ld/f/i;
...

Adding return-void at the start of the method definition will disable the certificate pinning.

Rebuilding the APK

Now that certificate pinning is disabled, we rebuild and sign the APK.

$ apktool b flag-getter -o patched-flag-getter.apk
I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/kotlin)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...

$ keytool -genkey -v -keystore ks -keyalg RSA -keysize 2048 -validity 10000 -alias asdf
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]: yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days
	for: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
[Storing ks]

$ jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore ks patched-flag-getter.apk asdf
Enter Passphrase for keystore:
jar signed.

Warning:
The signer's certificate is self-signed.

$ adb install patched-flag-getter.apk
Performing Push Install
patched-flag-getter.apk: 1 file pushed, 0 skipped. 448.6 MB/s (1224910 bytes in 0.003s)
	pkg: /data/local/tmp/patched-flag-getter.apk
Success

Intercepting Requests

I used an Android emulator (running Android 5.1.1) and mitmproxy but other tools work too. The first thing we'll need to do is get the CA certificate onto the device. For mitmproxy, the generated certificates will be at ~/.mitmproxy. Android stores CA certs in /system/etc/security/cacerts/. You could also install the cert via the Android settings for Android 6 and below.

$ cd ~/.mitmproxy

$ openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -n 1
c8750f0d

$ cp mitmproxy-ca-cert.cer c8750f0d.0

$ adb shell 'mount -o rw,remount /system'

$ adb push c8750f0d.0 /system/etc/security/cacerts
c8750f0d.0: 1 file pushed, 0 skipped. 10.9 MB/s (1318 bytes in 0.000s)

Now all we need to do is change the emulator's settings to use the proxy, then start the proxy. Opening the patched app and pressing the buttons will show the requests in the proxy interface, and their responses contain the flag.

Flag: DUCTF{n0t_s0_s3cre7_4ft3r_4LL_!!11!}


Welcome! (100pts) - 440 solves

Welcome to DUCTF!

ssh [email protected] -p 30301

Password: ductf

Solution

SSHing into the server with credentials ductf:ductf bombards us with thousands of colourful texts saying "Welcome to DUCTF!". Presumably, the flag is hidden as one of the messages. We can pipe the output into grep to filter for the flag.

$ ssh [email protected] -p 1337 | grep -P 'DUCTF{.*?}' -o
ductf@localhost's password:
DUCTF{w3lc0m3_t0_DUCTF_h4v3_fun!}