基础语法
安装配置
相对于Drools而言,Groovy是一门更为轻量级的脚本语言,它也运行在JVM之上,可以用来专门处理一些可能会发生变化的业务逻辑。
虽然说是更轻量
,但Groovy一点也不简单。
下载Groovy并配置环境变量。
> cd /home/work
> wget https://archive.apache.org/dist/groovy/4.0.11/distribution/apache-groovy-sdk-4.0.11.zip
> unzip apache-groovy-sdk-4.0.11.zip
> vi /etc/profile
# 在文件末尾添加如下内容
export GROOVY_HOME=/home/work/groovy-4.0.11
export PATH=.:$GROOVY_HOME/bin:$PATH
> source /etc/profile
> groovy -version
Groovy Version: 4.0.11 JVM: 1.8.0_401 Vendor: Oracle Corporation OS: Linux
> groovyConsole
四月 25, 2023 20:35:55 下午 java.util.prefs.FileSystemPreferences$1 run
信息: Created user preferences directory.


安装之后鼠标左键单击菜单栏的Tools
-> Groovy Console
,就能在打开的Groovy界面中写代码了。

Groovy的语法整个来说比较简单灵活,它也是一种弱类型语言。
变量与赋值
变量可以通过四种方式来定义。
// 使用数据类型
// 很明显,虽然这里把x定义为String类型,但实际赋值的时候却给的是double数字,这在大多数语言中都是不可能做到的
> String a = 3.14
// 使用def关键字
> def b = "lixingyun"
// 使用var关键字
> var c = new Date()
// 直接赋值,变量类型根据数值决定
> d = true
> println(a + " " + b + " " + c + " " + d)
3.14 lixingyun Tues Apr 25 16:39:51 CST 2023 true
可以看出,变量的类型不是声明出来的,而是实际数值的类型。
还可以同时为多个变量赋值。
> def (a, b, c) = [10, 3.14, 'groovy']
> def (int d, String e) = [1, 'groovy']
> println(a + " " + b + " " + c)
10 3.14 groovy
> println(d + " " + e)
1 groovy
居然还可以这样赋值,有点让人眼花缭乱。
> def (_, month, year) = "25th 04 2023".split()
> assert "In $month of $year" == 'In 04 of 2023'
> println(year + "-" + month)
2023-04
当变量的数量和数据的数量不匹配的时候会发生什么呢?——上溢
(Overflow
)和下溢
(Underflow
)。
// 如果左侧有多余的变量,将用null填充,这叫上溢Overflow
> def (a, b, c) = [1, 2]
> println(a + " " + b + " " + c)
1 2 null
// 如果左侧有多余的数值,将直接丢弃,这叫下溢Underflow
> def (a, b) = [1, 2, 3]
> println(a + " " + b)
1 2
下面列出了合法的和非法的变量名。
// 合法的变量名
> def (name, _, $test, a1) = [1, 2, 3, 4]
> println(name + ', ' + _ + ', '+ $test + ', ' + a1)
1, 2, 3, 4
// 非法的变量名
> def 3tier
> def a+b
> def a#b
还可以通过引号标识符来定义变量
。
所有的引号标识符('
、"
、'''
、"""
、//
和$//$
)都可以将.
(点操作符)之后的内容给定义成
变量,这是一种非常奇怪的用法。
> def map = [:]
> map."an identifier with a space and double quotes" = "hello"
> map.'with-dash-signs-and-single-quotes' = "groovy"
> map.'single quote' = "single quote"
> map."double quote" = "double quote"
> map.'''triple single quote''' = "triple single quote"
> map."""triple double quote""" = "triple double quote"
> map./slashy string/ = "slashy string"
> map.$/dollar slashy string/$ = "dollar slashy string"
> println(map."an identifier with a space and double quotes")
hello
> println(map.'with-dash-signs-and-single-quotes')
groovy
> println(map.'single quote')
single quote
> println(map."double quote")
double quote
> println(map.'''triple single quote''')
triple single quote
> println(map."""triple double quote""")
triple double quote
> println(map./slashy string/)
slashy string
> println(map.$/dollar slashy string/$)
dollar slashy string
上面这种景观
在编程语言里应该不常见吧。
字符串
Groovy将字符串分为了六种:单引号字符串(''
)、双引号字符串(""
)和三单引号字符串('''
)、三双引号字符串("""
)、Slashy字符串(//
)和带
所有的字符串都可以通过+
实现拼接。
// 单引号(')字符串
> def singleQuoteString = 'a' + 'b'
> println(singleQuoteString)
ab
// 双引号(")字符串
> def doubleQuoteString = "hello" + " groovy"
> println(doubleQuoteString)
hello groovy
// 三单引号(''')字符串
> def tripleSingleQuoteString = '''这是三单引号的第一行''' + '''
> 这是三单引号的第二行'''
> println(tripleSingleQuoteString)
这是三单引号的第一行
这是三单引号的第二行
// 三双引号(""")字符串
> def tripleDoubleQuoteString = """这是三双引号的第一行""" + """
> 这是三双引号的第二行"""
> println(tripleDoubleQuoteString)
这是三双引号的第一行
这是三双引号的第二行
// Slashy(/)字符串
> def slashyString = /这是slashy的第一行/ + /
> 这是slashy的第二行/
> println(slashyString)
这是slashy的第一行
这是slashy的第二行
// $ + Slashy($/.../$)字符串
> def dollarSlashyString = $/这是dollarSlashy的第一行/$ + $/
> 这是dollarSlashy的第二行/$
> println(dollarSlashyString)
这是dollarSlashy的第一行
这是dollarSlashy的第二行
尤其是三单引号字符串('''
)和三双引号字符串("""
),与Python中的一样,它最大的作用就在于能够十分完好地保存内容中的格式:输入什么样,输出就什么样。
Groovy中所谓的字符串插值表达式(Interpolation Expression,${}
)和Java的格式化输出(%s
)效果一样。
但稍有不同的是,在Groovy中${}
不仅仅是占位符,它还能实现数值的动态计算。
注意:只有双引号字符串(""
)、三双引号字符串("""
)、Slashy字符串(/
)和带
如果以上字符串中没有插值表达式(
Interpolated Expression
)并且不是拼接而成的,那它就是java.lang.String
类型。如是以上字符串中有插值表达式(
Interpolated Expression
)并且不是拼接而成的,那它就是groovy.lang.GString
类型。
> def name = 'Groovy'
> def greeting1 = "Hello" + " ${name}"
> def greeting2 = "Hello ${name}"
> def sum = "1 + 1 = ${1 + 1}"
> println('name = ' + name)
name = Groovy
> println(name instanceof String)
true
> println('greeting1 = ' + greeting1)
greeting1 = Hello Groovy
// greeting1虽然是双引号字符串,但它是拼接出来的值,所以不是GString类型
> println(greeting1 instanceof String)
true
> println('greeting2 = ' + greeting2)
greeting2 = Hello Groovy
// greeting2是GString类型
> println(greeting2 instanceof GString)
true
> println(sum)
1 + 1 = 2
// sum是GString类型
> println(sum instanceof GString)
true
不仅字符串可以这样使用${}
插值,赋值语句也可以。
> def person = [name: 'lixingyun', age: 19]
> println("$person.name is $person.age years old")
lixingyun is 19 years old
虽然插值后的内容完全相等,但它们的HashCodes
可是不同的。
> println("one: ${1}".hashCode() != "one: 1".hashCode())
true
因此应该避免将具有插值的GString
当作Map
中的key
来使用,因为它极有可能是null
。
> def key = "a"
> def m = ["${key}": "this is ${key} groovy"]
> println(m["a"])
null
> println(m.get("a"))
null
Slashy字符串
使用/
来代替引号作为字符串的开头和结尾分隔符,而且这种字符串属于java.lang.String
类型。
> def groovy = /.*groovy*./
> println(groovy)
.*groovy*.
> println(groovy instanceof String)
true
> println(groovy instanceof GString)
false
Slashy字符串
也支持插值,并且此时它会转换为groovy.lang.GString
类型。
> def brand = 'BMW'
> def slashy = /a ${brand} car/
> println slashy
a BMW car
> println slashy instanceof GString
true
另一种多行groovy.lang.GString
类型是头尾都带有$
符号的Slashy字符串
。
> def name = "Groovy"
> def date = "2023-04-25"
> def dollarSlashy = $/
> Hello, $name,
> 今天是 ${date}.
> $ 标记
> $$ 转义标记
> \ 反斜杠
> / 正斜杠
> $/ 转义正斜杠
> $$$/ 转义开头的美元符号
> $/$$ 转义结尾的美元符号
> /$
> println dollarSlashy
Hello, Groovy,
今天是 2023-04-25.
$ 标记
$ 转义标记
\ 反斜杠
/ 正斜杠
/ 转义正斜杠
$/ 转义开头的美元符号
/$ 转义结尾的美元符号
几种不同类型的字符串对比。
名称 | 语法 | 支持插值 | 支持多行 | 转义字符 |
---|---|---|---|---|
单引号字符串 | '...' | \ | ||
双引号字符串 | "..." | ✓ | \ | |
三单引号字符串 | '''...''' | ✓ | \ | |
三双引号字符串 | """...""" | ✓ | ✓ | \ |
Slashy字符串 | /.../ | ✓ | ✓ | \ |
带$符的Slashy字符串 | ✓ | ✓ | \ |
最后用一个例子来对Groovy中的字符串做一个总结。
> def name = 'Groovy'
// 使用单引号(')括住的字符串只是java.lang.String的实例,它既不支持插值也不支持多行
> def singleQuoteString = 'a' + 'b'
> println(singleQuoteString)
ab
> println(singleQuoteString instanceof String)
true
// 使用双引号(")括住的字符串既是java.lang.String的实例,也是groovy.lang.GString的实例,支持插值但不支持多行
> def doubleQuoteString1 = "a" + "b"
> def doubleQuoteString2 = "Hello " + "${name}"
> def doubleQuoteString3 = "Hello ${name}"
> println(doubleQuoteString1)
ab
> println(doubleQuoteString1 instanceof String) // true
true
> println(doubleQuoteString2)
Hello Groovy
> println(doubleQuoteString2 instanceof String) // true
true
> println(doubleQuoteString3)
Hello Groovy
> println(doubleQuoteString3 instanceof GString) // true
true
// 使用三单引号(''')括住的字符只是java.lang.String的实例,不支持插值但支持多行
> def tripleSingleQuoteString = '''这是三单引号第一行''' + '''
> 这是三单引号第二行'''
> println(tripleSingleQuoteString)
这是三单引号第一行
这是三单引号第二行
> println(tripleSingleQuoteString instanceof String)
true
// 使用三双引号(""")括住的字符既是java.lang.String的实例,也是groovy.lang.GString的实例,支持插值也支持多行
> def tripleDoubleQuoteString1 = """这是三双引号第一行""" + """
> 这是三双引号第二行 ${name}"""
> def tripleDoubleQuoteString2 = """这是三双引号插值行 ${name}"""
> println(tripleDoubleQuoteString1)
这是三双引号第一行
这是三双引号第二行 Groovy
> println(tripleDoubleQuoteString1 instanceof String)
true
> println(tripleDoubleQuoteString2)
这是三双引号插值行 Groovy
> println(tripleDoubleQuoteString2 instanceof GString)
true
// 使用正斜杠(/)括住的字符只是java.lang.String的实例,不支持插值但支持多行
> def slashyString = /这是slashy第一行/ + /
> 这是slashy第二行/
> println(slashyString)
这是slashy第一行
这是slashy第二行
> println(slashyString instanceof String)
true
// 使用$+正斜杠($/.../$)括住的字符既是java.lang.String的实例,也是groovy.lang.GString的实例,支持插值也支持多行
> def dollarSlashyString1 = $/这是dollarSlashy第一行/$ + $/
> 这是dollarSlashy第二行 ${name}/$
> def dollarSlashyString2 = $/这是dollarSlashy插值行 ${name}/$
> println(dollarSlashyString1)
这是dollarSlashy第一行
这是dollarSlashy第二行 Groovy
> println(dollarSlashyString1 instanceof String)
true
> println(dollarSlashyString2)
这是dollarSlashy插值行 Groovy
> println(dollarSlashyString2 instanceof GString)
true
字符、数字和布尔
Groovy可以通过三种不同的方式声明字符变量。
> char c1 = 'A'
> def c2 = 'B' as char
> def c3 = (char)'C'
> println(c1 instanceof Character)
true
> println(c2 instanceof Character)
true
> println(c3 instanceof Character)
true
Groovy的整数类型与Java中的相同,包括byte
、char
(ASCII码数字)、short
、int
、long
和java.math.BigInteger
这几个。
它还有一个特色,就是当使用def
定义整数值时,变量的类型会根据数值的大小自动调整。
// Integer
> def a = 1
> println(a instanceof Integer)
true
// Integer.MAX_VALUE
> def b = 2147483647
> println(b instanceof Integer)
true
// Integer.MAX_VALUE + 1
> def c = 2147483648
> println(c instanceof Long)
true
// Long.MAX_VALUE
> def d = 9223372036854775807
> println(d instanceof Long)
true
// Long.MAX_VALUE + 1
> def e = 9223372036854775808
> println(e instanceof BigInteger)
true
上面展示的是正数的效果,负数也一样。
Groovy的浮点数也和Java一样,包括float
、double
和java.math.BigDecimal
。
但和整数不同的是,通过def
定义的浮点数,是不会根据数值的精度自动调整类型的,除非明确指定,否则只要是有小数点的数字就都属于BigDecimal
类型。
> def f1 = 1.0
> println(f1 instanceof BigDecimal)
true
> float f2 = 1.0
> println(f2 instanceof Float)
true
> def d1 = 1.0
> println(d1 instanceof BigDecimal)
true
> double d2 = 1.23
> println(d2 instanceof Double)
true
> def bd1 = 1.0
> println(bd1 instanceof BigDecimal)
true
> BigDecimal bd2 = 1.23
> println(bd2 instanceof BigDecimal)
true
// 科学计数法
> println(1e3 == 1_000.0)
true
> println(2E4 == 20_000.0)
true
> println(3e+1 == 30.0)
true
> println(4E-2 == 0.04)
true
> println(5e-1 == 0.5)
true
Java中数字的下划线表示法以及增加后缀的做法,同样也适用于Groovy。
// Integer后缀为 I 或 i
> int numbers1 = 999_99_9999I
> println(numbers1)
999999999
// Long后缀为 L 或 l
> long numbers2 = 1234_5678_9012_3456L
> println(numbers2)
1234567890123456
> long hexBytes = 0xFF_EC_DE_5EL
> println(hexBytes)
4293713502
> long hexWords = 0xFFEC_DE5EL
> println(hexWords)
4293713502
> long maxLong = 0x7fff_ffff_ffff_ffffL
> println(maxLong)
9223372036854775807
// BigInteger后缀为 G 或 g
> BigInteger bi = 9_223_372_036_854_775_807G
> println(bi)
9223372036854775807
> long bytes = 0b11010010_01101001_10010100_10010010L
> println(bytes)
3530134674
// Double后缀为 D 或 d
> double money1 = 12_345_132.12D
> println(money1)
1.234513212E7
// Float后缀为 F 或 f
> float money2 = 12_345_678.12F
> println(money2)
1.2345678E7
// BigDecimal后缀为 G 或 g
> BigDecimal money3 = 12_345_678.12G
> println(money3)
12345678.12
> println(42I == Integer.valueOf('42'))
true
> println(42i == Integer.valueOf('42'))
true
> println(123L == Long.valueOf("123"))
true
> println(2147483648 == Long.valueOf('2147483648'))
true
> println(456G == new BigInteger('456'))
true
> println(456g == new BigInteger('456'))
true
> println(123.45 == new BigDecimal('123.45'))
true
> println(.321 == new BigDecimal('.321'))
true
> println(1.200065D == Double.valueOf('1.200065'))
true
> println(1.234F == Float.valueOf('1.234'))
true
> println(1.23E23D == Double.valueOf('1.23E23'))
true
> println(0b1111L.class == Long)
true
> println(0xFFi.class == Integer)
true
> println(034G.class == BigInteger)
true
指数运算结果同样遵循根据数值大小自动调整类型
的规则,但通过后缀来明确指明数字类型的除外。
另外,Groovy中的数值类型几乎
可以无限大
。
> println(2 ** 3 instanceof Integer) // 8
true
> println(10 ** 9 instanceof Integer) // 1_000_000_000
true
> println(5L ** 2 instanceof Long) // 25
true
> println(100 ** 10 instanceof BigInteger) // 10e20
true
> println(1234 ** 123 instanceof BigInteger) // 170515806212727042875...
true
> println(0.5 ** -2 instanceof Integer) // 4
true
> println(1 ** -0.3f instanceof Integer) // 1
true
> println(10 ** -1 instanceof Double) // 0.1
true
> println(1.2 ** 10 instanceof BigDecimal) // 6.1917364224
true
> println(3.4f ** 5 instanceof Double) // 454.35430372146965
true
> println(5.6d ** 2 instanceof Double) // 31.359999999999996
true
> println(7.8 ** 1.9 instanceof Double) // 49.542708423868476
true
> println(2 ** 0.1f instanceof Double) // 1.0717734636432956
true
// 可以往后拉一下滚动条,看看这个数字有多大
> println(1234 ** 123000) // 58162458868249432599787315...
581624588682494325997873155631969622426128728690757484951181948139404423373302912343278835631604126614245027545402683683786515739854188999842056807803123111135050598316669107936709877352467232785884905877097465500839036725562591343030077757248170732689739572774406611844225114958111493617211641064077735356603233017789521078284946701132426022511938030896457340923860468732519021382922265028579934751892419804012479617921170495508810105529311090991035255674804493668606662229807360170388555939891368790760761070489230317196801421366045565545360725915413571027467066270909930230560889694999095329316734613628023151645212279675737546486578372301664537183381163612819993540747585504110699733682237154814561625670365411171094853078273598826027707069157890247511136571310067700889295274777362317238152126587299118673130453916163580934955731287512687678415909325751140707922180982502209446722498752407367998169533413410033235576329779316627132963460830136633005355026878324399732250880222664867891027898761328560033300705521160363909393418285629699518966457757834678832439624381377912273474133240928215058079259565673833617206497060112767099978301771239055340191575158528816290482566959711399415459691684632936416011314955727898759443673882697600195181544676979388238163091153686372174685359709677783284902953644537841078168174199127910411889974538945467510728271358987452681111626328173483417679618549808674269976597454298196490927813417642249091314140466553215631058257363648310682787849513363426060233809322795289669903551092894296044213571583318195267152521410450749046175689389204767432600527089489277539336369181614650356642191634062826313231234385023974932408931637383218510956828175285569671907710877745823876338493512230041560995499582901666009590154113665783528390822656051892378069939522172968017500105255072637387209688343584507521443875189637331047538770808513858873837744632484553325593665240228028519512294403407027495315669223638083783583237060216143409491633534166100301115529216313131009327728719720071379277285595805182285374591374765106766423668765069921792928326817333398886309895441348544015722229216190529298407039947188791558836891391011287084647988188698524800425661148310844187856912142049328293691336794445468113615215003791796013707320582864032052198794568154050190774316589166984002152320020154885533982571100325242417555393498595731653619563688145894962556833141127770177121137752924897047021523237303710851850176893120660663294632314049729701939769333521776092727972791839315549804914361266088462071209615427784354507958020282474126024859561934515074003693096648416592996577708526995674390758595443108010951105587168563524609940726192932340136986610057864459635841343199120067798963251614567496480110636190187357104589871433744736174597969388948098043129633365362479896901816910173163669741466783494236148728671620042052936097366489041487312340225290749316200950784467804564812562058980596692100022330406357631166467574533622747798410912840129226731268432715695995848603572988715099467008110648350612691255377151662398519162530206603582850708850140817943162051821697268838924908167063546245901311355297832656284254501595022499677413998927524117179301156633112044490108810836769502449300981954273041806264845218356105334703399098071820462397673214538301634006777598676363114123420533636811628202070810089096571773744627696357356683214173252343241645597591286514606641825792941392242544300986650997235223792865377159009020544997135576892642952069112565838333190297496236153921160638256456336027111523366423651461250259394312822716035459217499954797383127596238056148729731305530594251787209700574933939211607696529379665805625225327231803034740239930534991291172358727086723892799634554686965509433282617006552215915959840297890630698811968172115262412514951363310182219624773872914405832834928341020963848279826113849913363532437826349393360102896791791576408097082237899181322396248836114726574582215368785017645617874475557290720233261465347299991158285779063321904856390186684745419571454332526595041718223789094337874927713247776046851310053183679991479696528067606593866004965875562212252848449254053904198483905705154013812321839145823423359018775924194224254608758395487192619538809040588078596168681685770754720235929202171193519263593377300500408095283730672693308360747167781819580557673405136990147885482165823745225883119955484191013619007733094976157942203777103292303405363972776219896117241244332177673668561406689905452930368103568428740080849008752031375703795408108455423403189460900712560786606140714363014818592420890428861969783696300690047536421640229054225234707468592493577728834704919269374790731385824577911350280708562811043773954706636333159279108315564946190364165862664469539339960780477000842801145083041354151926986762041500466254274990453289468491068644252365346627877669130636362121650415044544427555444249544448404773338247242141040436891020856672582166133687085079730863559767296203847509709540148012349129929472354466290820136076696323408111916087609802858390999801944322872401376259478881628961187198930635236662905798281374597315172161246018747898279063869979924206227480317577677478411626111264852629310764414244585721551804129070009636966473028048227338351321299494109990984085828951794515743486834359078453431657882288960717256534532872301482253831785232629690504892424366073200673359236893957949566779256419977131638898262836053504271489561254286222141037484861210589905503032598938443992397803288292994122532537608643925596945954249751779477908383349624223815400492046626330283565870307104494983011334036439814993227511168680646160268886601466856845437859781767151159899429388160241393080586875659344829936432059328211943567873185252322677876211537520614952613627113322918629362918147434245847443142740412150423684106526646739605846514180115092526496512888859390939155297445660071118780654993606143823403991338232059954991697235624586777049767466201408950882098679403575152602378866162984609347796352979980620652279224923440119896659627519909166459191723325111335790261482995757225462018406302554537061287882299544240721659794589059042059343878778580653107856957246258835993034101038610940509601953985190041624986794986515745162842739862654211946008472141196033000355661591943843472652278904926246850186927560063737932221192017287749880439747730790541307058528166645730904010272927656176872160760340954486725914592430294553095687641823376034387767393315942934315588291639895750401725477594911794832857077980950285574379455636554568566334532488316322273859361256774087340383525197074313359632274690006634183655415583656901477750322954184467372238190317339923829277821496720312539189025450691884927568266799456273214049598349863897550628132640927329477589840847371096494810527486224486963724150701635911747095391991219371439085957430068607129833341154206066692883059581446143499031359299431499847645148419545778057600301760831472642069369775529166514753504283544116434654693580108425715369260992010614651780037262570359780506851188046539502242282315870014207549746240648761902853385258239415137754589545939663178967554822101079682552240130290969133654984245893272767336018467849475749934195518244989979324812838920314547656504566155744068290775356873403021696136723697938170916246780214341882701925307517250469800142788694647591423320166403452139617375750310824494956247278403509581087585266334481198291801493267941852035572848289786292548025831544137315441873578274112770512745187435011788096840327338507783471318466430784378162258780924935538038548551079045274751707327873806042551823099486976463597021408319312960749984738283114145504127409577015548288589293905075172344892398314741043684446524233280530034419417561014302358318085372246082901066265776669547419538008399048839317496229907274693882143273552224916092310200706911360391616884028919117554204998237453843415660172349820267725964147054294207005234607144037856035415922817350400904741780575124691178403776253759271991081931202876963865647994946907593346342795901168891256275826205507532358478556294841163108807211556894775279911564204271651666302269288066732851448954278206164319727298924887036284102986318821944230394117125529813696212839880324082989056278037650531090771751768256824231904148239083141035462105408235452564084041141952103964719317216920076396775688577137878395433087941475147545821158665164892496292349251932883039727851537082249128729721970030087871551193425614699849512119456395921868375031164490059571740302804250090393233835511316878510363559342691422641249802516647262923943033338228062850880997549765087921835929387762388925170754829049107925076955738385708992874985055337345885140908512050755301922190598339599315279596040310603492409064119919137125118395553042801862079456910516631555715003160648484956310141260708550457978093701089195422327151436133123744674315754566825584820415308431440587821823075297791004170328177737025153199086562167168630838949584975592487105387116710183290369392292491487152293867676180379692921826410413360688198379486150699619753308049744942371051329366468213270061387552272913637412345337571542965408847930419293936965439364758531897456628128192306218116798231617637138517033045528206050044791100741276406065742150089362584235803909065628135974072687775684945877256324655945983737084497226134663013857841671989466684042361706136331436744554412652549481258804298922808020604706453854889250870259394991821706675731314996854469732514453836196230205740952004600200072928472387551295422090244802317510795200859952900947855747710635628856077143396957130461141451280574259766660513061501577141851969812329722355216586077386349379714205976400762208742432067045232488486608575331794762746239620467514159171191731110912315290791233226778400347987623589255502984904275893557265142423673599539056095954413979135843478216651019355875624134636811774985029866380222319634915014235833705701113429016813059102200198062847435272160273658514754397481810497229848252402718495913577281192103038003701736796716602748279559474972276373472068278843409015358115269035410059313689657422378933009660857886944931601777800762886437820706466063279336440638832129019084599923690758319241018891104896607873769457699931508288809129351701110849672650017929930428689344399059329418819469081155593328565455218980132444695051499529729175108048921222668036084532144693082470270132233693381791769791867248312854147564655074674376027505766555080672830650589604586111701577104066483660207867405224328772779138071318968033852306869484878897179010855701226315172149732511940786932568613448245413426631192384447127290502683326137250422554425382568607238190420634637241262622220161432210593644495811298773201760746359346445219585010002354243871990101503737477656652444430763355360953961600370657697932799455265262888103686206181660466425414844438246243887012248276998580854105471668159410579213712247572444647176096249299119217564756862375353304940383239734179125827526866297762736246838853503273004415500222946670742654241387536226763091613616390621092599061718934704676062005057652915992359280966198493682860521878115308277574706507296933097006490747969570635068538038795892324435883154717713138232833965209518659487737555384357649799376085645491459168520336741601276382054165028085107059135005172023932763546396280368549940169801500790320242349238252648136154511740073120080758545461854058865603456526746723430141606508014362421180008872008234590347557762911937805621559940099923112022563938636909044687210697596482291734872632727735725882275261746589199303318199695037519767971401130497841787716664116078224660789163630705820570658015702644946045820040687289090590138415344814861607894711586980860092881150880724454247432990316447923683757761770480642956988258557240911202453005685950040728544585201949350210370890461521242008448383245009201790619497649550611479006338165344280716160312973959333939384440526342770848138375336819041376634586594121461464042221795215717366903313850846140771234054993626167291304675691618488251089550710910835316204514873231300473162741174432390891965566516056297935706058818371559761507847950417110533112554296143074286492688166086366862900297254556188920853897307160719931282346751515968913663631903293084089271084027713916926188192039976120623461446071999648316949395691323461223571298562767033754363452881923171770462313854189230481608115187691912921807879551197756079879661069679678380782631999128990466126766569726788749987281043852197473807640349329305230577627345896641764656792207270878865276621970188031835115670714001087912638268583749608887444509163015364238787506303452553317496219987366944706344361254094453688538072935196156433752096769874520350546039910072174504101108998130990406364438758360484585152504505190447285724416207636493972119543051425801025360088848764945134186639003517460107655995416153280238004266614246560515159554109124829200812211882263934728818700180224769380169481803838269224417049227903994867096987263271329663195687641388364766951371689348893456260961562682383806771755044148255570076659241807265520719820204624774107290050955672279177636467727021831647137442211688871378192017706332091626707657535094556498412399888785045047641485547172544707039836073406294501742706861337505926128044920561194062399664393383809279581619750128889130053654723158288750392936662196981871359580210403219389733234431736182489032841920796404442955559981446816320828794338758204232225597669655612113043366158061056093056174487636996146371229054562115935328778796842062305281224204944511586427229274601872171449031917312471517874264955428749764506399545788675975906002336684836687528684261301586076673688138273658471275593642428503749328617482215214574188978058541799585738120237664307718450021719493822612809915163672850393287685330443675062816782209770210099635748619682184460346650079987752368892475292078066759516541355604801741348504185664160554299060759588179268086919789524493748054985738225943927725799446139914723981191257076718930146544016834594359293735175024521549531624448261564682868155592442311526136365574172847719244079453557329327004252411057078571526584864528081659881545032086009138105774962685243498945116461298799965027762660490768756239092195854132354428164337039361216877951929924602580125937068258045995060933806492394786050524212882936234496597511252361759422063284484782125254092900315347933109327663420901270756021118883081898626533365765669218362202793169036285076211645405520966334278464194625542952931109951771034472117927963740611481847428799892875399369259619734952788707214086766615733714778776019429979895243700796268197718629980177217073274474778074198166267113783690441584169950915957462077908719340628549503693848228303372460333457482308324002416257301853848321507981176354912992608791679202342295464652074556680975023281555755496067643894372928121513458524593515057951449414384008061048435806135405040155359105070191118666640678226839706037771200187064546879894774304025474905353206596807745417783365328474639728632385085414493826698758599960720344967498025307192652824147842357616968999337554769474152615713646454154738252733048553584193194656043386369977045706726896593455788947371546137884489976356904636712624759988826505173755033024401925883883939853197707458956495677039378330503387563557685931956239930821260169949492107893357672061760192936729582602492338220273534264017217342894903436226966294522485653318535533513798206785413682939609212003672280023071777909136082581037608166034109670374426065089074326994733256056069700042786703922811180341677172749602758098919430918021343673826301492194601783118724153621966398797417481529197583959716968503931702858212789400368958064051599822313993514644548860114666651511200125213887136254460239497836970591553050076550466643512487620437450639229504986483020653614292062342117971085423224236862310509223639250480944817463151734297219086104987224181730700821336890783769495765972065555529336479799931306229340902805677732411478933388926010695817134040445851988317938188701027636117351317155310151152493530231319205008430368440246958654431893299201841964380604913285163288131262264276163379938085879590525758185211147558800068866728998924070255314140571799587348952453125509364054695991411671569473532218229885989996882836454801112340475084648755687801953421566945264308942770816343469850437643484254660061833840443910740564620693255002412093599606560409367155983050374569981115455718436044767294725887753967218154071427769257412311972043330124109859447528490893083242816575800174185708918185936782597362717730790293565253826954294522844892810741005689333256684516793785194956580917624275472127220260701516794532392238868347412563190074722682502054017884384626294606172045317453402081188889242310532121010323912734925762434515466749584537852139882795737477704912976020982436627697882699764495242312215736165697609966845593077521947845688201046998848914199881694945750110064824697532452070346834034052752541645285777561049377546341497483210277889166541264384990426243804762980710512101573176885045574314739365890937372419651110055213397704471426206300326120507926014358129033007630988828403940540517710753445443553352737358887894231818068592683545585183935848243187900733614563283459625195695249446288295826133984096329314750685499243641509981780008343471637873812401943053571991100128357251091354864370873645030990684091491425103998538331288326275649466483997636815585056493742746009746921024328606346403029257142873377960019781532603711389804735820585107674078777420271450959275684476407790813401636882423098468185917130108916559679594984969037894405286205433481486646841701148130587231898816921492434447256485393408512345355554428296208435417165709957478842024473004207610686170821335735893933184456319509338928779761493978309074093687707539836922298213168258340348124425421084043405655445390101342702747467322509960935112705587721181107817593377443329770672582924128494235358683757235733434576247347779700117687856464522912175373425353794511867543428705232561384541564806479837910106871021103149508726328063916774570862883749537372634400508058759045666753255812845838346988190566538244096991552565405301218837309216342516046027969984813218249212434669400509763868254459879801407336784437538104211580295436719802245346580265982395669708036164526248612974735694371213582677497323308572226626000632497139050527931484382172487328794982503904683323235377805362349504895678098472723290775846260997897793168750752745335295075080967556385816972615923549825690526782623704243127207479925915161371378450195259864240095194034753649711387004384040984905721992747659683897184282914112160170722732456740847663140764531965703421717469806161447967433076908577234704067399615762130222498752401486225413503695684754340166716016285492686056453179265138787591172736677731392320431186441424655652525875201318970884179582264964063148345187873882906633785060107025573560309972193850492160890965227245982059568427392830956939831098654029310844679361037349751451047630153608230970514188950526108594332361991839729701207731229349508222306511511769674619934444689995834791642430919119773988129102683380817456106821860426247254604813977133305510552605851587730103331043192561748085883467263357714889874291611416521442913507543080329926400004309840438862646698588957294046324777799366262043608848828933081177206235300263748348289739152276725393229841526146228603553952394307017270591932344281965990076881575407999800703550808575612606538056608402761760476567331990814884743879647422485026475025746748478431323138234834272897694485046075934833643094637939133533740115629014085587471571197564278033287519381596168852053931852767171205558906458812652866186386008962338939068785238913534066271715818124788767201802013638419187039187166255324358576346933604464697486027191911517614548161276797608192429000385999492181319505528495360823159393768041337013084752325320003671810561321706647290689755812795163230145121581032466536335104081414945229561809303901103030100048752299441797013505091110047679124029596387395019193805374986862598782013319017847292271569167828830177296985801786113551785349152497722632129762116378189819705573386537527094219900067484211739306148970937288380398474179944892352130856448262565577004768117651293460645619378658572535800227733260697681841588694976276973036846632574727165680871874316864080818933849142314829665629717833020227007119389957276372325098868531160189020804401446393253858569667677728708679741162574709434009125588314649034694163853206705313603901246225841952595049775274218206793337531663424060330727750235842848538470027484760275315403979500653415044022790716692795309039628534695729966685438242266993218828767998604492588541386032425130380832143296782920540554635384895319134895087234690361396247113639680937441125572417428596324240852269393792203380563328783542646367343059901529888125865388524491235500488781877531280896124223276989835650754566578391586017436723591337332965941891410970309310090167445157736100758538461565683996873231447846645622422749640723286931908032553776957548336480262837682478917090118600430251190528250382478141002355490094777512577641394786942657164609187742328744199476829631968782885397367492460293947401442735725583055829398874708399479000447501609025610527777877927719618867449125699199507997701378303898043589248493067015801426591301883593827388522800195750673523808373363802029695942021755655923026186712943816995195713940729219641916560667841165115540831137353327034950715490063405063185217182045049022066421584827623818188327967680845092197894073847832729218761665880464808824248547917115585067653964036711009126149788138705092389841863264358328971882400301724434967362067724566304916295847992957394536073453692338939352868037629463308321544299684640499447412901340125185596162181466567297098698271770027363372045572814132948345905738001501429296371083227502198325906016041091056102258954889372936719052079522786782280122752255063981233169111677095631050576816692527969987935839925060053127859479025512079382390402946318251782016075875670858678354951841047870579198031204514802146631633174594532513971415867316994373481716330433947687688354436810750491262132492783158458005175844665640970516756148235334259167305323693928389632843554452249172018179742344171776425685871591787587413547253667838679669782633639884086032345537137094375819681609077721542841997130119257694392104088279569182261738014739234710897065070725765294945962955388810046990863707722803858633846299131298935732935851386090884087886396595332635604729724877723316574367182927319529035527163073994393096129408653138843915777204621050466941959880715969583044297056261429682682360561591439995851761011549647156347577387350816899471245915004069268159994545930005503683018851204123370561378462798106358414421531473823736088552796152648182236493208146846948294599485453700134579217033334095748849644292667422632242038111442077492081777583376287519923457900353553431130905021582877343644519632764879677124742172730907603773832204605826749271134249335782422633483942472519871868477765665203634770469249883077259152887552380735780093826715751195436612083717587271777801519238826538986086954678841966970325269047917716732593867160973040510903349633499091109957784238253678187056184778501091429392439642590942098905333969984108169019882106023937698064149219668569778331950233323649093889484269718173258492057260900302522365750389391876473933958319489113141910625913442346875659173616152950195085327353569139557943047271683772271469284549236522821765108291517359879451528003485529840235507024473103405515539139631004493280544332140798360549326340608872671924155617832333637778765587140083588135185657935826671804450685989477928582376023118388806058708147526103462302941312255128648609381985949047625400499102985129931746027992676157584757085637617432335660696015233554894875874064559189634053109104604412858959215050989352381464833065493882533052889222334818887666584679694227941445253017852493272957254784799964863926995309838605242664070532768910916743676600687480429887776255183165982780523412935852149308172766659227206701286499819690585480707201943950196972638835002593963785747676953794064617211011044066592258278818085817239175634150421348418978407444413040638455572577668322488199845196956371853625229247885547468839409824404121358220765418533689448562134909377475310704677528704826717607569539896296841766482649348921068939167239677677767514161900796461318727893670585748670887044302355663930619260469399838713281928388426280402527545512243431127484159511860858716917372434455101345601452928246241557179501391001020446115407932830566831166712132094718213432171453343427859917434855254276359174270158593281206095833739934251831338706841024571373477229243132838074599787262100902216131005210706460671332740971470308524695769851892710448724279232407297056475643717978382692816309183873369500045551692533465664773643756923728316228803953830310790636555356079741170961365392695898706047917926981338293938115867640648344580191859190626782190347126657281419551026431481387572570411185511892857207767095977426454376232226760441567737961222776127796765133591729353100481647032772668817492712318396484658410479797259204757165058951149829182235566625175109844390304056870633056576147690144052887497243809397519136782493446285736004625636081610982688542368073483637320994023985057711668085026336756347853998638512385979961990369090866556585709046106961249890459297787236733706308676091246932332656247599992962514559819703838615098513145026018007405169720362134324517892347366606476758915558112100968015554458215341378764480705159306627195857626676044732185019975040743086592251266313471498301862972879071876097108974102764161849910581324740901451372745224505583488610984068177881672280440114329242203297446583338557530053232000043063733066562149860780104635814562866510891804296784552590921854773777717516533233465985295402266200564804176301499327533206243440687360421521336017572925993055615064271062573244720631169351544610448762552080884353568429276655690098309499267171115546287684587353011867901072599667915129042500847229993888503041533019692345049749737057549941316837940586318142615007567641202160629350022956231947988281417660007697705792030437718031503108859580501194126353183750110661099465262888708160844312366861222312748678415334414431325311750130861352592011181662328677852827079395376279664427535355439211238459564053063379893281750184790550566484546745529360792799518374939044426895326033413613138126607564363934476761902919569670109121248290298467543908265555457588512458120481174025642484482592129304335313003984579296723749675799901851254313397242797266604003937747302418769355051554193800187081234884651622414729866806246217609566224400393369086062943174050204576469792844726706539786042501734593847194902861028461448394461253890045051769271165767112395912963783383627521683097263477094345506974331225402291335724645297949061600922283488094560503904357711311487801425731318350074785382578054587903781394474542355697077264066904632146683846358200920737362411045848938496229297003152152556072966271343879027630889020580601649417180573954566209890113910612268766830619919083096681101139876900420040773014810748850001033985475093816440253536096696588989502482293989109247645945907831442713393595169081174046128702148463440234929896445144909093310349480151269668524536067965720373517190067286232434515005631820724984696228627310274772961354860784989254380346800027249849149250328846593507989293521855482980973485060812785312697740662016996779697773023056737671351109704548676686563292325406175124230540433559889157880005606257401487634120449709208968807613606083113109446154166293854746794106797671996847019060793096283114742399490213510913738261094937409527783417393250289216673000533616224063712657362693128237538119732871481948971408448379942894052945098055557017863605790766519990776360670968313049131334389020072051976323583779523645136995495812341197735751326102406385360656240890120815390959454986396017554437490714598449037432034370297248756392850433002143979653101366454373613461012423309813355166234298199399088520755743905341157448863962667067325693868205060183509297882650332634950124997875183576216900010997526547485605150131657022908704763161714796691285143698425525106123084750280424431519673856333117255140011632617689019751634867503092630631850772039730422143939500885411015746601878811271382699472358682727073587854098279928145511097178323988266718726319072265655524715099001017983941286980689279930164269179105272825339814070962007115357291997885428048016337511012334435367352981380690172766705209675948146095878244494173477838917728146999163585334500298919751652354124262282573590129624368587134788117081794550100379497126451202507876727638111285202556427516214407287119874420644130906845738779234528859669721015876344961045159935857886053089245626633001152011152539859790157403476932596775454290723738903556362110700907979834602055494819593081703261881164877084796886093813380645047849403947618081591529777414849440424268181633085676701104095259952799854310260169663479275880113194922295549288078944779830619505597035593667697668646208059107030297086702103165237373799099546697757223354960412195276743164952314074032283598091867884142814843121019843469484378759491675819514874149093733151789921757243995923139860427641247635697863694956038354233354827289411803038496378056872159476867370317039806205733948409891116660234895288243194966211753792873546072799481582847525495564780651867279677476378390883749047898404042398988394961853266191741774236683655619172316747797327490308523662113915311482580152486863707613099707229951947028653623927323216958294282925466731411844106872602300077695920927877021162461667461552718122760660937960617218519848162008704738175955028787733588647781629301404688649296701236042868082483739389377081571255934300101309511243819280549424535967995314287572863195173615178769524704402130585260373013185950105543674922086845209347355213090574683138530065451966267484910101795541183455942105083927999205089026099550314836555763337644882477384962076623520147277530502765470141526433934109835144526064959824984594741761873642375026292508467294890646575783116417579360789031195037490296974025858178586996750316485104777646716956279965342097672225175174857744836502789451567234624287603901702118954465356532654678346756492047983109345881146358324833915124492428155102020420353044737349992386626683851714583567030369962002708274178184218265748969864038797112621948147069450481269305843281629984151509935194243421468413029038454390535160316968185778438472407805847184281965431508832905809020031035904851425165580983373825790361874778516008295785399824215104288081170493588923853353564880873126819626313451191328064872431879620019179503477361618305128167841548396153603527006075384621007377993872044267790615632530879639136621379515845115378854526532746862205599099609316939944499526789874150921926800740653373842006317319463077014461579678617848288734407371119625119700222526914690747198183572248358843830143343160767075878498692846222053816388180381952595571831325615688742188979921605219204470865808517890958523725354169066491814005039807736088117446949254347720102466544313872996703810500780680682011117313421450322182607089839528141879489643366148099894492764676328191695422665334286319192648925198566257526322676626778821547701796573491749181339105437774059102963074306080615955746314316850186200995728936858015730183368531759277242102594655662665941006585031293484643469884861913562214470653430567586770434424108704495391802652443029469241790941360409294145658124813961658842212286033368539623445658191817327518684049743226310327040411879989671702174647409804318199589485774381003325784431404816377378468964061762248568940157336912802268711497933624179582244263993482302353180313934332760107955994034906105080142802301280411397562196072066702530928207302164962328062778893926863092283948347000761604832351183115845856368735770882588136059961343768631643011460767017247015123809887448755652470580079474483434059673289430386982389238402269041475637803173863625491014759996605898758357579006771663187245832694068874176232713189008621910489961537493431843290467112937558362930775466985298794261496699602181387140071435963841896566719959346601477558932970388326809503513944586237133630200190569900237271324049087210999966192913801868313023494567025573207728685345604246059589922650982008929655315862372371307171381967927783303818255453794914054719872094672617262700623443162894703926389266289260849212909274351299501032373015004049275935458038848660886147443300588489877961304130004916390163180825684780291348369312894679007745472602416049754233067867404223872216549246893703112661461726791744842877461108927210144527202839265604402622404358037221162353929011540371029382171084747449939234005349412101801675739197349174160502242470936596846893216413458571394332666464207004594106132727909109641076536633872721648129449318380300531103315800080799890301608568425953898935444294529378622860628523298561590587136168124471290528009010120214524996055549965952446950449807901878987773979933585604300115444744876693982754985349143287420533771316929939349169524907687156583506452517773752913282983183974342367868370704782097206625091619539937826558463158285700589489687812109943989620792635929797495311265184872320802133105766722470960015725213456267937091645033438485505915356793942585798601714298840300873474780201492613080677287480502700121025235870805190661257215381531100487142645599180141466038876180738343286931702689789803167188812671795393072743158398654632281972531219711091232405207983145756882334000314351093997233836783479295483415610235463927398402726176257863426837787603581885523841271292869907213127809988426595970535790051923595025593368570379208839578608377182354523330210215972126921525439804470587767178643746139557941203633776019486050897945946691539681175326777671605993423929706028530941744176366489866014657455700722088448986057300974849325449918422766220366740863249555161832486203431154142862527012236095751086267053778293594556779695255453132214420116877447785744363837633159152415485221417367140186093109627525883519569530364455228622219169974714812833637656838841085913267513061989821853785701738808039971076152767037768334288624052734513789133407871400147833935558391177765061588339898068151262196806066698128847809669186920302842750430943084211919273835951810634118415638530938457792026370312830034778330632331854168182083317159537092204122621495595225970613703556084376079648812345649905009162173366729898345122160600701355554487765476048793128031083449390961017590792476541088667035744722100281369777268970919432026695024780776453978478227352866945184830845215840960089534273781195559705785868899587589560208658676387738442807125226159949192420110136311104374386059869985830801782667542586271285650724657747847136912814384864098936238921893440037370726039284259353347386172133084301772972396176903023068949119362693912901454245735356726294982360971014383771169535754123240422338764643691201097818480275642889562457435785595964439712854537262108063307832319883133091719590195375680871288963891588175502990312109585667667351369602188653382459369894112253986634756032814970620698464779019547725312985293267979020802188975595349678721436144780100424087530250327190870129154934553391223014144587797302023796147015521150944888476463134194978708943368614486097253279084662237380321275093728427071790360610198626843656988308717162825579718690860630367195486876257139299653643885424045924121663000641305402238049205343452290402620666943615132127514442416870198918602000493533787152059127392519465841625703418956795341406043493719465964628834474233968021834307101178101640624041948920670488610445782405200896712624892586368949432920413343863742860903358285666321059995572503304384992140967735586112820858191444534640339514828977957458486684459725148128468202647578274577478927620761337313799319838695677187385484116728097443739551400490616286997358437226761896156391133596022473470203822914831351178298189213702052186886839796364169329841894136099034638207158285372292655877035251674330336033188535838220240155642576025649088501422216008909046527967347891248737322830929205817751566490148030944188415161393066702361154916079678818514247935851014870056148796406314554977373314927301064425327054790823715648278533939981219771439338272375118025366682299094492188840765099652183786922973860636228466652038928170338656298317690140276542611610877383889669760998460645886222533894535023356234394269349760416691914675462374842065520086232716046066555521758503630113493397235489544992844665736717019216342915086515329298951071430881936675364818638432524909583939829183192102713130275196171935070871187659690777785880341077043909208315066267868368104912595336281514371835973726171765792612918945287457594730911295333687545262963343444621600647808165122448157423399070197915521794210261603761930721420081011486560946275258005085922696158902919037724485841168344397119096065809380830812280353057990575006660233163944625378136507812695921829710121354878965479790685260997628200971024565489669078794625828620375011732278450336786210779096373237286879323037717056439380722352757310326092584515247746423624447773663798776840836418579453729411528697929691787136866939766637772053336113865511229400247848087103113769666976552906345539981270170930360822668443506692004060219785372899942974974549652851113155745116246830441382256849898196192901489734008932202887057839795747902284257931348127351359142252533444817445222036982239133339779246151924184343997216639119163991921389410795884312448298188306260606182084361121637320777607111841880532723103891241115074585235055057355082813840690537605863132759899546250188969198684465454595955739454597956868072860564431794489477960275121936721466451102668718585976443457082267761246204018251509054677681372308000131607395237248044178146711344113938434932464514223373240390577531242601592845259189848083445873298044696037282353341376575181062894246774026353147954271908868532692236433625292101118598170125138642623206697220949133916048604094377553052116398705123964154677214661003198340303653876607491660478175473640633517461822687534734836571789444493240884238357838748997054706319677977935086512188905592251193072646240210467735658516335473602948188371387363859779519434351611969901591468592779222380671634494158400179935565403432202120651586219894953424461111528767244909779466547090042543826622928744390727785031543050669370756032319385320520722689598860769776509532229227577428453531547682028447761336871036532966131949910855813689597257229123662373105228098886793531141238791240121493870789779357459161715191015693673607821971301726537241423573310027089500947735162985863436877183873272535097674287113467893212622043194605080355858532564798461639553823374992602824875479033480392521518669172526899852836983310721914699768222059965067447320325951621805617903652570683171030434439310261215465030962539515592446502723891920139713310302471889224838674006628851491740893100007635311805479302373291565939521025847066570836598831625015300760662141701319133737145670164698817310752228494863739266792234580212396397394625536288288382080995599366374907619864317247041656653661565944652625975346580195169361288196293024537885601053195234986307791586888395702443104428969472391938786031994819400584331533013863397859926256723198840054757205051627537572094802022242132643405944586211969430965782586808256204667400262104747925992645158820293848476588589066046790356525246098506281190282611016241063213441280023476735707445103278058639354796770121486936636145991474487437313744885303636325744371711104500995836760045151404871296220029560002243184839688752375154223669516824501678222420316409771718990139736705074794244052782010600899793286911671676798424556159265436135574093225471080613792982612310495606185674359992129435688771450582823895129114909217134219377189116348678639978265484392465341541187157699165449341443999101777334328018213503712812378315135343457997427850643742733545668474286438653006071756826334395211409577199770704472873959050778147808011079977662287706881153003716053577442900723124535174674330671098654216081223281503579671858694236108181649578373059162682361417825367213007794948395889483969701427748940474814285015006856964180530862030589573505580567032385243234606859792510673353734361047484590176285975259434846117319056835658009650152467078154000167132044548905043020214430194579391438997875631613900527238059591759610509389313594383115587337153299423743278890317624789566365958684136170083517307554251113949248237118898300142674382195507514417731909017524135561458042822836298243400834483964342941570194127376978048103862990846460340282863926159904871737370778996888455082636248501775822172725917649826161022609372037050106987115383592716139567818489509502694611553980712582685194846395477512009993548145849956222218506072910190381332163856500100767071696301199398186625529976230165592623933741712387373338828062730837281192886440977781698342871039230761818305789985971241551516143070217000049877322801356482856462165524418317567205444668612014834730774502044303331995019265556492740347099360203410343111746585078411994516080459835741208169756508002386663238744924441623130890338941817871924732682170973164258791397039720095250118792595261189619490053651562680703599500047122371108347626157290997495570664828653639387885211804763482802159454247326255009018323954762404847238921311023093584478437694082601719859405512878056817822880448358555438535974583511374590240188030727103701604286318163681562357288842952876768041991148080053576155904412696634590988056248703586117504996383101585741892350003159367626342519481386113693818242201539919000169107183284806112962202691442476024232466679486290689331522905728562032426987116759223163398177184670282111503574224611527381782078911480667698731754299607386534018670446333541855335910911039351518237144672377577161973101757367490756259322200241601553871125134132594353349470252095399733528128296364888691896718193352674149300404572442133568631282029132756622695759866683896290386190273540097693102039000554429339710581369656629806923218051218464869629551755283951476487149724260747634105366790400955859847770098079447744597458154031670770785663528380229518345230359313524889587078305937365904016136284824020783228539263577055386059486370039671344695258148575988890282297384684087945569187199146054949906056233389276741149413550876421084009703294991443024657228078306274492351331746753946885175442940887572012327941853031024061090876025840230002437309278725577963273291868342889368210531919030808595616873205174967787649298836658629151975809239424444538593551297275103835667116404380589065464382331758298486565886299308835222217510541134256045497631967836052458326254080587676956367315649101929162236732075141544656642631052225760236958575876561769095320499445772595582877327442378642259814974328688387802081742342887375985794006958892603224021131062332297864306145458998433756962693471204266286407445143398443240579181353686528008272074081228334418006305137458647565728831057816520244692498663173796450929977492971535108055211806847570350211376413708617061870247465024235368111481745271205058946371443286056075148684655439914900703648546962505037635693404968976690982055507258336297810805749090237996814820683268008260925815406705157488069418365311608402374869490738659328941122171657564679419579758229383089130615106771058904808898950424336094402920562918680237948197241695376793383870622566023111495246818217894656435001941143166456042490737510289600500955108297977353789361755241961397455991440433250536643312300165511011342131161021520581969392112369876809791383202386074352676037865274441643802207865716335618821990235344246365377356611155241876289222384722058771189841864545067204305363247881640767048148893327315933237858667966752134271260118340055993383878351614928529966070438983513295125965398517436524015515286869680374905559962542797922631201839690083615287521629271672052740270710828453144114511194507273701552522055764124712684303091072033863292494616235712431970801872747748903960153928777596470344495098308955612011905360555373454924801249359392399776959685199637480884775351255513971339410307545637475789374562702372429989299042371992808523036630846166880181904270734464317599238954303901207183217742867036015068555532039031637356844825892790261625289094950015904130537298187626369164924131462029633775114400263057691399116932372508340634057045663929519301949034152488944559807260050805673909620516295776495668013063365234484535069916019113935079049151986831916214323909034116341950514011698183934331935089268724401179657812451954569109958726163624720130469727099073832439643835837526864887454576818831666158840699573035413158796865444996876605299260409190351115282196069012568249164996154467801118321476492255681323178819731693436011392101870668125517352958638396194562689100661430704093122180571954613614595075875654669990654231942497942079974214016279917356647323438337870805777888888950896944809345716802775885814619938596648915184505827470434740936853000089321351746919163952169510591822035730100761591382154069613622977945961560430415748384898718954677015717374230464660120072939662139821700148242090721291441525535299001627103375957849966865802711030325476341061433252327705428745754729771870095044667933322919792941820993058813444048137864608630153753876087112796159178193293992955481600039764701238694091348907816064820210862888919798596581119598346410510574509176513487761315434918181024342586068509725475779536235067396717036739450799169451859624095247100289090532834730677582653685202997411219648908086640521572070092337720930571395785936776705954927254526973811168788783930199035158545010334219346343743002711367774182153454509474027460720443668048609241824181974974556909891650855704594156260295395125383265419997402276625029874160182510590291002844006098257467056921798226782690594838004458860180045473613492104176903316778263435523083815359634651848073492623826609674525986366444347937362059478106656963201390294889074500163286288460168725362752078584791005995810632139929527931706613815263103912080778372861113866696969032422537250054241443925737995056100385591865518383793104271335985799168843982881687633020721281768137663279188996357147097267114719668246086937555300656780467120838622290415533914096477142992135980375992305501370292805251446074434202324851693173395505438667720188710618372560861863788279028792831039125738292600110092350469952581646815138435238817165803899570084890051962591619945768119622434291096950495233981214660123809246471227619876514094384241345298654036967939323446546399043390562259554540202178429046623162246138173712210258756461058808268508645237301855391291531804896970090450755627444712524234125903914167594458269948232420997122882560202705185793498379128067825933044325057047159508604936716944847074462062922119745594848692966204875747514385015826395514583271655107728586065990401588030221187800975054292487279503589550270775075656489970113086909549499156313941452874970452114187220856737788292308507629734991456115957272631103654989383551502714679319323593891783170699003177675267491574888397825847532270366706961430975094850979602950014253136804237937671313928185160987183622049498658268601535418909303831601514237927440872991363038097601701099673895339588594205612946854348790676170814908446673656506428775335218352828320816198187176749713634526212418622141235783411233836806965543848192544378961528040996418543020310210589972858474779739326123100693518638366910844084486185180068564886360898408759942624192637667043703699346614044226069166314335900139741314369893794114421034049417089845402507192391248104174458522512587701979127733712409704758218951050707989121324294611039427020981705040092049327880093978503658514558784789911364398700372728360688171339279243583980889297775320517652004662750838012898717096349306856055928600417110597164285012370554838711436380556793904899755142481846057559910746927636861447861725301389513713648925007859616499587198481279922293068433427522929209742752721229746081750850843851502377281456723149767207595405850986662760985862023888737679890884585421018019688847120292886072722626141503689692125388128829848393116177401823131347655190730130971650691853078411687875826870396458874349043279446260008335613785599104524334732508366664622850317891067649883953450435002550916855386353217211450792689328109296250855920021535109226491847805437615447518948949098202908767139987056516665466511243063961725240082697279630129156171684851107024121257565448584013982529020100859701611231210511249397117798388244788058107557505871933428254981042051055271950094625958688654761561051795459577056695279536242951770475401510276608507326994720810566659976885009707525630642164307611524365975496490176882054727190669523988161046242072554800607518236834633149734476542488894493924190432468247052119133878842765789931944462817443299652439667059654044707153846421664988617415431253126988001539371471490440301055542371504038597753265864382325842792172738813109205974897188587035669518217309027566338707553290546576050262656377952009421418200237871930244798656822683203641774956293906773554698352622095825171877730616719879418431427114296191063840801405513608636441374463050094221291984463277454551678998784185246900034148001949397511697012430407697452727745557473471112598895166664192461217244411061643886172631448989497798282444072436078055854176393841699164729892187095993327032393602061047120046502780168812810551794313005257007045774424515634593848217760472367744328923199007160090633069675033386304629594689920047167526799277517012687197584713773104847565882582498537887530085846036925783194452843210748757172860907032692665128066407307012633822221743486116999398268014219084503163374882437387662285653110299012417125491758665410735756243227050197014981523327850024678238550806100669984600998248819074030333069013588793577187245690323868090728368209726281791287636683821374748968993907186823435182939074789225184021239192381982505462967472556036315364770274459485434622871066152835273064983433114958486751064740257962627311319660712073510609457164480982429771515443772937237937661638753840635898021750026822668436572874876478599339676331756358236409491519927398287830249449928598502434015494342789380659970157678459757036122010503865351888877454934431449734617037839189251551291531339315657618712427278584287637541139389058905798902005148220978324312516521644698775853513923788834408278182140625690828527374266554125354626601581109750328688432590066160443093569532709056153457964607298982681140565666030955683991097391810840974106962535914584989387970738562957273660298114567299060209109134572395562312080054230845077042595633580513326576445836611379009695481294490484268191135192556021846161938306225274302742018755746374384522549096665911882333799631325365716987615776903619507689008874670889283094856796969972493691448015885062903410424694556469139986242183308222916538477880758613972658472931033580636908206935053769602851676538537265941223945895590989976094696394383894083528007583472920688081727356049565889182615869182943070885711115493263879277784516115579547001443090757101685992125461693597758593116606223701633333537808281328886913489143108811354893210291172219958524228099310314599471602980197158270734320217105384871504702489115258354206519287068531174775841978795584468560962237773575047136839580788598281308890838508949574076144016163649835212148441710759151592508552078960382015882265189389950254775797387110680748451242937654140988418438967138630423941471793921452480671210339206381331821324027765574097387423624552049187121508434137022996031989522164572954079571174885362311109370833269819614009364832859812946460846522100648811721050985719443182304086155154385985176825996645410080700434994921331054920350532018551962662840894203442730138777808005769550144788994305991737632850648899625210072299087038477229167870898959466504817821651861214627182883899055528295905637392007325227689741760058141504822864603500058692367126622144838995396544190487180320199217443380499376999361616264596805066267088533377629897898799259341939654914396548754188957928445492628311695983283321812074987552645645063806637609964118437480430493519247716699002228218989512699009567513406188663589790618401376450004158935949185284005174366379965729973860367799610232123978124719927554522069731678338545614383551397413453386138242874087665354681991098494041739245960328802206883082057545175673603893854153051910308464138919885027838791858038817677392296207548825017751849723721334467958255482981522211699245184412811269268200759566191768358263260802240726543523918660837263801594721783672386833867825115875287985439171979371037789069296024774118802154278463937375496509065454486996776367538302788055152836005401387003617953031094178565671433207453546551862631541258773245923543002536428009047463023255195393389442384333148335084197662516432593320397876442189149088284102399454296451784633873537921756486360987003043176805586829641526447666223440021559382386673085216496261761346861689414015441399319778847040491490923845123746667918178848179164948338719500984220542426908526281773501558479943584187425674804446315347227459016602209654224794833040858086226398133655325556266786630529695296747414389407104174599845994075025932945508443423306466100448699947138764539079589613211383942195319718134656585199214025178653516043049116778983123831627856737590781450350844548006684441432930003919968582258226206321751471442063126974708306162202120008861359813538309120845723115782968049214965700592459281394596415573951788821436988048263811803068823419798646435425151988871388072517998447000291831196210070304863985638225294560795452039667693524849865788173340345151285246785032626001273009788538932321464279525178653228276880124580761429958446637534228034062112865059996159060853315270909424232999007922922790993282358738434022876151828009975538066301821990796653592118059960097478894551111056069581738977199167892550478305679519711527349443504142821783219452379578602880424864479860042219103471558041734038802159321209574827813728260543898879273347341186857730234937766147128127669619575801131945599446229063008606140479954515260858262876833077955208908088024674028534675883693516559812991193726902066601206658377183677608713555483483549854870597562326926018768019257799248865165696001778567170152152808585216792050963808751665843648607016365855431468031860125769978924477719888842148448248731646009184638913629864160385311797190509153410402772119394674890377304057681349896955982172396203729253377658067779403036619858034882897346650543045598512430774775511116797817974086345665937805908944165356941707044927574294999601877333651170568027729476041227411263982763125937784187801521192990170385340678463748600595909827954892477955935632013226406210692364229994293360070719116546183252998533193020414753146782315646026773173204144261159568190310655045169072675548417632688629111822793717604280767362401121596685490906362114746340630627304012316506482423905800786169772612922657029698946991706919802022389416014621720188902259523953979640518567545680232537462535112532822798642246981444938086723838754819983249380625212227674979531742684999007407365375835894207849338671076514316528051189649423056196029706945289572819953957112738331205461440119096897464102120648428307383893506425317665773474397618390940974850250861930792540690746095059774196526705822088525474029024744262523192357587254281652718451164534645310736582393368966172002514154693359725009940069708868620637355840773193202182714844220454074679886321804435136879682986443129788128589147330394346551988258120651108662477791835222655642633105593012009673900842802043215189537851745176525443990306300631326236432192896406213269392625624656745589412394575963376388709284285818099674457042164014569225551514642796547304328536762479011411095299677496600011004244810937029195221275766022536722833854426173311245783397344869467422904416294655415948302673761888652594294313317509579603835192578054303947795578000703498845016761189643239438795976929726384469488995631849598487424188562100101274489776786512550462968530500404796167310763823706221459378212103573969907544935812931734992918975633714122144572423173562652031216241279395581352395728114453156502780572035479854780170212265207805711378148613128692830638761705430435808781041426180858002163942122689520085656338367622051845620792023765743739910588692417135654297193830406024904542817437476574069441609306840023708793140594424915978975622755754635328463860942560745396412991689867497859386007902485487714423371541539973761381871110748227830688852478494610951089344803725534865048806015894834376392712217065028922669265077236148540287925472684201389985496604380434583182299284640013152012546095778434632869140103783981250718351504715260328455648483277423738029686102576385341546004784477702206761813558583682002759895326053873937677683774726473935589493622432471736070495151842422675843209276181721970100138459441271743254307788236070430389508360900863734945032969180316471660404228023860468287726096928591216685257161416913817468225585091107798590434550894956273976808352879486397477317077354940020588321322923855854621720944755846896779418779009919307597684327310933179446241337971791183531054780021828764711241510712284159178875305451827758118311922887079245763256349026853091453329504326142868558860419791808285974511530223620812595062640303206349089078636249813276818976675972849267939926690571674582016327629101385267830591095727312339556360609592747272249968864780592099964763853243513515501576929271581840518708971627710435283040932337535465322642176456192293930925548994600784892593576847337745202319091235971394432456275783176460864660254201870741060765308225176515155493454919367790695822515056192670372984142698885179749455397477485220100963453841782637185060982431929586385846926937785164833885167778493946423741712797973879051728141450694177086297465760307287435787685190305077599586216632439015247120632701016284202390971921873391935859080017270232804079219065907549126584403616847301486449229206567437120750593696823438201571550912571055585497026731180718663037420975869718080003045928488908087472690632389673644707636010018331245972954940937530267363371506835666705606105394733181996211562404800136534017288384995892750652212144496431436206414608470533106875998317863584031737321058913137624327482245103087508747116841028601104413322165372474991878757949129809419182197229705486699862504975258661933247538221372376676634337807257331392965474099593855201066971544547802035784072166572609115030590678949119928950341540629392037437311883935631238389553501887575275765621503389124498364694416388673544960907453126632565614205649543051036391930118665557324453191753261085557691941376167576657801302701979737358733146888629619431438218387705277837353829210770065588085332057446336998950747523819431719948955348087790909677071690364196443541723045740233978327794119586554274597876366476799771068094024572378731003383782889570828159628089974888827082407667544925395188735845266542078802323935000401200033431869360620540917797092548914403290761137357094311950577815689239394592629950395280872983859977993898331932737484108746266496590844640201373083129868970348715905065535422061842713843008929390371197983997301247194474352077747953129597417204427725540420411990238990617499184007208975777252281377853899815260203938854637597300980669825205914618138164826041343247594637081072363816757829692028349902433573265438210611225951836908388291352066954616862677085588174472619280037494748096539422230311682626862336530520506497926907090232186383287979272496634870565666105516859428094016601492571218046895052005814170913588848583285591556652376311668105171060383228566472804180684248148296723328976279902652039682996847846178666171215025024828834463874717801190023008629656606387978824295900480836343371027218046855806309984408766610661648925420379929869721140281655524904551691174185413399903419965387514640833090343052740862157915211505748168278822274084040523979298686017710221240535195972427636057427304696423602071194515074043242054519784534142179907190429387315501687098055926889883090008568328138175883841542282665960340212974746264110419977426571625731335495186938467661130457898589337091763358939237020429837342598937845261690787622411089636229893728077145266142298576602097333183488981067989982202870455286743920524508857903703394841467765172636020010369282433474284376167007124825883802275613877347967537548681043862636914300456330551662318234666265453487984148283338006523003694872717938517549207351709960756671620781879909057733655355532598791642251965815483211523471021038129947569614006709107351567710391195650512389264029663340190732839785955032754515670003137554829634555473750997017785206651066328174119890010270607457057047520869398270601369152166539611645348112011409625259196141366282283833761228864910455105535520830930439318485020260364492272643387392251348925188500207548984000290863589569294186862550264472192282755594455818106674480426613462081750398420621018563305550195183933710878684269028821228737902842034262420408634442361167014525951531374818463326894338809272419539388951853494400110305352818726067011269833749290862148287072810519957640203273576573428139917670054024370680910954083286166051478272968649202406238973530428829111863581755664314202770628259121017304370425020533784373060200559431366478079061449375849384510479327034764135908686412258737923301742107062157084593423093989854756569432309880347832750487400260828949867064276682991467829878703565745643355024416910967113313472892872570733601278887888328719272289437970883983932777256492354246595980362886645185224565763038152864837806943175720110565588630164739597471920305744745834534642633227785483669358549835333539650633736938930874987584921763265079797964073373952488497239046127198949637757895645762214926627635872705646681334832002126806354546643030028777654888830446994405218235546146092293422009375080419999013285015194002773459277633856615975602461014516192094671680604401511069516346286076498638178987987028245453540943626464792101116538487309471292966547272088928035339581110867196569434747566809409535914965611202210369226488681846024516097657286008378357306361681537187881319578606153330761837188200289410608857853967605239863298821414933148288776585940539069181301156811954656631632083154843245693282579372216959428834531630233056912532455738228493250586604814543987648303723640854902459609218703545721459629977142453089495271328859201050764770899201806515087917561146084853982443604693747555631104145760265209654339892770932806333953952653086535377776897795194611519882851552378900626546700913205604084863346045941051676760121393779847760500234445426888753484259342740407476363656711621902578424078463038816332498179745483638051181633599174599901878149664133436888003963341605105907887624220872495588440179510557919393329565854630918237066464007580997721022347118490202606061914336260752711576846485698351635118744919427729624621220362069792564019694098086568725789733707267829566500977174093901934335757433055232226413502973676610037510682456144900141566820531023622341423726395707308151425691390319026550571416445024603619205561640458260285108128538201976544510257680518647220640984160751743832469205889864738260874279684038074461811854990303000702257178119599401006191807217956765368959839723988884379009283930334106701218300371551350519155505803560863938345850133382926407721304261718788511407941561951420636025583979805816025216028975327632397145443818272600321288479461368629022470942440370684654838650872695646284247702977355457350896328779765616005371037584364871427301138103236558289091718709608657014145493512031350938518654274053606039354333086116994079655827999802236005526722198563349912268110377074730847305920383785946570451149364728205797838046888819102515427532108290829501356991012941059849730652493723334096082680989761615842066052171768433406721768206325858684460296631557430846957716144852285770229207223558469237263466097958538112658190634950829934804793097055266319777352991738126714454729426760209116672157063691707004656452934089879214961672785763783442390027669639837053886249653390089211554211847127256453994571585400385412964705862048871338449367107313554283448500007144177145798218249322619513995279054786616898656323000312338768558921179030308645175793604756553700822632325759384251241392518352625461155175541818545252551310001543323026232948988850756758786380508796560061987752259092946055851947941094650764702601289608454128891599863370039340428964652901174744377994357410883687773717942772046453360401381760915830908156296157572330221889429559486551177214592357698386600000312902002403148385031454180091972592221811972611828528389604896510741290140209832919908053237600265384390616188226809218158724632921613716550900353938197646681894073229361403013575289644290073220555202097244945461733852952333607821365058026734732168601353682590025525472602351351365486515366591879016791358806015232725310020414959363927625253109044808066477278170801804990925359629196182413680519954728328380420594460209539816040482379778408020625808197681975536696933142336437450041338127117433466022604618502381162789339132288306798448607586193877779503162018104365911444010912389483397987752528707609079155338743099869889896763159963598811047584151805372231744266775389958928903317118754350713534885174635443764072972010067197917254895345339937010193581538903759765372741803752159651491896979582292686256414453644547631289514380513643164511398649393871832362293398102280878023318563810732732641156011198221680210498005728206965064164896034466977002979231182595338847902264683659195522048050798660161046293828759478824272725802363570205573837186305842596138715439389710449585094995998369530345462270356683268862651453982468831903342132264887473683171235801559645090369370620224923519366582857855084203979536673501826490418458287379701214136908926962759820284154197832846286645780373366899356208344628131683226487672320489779896395839889062450183223255836312834125429875358413809943459088090067489416777452762324712180345995587845345447180986934102455068119322169188239881587756955796244607592542014035989806302427185721966396138477102706387024334840428920033765822169705650616602496243197308716200358705872386033723885338319168558973296599035885828162431786532992343830602306611816765975417073374247947082624688031570492755189419746972061705056231810958349454223471527231490886576866415739333225012391359667775367034222677516091870321019595326323247868116077391918322748206245527624749553925500725478059649162973286442855383435629821221126818001918405128125313028894725610559365476529712597875509400901437462832276016512389559706888626595038288392970662332928715756887782738074023481910703877102242735704338334585860774237609399658925002356716937747645051119589359568985951043288881634564274905302150346464615779203244129036426842719212314598935436006950518023425273119961134818997069921666984348440212500776494154320119561804065974754004587647770113220331020189318703386385528298149394116733595677890243292016563839553501032696339423114158196634779548487299231494144862857806199593928210504203862178513031046690061330889497583372904367875726112422528041288518679166825244326128637703803517591988673785121818087637387220493053219403042853567883402141709140694261969713035066717870810646143752625142684129517699702150470191349744601647835561277244853204101142340559651455577879597323787971383215597973149276547170963900075238503914754884864311497527388691295958091012393525425026566720785928326059183694993258877494446736501900336249193742488487376901702468388580488482536021997196781082746988712831241399836616698213991318722929994514023472490874898045545248703198493816744061073819941891909571901523936137439974793167671515822619442716047813790280451469702151410902718016842824763057904335178680865885730653127834152938999672392506273861247620690235320554835003699135324361721679605896258301641568457444978402062113540329793536966831302192439363783666517255396670967477429193039062502154199453608681636313758746351090909643538956797002444774253610300220725665010451839129337782006553536194576869227179107879038321464692242939037040459791776972750474844324674579230914564372417550095130017514290114891722542759437073680695484385600321959478166245900284912073695026039077091703449240667705541600788967669979096884396183318671299594191060814014028389278559182415542537385725235871768030291236565132741826428717682620632931350959858814935108460272458506188727163630894962193373925323496162424402748158220011069460695622328736369446997257075258827560349521283027836163864508877378312264416045582042407633505728004680750935160676519480509804075936380115962827482252232538940479549481148878282098333317160281012617373183150654698707336421344996117671035041344036383764519660803631235230683961962440566634819588079730727391241616174359169525019421086638996254632783178069005476236938567162038167387101448960970261117326049864790050278707805695069331172732222452859003293612930862297106946730122745491150198722551761208211835609146414266001532233045193586460127968833723682880925504761298899308730465723941641406793422787432318683760643994537546755910419579784489399590813724038928431204811188790783440789761222258928304061560116204838279223256451218158904001277405727128368309718866485347277177342087446568588747575717843013174344888012912184685396700599143497195599353520561176213610700402070873984177354299176392728494710342997883521655283743709821847258966729063730715756405888794298530066291109445571254726813614537690436449379671637990286989799697614792462215748781737865914777550419087353941572552573542895646100689755899396938780568893225446436723929073494984474107775616876138195664098385462002104915525210203429421781393159815257500784812591841833937782430712127847702536655844673342766940540423994434769698795328740329480969969087782978993467442292302377551533914317783736937850339858949628747789499343730319530199713655305072261253927424210353104815979011957993289820961175796543029774098701779571482939861687627813057662330315367411757108256028107493140371028765266146485063449846584694424931241920310155860288808282642293569076679638912585190169816867628645998590675101239656746333649488987202562022929937572372468980658953309457590360023154457024228307104430569515341974305086769901754050429425151829721432129047749656176273946630045529071680510576811268744927202526918208257559842470314562344961216609871821096579061951058302024129095302982768459129236412641863619671037378956527060782882027583163374169849658607376672221999728543467540842518345735093225278796390780782187760717699928860215558087751040342924418733400967277434336948004244021713357279703008534013610285791972095371700388917510350789946893296069892048387473354566602541725142228547308221361127383533732835826692896395277227139536243537656187941332437988059631529109625828512886877429358939554336725772710580585009689450925290874047148685411039742709649427021551118269175614534731241216501883141189284785137358276900527303124618652184310398474067130623924271403198392502134671457974629943890115748244830789156643674398197630249389372259289573238113327040819477153191674307758023497976771388555876413418671696416707130788850092796772258180557653603140800118858214609337965143682684382184297001631429167593188663853879141802713608440418793511169150670612139369625182734936589696136172040593983281181674563946630637523100001285883044103931785028527853541678736598205995432519540541385435710165839006724412564377292342094576031645742255263085828394266185080846116184345686766810986166666167504297038216553729704350715293943848490126670220822064053893791486844122442805730498742650484295834691530299885070995860204484582953990250055220256140478262651317199517422086980910340167607765669255981106890406517640736377197961807548114102587833429640570767541350864387396601276165925556599994923326456468365639295271136266153935634189777184694483767358522146748960167243711815169317918176683239546568179870566633013235601514429910647080125867170891140087025233728812849822974757465347655704300355611126287274954886838863487281545962490220896393546508458382584390508899331603230165031195753427421079063906313022107786054997436841702593063901826243505406634790813709047527789204116081771262512063329267921542775431631336309303278699574034974883563060826665236565647022496601071594494076514202319971080518980665958362558621127972468970379490398347863919133014911804560416126570475177542748112446315293109067659737179160711489989990911135827523776821522666378492198035322298796488692985967578568496565785527962417721172798361810067324978758511192093135321613286121627938273033950007290679788444077042561099827589209002894749655978523162952369182123683604631586059203108255469067630942743540452920896195549862462361783382661100404828286553758488784240629828569956568926678481272791859291592872956477749118448370904520232560740347243770996305538814735985970193873074845328099197779771324505749774346119137087149924646744642195630214430121216707612488744696032232440954206084928753138756940815150982166024965969398326660378794661086817093670745547024002354932172220176568324356390109384281273394505896565342634463774585642813085465804523927732207454422408987622789715685516806090952226282322897666900655259092505263595751851127674054914255047362337122297620163273683195516278589257210900774848380551556281953034305971649391489131813007256040736430539026610073319295975538026078447177393337089938728884679380921513610002117245397895234057945011356686594699680501783740530811365434882208587104021348755570594297408327450717660153217241815782443117581698322947343544548815479167921822460517267137214731513307373097177241807661881367917377794478992140152709490129055285304393060586389184777680524515100372078613590175564466138071849340999138485372874602414137544269920238082474045483647946394386815532155629978297138687340447649594222204005145993829174236387336205766041046932816080138721629352558677008369201556004798749837300799725204498436651551479589877173396452076466955206996396534334507060205012399797956180086694355491409479319210383318214876975610407100719711344069572791943987053818086789345707204958000224765713841655869594497639660835056377567502230563945693557764332999674956470377250685392359344846429210865196270968781804002523059652513767576507248861457497124244230156120837403682212944264516935052354606029192682377217212623769357124233163095309858351009582417902860548530861950200441322718372809446877091644846361863558610759168056509851799480142514483390946512447147164905044374072315088260188470865335308730105901752560067757625864021391917800950225519366259044527430814218469716732135815999518541578099862706811025605857890255891548295238985717156534836222602036760675152444382271516364130664915019474305409096334732079099106885697712865040616697925267821636116199049844685492880282088633723498206058640888731970427044576834600605203766161991244475599902025009029882485747446527459595616417461409466507048460697173047004638111519141041592423423954244005216090374748657267881820288109687011533266210550654610964308548471504174309695641226651783175409782236341889875553069624197994481134292044734811173624092583107746903572099391208906139094868972932569577112756729338507338869352704754230961899328942462986514107608233874225309997838626159654814396110749797596133782777957568197343151698094424696044057546335524045928312902757049814505421723372869694308455398268508742373758968889061958319416791632705509897573498367106463760280000019307857508601015751257945118847945812627167431269519480764988053194284018519464036093883828148294926448052537752876360670763643850204068247485043506023822581926418301737406857652473330302157741297544364386112338325640229525627782387932550762983655077048449310747257324979170509503497883688304644793688932106778893194082155261323999988938588827195059234844470467170018509060738383070104890897437142774358750074906518784165527807502672440266134694360983602516518422121148373568654774736389828361356164770954329415164624419708174363919529879428728256426761493330556993383762736821788322007620608237475284289845139639741590907625725275248701401169786110332613341493339229932548061294644708079588617485776851510684776710827429897631766393536296111563826367389186443983619822446029957052597166360628691696401989043890142612518520665547325063073580940218189313492400953935526685752436205273246997814431271257802538658441176180499440523855167445561210166413933678811083475520835598299447939640511784266650813043280378213392167252828784103642243974652018767333801798523212921276351114888769260568003931085009631679334421010455258716352432052237065399705842142683178652020685404229497543074028619154526304186122077623316399628995367523521588006393396260978095439573457550145973053270093191882157011283070444779037940225280227313562168325293512444806411373006353360468972048919905339606608468584541898117108865096843044128583989097022300095342134474769063577042800684264282554090072765624518051325544459217835175799863468666944249568506015636999842130490688297034914936467825551267714608461337318704423154607413805049995920216092658316734838105749766379871731348502261101529086276798165796467724660298582943755386592497617002200031200802562704995859527846075897039941614338613289883938515802252657984660537088366642706506427055068452835417864756498828891230741672293222069148561420183075381219562255493379325953692856589720727925145924733412803179775130811554009743940139356366547845300490710312640525278195437192858136536058138779358559132084397833538288648144436487793130057845218497001666530304431494197910798962267756175581549580124552069819685242633800362589557528708153191848583284852223110266196648697448201255973107671177112246009625670717297188578323096161142383617249948258320378320099650845276910671847816343657962107932045958681170963439589673840698490568799997877344805510278985141560304291932536198683004780834629215373550909224554205842261744852941782897704146381348461639132438124847637537218534373050523294577704312377537187170161761725848552207874309589649667823394218941326982621153781498107924385760591686391909378212249672845850059182061922838679650119999549055526899464970566187870581553575487943358610644177993155909188662437984684276485557566697252896191697009157555791542861842948930784969869974759800142595900504238744635845306865209989289962861461099597411379195946153100958711158365501513484735531629617441592381470628067494054160064282539212445310644782883269689190648275518606315796069422436054140367387882360853612984103744911956202655971881024050738330177367072264556648323554437825128881404318489233383044650459557534672557774725787003010006573918753910561909502666921302543362169782521016175873576230642280562795284279160264236824643561657135036008822385926696881134371881911444012231069658980529727731417922411540124311396302640080187780078289381669407766595917848617953312166290931035927418413162929256959979847967184170799346444368730726537725442043138054905841366732421076838356082379123119769629126966364045012908491355961176887322564843349965187188230360281441586242235547191495495396412448925946783191540429547569842757370554696317376201064842228543120985007158355961112971811312980891694409358876823408011440099412809285638308575958207990208462204936595413958649045802289416528550499691637713250918898286946184609219450664032710227142106439844834808467858872542732024230330405951221830641095524534367723860319871369048471181114682133160963023348021727568998624367213569414870819624187542775232832986890807230795979648438663213588406379216047117730825893627087081453403392496886022468338610462057780559999868214884465978947348734202014712520593797895603537970910853477945487316719425033229865519640602300662475154774637296320448894611478734474982196199423820424470347204647521792023880179242282695866927904862278142312161191678384029798921239874214475983074265860232771909746512537935505112179826516610217279536831230039904247595769141252410529938918268083406138326876833294812218684185390819243515627993466432352352059729465711649775005610873640767986453028925852598216051779948680079929184320142853003538540696042341159588961872677862194025185947153898455565475477602124473104931013235320062980387678036260549943063641523828093656011651582392738472706002210294356143808417782020161925620468511605294876528634115847310563487655605501821673175476643271717218186019446801385053301297482819352512299401488435877413692204926056791836153269513954642701254931335286154124012516731487812276521773043059935166248538849635007494906116341538789993639759255950918107725151430251979301911864816718744494890784277942740586138493766985398477424895946836544028329353266324455468232634620604920894549103371887061084128302427019758078174425431534856621850072142919534335210881436368457196268512050434244989201602048614323009072243647096231153346491272522454874334552676152436751655908906089662690961661796153587374964977972935924369264869567012355292846480163431600940779022142782866729125713845920873774367409158855929129839698910607592058987320026964202763336310149815463990558517655371328771147510989952816553431264452662882359639970036368011175584238924010773885551520457297694477770300149787520061214997890046408174577095635629251998394715514133932377858316880450743334303073986051950791543497058472497686611684452295339004769608137498104449403211954413579349793873580761002159315754562706603889184701780660675935384106263248775412038368754028362849900925889896997480932476272449735789646532271559950149978578939388096113484271485694967373520047966682549317452875813813467736640988759922304637547431924720569326555291013452779053421524994130875039603473635358290368064163701165119309610528062559652841186749791312769096034225029512753018898563237951333506728296515759975611353356364697927269510677779439954126289126284866493753550754773189183820416398627886525360543391386724291147979816990778134062123454010582286962992481628281346239232247182507416068580098995980593245010062432031699105165137155003750023722295179498993648730207830028908706708177372093961035844952940486533367133023638612619003611489300830711359983331284834422170697566755317033553734880198803647729461727623809682668291430193123658718875968293282368970594143083974933230516580268866977835575574395559207318179210086481194039115088813078371518448069395451442774579945074258830839071075407574587797425262761572780231951813818773798123641974374769460681529682132686560088901234887431148450712673639040315538024800824963861403307638486511257732106713649590325092869971154594440928977748499071603925579420178540036645892171459588345001387468894700451259440331596501613690838317263610539049271656466559842923370929409015589999587085969697883472483966065699146495783176420031334931718406987021438880363264571848252542921718484739724510019244316398849147856836165195782862504653035009164054711479179405910943889055618738369265155875440442218624649964261092859642976496729186925808858798749487710727548485542930205049352793528432729733625416193433282205395429371333884117158295094142825040414330614778246842140168587725265505014183661634722777870048792207049692416469908153770332946878830663270142115801671542555742238533765140782265370224720376662703560563686332543257355049664812766197208228633706998393824570177319285840343845463986610357117647554975741401305933956322949064265939045059686346557749414121355666908085310012852729762821191872897636183792475354966297418857454880924682652317876550344792580456873949262037370877595792929394414696468700185455504608278323444033143919706566968045317176577165716437202143883484174489883092167152098487981605208696279530596727565390170155868085942130934127350567971791379362502910298206191088838305023373460164419958667912489933599759388324206960960670418530483521146826903336110061111146517058577490694483830594505227968748833692670975209973386702168454307702548412594509687791409879162489685438002106151849792292345519681731089378088136549785464116879225678004762380050199947359049609424002595960217902371361534866027726529474993383356386999394459874707851835451787705616895354398552286276775357559354318130967881674626716134834469135346804858989598454303813208994550946241469068740527184033101914889875200114354381229394255202963444639828586353602091014109687560048278634434365354832391382538577373177002962079812558079582020950335440778659057214386762984935147762759303553891784802168304822576243655401516422810751241352653019672226600176910129006523730394625146417154682431280598497735784906768684668779265374494695703114038228792986682389552758513787452793287246056800915768812596040765376809134453611697040031720866692975714766133093932148111289754791242557807202005251594125883786060969143758462025427945000251572960169845528766938267246736270464368271101233167920473230182703651759303823604103896188510750682127446122455874082460636519109946408791971466596176628497577161559976859520532144897228474541468185906611121295999988418048331287464195448032880232143297196453566986611947876186904908005026086401937313981574005072970270217772724707012886519660116259751300961970322328595506594604386852964334728218336214696739236685914165903301468322004074140804333556885914981918306468521992735814258200023113766648224434607998908615941931993058015951523316101617626253454818003589786660094930704435037516989097069895950799866710666631891834542767881146386819679825307754260055868445838567535209275639010418800999180662979551595814504813028628558664225282300014303140389509881519328229867621514175034924931191300200418396239162913293864814968102514492067710037720986850733803819573571629588953191123092798271530784474280906496305194413704322572186496259238487370712482724991287901009481947732379070717322790011402939044298073109778249265534489833816962621362207797975571755308856046437909012477694118367587863872973334243667259396986706861412878243609826531570988817021498192682015940236457694898652968807836562267913857868224694560489092854080645492016945396376942545499660881460817540066738587029279572233475752844432513132571539530770024217002773834218719008339095799864047990802500460780044538062009068472811826653338662411665998192345108050592824647511532027806829623443922244942499668631670760336534304535519551448928527106478803876816915595444004273682664790713366325927454687585845385184166496049230555027847833196116265595482621535374579638774661083236420410037388603533180678307921423296505364981450059811768043029381740229818553603292619259445637406999157767654265996707076969958417149380720924225263795180868711413073648181299007250943007439949243259365599270174031302010513956919346151059006555795861857303651261725073653194395677282339752001707429348584526271491266111877499808702954204972483588933728364216873185600665845058169063148075300985481564924920222121809605141289167200405176309935045904500651694966551740958457019580671254103869170118341904469769543515253194486065462597252330516210543851848925265830913184949592939196393238931344046843743716724493501080947596688297105388701409316437062423869914816452839223926007052986881030055641328299036927011920700862919789849925153216916438535389874592167427493543014837396234580574615121098657767643087671918811127508708216950289650247039342295091864477346528604769222868078958926464256059753743652265916033101578720366277719902437741788461500840040764355149755980197958149548452621942957412599057255028123254378581893992398517927394894437039193607723768728878558478519724739840619205152264143553145272170168046341520839676944521689247271288896528366579502362567468751631185122315897692824918166304059462900239906534424497910821607763738275951091188832443701772950213095392102382852291734759680801462827478709999635473737958381547664459579349288893807094083477025877972479248435878244792765235971204543600192085947583812054314419676872157469831490425305829474995821122403786422600575979880260285528954469307777109147665668952462469495770759779140362522634318611231617636046828067052471293793936217187454098777281088576470168499295049426138629215439473380574505468928737576448936169437372351462650322826014901197771645209430624581878349345520776857541518541402113878944061313756732366684663629969015258588535241714292540927314334411535276269943980525188397878100353605764928527134074747562193134508853734326537643533273629043454884341608298107206207082601801390300783952701459859877378083041451409550614622979302917782635035745200799743602465403088132964170892931761575478391321509084772725846362824548524882501649992098309394879633272623330300619997260676750634697074344943228983752708096986517338727588182046327107773427472400855359251259593067054992430305070376082404303517901502782882822157291010657515448663097179644989986156391167439780999229432894412059430565350736698589788696048092808572534171161280201847018878514196778485856660425537363118855342825995862401872312364737472486560780819597991680298343272685254973730711151347464693520355801015403436007701947286034524667719812728199445244078201254797212437904341385027254515883663594381388805374137498633323561885493119056521766242423918259325111035836379576605397570721135597702007963040292013796941720705429009506623751264989788024802389501342471852993467306794693967776215944120816487709547565402531937019015597477569089003983013045737981185837081938953922717066516554846900870696393493278219516654869214850185064848274795203864416791196742071161936346964145970884543682418109953170959608120985485443130500604828215405978990666359008947107312964010662871170903650214831084508308516863045248845885687901387349437491796048090050888042956518517346685638373688323375734008719818370274232239492254458167201928504407562951319099148744066132598922325163227832783347707153785370279301978076201787564741625999542229011396545779542547403013098672751107347760556759496198291899456664203608346501473020399294853668177236420619539695770852768937628308425882139740466968166092090862975976602548231597346578838142536736116983569471012839357102226022203248180609771186665149048943955868130903607130628277585710373768225388875593595454969546500012969463335269575986097545871541512274382678493413079572867041351964570040934833994591894199846517560615553291921814574087376511215046422812864703325655145691573714932685529045109260716802239681302945661818205236575223936358550753827746069468490674342725911921869436934965105478240000468687741374457180525103454564733698418809322280887347885816550445182071752240196227200721554083043375697059237372452911671202963691294676620476965044613258129817899992040382783298195901309149772306064269334941875002968766918321592636763578151224449853021674203574408557895703114486891697959409907836320530067838837193876523975306176600114624342197145185178805748968105185706678043035074974590100607669088156688391767262626178482043377132648262826478655397721775171411626270724983651638195426648450151646290194592155498421408071751677678142707065203428953715671392248273870419011742673727095587436617869925115020012581038157402080012482478592943243405342681566287692173433917230705978395325259835900440138309601989433354640994729533685166695283699606270955418284200412989358093847119978950166641725050475174276832969552874897019629668023745855508178985670243670624622678486125074890127098424592257729701116284431837146271789670535583855920175643797004802267643456209568244791671942670677078748058340267744296190818918462036648391940155346657530279700696558811408819062423351323548852182671262069938760125433881166199418679626755758791777108448888716141242593080337417212660940587724704312347919819291325021140886014874057626050314586477898752831465654139566490922468623834549528771623906521305176085473396496325800369305070790894292791865477526016058503473390410314059418721241462750585390250477382934647081149997246777639458075099930600576996260881352348980335636145477909844550553758243276085163760004749352416418714597333260111285924699799422948065260553328747906955286811664372675329177142612982790924675402718205883509085183027278739407781491291449775781846683320723795465444255626655568899662424369189485893254288396010823752155091196870614986701695290210502615300110830359782817169314431997665513092465086614561336963894663222256060485627059363238000987551469634621327816334485132083711058277290574885116685787467841818253223667056126706523486872179554998826411285032752965096181811917959004882917113797540712037683663977407612691793953783538734448421155163762384509924539743552431994896004654613132761927930992107453708330923957275305492669274704513991123290140689258161447204030700940710813687525211555072664497414622686065842828524036324593683868031003170790199454612560492206082584215393672421203247232635005332060611811460167446341130467569835156542145040025368677761101119732135476316474388608665716992907002269343035603482683240836792903138764175502091081456034430691270853365318054549729841224590481036371434067894580394088240849316731920326680262197467069218699626583357312424087735946966339494541922561519821366469484065111651255494113078836501692654864702997652370188772008674819643792414376527979975102189930413400887562096112811264603925221386871996440638870854692301045164633545290214930441129555908812822715791215118365764659820341452117056367755303287914860373375494816387977981084781227473030784487412090818656849689270984382429516434703606910426639783181860512102563485637243481640217022629707505330654587928745606178374644415257647644942929937523322454316890293562061640638453638233991746526562495374231645318500395348700073056997053663213581764099712245529616269399724010245215149664183979189249233394216018830030963692142349589472883506192175483795486074310217607844850473296236248355974588465811161395686910508366189436172929734331393260162340706180864486771898833559804531200106850669743768003911256360809508485144022018705763503794138437403197430738520196231645455337508436197472749123800959722215520504652902469976479140655801688361800155843864903625196467574702491874959325048405757067045671162194962550969641907441607988400099285625416257948467120987575275634410280971757186958874866107807898977939662481676396084488640823307227154248773797138112117525445583746374763514561386838540676292881065623065332566215919226254924079853091703058352569674159496423890710332210627209032564938313380965583633924735460321153366399489482286143057863122420203574247529146654524850777131955625694909289634547592639873813816002584420003185070974034538150322627021969528825678042543695314031510858009772898114131846808678458041154897824119471107437639854615913400196081750633250375515263963607115455469014816300301471518588617062082449591418806828936862463338574477308038205178703065931243785222698706408781189167867091809578357132069089932489041604624936726223901456252903397950726835642050066338814418056340415056754188313380280943063206766801842248883823142877042782038315854991591070918372387049191321003225272821894534037654791775042522940518574354057832337317785112002654057793147092466480041513115755263861753491180300094118886903033575943299122046594988835264430006171149368377460640505193884423176097074049107478981602313691196544078595361669690380283827149196155627905290273647718722324392748403048081719964147847257092893553522260887782186648993828365247786972378347030914444263276419219511601448986413197767671432520410025916226278279765156738528347812836707902599126012166828018798597887261762635558416424615333503298983820871408601408075869867798025217785344202581233052590102284427457098340620547224095558475931474790203745733579973939046375056636103339507950909202387709965829623247452024495906902046080281026431273220225428203706390286048988286545182774253939661055601978356892606642327066809583153552261336037946780870730886937754848653571678814957029125153171225530956880862194769176504773533910899400394020014065662934111606168492163636745455288832299593175730911916060774418378133743512590167007536505769050773455571145286730565000230567017078205644991361546416654567392130320165430271930600798994163191942700764498153816213165582010995952864959479153440044241002376129277396079751998178878067135452307154693013271325215458360349885832078259598999040029576781591440434210635633325894406728114621163325859639058434358436265019093806533172478193901783290994578182068015117187019047823563680469149736283128432308066203941535327965193057707911115393784439083510476362539969843091725103160749055911025112041547668941645867565706988358601556696911214449650379715765863739424461285396914267910905728489443686497071858902324707940044174289108542925219631280801819415982626384039770277546783190375500450813285937814130233199182469806658215879943079386481318569269111234070958166262147882166602681530887302749501189603728458369870816171718217536099960818480241120470250160413287429096057456733623643593103323124936251630210217296107534363450694634240864021735166272331375027353350309875064348676499407163554802184462550287659042309183506068349127058724928241574060047435297193819202527580419879362278042440605764201589792081036609286072598048783065787758451283048401384716839547892362412821651821808461016382864027057773877495973959563820795758834339851058496746380505036347226960721682756817542293207348045222091042993345894323353884053714934546032802085625805008238932531051604400867842233786339077329606029841827582740031118131509556733083895239629746574503306529048242789735311995380733426994198622406542094813896784006906826531276870876203341199990476639698820870372327171170466375181092143803635924374252299995569070926633669569269987081625802847388870853116491751054524673786095008491505525405368927898949286685177649659098033810859215446930152826096497416177287967217443180510451931119051542149487677555176667183708563047425861489404423694480611795099083532128839294523583253641431598609256426018006997029241904009058920623162417104061172125416794572427169504817033322191604064104913946401340856258045744521329157088995895984462754417027031697192285890697202564136532019074514610479633463795271351448198117842369392584994960400863153179164548995987403289984408554834071324100403747342346467921433525270936709152097901098855804330006085312089403373862511444002173625705661499949243051484610511847887418766101023846889284434213662082744366869365999299296265603314265098215779845235639910877987903721401329495648121841697467930657556273988288599698566216084036390965833537649294926459932271341704841350873897813481023148929880220160212487782966047324520817296994987482236314713619779649772565687360181412149642486380804699386180539405667031771566395060006292601069417488999655912924200113584080966588493117579819948511858985244105617695977412433420371273197207218524031060775805085274849178116196211981269838755259056369524078115570482095369205611654541711942253316564826415993476527257267721184185484996966402275197620465309149357477695378359458475760708807182423112721515748716977565956837225361319605835598517487328304753198799351115672781218012146379692596641014849342422721713062161127874694733519297706085941441080244167865552326229047555437218394437302982115011512893181320956246248484793227400682413386186625466454753380186044004812506109177302095447532297104434193158513404332707112999207101210576715744499360246930325569026491619148809409658809309399369501156715371192938878978372839543771490588378563229909837588264126282457209854955297634805051389431474299993787807989712402804068677234292952290666564854554163693783773629491610562665780329645416726180524401218270804751241953998528501546252182162744125268941777678888968046623598800452079236648371688955088646088672499834604132055229445726835549731150641551319680387239428088776494087379665661268864111671040421594963914436718538383777498905506346902758119639315598403125482737175306974050574538114800739360449844003479827754434910799326458178018983552753663986761729570835928300251329800433517439324344869747267576727694183456256635141870212763862367795172759449777906481577574164105107990838072489893406303843383440753232651860845569205988908185017526504351973423717728098800314278377519119154284403250535379272501169461437183860065068850106265742935648231906943163388098141026146997626049408629571233364899550780892648424381189062385288719029154980437438874695174824284093854011080128557926257192253436640000376196539681626962718095315065406045608342631592607021043403330261288328510796174392147294553028071547185448461161627823444848270866805408365495059668157763403429356209765914459225180821705937082485210679472744037665309444129881780040455426080420449640114449794160752754495516095899562276498999559372287530302262771406135153023479184272224381190966690019092035094565948674734433486692141775553972689996769158853436576565248336329734637978819994703128933148566091400368949770310910484767200122254100452382585463819719942023201324032182087906357362670372544961769238915637484984050317105810560018210372631042127887365576037137593552666055336113911036988700219271469167714984768396043659581695170746055112020566975174705884287353568668603874478187478719844417838695581763160130369678569349800412553378704848556156347358729217314201726780581570182283916705017800351912330577010309511887634222911526047579821215485087988657763234435309918885564562653231513659686121617072086969176382832110549695491056241875464349107992795981637349664696249759406962640469181262077705361520171569521187490828785175217018482405181010020830267980807950971271345815634343136489090799179947658654594806464800011059310691131485622341951626623693830228848764785623569009800986710345511704761393215648080730872937501157822306178520488174664131130085948797966997629675640772854539185720678444022071519674796032611468345205151006124295220477532164500676053381323239978119126884934203394376002381372222768028736995633677438873683111524484108084072996492847382041776354605384999432312888844594039036408172189176764549846491903540037314592748277816694325482222377638072900788525478837295347271495783527404223615967407740426984582546207202787776441413203267461379761893970569796850848248709018331413315527978108290752632438661700779045138067363533913857729563873555918508844905861430312855119543057600185390618533545869420626213624335727391518724872670511342218936590893844289238458232714825824049277233875537572901961982446009042162476825558505737766523247198894152535002367793797484221211725243224448922435521941303387274679020451110551489878889648341904608180134231062669502924129737143254001093182047859370340747859269262220240124830733230901485528434132167546026134009036443651060709469130285562215805598437000879123545374156808062369888652033000095528937653380436992863364382380160930162518649146305852962086452798051259337987310831869803771836109055349652009787683189872649050433047160922072595124621850090966217494751901391479798633784036582591703281568442371284858469407471065288954386920573840492477093713206339865902959876941713658757543046214969446624063774411525902148912071014052902340775436334792108922944048091024145355149402412898218367571501689240134647961341187761931807406654864569903803445477225804743376842650265489774192706882818203530456542362477395794988917040289794199752078640183764601004104436501630057727935961439593172304544527643026767502659870088780305115387837430742925433711509731915517772137314930772150967729479432129160193681622727889326584432290412590163432420892339630221251483474600750501599410267865717695381894215287598001870470109479881494510056349868293133712686897973590137997634711722215612230932442456869875845800109193435310691561939186489973104812249118501293061642665102016121431535483260304918087527581762484973634258433511321356679914519353603052524383157343974346168156371091956761516201257932646791714888893421639752801147053537212386171404070514967763253064991899660959885415913690481459722392315317789536694618858207310436731102090202133491409960985374044308223887446371043368124910369428893910907956276056195499069414568263991928650997027495249057157764841242261052526202707094268025984042949267859231359929344776297169743091382206681554408408349136214880983818896491989716592389599390642661172831480345583630489110479415143102562356759647668058449414204393222459785062893298660216207758242806250807630458673479810435941175899181219940860396112145783897154337552057047484379547379563155405397283548982261554991682412447622255394717688300879688136412889877528863012981291578106321618784583589505251758134038568580752047683434918888427917685486302713736357113405582515591409627033212909048828879946298321843979334010975069013256055595385451101424666387037755727588581845913631058670725046762241727602916480298148963192376225188419189632409973223207104399130734473038492529389695534827098339607423871214971104339233245400118365519600818774130996653997689190091350433238352331063574118183231292883239025223359294785224547728558452587098675871698661651494419724558168376132723146147074843620059953499444433044641870735062669863914587703846208226258722308819614400570550889184830845636505206378898404592549484409979987421322479228066328402892203157252152313166543385933860058284268919132863696173795087343385295498052249884355253543495155848727328447673226657341323900305553803346859321141214174332106159443506620314252488838936471226043602163419642457011821651563503133264011321342330495644016798317867747862455210455430997871292808259823583700139182521324310738721824204191771192799637610305285814743637513051628682293217281017229035339539082173706953964250286590385939970278552892507106838389404820062181995649408167036938228910345749519815545382823292409715086963020810730822870943115047855696201248710120869004958952015297393862207535394993334072183997795382406504846133715166663662959322681547306465005115499944200281334306576228206791002642054737982861041113187594701496263077760349415393959204323434822056024574071583614492907094867134530041498012234212607079502714805342801441939072586233421954932973886587683767081535710907664329679041289654575990089713748237348350332528783910484375920030943156872399000597423441888152831602458741012362155241263926479682646012076645739214998923771798824872927588264194284266363896822100456206705365595023448028855568537129265387021460729584963467499566029398229348780328659247246754094773549396473423639585602111239955790619886653956387015008934299592758976401051080889911915250465988831207685514140738716513381493659196418161868975253163090416557444133518602006838124649823481241721263589121466236017869313980503113789804904503638610517228745929196066186616446643772614735711343767502764145164509017643167449614696367842512493541267716983114131935131625180903353934884161854670115412098468227395247701416076587770693209261530163518306726382453939508962652624414895819375068935864074055001862630003447235878979644085505696165935022099258338188421577353665154353410643427009707321960327027242437866982949644489419613617631353079972464814979700007725493053959235259240031749486951202523917732846332720408135457924653800498300837130803486417487817179287783734252659276921218471292701206948295190950034446993702557086630575605641749136979051636307015230620759898174474332268193250541375322813434587311682753560303440235112310767724997503076968086740662666224212844670910288579832708918061317647281853822219391233955126923911653107511745332445930055719416813311696615123566141110204516955817302931330792642690803020264267307218674934807087452150209028121930353446585243958582609750246200602925133463041128839816954242452473566256163903707265526674226226763534670472945469051328230108956195822841982915510551634199997725975703600387041777226020724823664600358954155418941778097114901915493402680095275728211122375084553735324151068275592558310112217846602833198721794494569633566785451562684234656490955670932641852373607781019994584024844866956523536350053056581304966890429192835888464162157506760621010837624810959630499094521524809288575074571157639887951687839716263927370137051424903952515551488451754369863576026312236740843002687402461075653641736937203745701363977855638149108656184101033984413111257654008134127942183609944228682179158327357845623566226273957192341539361595631620696850127103349044623802301977232651135711055531963581295636306171039358625001222298963340355378871232009910016560191292936667517004022287915059262147010981801378617949880805470398580659512861602198717404840550080949574856200430580933406662414859384291491352383781264705604325689202546080337688078039134838706587313619018622208179217280092968262081771184448986001926445172400726270842970500942803133692055445527136266528954187641357178507535056816180903472311250912112248507105778786030822765678404647477043242349909778258770889094084352570770074148740038235956877493950648562486920583431017236356330624224753900613950573092285635988904357205869120319516117298034180811568212898894284179153631812888842822700458801110734985479737672682015748610856476411879603687332787068561351808862379265310193957267916452743960514710578875425018793620779769720683436098420860399487361141456273409676364304093990955649683941859980502338703675340073887773096559830078064299479425114039175484185448141090536272786380828914907086577617921411889898952365154911823805655162427719183898412404484879745648069474631895579505933667898404824396025692194904992149216816837177932795239063616690139050001623188466099468186813007338634509066462634134413530846714110998211432060633629364369949751421685272724721776560923210484041606898873278895301522988530607808525486451816768982379193064607520938859552934784430727303093362625998236655439117967833683869548520728452383539058793399233520695460312946058337095652438449019705394268152485254732740049918133795269481516496382930515711684438784164694384658949659680196918561930151290230505803808507892049822454708160139836392109600665209412919965173437931780789422066657828329550638251674786118322938873999453600858162024009843585007039337026736598044794754939561078944062469739797728868879970813468158462510239765181971146447082181118316889299562218523597371014498000078799432845270092432889921800779776322170550054629249188361262936423374063821612056813753272537765132957226416878272059522029270844243160300807212063401030249421877472634671121221685588922815556268511145346802981724452716944185932576022326175920800563461279409879409075237994188634891539764927951748033931048137592247888468149000064288591359005856778626532745206083991554370261151168541946768104129273462969236437762521394993582979924966441128819754152407586568165987051245821144285996094797689494050753866346669280913737205089096914027312844109162302176493165774595559843516709262718439855410699659720427180314163897064054340402930900117833501933666971632446269233748532127057428498722318871327883119578532902177709115295240456927952031704287864359338544777497498835457286536564271443859932483376868340885928677449670736184151968665541055259351907057615716672135945745841580829653256763624240204932437518333410366751711230777977597786993695433628835369720955685903787793960383001970201664545729536293670104320306736740345431930405685823128148288519880544592280454829099793363780147266963932627814609455830711308319802113333083566538016381524114270085611866122773691988348111768904567382541610827253342233205504322164078739807780344130655877241397292500876335466929073739303650012361655615159276949797913039601741535786811940420329533466999951238285098782743286286430570809909067552000246436027911280035377864104235349447253364467672448252611576139004903228079255934659951095381811646175875222384848276656212163621604656498142151824069587818984646560166893787712871060208149618840336667957290663104350213323324368352350998219360960623731454515347688931354271143692813584807138926343622532046731329456063451894461059552437791679274426564247124872863757372346707448882172679848540009970283591129367147339178330975230062121820132130943890959200311824755903501708927318819504935070806290623613303330814124789579974159190552742178654713588336634419575725975633492335900033420823387045817818965155378083700303936403594052117127810005607030231584833987577074704451229442039489843429570164876939661528783663670366184504401602602130526633884575043664625407224105331692607228452074261259556779724856530489580505777665660167240099166073902615589053609578230946614542274546196655290723383229313453043774639541222130341964082587866439442360732516090391809639784934940447314217833322957964858476403333659932390366787726952928554699853354503358112699155230832213319349822130915524123172634581473872984992486927439793222326337011769705893864142687114807746302484180770189479674371978977863577232969526489788073945734101794423729940405861399892666920301137163473264886362971477051854346463062441248915450890375598776452862552695023385053145086420449808579227169220405877668891728412391039807869291664009775577768428324505048275536369803037608148430181614063106957534659960817105540477924011723514193076396962800396892088562227467826476005546813356263526423592578430952901038008911172993401705806581771075512767731699899651022733222500682904077878926915910716888144852424472937641538318736544178169390793922509326428071731669527705223816711693668497856409381824237958238642109415091730383028494412639220335446606502074507994965443085397045884417507430174197772644446703561256502511523664391648923286098303727009376646520704680145811183787924718178004425671805839097021652544223602386559943367711641963397214711119121100592572751855496267768817128653817989403876245630244564709745852138513319326689506519858396132121177467394423556076559139824393594475762968512485506414435207819371312848885872925390810514200151277767872888900221437775275626682963031403059947258161611962616034058652363969694159148297443382919493641572161332517900513087586558276766054587078343600397626929136435657373977711008672311431857973330638508396362177713151632844708156717057994118243460114550858770617102271767600181907817047331428662905832207399683419006167428228227662155903750474253544870328372179268527919299032979508171262436419014970742425021509838886871436173403602949343126782802136451722744840214198587964451492594827170506331775605682166355034275374037814750838204168989501380646591920443697404412841746006333949746412896969960789321052007090046921002424054726890490483566932262901713328627673038776744290702815143730881643667647242598656227935072849852606805295129184041499096535320055776403079526217752017652004743838463703191723196003319444074484924556619239359258555200781707793394574771319876566520542999178283892586047206455004136185195408884600944139156472493028850139546665938575508714777883985250020330066860626407026541176447116153364930912475853913604371214609067909160651067269184533972099736470586987136391249787373456461971755843672847366452161643979380017316609737962213332571834218595224804169654080175987842433905658652669555745796662504645310034874310200483313730439512764939811222482923506058728278999901129664298020240098309860940713240524433918519080977381772184194824268467341510554153202344653925981600571919398894544550576591932765867916323917753794686154075184005110707158595891009750771100673108287104368902532725522492384810008904920611329628706595490597918870600838934349874923756592692548964494795474577973635299023825492795589955733102240456253501587339071347535035296658046491523977037224246743833961892112055008559714985534421393189154873300887849134115960777591239179227651783717239830740394302622458714122706285283303780961901538611479367927101701768005025764825976133145276679715478525952713799944648549872392059395594164721728877433921294199359154414566971849882484458534834130140781236889583733117318653847855940832274729236284039583999238432426606289086220805817701610915646530575532621067088941190567198522542637353239626375091898215589894321851081216210007402712989564805037762865624361999303631355224458958019655405529618257401398769827544896528675069195015726067815321333517484578676484750842926072120070924901156440471067313492202887136313673843165570006134660782484718166726365701662699269736850824918592793573250128953643807697584631517712935108292297124285939542530294174427129364655758197106950149352831982481253761714918362762650643188007769529599799289634756529651804422558705513520238370030402632688130230114696538107737582690457186067249860109500728449279036264680942104316679100731892030759119463118110349712615545339070561009044273006168334304260747225180898810075093100629563321987112304181810760602799521001261253910830822382145796730790502564393099728891153036904624110407327571496440149363100525423931197413646007108622614028641442353077592798682563704033798769673488701505963852725891517715959787296483498273967529955909680212758319932339365468702179813607976670066801534607615429258342364262679474643826722568715752065812836864603968554988298080848673169374888180684676478051840487813970721847137802983264109957452842729024902847699593072785376761683091497038699459558401987372176599878764322229928615815603346185531333719848682339871983190822384160362819480115080998947897142165968077047831759777039584013345372868458104247605179465969183859361356908155730551273206765980686603729880810708272874216072686008992653172160214415632450136982852334987303796265483282622707977298544708324382658245706700050944329016553256498046063844791402417128469457392188364536919317155338411951836577043232553843672580749908249378638074642500194953719845547871628578479344638741965705782367868706873043943222105721673719698900881156225023331541945615944479240811329585902262814893687199454014422565162202363220429787032650549794379290045559112317926751686376976936761529503963321784587034430129392228699032585356165783997423720075152087395672899753245387871099556694591841041513733908300436792844143661857459644260827570487810292133592221362855415454042810462504645400721412028711655191522983116134569577031339312125389883043253015526391771586989644485835472876402973032737912037240227264767006326528339701122892106428181625327460933791968961348574222831489540648078814350388721331963435534093828828305472496345164227244234249522382250015215768546750079866188765241643216282839898934521693931868350137406925812916035366902150166485506222345653763522094263073334609103106767779582561349407551091640080729412992875289127727247037665822016622114483286223556275811173971306251644874142789936947968723948216574707114889034084701732496052723629440823133406506037214759767129827827001223326818245436215477836699986667744061052593665299125446103845335189300405453538823806153050969738639458655866726801072862333193223773889770992527114180255142299853560320367732616429638949480635144227293106687160463622045487301142644480695805413354952534246682375183102540443803908997376156911058106426517139024767297527927849414257938365692850156996286599597777572181133057620011772548796827943203193003757522855341934191559168739892053495721366890282361051120521407168647173289707021467564266529125503685758548628711867880179975148466114387844348575184868322947824878455985005333992685113421159382120165865479622030307112733904333646983804357819799946774588164837704844648058807049056081190253424853207971798127890263203225062103558651433249001307467997539721767608465808438953067223489501727881443602216533790137632281008816674797177406395392452784041900918383731882815641243887227976190337813417999068672658507344534082284818834572263234382245210629809750617424376850011724678972245029811553516393933563958085984118355448439808596471425191878372817245152033477415355906428006516740996275459140123079196819815263461830004716931958252177966748185278303386325093369696138723832121437549512170065699189480257730685385400647204624842321686813844290538838900134919108774628787301968236811772222650095551793474101618506327768078787112123133732143227654813082615674198248079692007883190355896001899551406976757015468852416984115353598192897052608377341298811499917176412639127913088139619234513165072808629966448518585199278620953092074789591170143694776138540138004727204739552871314120685021691120978846131918595778180795655369589338646988949975606479547812214826691845480889612131738170608928926802635310070658019848723001458903010904233300694946540223644046540821349782054068726662578688555607017339817286751795537127124539024239895504564272101848265754002547605437619427577039117012621628781879212551140395628111775179178911530477570908188411873617072937910451062589487246756514354837940506335819940119285552142723971344449345511017132613451080016681283434333373380488653331302602834688287928756914583403409202892874759183515720273534310950336773970241061664501298492263523353871302432110884989879488793655989164021459354814626504966482624221020626951040689933175325852313142724003483513978449530873299431742014931308301760945680811381785296486708278840654137872775344888195352495525959933043214667291464568259493152536237649463526961837313275211745319354255185541736753373072930978296345766720755912051893246440815913589082601084809665238111578610273465228401382974101153019418869572490600826626541257862902482793212883381039246285987019340134681296008851505792589422305700098515885170199120549767950585965861599517581316409365507280299798710140887012194001632632088611483056756552981375192952783113392562444979469415089159907605199815311295981452488119026147263265852047447346573994776210641249089142108003061534207587303248743750157784474931467053469301542954051689661824340526030093895578620165659567621409310757246927764496196387463243761104224409294238371846489484695583024295660660745610931448805058024345878343881905774546485167329750248840533911181999150740325820031502412265958741316167794172574579120871468413830801060994132069399047505450714855942316742665889099616821292568145940822516558399116377800754085902002618097656111968399915883135016962252583829777783696151088261730019498965253659932590360503992000502088822696759996509117091120453642345164392945864443334714313506808208796094015800186358301411631090180190261268034294599235150049353010158271540952547652845051854784579640240402871446296629726602469178465612011361901445184326937745062464268246794129496889237843102075143116223064624931694606187183772481353385909502914384331881710498833741559385050405765356851187974678012908136477605774009193409969190334124910864001258420830175044360114967167722257185675753158456435190131013018241192272258641222039958732118654937621098636939986377479423872652986496014208042396219898209874624330325939170782015588694360239772070169270863361937450199546024028877610281731473251813325271644844380368953181879030061411350583546167146988805529789820484886898307219462358693640025117132244214601401138370546716066714550701240230133480626646703745394241446092204931444635622819749392881341031293680643484250102060840085693157270323690225741525647119765637356575326848196596260126781521037657801119132772659131988499946283351506240146540282362922474559265967217793503421406856960519380901004322268149406792992878653253355417636373137131174726268158869168805536254080180185476471830558464081914881077394370335689769731589803649278126742297444901329265097425671409051846986608003395339685599683214282107579687878112299394419529472306678455699542122129761372021186294930941655570703014337529423667391079004016586114814703095530982957364964171588133792325653634629572935887460981100127888294981319111662879605112247712241891885753839923031756627751521782713145622636300382939329611787633809241391556783833966902676501310109712988942288998809668315707650580100390346116201162167087515116060977653760698744448712231299147046025070629613763102556169800662522460481585073816357935036364171446814437498338171665684257258241862599889838703775708609968360478525163609678026002167655583355934582946400831498426880549330212137793191800227668584060260341362396625715466452172229903030636876027899552423380831855689324458939408150578646599538932698941472540778022603722737115852451714394579795476775467951017141883779332309118348406336944553343097899196718699128089494536223358248044941841373753546388558437577673821967074633736429471095326788645128630035338325992457549696582435186110214087722889335303776176727249382289186009699837608827321096399153001791181005273352472259346640590906056708860128574228758793765613939170925494903371836662901320938000180092201179594606456218036973242480753302669793324885562225734609307930438647754496916555525245468484343231812891265902670313255452653790165629114398659413661834457483212504980660890075984667877203763730389131557274193718890526620859681744061025656704983818187982554924048410989467598206878213079243083506344901044135733685206182196856587633478583776573709793405764456243363252396175432176772964832022495300307430588942177009115908593883426472034318637538724530785671292315792196418893397676235413127285398628031013511125928014360923802436446306960226484880290372569603864559423739526247386010780952629009446162956849509573301605064503550818046514827518056009478229564221073045184630860787964955830117083367779810643962623114395006734264501646203818348412141374760620617779229246210429516741599980537041485402403289365474954967462955193644615271060122652929381072350913152772172453696181781596807738721063359047438805857424979670147869767325577682325551940143942832103825536382274344874795500901697126767264997249502454752477119613169976106426438503274058209051780564308249965530181000187282470406607935182025965296450540141659803551997596421011364008082589496068946295608148289914893948316646310024979769505562971254435879549806166935933969830276677269004051909960514794864578001375696671556730947057642144828978302610476525606152960536930349679202508969382615633462600466930138457928036684915277765107928783697269355176007801606332876771975522777331340363377898971037605570185198683300250776987548482789206944982836218592854903036728444621767086022457266530471456290258755703014655586013198673769421819376098760054915131959725048174429146820134857812181903139823229431196528536160836396259876529005141185725331163095761097493013172111589087367894513143047528257509809589035737835941344932852955300329884860554018068146718510982189718732300826119044971908791988007954649067063553381130879616093678289011767667344595464404125746268377845940220422908903196756834207748858919482404534977402457917535311549404133353497223708391014493382634668097391264702900786481748982527313872230864878720042737195103159824809957520884606945505624049718969496619332756617022625763527783791083330278863828740417888448037644189125023477790866129574669814844159039716954847629822896567591657626186646820389647195617590305026885750244469154601840132814666369645096044650756874203391197906312939424050129442009883628106818807234608395209444310886145112949953834223128632058432362357272152543265093612056438529111051756942305111411332459885211171103299741111616471941054100594717924527474817602006926200183576608434995846866305037792357668083953315165290919735325323892858888873330625750666588912631928347392268115753391593559195323588129133535087015357823499228140186886478545286701021569695633847460683770003540152319910084566167783303792930198947836017860963299181067535437189868515661873460970486557334699806709866314948923573092742779820435069618389643512595538172869525628089594804843202442947578917216001919986510452945918992146364402209909264504872978220446211328626977312312369196454114008457634733026533285465212279576146898262192707751266631569881578710726822269873596678961587260014917211194664770116687374141573097727761400937991340190632383500845984220791736268173488949576499080637578924390122858302049921193541248988860076844435156558287191368736938590210746458238176809473100042005349954370033936824490921845578849511878216832140261951932452722275611896364375035725303882062846307229806472089411116245154253552116822469337801207623911072380457287096017157539827106997882697513838309079831815841962378004636412562466861787154280641621828849683000936362879983042405406493257857907222824767797523128522221062942069546045041795301314026473152215364459112790757952707180444213375605478331652772046571431385817500093864484298800436680494738745096588402260985164963891755805892617972162945431786490369686422192900256180270265182664665873985176180964267012259739304099482988091036507413340570848006993371924510637650922900213521170210788839196649243327571202624356054263698614525915911940712386366636283444784136960906367142731496571520698035960746439890081061224008131932626130732901736838478717536646672505695372258532949036268523380637306910658756794365847624813712928924178403457004605495521427512427832849270891878265703959550016873048231094474199343992281962111528520598049951953447833471930996257683986736108436317419716620163847267932514915022589503391967827942225213419981731787207100061035473412931072823008264141787206940964142295179304736455669067469004053177261970683986261664121361061154748833184962588892100136782485774495516101092003907363254000084994762951152414686174224869194945774384908213980761576704652067728402760201853912794754873039518163458832050538650748595286982338704099878464856626429698679388830339385018491972096885126903917508617502647036154663432195378629440194578617515112367594293748899318560831086771273426374297471894497874675920904267378829203675590063024402939688673421057913920255790109578415044227575454096658877388616313964142770953069345688928560232842499139598662106800880235449265269249481170554976335785755687864370183893230879740045255231736480406944149742784059588666884781889632091906076805922123576592335427505826823572035422830992294744973387711240610899520493426296560665917584261292703849698554804538505842493129305987975754557603553176970778707416254742534263393968734718768727926251685359789528272949165436602571523849568448141985182582623228945382192128063639370291461459082471960773864483473447204996766927436850554947141959089142815196972545586872505328871019278414466847499683739487417820110015570359691589573158665793479754741209733147803252546299639191253537125615065017997683109837107476490964672121465490738778663735548943318409542604998082274757128254313960664174735778150891486062615334317908859338571061746127445545211311922371407865936774175818790102987690082114103472324450770935692418818709770370811069970832715152127090171731652341883770936884266355226272927513690081706283507869575753312847961400490798494425514239421117555911593022568006359131871491137681507275053439398200203249639569272518611329046618700874488320972742844148581595383426308167428902966797165972407429543877354562326459501440167189463530414127749521160419668720308856907395754786228698645796701841972560500482785001683102159357331501771390117787375615196335646393554147592619073245580735258840394161350296326273047278515975318890272833350032563049447631636735873140908735260865924618725667914496514436648228467717554424172503229208044759528131035752577571026397654044636933242945931685913794191460844037015742841706240559591896080397607326497966253987046504972446533606930110139736620489243586531567175280217490842484930429425062567656534401676143311757503004639039118929166750301833634314590910889493243259430079100411651615865846305552147842408539771980160296525603098749879347832821925317845714773397250464886716561120187900555825837863037230820903185067244812011783609765235507693766722335710242549595023386947819363338945956432733847292755163902085813800354709236615174260156649809128596699685115352273700658040394694987682319453630896724366560309405452942916014511407892460225754033294847451925406399016524941974229007644821731501249870248478820079319079485178773965434995964833273255032631923732016918106190519316345395209151645413786712178735474950339249130345243339528068841451302677986937294980112490426171968859052654660829236017409781553830037620831880903786951121940677082308160883170515144001983450549927490534180924906190658479741471270797529911497221118097040163146433498202046810306396144944581272571973153488973432463055575056407734473351787093864967109240788112205487404473266120087727164814137683270882713369205494449381802931313591371137177061705974727945213499994910724668366663058462772687835398956743237074390253898725435391258781713091633396082495225866935423956578797874079295454425886933257656003407447363923896056963512684395453406031853892208557074873890081463424600311988579699502042649622757022306640742870113789606508723192422295719042079977702350724715448081089378852097820837640673705048968674909766303137357294875820260258277685880393572869428293693653520378790150850997766492331541608043763530589433818872008252944380114383119114679902015729446837341383555894084034239852392066922184832929423095089583902487920521495726667361080812849741425138289987652302596422465123603841102468455868724958403330949313923503356426305022222627205913900171706546583130686108177665872456395764054806059785513047560552110698408398099326616515090294648440414771858694128515275978214459183884001886259479972169770239344742435176447158298030238766007505290851992442786619310432770629996834703195316815965481040357668416769336629716032170598964285079465234239773018869960419433452796397979298666340018975021659278828760995764024867771946163686816714337954207510849410479123889715414462911506857700353542086778239660630818939645660016972909554480148672844167202705973190216158223953951219238573566306348950324689916918552973546477769637460665563906940594979922980251248663664312180980638145539504624784187669077955583114626632786929018010013295403876301757618097772900004479590106303908130474607711473800564870898478082400079889712538281133270252034325367654496607457139265506964502210393651329280401523554869178077294015491480307811303621889695069105966095883116132471201612229973364468273605266248400863618174954495923935510931365985061675891777184709368250757813380837219680571234402172217235940238476571749217750585896398376668791353684452283166001827531794150299582382401216551000137603656207290949713778342516520263513066341801235240824602405381607895355520706891696824675365056305118428091008751681160941107638358055366208226481724209977874057145533994932378863019119874576755819310063574137340406513391610736628870442400365310477733238388544226287300447506660380784322608063647858667183036007121794359834187858778931976827880541388581326968042557606009899561740715595182405401203438555447289015620076600284853730821644746223535204167795247075998049118369435625055592644009239898997272802803083721737008143014612150868892654752492043141655814974620107589766226457807540315536704521371087398259465736658121769185069161445670797504637264587779377552624356856278964062701134960285635632790127697872462914199965255468708773634761238883374104410212878095347445616923995696052611391440957839595845114236414794381141305715632595674435614522339296647397914609834461874416571243014255586063605619248074645889844375165058037771961573751803599788425816256005815904744363442786221054622756668983527492851012493615435207286587469905841441392118729612741721064422526182895936374283583208130230488003389763166384541294945019984443290643343261382277609431533000641325963402487768715093235856959496893015027776170061341257512165052324329130070511976637587505144047165060493605846716663687050780904314171659485840794846901163632154907807201666179061589196776470222598925154126420210109904982794093132897636663145808366191050873588851832196414593140581749403315750779290456762551613351891633599344808056231851906546817186943763363764949946954529739678808525768566219655789929623930127803491896351961779903429022614688482909207786207076074978936798326838492579290962865020726101901965162294627643380368666482081841242667993755295006865581072915239405080402591830024771573065462709927095861239827604022839972166865203679851989250796192368112929673438435797852947237694878455537213542329569966888503488912781512477101045770457968055780075549297115439297343074109791645155410229579071349918547295196012342898523561699905561106745386948529008959919611275143513128515540875348974067230895199123933058020268534188857311545769445209936795176775112249239915355140702019990378245927672868069888906840805858571830630802759148529301878406695448844886015568451015135984850742243339764954371621556831200492453161127999613873869953130269834876587386625983999083412192452294775043600715882665387863829187823334411086863062894501989722498906818693943433274389618280099919206742731224472140349036454485578712347802954072475576739901269559680556502835503878975807819094384590669802601856834283613175520367689279937182472106397343689803962518854023603948103895740131316999772597448117706774287925557241732117998487368294415801619146839859982142043551775678976583298173690837885090149236335765098034826463063983600682155190981280718226407265720412290208368628370856455889961917345893733981560578143552788783514110874661575508771646538269877852239872941431911178064997097926955275971637977685952821393853878597043054450573419880965759762873778862068367908703676680738739218148903660931694218964467758767836789884291812959988511185020359527668107992959443131672942012319100328156476300706483674546064900913906223835203097464528667468589919984467285411642192892323684924163013967519261929576222481370325181093431639436111727200083764058100357248622911437078377619530632897201988170897013905892140251134305809408213315906544214285940792013449656906101477627082680518719773824859576450429804023884852397772886862623885553395788723682914373632557272647726978747471289225487583208894207894907396613560232865622137703081628468230695271747438887762206692815725090242304876751735045215426586077473812739650869593975742499883627141306627615969751215161134903001416285730943157402279311553360686950340997756551060017606342083249910753315509102591360341323656477009160579397130244864661727846731069039077691251264069638337249694727452758401196107173744709002920566516232996463224948545395865496412983701033037182013336013356737157498529661386045721780980205266027049731605302788189564878557055086269212971295036654457256445660797207388106649707892254751429239316300530969491790904794336561613598291396658917731235384735616033662232905494770838605783090525861091533188227195398741473121003554844803022199376155717185442081581553658978144332011692246478179825808419941689940328995825715341348646849418202245015955061860911673280548068131902990014658029207875886955989705916510577065651089760747392121215272648017659653637613286996153977238870885650171419830511995386831301246451407431704269242128689428165077570941052857597877035820276748983921595693936046321331102241617277583311830011269118106601795363424102051160731372024734321511468000518917888273332128440132424371885511556925633429757821759727066587958097003792644967752702915512748545409930483577858242624165567236817801654241660574323082977622352377913663472807205855052126129295549044414058681315489597298539507532403936894729246599041362157240885488165043714792624272917616185653362103569018023208371089657333961556544992753420673670563309633033255842009246974212583440611235005136448832666786055171819876725061788840339118051240660305821706190591573025772061613924356474942533919498948959280806267367252595177498589131165521238403483346615211090913094982555994373016509494487854097030517947528151581371419510663877276143165236177361336137814336483045783275105021994611099708178184789844769348241828573773610346340685526954937892878706966165209418476833837484861967774256406609826947897672420613776601789743562599919051128396463852464944285971751041536541777319730702901885539031274782037323897479375376951111192093347378132327436712073839221873204516251257448794443440721556841431569522314439334534318310134978290836238306836798616365138532361587263608369372567583357321185637032961241135616513886624810367668353799802309251112045744729848041169123379789547287546852097520712282584310496387786563172877334584783086563464132185819505359803479505075458744119982929577155814234346696841903715084140621830848830509227852323869682340231613229247512526037726048861500215801161826585364626032659959044423077772269154316523321378475317793992507076317210379489416955864413694644800551498404146129871421639069777436429579201289671651591133118972331837703446327506396640011026980891298929542200864584629908852955493354952333940149045238862360740317928321878261489885717893394615140303527054593018638114204630429394489979051634268679242945942233152347237387851381686243512727426365043631761567029512806541196130348701160175160118869559229157279984710810033775028382403480922991031464086476627830139338465420011907614430261483227459675168020849357988432579796529861454934769589928355164509893799717458876310326523931872956127858127634124356153081652199284375238822264581873201583708211669536442710445782755873634803828397796705839107440913886754694138302031599409751387217548491177575901619419351698322626326059715311985329581947903827444031343005140546385418610953969275594634449650011688602228834384660823117150804963410441508988403284273739946339167639258811138256290822799053654194544089357862770591845290475581186242522868697553284173480108813579874682332267241530640525865962370475458461714063699385799714281498949554553671975286471356492644713839826376718490044150951552239068433655962057970449531338440554695509268169125996584342539807196285863870560858162870082821076037468210072320774161360292866396315730997741041698781194208983507985718786305604780485238087482258855310865973377816915938094508302650635509802757324133554764580590360672177382249035725449529025861645140522069018381030728741537608032258555187900732940611590213780030551500352921191276568287771938841277367961074278498774899046742775315419704648161806332929572974092622157576372489643701153342234030249824564745504566394460297244525113038075558535751386366837139259645490931487742820166753799046565418497781847466450530490664799571942322078469212197534341551158260332665390885856684332748794514410430040552802607205329796411626874500784069917280620033178808030952511916224953258969167012608453704833376105778237116983122680402703389625347367730135830270371860165637483624578790369844877028869931724409368938946271244101158710241097707367530708399705134415288767451898303136162932923592935644600061843141469587233996893361877417868858693311773617130210333017645066245476508702144416613841337707673720081152114298509296503228259045583072450226973700672194135552806716681568664048136966284627869762266956916290736031468072068444170816028804296282324935213028198199652790629298951866603162458484292183519080257963039842977864867637470229445918762442080219511527900857988063941728879705028710014982824062520020792673402476955727242727183170578667292360990366861490500464552720263139824858591136251294518161733816818182915578845080981918749748320176849350976097142207578981433285605649458781335288874969407643646300128940040349846751895029939478597651054713470580932302999064478657300542676526824287025252485969018801241922441373495387550597437549229758298972194407815277782672977751534725948849286280787706989247147607692734721910838783830761523361281314593390122220271493293440904598964746707537871492000059567742132263832866362853545029974407979998687256884482409587101834768566024238121157185073328943557124678187959951861728298443643765608490051826726856741212663753317274010287944531865635944088776828772047292995134991800854289932271381162254370042868665184393695169920412106040502215103419910295620212121786382541156401964384767838889270156873957025332086629752664043551146295778192048228167816502056122664497197185495257980596596732324909456443905859988927626043356763971850988215692399143410681832546219145441906688388429960812556340197379313991683586916224718183535455181045862379753873730813873450474140926383136892456613219696971281822617130179964083904616206351878390141453321182680372333824732689624771609475081594004943568494431246250672920684141363749437246588523277055818784250729905063229852470508247759096276396928140147150070962705309531235835218079220891020679537444182671325578019095980485937107687219735777916635020340362695685287506571508254291780746138027835115505648235167386670899479654250183513434223849546810257898873114165862132458691246776042707527677044837389939303853192744973051783476677355639377697957612145699439060261866279095658185019075307576731231657566657164830583335571298821068119483211810514564257864176166154934793767547406761924202539380554163091082257989693120384182222404226159112571144003118627833255942224615030861766314659349423959052040435292188200536101510047109514721655820271712798476370745338043779650557294959010887020555608800546540795467293566789471298750730822239785161900572532930106281900102703980521738700027402378764742223421735648708170028409122689557102822116658935023456635936620886387529257876294879008837184863157029323716982330150784197276114071122287079339540465884326560701628471651539115787590917989033268920279579711495842092497211111456169804415810083391501618037481217968085511043910977642821792046830029825090584024802298142160704054916316140203559248007106575255195943294000448304902763710204079856924031594218528713181853950403329512245646498282970729223916541463430588153571238168506542394249385315047357737895552063102538926120433511803530724870609170896662014817543444719835581110176052045292133588786967376817039818820525640892043955482103954167476004401215086921204623611725590273670818072095035527517729500620002449577551673450513370882919826934218032526996072474368344453476053854045998214539091472998054085172432566038386582039577698538673270977155656473372077497683402531947332493919118039357075875148186221221397843098295166432030993926349571520217683389609100203309624147575041264440741194725411827913666703627692710722575275249685453280758383467110978733039739403198917507297195694641205648665194004388858951691072768820751415884021901388896838394641531630355092762434183786718165268404248260897072452893176166379982359363881461569059110205736030597694248395142433778093316140994290756432931065064485255616315149650685184561126947736245687832141197304499361805236376687759743155301386233836059600304816682571416169826580059903547660106159262076081599567660401038532349702383575390624496349973846593438820054429350580592299763467302120625329333608401045156487989300293680555196742133128090066998295170583833666573007782637421297965073733686028144164562399771576941060797739245571550293245367671210098657764507420506521928689392815030204257017410692404017440254537376402851737650088916457270098110169910516114401321385111202638037244841257984677517112112058604885583899443730089909496848812853987166415913815209002823206463569353285804660440393948445531030503227617313621778400591319471102550089233360410260587566151149446292842232466569743081088253578555083646360186998882119104025259954224594290521533875791459263401995926387735980193295975627542218692752550177629430912477746767233996494896865953083873705680584560909882846687105846214671678178634250218682996829397334903584114751838369528825376425946644937741174566506412558931969701655065925260491895906107824790496518429386224969055998606032564588376971914596078919287292778432684953362000722653977684916192813219283878160349145115510210676437531826202946544746222402699016655547629945963337348113679103981834014360339589994713187351766975295641085462301900783440963271966134163326924317551970517739973191957117922658490067755495590352733791196853347872854763711307247429253634651132119534532862488132690529941239784588174973511621600538029116172358861793649829019439044019192041291478779225957390298567451352702718133600612746384974793170937372144897956815832673670272049991663773304321555450807957533985887836920737646995954158015776003824557317195121145849375136687621708422707804156053963147200958294071270672311286447245476030185153530250728242320982709909392389935565970684510537471991313061817850254428547543646992613694782897989759723750256325672042147206487701867159358095259466631146573860414828743715313884455590438428529437782698410701044666497215845491140542661955077724742083759528162666703366443064299667689931016070038615254219644126696790786045288418068268714584690495845752337091337126039154363734131133974054045788226062043719873783876550028490865480640432740772746573649522545666912303188869919132071091217050214919687205539395160734151977756007603280598774918504326800700924811182957154092718114137884992546104196498446280733510307786608747952181794233708004341563511872800231883254689384774326666306934419526327132020927936369783184574387604705009361832803863882719029730864566406330146594604962960505523683102682290317354119148983951283066800086639521169579214191083966302907044949246107117697100002923411647035540075120692861025038727847627664513722438213815639570920421648986310102040898731839154884543670116164177696550541647765408489091321862287898843738721350023183636222274185021485118616632924733794436814782703675606319648167907137562514714207614920610720585908591820144510573409189703791292201165830451218152477985104963460232377153076722850832004685492718496944610246987633064533824099711851658301454639489395616066573058464257409400190864051400845730369998441471683056200289876152981371348257041190753909950501235368350047296096813648089705234388186713068376418182966032247565762320695873495003665679550628677570258527800746638098743964306252555012297598532913820348881692855671804590570563474479920420249580808353254517484424253162540101200513283984023528123306120429831153811618409778255837189312538431665805012567157563818945386989718732776948500757832127800504381585459165323072671993769972954804118621671971383982281292332340249266799999838894220733084356961850416168885923524767065454809292039120013298657501198944069075731047566818669876528684841194721116396074389589395314177907993201065976621262927300135682231113596724557094912663589006401939251996715964662858782092326683337135447130253293489414595811358919486750791185298825893963464296859377608869113040774711170587559511015708863820523019600323587030572035889593284613202935921672024627265864060663864947264190954066806210244930522923700572343286246942859313930018793403441856665235332655089636687038320276563909156860774382757103544712694039055804226291723256272698966865186749627408270690227049185661685200434947297684934957689840144003578828800887059442757660016816737494335810337186050982765055817811114089685245317946453773480343958889484496688683781850623910057391966585094491710600861977525131091480974050989243653848367944785795739137119663718072857064134662421112923821291592623771302096692230317157133721536793248936715029977854856067125513442540602488215332577792769607133954702767020287807811521585692222036611569331976725961858499883394085800069695801735174446816187842750544562685527460203022413860221895006740432423196664410627181624484584998086711563521713252599566390438804229939182714154084832747506262963157436814882634213542841110164158480587659393338810462047410672493498445279015531670641133430553393447394011379347785918783691411020288126430949661297886387506826907445988132754843063279012509077564818634005617810641558387813227848255890349625008012537800071089533229462604716726406527904503680917908435341565468933139722851708764327858682997140700382917851968751801948627798382096987261005147708491240210550518435407576965085398439941230441281074617359905826633518073143364511348655266022182278139095394625726810760852386510766833457180681401792526528426082418882856347950148734099588190727968151444727170940859485979560955720961759541457943559792378651334415960420350366336486211214270445654901794415676621361507179989364253719899803401827228388788576178422998838753403325901944585601969238850352538632385002688948429316120196117720001544727162794672312187903590264080723408062163351084916910994527626628730027679475115308528144212052611552379835816710998469876562429793278168456041341830006988498364365762364663887290263473715482160725942854035965223314113454194596388320213432040776030503022729240972317389248607164713380029034319243488415335144267066873331609283365643285990994334993264228188070054602724890244589344152727662668711760714648975432786659766509751933241513778772519662856089185045196626303031115257151027917323199473781259544591451153487390820083853863716919217734922705224244195517984580025213651746142024424613039561329896383054300909063236275185519329359962291565699605601058608117594573270892348831037160447451427296016601403106679488146341762684122769758038104664641017443539752452444029742841252969966412147411835299590662425995199243560840185792341093134789780984848226502144117089935123380454763685789809560027730487105021423451240717301613426402331857262764734736167909370004846895172939000975708547813209246821294690097864028373452044208395978391369224823121932922620490634841403744947206076944849167140578630956022038360805207845024778748689385641509767317443728000595390816220553935898471111919038264185586735332476821014745570274165103887068883224915475511916372216414526355013127092506843204375849025563646141209153725062753067190310145832977157415210371527831128050288507493253851262908628062085925009766261640571609899271679127158059561653710707591219156900171007090550405002918039785488751194473588342990632057067028278048607312772159817818613227735387549538089814110596835410310142232252139589364492956483388922724225736816262427127513350302007167278398779286566026632274699543990298497516318152464732496845107544517606401657888995539173965492576351278555871371184369689759424164818303061212200044261250856531479275047757678672118235113969647594087091260563867394205612638349035132448740642121918907557200583511342771305143776446151104190867074431419073157563758590902230081286482791781383943302572401628727637959389694524494719072796947348777989626197372115309345226020183163022640361098830261957797560315400263763199404435575495641321119989690191783911007910712580741270057290125849281940064074075036989271599452481417784685713203383538792140654613263097214753855523410619693274154220081320175187688581269962937673820636988245128576277383383920782375068928183728174213609337337529614755994356070955622727857499621265264632852363666590283295013603436503059942980377207411360393545226183491833325233868657840288413713322374179425403864524955301638814946058679245296265525998537739955067318196793211081919894848418386994254812185909259257950148000427854054795748557916765255610679740864330651863066245740486569015328295889162570751145594082009036185801096770729386713528525315703343868527521945967333959471132682654233258095248976636581752326832744704846936655782342201178495892815663181619798737544086764706891361187523949209695434478976255632166474510697191700277740781883190759987747358961400404785668961282518964142872834709575719292178722405510917890206086747151278711150572850731906300579628102944492597478351067167487726901138758702040071042001885371312189222280813453287107723689761686201216863223210221042216827172811859619659365087564769061759382580630369268100860721422001709344820564805895669851713535342929495974714089779350025616747454817134880001401920869331816908229487095366392168434057716184687282595546938451605844840416534884786137553357306846051988889089128406054160679279609556135843106943199150859957846468763605339308416587075185478235901490219932006228140914512056230635786638262396240988211939643359379360018494438372282628350547943293267298547272231621133577786326480579011400825744850457666725757163284953330198592082072210111779048055199109944018470798178288858090132171311791672277241844360473156905131710894638843775782366745548597039228220421776779780789625835630782283084524577147083352732591082871070298188421168010473500762410494766326219384027244926710447822185883682530093580659157668425864728876621826186079376552856056364581860620997909893767139833976856940318678911600690074650808742629878753180322227400401381782291713469035618630584340362275671576095332965042025644308500988205837139494511338904709254259046143422164357337417986588713443533949769360946132420748695828435386882643448055480954416127761581195737468295186177562530337453341850457712416730245542259081235810834088720505782504553092999782701058234129634693870727459130877994789332192049167730285837709993054770442504989533235362282446964949291374616992117258069994612719478007267722734214875840291447383804900246565587725388162254694715024715317980036126784998767200384351114282474673517701766948948131557088219757336296339050427882393974201595014973772902942878711377241290277682667752315751888322687819589785274047128356270891012380150985182202215130590748668447196127946589356142763259813928371541011675908773078142922391265145348923871575920747200286269883549618074599271773715197207487738780989719547098342894413444763868011228963377537731859788247815185463822764035361347376873358107774110407609301531372437763515398300994191695783390648633522666245435797170170883949960041592035655588446801863323566763326912304814952729592965846894007248221190475601265867092353141161207273623694235645908511422235947629113491594326284017401960884820448438917285543373397163179909097786601178544024310462217644946019333604910474897565510955040941802686518623104749930050804087833352720394748542882767822659313653264956974803885041985690709262362206287650384914385558922545359756782900273788429961966687808873085087808963045768011885201016173019719583665563644801880436278590192773478561797416406796227212090127356922309442397708269142321342085953975747807404448518185810170260613002949146696465035423996869968609876329016267960879687802849642049834630016086364538761284395610187781356431579463399966732896161653719721131151768007378281254815898616133645867874052723693350340583579928648336887227597465491387396015979252085076318366628795538354959915902885224298810500406847644332729432260474454736565687648543282000031273183391033507852229640697595053977202680944192509179183489454464527603442660158193041340512777683668493297486247856153182787360535461478327234396969172890783721484009434641455854477806870755586809334908050638063933498726956564472023617772115007388124460214557359638916807355573679110804113906396968472646122378513208785337970521802056911918888341191378724629395460141071669820162148709959065916622896902522948010815056431851652774731515260205854543815867692913491376574028924247646689254530019973795772051041807808051370246810886566620091570353560046223628413253588831573673119080287870737365000922041620201556782573927483235142832611693146663983391637940119090331522822905835194983865028448966945581229408901205537591218521774020436452387118486660042601866430092908045989459084813630753205036844351305561533180376628969387458680668760509086896781978412607493291298204057194017925399106136981280039205271281436440774657580056967247434640323646606040556280841813380507895816782963179261197111022777559496633956967171914487945266427454703010007109802841893797574152467753040916610926530272750087088971449943278264907358512702749832888686519527953608288224277405810561594597766873106466396184561719179622393089875598944964058484884912297241596610568369884780147940173493014990836113328486117055431446779345618813692003762723889716349612661800247308800546714537081356845207811477020717963428807751311316824512859587027374659274740025608637374287508026366787264591068430479183324564681348234266364651420357302630868890128603302015193910657263246845215989309943815810879494086642511283196724902589561775282905256485241265448285892124961173306866121639325108781817801667465877169239678600396666401749911664169733595473901666792634844051863256595262893955730774921077303843353416728936998237126571807818413012986436671766372151511571789685167152127420986975838729202140154467417031912826650729248245557749038418775089283410423776587273576977975886033528284442645760061786309672896570908039583400821672740536489733725035856341406187644893845422638170664731506876117020474966412479196401291498770033865258505389406767219716473731387937501297349811106641765909343950682932306510627466784556635509640649082287698119581447240014961634521201512187831374008891690753238217609404553855022672684217672604928776151493486579118833893866174985362650406065142356735254923270583757056270961942919257756133047117737999390044814399920003436172468722053213194714413166188853457401957672771374414279546567611697787991569105336533237294448479675162124956831520709753213950123608167477044386051482074470879769160749055776878124652773398219059050681608348219324976306633091843570407830222376473479501168190264881786026960342644391216667906985837073246054068420635995226758233559893093781408885988965551556758597270704076465701330120187054901764537557726208490392109609808482489446634978278145638680284393994243801720327098634941012510751020684179258041408046335894301109083961969680695629824071485549810404017269942135230141051235391184798700250402967461134960048637929030491344633194277694308534257890480273943160071162461234495595795598807096834298222197418785784281080435231111557881986782658002512587802988879573398051345953833131176664882830936410072647449857952988103549345700045639595921164035890685627610404681130578751756320938133457008620110529845402962931844223735831451078377150588902227448379412332867376497078772298967594014083915503244316250258543498109745279857123879288133849397797777622790700031789231908955841513529922126215731674705633651204092181453391844183123540825969959234601441131744558284020654726457720031443602968625251966078249808421746561391497901832516044680240434168736206087688940552530818387004578869614952764135260861902625887640853469386127293795832006243306385226244737893824058851838019966320641834896998928554600268645314374928009469506826085889469811640605445545766170633814840777997397015534961227031804814733969712788862473121960891067565896270606810031082003411323216592097218172344014234695293005180441578147448958676926861297700164061119487096530365279769555505587667772251997659664539092563168279666496290276608430246105131821682639928068010643285412014042223303404595807350969498326090744220406513251375678846911378002715623024421873077779003229071927962551806888445244940529475919630935816329340962287519310148017285662174695784580458224163715775706274039195660126504480748122469308447241119703728977933875805523531066088383223990331864513333980195954661811211153614741000521828445038234229631863784372001663396147885721500240011294663693814056286513318953431999566089024990484231805407047596727017449100507447458502931926952474753370490589333652276110926427677161330675948465453769992331125885518019522114517497750452945336477852943747356763556443477872972884728567140881551468443935084247934529136163883681629652166624520636529306786910171425780172031997490501454751913016867499703926034554590721436028895852901691023675668733913543219686262691225171385327638867070935819993072939252527826353833375223585714514348137485520287542715415224055971776707055844647563534839554241310846885639918636604344786857088506638225125442461881931468435364894983477750849677426082918689897608727661307086082337269175351302443916887411191495299382205421641044343603269919208726302924662355512588244018272139008153741636213373408745224016117396109503983057013907604745312647995813087980535978331571993846227190363171620519710285003567859550652546739004060199609072309293814282267551132802022696209282940038061433067896168878936054943145268301758172480558529290037595823848634382778985378447482810347356538574029256796755349363709044305016122160483075712152850340262978563975178193523167418719518086908020712062394055210748006016516722073767062944377156643504992871677587435541839000981040166350748927221636418272091943822074103349180031674894760813134791365003687490054266713053611457603850577222508999650505057824395761277562415804702288356213572576972474817927310230817774689866774552795250488271253665409257289715324465077313842519488296600204613056116475422855158043861470236764734307520782026975875090970419128096234276771773328289809531281081634201195760349398693827442963493926412761862424618180775969192753300804669580583107652929172314250218675094468844195738581388289999906470435597021828616329713781892301206841007727172480177272473965850834259111335688454510915816024712307775799455567799839200970110108435896994912967909357093091558601159474043098474434458953854772517529785340175196104514515609074594841011534940141244169531171769379645152023773759926668019965126057532260783086653014371489958520759961235956802447574370773621940788864267495090534195918619456270610073025405301633278884337877961606080204048888385757456661413551595693850773692745071629840449249238707129633590393537371800904546624507265693010585982958439462294644077137477067222396865486103902559948737754303074075947363172453243690671893993869479058673730252704603094882604089683656844135757982827972010764284272410336608647765988276613900719194442702187835379169006006394156079150051975366941710507842338475524296441204157619278605961328861849284054012663741322440840234774377565920184275479720903627667083739290002937869571067607106776284633215232783076804240872646052812892250031019762605083472839003860848010927520739781624548101934806052024895252634631281925157049147056594001893602884402086896130377489355353022397345416264544653505712377132128883569817248658396263892041552955789241047126285560106710545652765125949534692737006525026884637650344595713584222308848489440771265661071328413035198287670123940022449544380373272502851252821739888677677259144668772495339740931249925180274296477385368933395918997217121020080065808067321322959850567972762309487243688852532877501974558714010008937527879898816624099832788523521128915410556684673867484072211028782496508061699480393284942118218769902225949738330465936817252631221955460934512364769280110820265325634929548470886215496876010187674580232716726393645319194921183348677088779875664054879669093311537398268787047132502795335827323608692333802895001652746386433166357515770099560479843616204245226327056126394309993749919773701210505215562095822780312616674456956306074276134695365141991613236842859775607823264654966210119263522652271782911579391855253458212590377824262471016489485915549496214745689688598822047375933811895506967145219038736009075565762615138672220313851124074942096750927489227341721648197478368953125880079099316828458207506661018456097885333507258348900395513090814153475337846386936185067752391133256656042734905120171201648595250995767467560692857726194686173191384256612916930717041345253335252129391279809304537438835584060402023025047398969115087837704921429638805336742064144529095031409618216014322467171825204375867177130144161419919447478583563056529566563297707954301665139543686504607013208330979747926789681558005708554722764281308756735292073358201386538248095834213090394357119405822454902859309559933267014919316798253057411108651547930138635650461499130561586862605669850217919720474052794027471841519126273560433263175211049310087126774636265738716512355819340165820784271002694934696210730354399311091022189189781755836517953098194652779914559409908269387371948476097597828200139222058702280605823128038804445923512847317512281276947114810614761984026098442675276511280965802518653959330034102460320580237979644685704942926432064648775082074476252868689911753622547931375857363612194690512425557188706406300618634706408939590305758862367988979520627205698794456256073243352291481667362332344549682787904660011180420907534773192642877556305289063859552473873367571366031581629634161409453449930999739977469128810265235991317893098558050116855288640928140159517547112508416430377046134017744459861382146982669959189408595902594552243295639106853034196652770806764748413823446165999182388593084672929377465197827591907642455270963682218377864932747183227671133777030920674163331157268078628386583334532571483836989011352449077313971209393904743849643164363216909670755463872318596619816758636001931050540595909015314734147426068807916901503293884873777475579127701504788137241654019955794226345611512520870154629077936000199303188212562587845922387510547497978265383601716260127412367908214692796727787433038547491735425490054530546663733907462643439714324879204637846124570616883256191958240779683540869010543032586728765323029478566084887643246436819489294486301392519315271054985282110200698811153711227997826948357769663476397867519941415118639926713877958643047936553242995019262969864378417560838104882420929571194087777595718808049579739519741091462793306885461940894003079150432071284085819370797616755911097821466927404759284586152148054451200026096779605665569220346989769344459254818966341973820775061410071257041674072455197611798992286282289622883178813973978987485145770624915083653129537729327634412671057507688762009460930093156691249783543608388308900102227249558978596692791094729850407985463820088695779784494752684988288862728340351968567962495711818967188010531948261161454263124512678385501879755144226739660014089876652672618861449210372124078306716201121248453204963807042802768921080306925506539516884535161199131721202191298815124384255276344226813631686154648066126651542408331601818092910713596664285093115374444127756250821061364208237395893234996851512430357325194441704042340954322002850563630421647266223796261109217553509548915723741802730843109916373190076269663962069890308848714761993722511614633944050361790529065556608302381868087856351892998390058983125480686450274498956143172947063542641809967006093361870583899598574363644011704015398875068468152336960455278333341428265659124205531221200078056952162308674947051061252755186185277622880636369244272915722785751143054950562695267243913362634594903516564287766615674560434625564806054510940272833266263133672910686060819519807997258222865663353917945636980575056773466254036153097552447180069686646667500352117374292177648711702599766747694326949382066909995945679306934393087815372859300475262336673786343603514342364806344085960053211056218022634235264551205690867116314035699780497589317881004377626696172230681965673891908180419125687219093070013264289780073641338274096713743662672608900160525935535189228306960521793046419855551643725796954818664742170963125857957673713077928262870392624050584399772844008621538776294216682101293872435366673972214094779486860825199346792317421848513299257714996126680969028724990157068715455979970967411267491910857921884734804925239834698278735234345811955940504617504467499176890656129836403595320208489034228827162320255043273854432716325154812903249491468588025602324454791405913241445030756120354376731994340741948611596533537297178114169661228030416354399705840276933338662036842974245934312178081088177842933807323944899974874324107738200873351352533508114502927901974793473511481166892483487038698401722633181763815086038818695143126293709925785283018732256022666944240726996941431863296271862750314051394836105571807737442751261490494426875092682641577571018502150393832278137761826227347293059742580117646961165642862095758398033176922202506265227498802204642222211633652385383402783350547497096791504929462949746206996761923288538920518285841496451384628633815203877051226982350200324510865319819883003244359442429257800091092215827026542726693056314895155217219866175505659697979425729397205523898033905556281330633912087615268056947375012600292049621989625812039236298948222420579653704412790913295553113745740607601132931459940372043402556008819671875061419302798417912498278791989091027095155432568518873057728639544887486286826391654456338889909763969074968427441173017202893958358785021275308641416253048042146131982750789522199562257334360395251760770337210108209407729005242796552374971804598220844628631899412296844589755820400345868544362221519434844076948408700325009723344599161825443633966682878013110395609717822076951568637830198462485330721058125640459210844001048266373335815036515524695574992932666924487287201816825859399784878934005285710268092006706740573786360587426965351981931957898733308480629649607063342084093577412046643133581358045782234729262693643233985211875218773307817422313568644261578000055412635059588528526164811030020759404942257406177323238564432076095592542921357493076312563717407783636867718160743687932848593936095511120297401726068449071873964665176424430677991995031221125874193745230749793845794601140240923964663387150363958524354336354461057536985569801521709708858414551547947964710124706691810174013263044623578222418932793974908517229456635127703943953214223929146129954728706335028338964388433509962910417127912890721367704885737651575118591955707894252254827067047718618231360650544402189188889419149598302550311156762782829193478893103526017860055210830816407958175237851171698415941377572055932826553080478492411759598741736248935108122504515544307579793178786461996297636825004868085454761658024798912964011518340230675376706550231275612398761918062074785945308640869835058696919841197809470422781423481675531043194288412525838046430680721709854153437007547608879539369584047229628989277148149822331429733268197327718321763173853642263319528721607374911454581054006635599852765212388585425087511196416286895771458272870679471186926508524134980008571508603461028383730303629878370593883046965837080903485071963962113365859383262045110161747299011164802692899941357602222844096603151497056841184929649711384201134848324224379467962707453135237513117133740318674307858183470716228283107317053418486692060429014945209634914939823107339025388135638471782443815664148595901886288543538166858839574833982647627971055591861441983133778796206955636444144896617294316325860003728196114576604118204118409250094829543069993943961416923279407729247925392164927816891955700288273094786430970883355102039395800898610721889243522301193600122518889810402180226358079439291958256632050667748933127980629401788963987981043737806901744465092189276798934880378719211838668489391359039697146083891367331111158490214043250509105926505338146133526857107075214632816266259119655444952248989369405073376077543096084940064925582213364274946062278805647935249109775588571417684693301415778601159750718833506772442097856651947191068996653518835947428558782475919337423344430788477662931470413173247264199536397097720494332733455572598824329159600255942954065091990117823837177591518769806012401817468768966072969769232321058988251554956077053058843879176809934630557174594168833497424791817354709709686679748222021997615312277533593246787974182097881192958722156814830761684053137708560533499695113390658381663896114623333505669611871572943138146834276674696119007176940009400280932340589197906221038213883548026807488901546797185502715688995310160841302628736335307185738812361765353424285977959812518622274162736185648177784599204186438525416310012004791153792948329948688096296569076309922864877079514635421980835341681104414534030367497875145300013392365047233405029577836090344154177639638126469924687090549745740676819986665021857198661241594348607390279551673739261962744520507991681725167690490417636327778545943436049718635095232415930227057511330952703501581279041813557628744672123562793296987439975968414319700865147445790530294420137955765246769856827690954134169545938283901876889974095326948309863088452061269894228036303821625012513798498988380030815301739708390492368009110665771765525993380333070795178561194323422564301021251488609975146200814488064990934450245535007906241187470480699678595516588195514741457768501821415918204619859275934167938446568736022281115245198277742026323312545167532617231391045038836380832038969250540431292890603930628155936605436357220776611485300168045382047690402874378012073082792367732058988720593198957856478292846228524979566116592913113932960060572044054498151694381600614574676876695755288727412069491792323575187723782884654241503376506729573951458729583838068815726145142253531543196565525594902718176418360499505387244300794072896143365681518032919810939021014656187519836586570755166959744235998519652586207231572635355942925580672927882434890431988865679074780252007111632608208379172541895896540818778213721982944682328916968313853918179595313314244994087274332080417226280360461847050403983909963398180367572448714576151350071236713874923679366930160906894823436447424956360455957119205819669205054025458533009404272363728084281426082559868662172854063874845655074672984227320872965932668166539380259036886770000441624068746278497177009261517522282776588134026013990300526643113986906425046410460844288597375109356097623814373510134838536811636143953057774655974559299351485149036488263857918383205194483641601202602176349925460958027813210803187060871131939416936304020257506280988624317804304649703983768365428969330839939042365916240222211172252469379150041286291120651301169032468108938841982368479416462177163639611132325440729946914241972101375658545118533597648598288681308605402256702250405774730046803891006969800836735741526094271557543977484044790030727993379806962830677479802171805005518393412323693309005799161636470122839510311797489314350793820666576892767003688538212064028652094388384963348132165120277004279403928894836563934641434707462887882453658053862132734171432942376860279434562949654132482063497221026242198422411445877430255922474730765821698685461985940355033247652952394879326506383742148945684323404453056809164964593543629518276962847663424452276249232092490648203877832060868233902266911107451656053813513466375729759489261021445785197269119406151012524046173073557012509474749731627816113786554616613119627016364376232586191344268438452076213492206212078884199540658313486743519417460764682187651272079596905565983838439944372712997635176080232332672453971381438213458316576029675286852111798249089915743266780483261701039701110160654832813935582968056421680357075947474292730439005357101161587713554078973093080102811968195374525324051746042640629156917815664154335601720677702957906508967555783868781136795281701453278216247431352308181668636192893790715214804213696019919095843877595921866996904431377004996670162222431420709547207880149252893368403782891313706524529047891669786907692771964890846138801252110851349378299652772676426284275116499210607302834704029662737701024759280481739149737722313564147939615462662963733652115075161813855096827040916145074105791366095212566509867795303720719407783112268600103801997491353437146141768716834523777194428859837428854438361491688843251493442854000474985781991879336638318342077329141088656921986248405195220137656707485765050159357651164407378112643461716013495890414689141767125741534575600080518446093996909356622553541039870834111435056404468094335899017170899118413521281468143097715766905119896378094989629311833169288799597111816594816464712971226216200542687063262912680927493430709390898321269629604296905757628576812672739522091316438199563896693525962139950528843245236652086193354928563866023123679727363258004473563680743829041917130116787047842862033258531714705104832347133826273990840169978676370553496589906522055574791083121627087499463882677802608852283624919092590711302929819542738024724496802926729439629036171918690707664902468314580498298927122866562211247802172582826225096991953685876844889121828435412484993274451033291967939971399542268669151683849139002115835882530388737431200996601885289222215155077288361882070870268848518422593385094461675210879788442826777410941641134162006010126661135777506492244200439346418140096885454943452369472538512087103678984441846732890889183460612236272612340467882193078614828486554030075410183723716814775797607643728263874019437904409081117136884991162794697544453821261879378181847500891796197865403890136843273739258239581786101091005230191360331019912903610664015628534859090554497868146324536240880750619833007753796092882101731454302357887067124752547081276465766530020014022158984367649278634087955533153345292586333192431416283759406111100534328174890920197507558424328685988862350849839646886999085444630970209272031828751428587468950556260480597818549328525383597044682750817407989019956686148769325423106761780520193753696623332948550775770726964165590924280967550791745178377290575347746109449996500425044760054184959263195855928671015341876000225287995422193969887304034747273539227115676800666388438274630819405360540837105197224981006323401498145332543259301088488861082915032598780843860088366111017980309000073270865110153400607058167038934613234755498428132557853444629673869001741424097386365422417653136056027343719619550845391933549607116850152443375251499807578690006598612040017246701397789672530899406408656504723955184566872487857519765800758551745099128093563919071667913073051524639961969345509164397546433781124324519908164339461842357371962371518343367908811301494930798094578390550882488974394760754914878328594299171551998185499064742783652881924865007640600910287740223273788678014408337721909580724965026698854181775460078899360237415911658349044036024232564310165900148351684786444123301989971910680910765627396306201180861996443203716045196424495867790269388999805250838368349045174002183459828260590538239244234881605345342333703010239329309849265691912336649150913931332569313104709066536900993675218321952684509315933904497457706123296303075982240629561188428384815823568998651844381835216254263124070040163756772975484499910868472833199915595714089709193177773837318496610176731019640211814088658107261582206672370378549364202918366703814826306424788116582129606382770610808179442564391299641682256710865170763946467411115041413725091672984998759568501522689995661265786055316396831919278524134936740551614703249855535392498700303483448240093687239500731900017105229876009363346337835565732809932982628884196074620267025129072079744425710713642647105302644642211655417630574959866951178321576637772696650384880518318013487599391194217976520991582057555268504016069455910968770002633336956636090585279994981423528784311309280964789675792651790263720486600926346674914090315466215931497066658377819351715530348192474587471120769009137804442218095364491828787369075834111874493005193800132863764281031486813259993273898444689310555972870229558710985862460827043717118320252645240837568262868151815219821799948596763664649205753703545922523859216095293486678435758062310852076044432336270758756460919763456451942339508922440393601011193442155805670294808949236733694561871959248016594159890290097565703948859648676376290884813163323079116469031421128764009253556664963675616994381547107499548515305071798528012405678313261979966741688992075305810711014988377247195755010043127330469546652406339956679139195467877925313862160669731189848485743875289864412696559073344657455611653327049958968265376590238498786649769381159919465054356110433100534351730661147079986404814974198090499656870973346199570023460578201622066916764372511233953510290137356879331386509180013559313304682480890364996493649083986580958041084121530936125952648721123520562591168513021942247813363533180431577717964521403404068358090421440196435801663417778581126483356173851444885542544998038198671010065618809514574167586162684019893235746803349087334348951754824525333508188906202816682893433043337006080611990332781546258956351634404208024091415797626369230317279619618789426332008242418197101140122447755987078137849252708230275423027670554614715264070595612818876742973716118847044822877233043983364962829743266284570098130131265922102599435379356423399221891845496794068280627562993941978279913389433762188846848829739856513237578322564176382350500818911376898621444328275866958667495242672797274620258826502723935784248515400656560860348874911030864179910477941646963465294118527372364726780710143960781811799023173265155310988923281856052858449319840367813167917831135455876505216659827316999723182935265116883735064424999765613686403224349071087498191682700528093796478931880366365055042095532080721574380091504830915883175664650254483162860686184129699026067828094621368983966069951036666989116923906541176895703466826239175300656287438300725077026690555958020538445538883570821654129246499097486924651293277370555738483448000398331507879555323850103516183194804614591094494378811582041663821087801677642136500389169739729526495652210891513056993748135339740162577631621883442415108064656628879780893956500426440025323515502496212425365250722009626005236230998125078232089109102275948303837987095308008101222429674770941708041227226968672157675751592832036788726459545397112623137028523112972477460577991315303091344657528818307534433330993348904031914719466678118336870101912627506863644232208990452397787050778249030501309579111396465672789812942644843887729264791358382834608540470918558541776330129412113718648817039089542708218926595959058485024529653944686274913041939362226780582455808778313213515186637404483111948554862242109111274565363370676838063474712388015368905820976427101700113835632056047276145948861214043926601124568818983796085173047630480817789020895501918661406394513929287296560425308409013329143661475992162760620154399435152427709913160625106592610585610807262225715983412687724002728087424958416918919626168887652604273622022154064312116100137391274312290906542448394144556297969189683814241075292311630213213847520215628635230063805565009553609619679710223104893286901504848652758341287413517286393616360608851655953536563030431680951031853304113304958107273779325345800772586705827692351254057363494594612365314847384883258238423484438762883751253722434395035584610981006781032669426332397481105794751143155045859847044397699326231541300811713696290718603723102619165047916921884519977689697023663746206196175203492316327889051817118531004335499733162979482334178690500124183485876067674745430187311482572766300502844028480245055783964315965457127244028906515788838485609919018275212144835128725453884145450133217711501744963323269385780872492828675512939218388161527570010971695140339044907525754414004770719199061161071323940227645543231800564459400179970775204011679206138104134507929734731788091584447002248036678921674256794822076295833176883560292690639117131079363275544977691176981260894077959285642326918606375541778899289626446393180292782218789274969923472543523266226756736383159463088387460726889782372697674556651639439301642574023049702609592660442526318064024092836809863609579071142159920264496149399099451060613269692730635756438071981255341324715361694388002156575811466505532252502809832011598051510105764125208787669183544084988968057564477556198345898435459090952978822064062858387815386498846347215862463355445474220206871266141844825889783926954886201244917461963630286213148968876093929742645768415356170262459170688970157770383439409524566726772004982736581474745749747369514367002738425280927089522817766593819514954382768847004576131200769612309807861615062656505286019371182766274686793896183354241430096861943390496557503480479832636281431725940943833310716346511990976303102848131925520521995558480423410420930410929933136520385170022478894331661431587398927162037933228752162500396926404983153441605101291540539500482757563437016243804756975134925042261508667839697382358209529346367280676322895639958587697531548809190904176851876095578178125451059221838757355488466430904774122958272210404044983059867416291833468931389225422959772811158814458913659870681284555910779256531147713271116436164770073327686718125464384736206413620005770574598631963327848553869597607504164703044434860322873377425594332385996978373056617472340892251127069796605046750078935469340452314914383826579326243235967925552200601671244575406961106455890713567646155907381815414446252135783395729545840692662889646296976614626914714293651734116898594566254569631155146155542531323123494921952446708490983545497622921404362961168122868019661433573890884792954627690922160635706468009026497255928377136602099749075769017930015218281964222570114564947094950883723094939482472133111526932733506702836602226556147451995565041269265760456893109218965792747997705976430366103198017955491769132022517236581222807948012494028285515123557892382229251359179160929677918334960777128696162247979002321628106831780465431062136315850648669896341426898990167657871662277577920603644842435791889366797501105685949581758766245969819515903139303291634991584460647409340629356284215266446000934363035255054795400195206978399100233079291579885102933894410297521833232290854769084143435417067223082387938091678492561938606477656663423833891007406158401961048233506382237710686142995569697534734148536382708164255410717253229942212024927078536008208735003821151129857837738622695800515210146920278496046808599076600883504795354857434009669949425110133237490183216221100885469629818408148112924606805101950610383150613271095914688735943191155462380551703307305044943158583079368194093122484463512406633659615547116701888382786822194468197371624283766152030976358639109718534242311692917063351488303605439294801306437614438505003000831992896121034421706036314037283250987539710237391087755769216111699156871076173532261773491584136565888253076613092994972861206954372493024739337562710080321058466236927334424810793159903991537167588884362818533514131718023735794199490087135664649730688743735094095878107362571535650975321044765499152445235349988522621824265981654497463235274448702898874229226960276760533649442559473754086801211879769925713980958212530804632262929073171458022086882200937820048476191555828954165140365318936832925115522275508836954753075190952755938700058521616181538169899315898835387263870357858886003242163957962920008194432901227651531478226873945500384247328810283729504752563665666707338271369990962805506263083829348555662081550378771924204266637731834216925441194685196272914089353550440946753344329388058483880188873377279743625053730238230620303684130562929947848140406749380216649875976648014583315233937677587748153621126876978101837998687157450797361495574831618473001966476992412286992347800255829005370512308462456563120337820900608767537785162720898293333821974597825174642794955452024663132996315252988270044076695362676805589397587776769182330301552833662359924706999502506905550363270757888375218264490065368905122788642013291882999497635929947640308350960320658323231111241488598813015185091895561224221242007399222106469897879441229771212184930137994963425617848802848945595176677066505151674882874924343370838069707996022962624803933189864740415257010566304993223858121625705071457355941689397865777753741287905814763717848053844854137655276919605807210787218273119026627716108072042533264420147876817229333120349070526487879242299854254647365440481328608342501487654725162577140884183575734058810109684388186051071110674497918164461090065273401799613028448174451582477006486098968046435052931399216620164700610282106675049383515226587849944715056701794826791663749681930922301672555667957685830735428825628129388110451378782311758178872954807599905544291114760161312687423034163967489415150527271286567206621461060213667493865630445914265084922682393717223652483364516489886532991775127636651241087056225719464214843606752185171390667678342007785203510681244367959325519213316432207514387740355538295470699616588606669527713996175716921814539101550556596481869391749037478009722996985365764910014651599044649914872555671204747256269654024498752070906752175120391722533246123488613754454819647976117863015756997929885992237410986800164258806134602111241320484967022147003168654041448783393402869104061265827605162302783071931132862361682078501507465884424403597219811512446616349936680384291261099062742180739113143348886564946865460730859778659521392366340392781968004683425841864871118695025677526627586540327860823023033437828825912787652864712142011312872676590882422991951062002040052725405285483056839532045127108363306808430855253383788920788377970853593564828903755242152615929646297630390975749180553257957619316430210845483747092872345126472351334598157438451432010785980131860450224671798140830906084341927498875794649851706603776714318753466883143748735503669777985978652882142003850723843538258664165561893098624968152108850609072228648615277829543287464604084206310115682612424495559685557372221542448764564922016685709139378734277429166514675584945056274410016156336367471546078948302397267850513266081400366271061590050170416862276702838270638234657890576586758301269133712198800130070277769257688289427196691267863628995254188845351557891986320575672401220330982934488932501992402079211482344032954183188521257195554002114902048674567962169561415254041750324016994244134536482696268601500824654087917502046408881903492593182450014759650332966041515729297873521492391748385662115288617249599241174314867875104108991882278465998453231906912117181649477306490851036234124720082254785004919224935480312384652301599866816440396847144122875407762765410713183070038712848663396149693550831850385016735332155231266248292437615272982935383957937475566425084052304777187675961201598806078859997772147875912752756651134986387824879404642995402328740593410579427778108601585464360482151902394492593344773328294436536199864995340204901613721030381467541548340277035331387974644200330751736433178616161652869002571934628087592634782919882408170093324054966420521602062655193559040955008367943324502546261038394685035981924572067859214348480085736030423841353514380777861234055992780633510785466760306298664928411539712484831157820174008732290520789457212597930717813912288356559872045812590910488372759662565606684300906428942597581695088178626296698127807672603106493323916202549046747166842656959518544263096886201813486463334310557554214003572934087223769248578659797170774552220924709082725214373297824731913073739452276302342136268687833153876794987925364572755794100542260937217839287930812517561980934921239393266137989996673166401180941097359924478383930532837282286238630424052631103996421300032859870770056052148638508741007855795004932962164522775536413462901967889347124376340012472764066518541963127198667959993257124832059790197511559901472092747676365252861804747975246982779251309860117207873480984064845198453404070318351807241954459024522834202907677482398478174520947590621574381661428564377640409544701695301567334576778420022251753807458224268585305508875749741170076620137837801376414747055557003495340627314911624468579828568749393891282577585875138296654881274018860955680456915105697099771532605289000073146135390677199320224732599925481647239710260957291054299513675327330790658239488257473196972308097805191747469299338908363767253032057605406254769651020108656649191259374851038169791676504314258420152035386276422818089054923810577696273774611905196215927509122121290505963424481106098553067400737833646914726180934672744049084080867666788230357037446142804201354062238055515192506269805557739813106099993974420598763927519907312845030122616274978441110886573671700553837781227911095491349341536186574389573922609176736974095848983715771832753749207099774860103577422876249137907774274544541054038562510228591827072855869710855703239623663631589831378434016254753052802610928996441177954114296927206434765713417262522190915496505920354957938822098539159652445254452616800743584820019315196440185957452159863154428123786275930864468113342400001077487315046236393949865402738910331284230920069558467273197927477406836528017445549132005806289949337681522208285058826249321782670802098761807767785922078645425311327128827078253436691347372314079776805367692932355775722145261016194626435191460981813115540348080994337082011509575132370221497975334491736097967680831671807783071562270410822173707643098536235052883367220395570676757755506248007754757878470326677913561366633220226697827460031728126389886037195471021978113998011945206101136339816827245362483674387126921558045186322855902465279896003210640526768322996113849725523454361830063368217273921615973162838410578096754343430264293746286478667555996485691787376578621742149224393472825617146170575829875273191900221790397364388956435321339609735640020074269682154423578628121016737132239690652654486593308117026617616832919418122724723993388171018032524237372725279999796075285986543507499320074025299616210320781895555362390520781400047953324804078524564640000535008621893650181446458803854373949690722272119358465650222832449606792947575602040606266133537994230378207126428435726509757048997533936628759162579723054506594914772477046425197915430624117744986973558964323343977318246914462334218105017207128222624967539361194565552318722593691145174647820151262803151740877624120540052060056662305720352431573610058152882157896042407101475506716695413167511166182665804813429027609222919067118294160318190543718394250301001540254403260859717625694432445762349555415808592423885916899759067381306135286104339702736028617878459326523394218623996319132527954971984781370720530404157354447038992795907902926991300970780204806772558823130816609785613294344421540509804426051380424588431533602825517133463966162450713747643058929019935693310880007252731187893525715714986352724203914728357775995678406032966673532558522440798200312245740512094667420764436738108858425519847130063705273892552581389104071728037304452209010794464983545701935821429980458054378965231741932644699985928850920033317581767941938936065016694442093697828312406661830392147613012724173947402657926046002251606927018954638426010112564551313539193014288978696582652511217813629770912692995229249468389391283123606475488428483688309760410154126619610842419692360828479739320640309533136305390687318640163785028594261396803268545305739755252881524784332533396256413732223297190784290297092945360134000663976198718170492658807436969477565155834751429347744004948243894930566926077333435481729284311899952935681559324000398589126563258603439353541514711557529382022442069598279698351952336542901586247718974413820439485245543833989535747522512624917821393440582365423305918870537323503339882321265103705048662501715008085828371230269782842602218234721310369743732326964123643248459190466779774595273865210222021114430803604620062938080625036871232051382883887842171712895435355581979792137790914814203136000958604820824123383393127513975150043285626930816149215709991541189657828797497161272346294093106076544792583035877767641346416002847518731717560405161081347460265377129169253045992222084273853672991580925696324426555888119098651856886377222411642194535000434081354531020624909311283824235087529527557691159660555647200074795344847032190692581698667246009709934429968898764050634105398832564537746900568508222859383491578694230713081578366753040620763070341955149353005494750432358435547812316451312484203171952215785080826724289940530881858304204906175450150785217743833018314592769152464801955654472065440334471671265422701852852004358965761945031975252742256001041473978266702953690258080931415069720411013519100169156917832378067928170756940127269210991434334906135409603655916871704399308201848866896872140399455544587490648454440710645205230173497847574064061041455570893902802456899969346913687740957482664010190709883921954426840149078479790020232969254350197298905539948314100325612978540077918849692170396606762274127704398046058744242464788309486584087707409552335882587380065826489328886818999328062439635829834675533164188493065461971908614528920172075864762025264544794818650359898776598152407395970680191339270991171532809622046713742684624224931657770277758123513102332892560950967846170553265809628318175388483018187172967786306901824521202185287132690886221426699303451315911125908219596700996225365484675651960362046321806666297109031476930880907128264499472636613756659134222009660249376576167933884620152297697246244991659871893042737628415333407515352487906890441542834982087066723058029003682877369096426085172627881489345441322887824128587914548208789655420564621969033600916656591734691515670236821593809841894635043095283053485530151712728593080290681680154257258806621339577876847207162028192749867094970242899284623309372983036574078210234740175121034807750474045090258444789771908576402305013897629517743618328086379677146378405282629579196258496738104535417277297723611366711507297293470128471773860652679156013662504951046233334305260917016146484549690504016583274615605080955872548542258607287861223591771581864269294021654872648522447745124043103832710481844261747844855551267210302793530073285014738038348821117231782994331907878779718152298053259914823076494782308506337444223001669584257887261850838023889586877752787929724119520729260596355998590361190231571478871102415100045781920778686140757106489620574221332383589570377600024356928522557128411969794775635976583970074542870488577222883829142580840240674919023823541343880143100644240106058665363114140314935016568149141769478619607604802149449827073230560845634854448028696365703217981901623401785418213282976060820159087307040988412722147615866774859428320132785088935151330664599681040794621007874701358905304894600257994035134273783030518589245025028432901990150632429184119952887075330457950465292586111641651681050606232011570834855027126983978992018672083829659716249760319207752047913669306092716367073061936321712532041315321887641372157864841614231806698398989974113345592957296098473462409945751959148803293949578348906046137528229654749935445785944462812278386519284862601097053061515381464790675439384365160822068223164620571104945322160025579073843130990449490802851429019384786613675886223555291973537055071279397781252376143331431394281214554364450656733451733566093496963966701557605475827022345406766303694183581296776072627845760501230748676521856747040838024381284945924017047360081259381360973680881993687506722461460649797729771054522332662959779800783187654748508062663030423116271830150503761965042529763868856774100044622898630703557949110231096402754424019397633358137326753552389245455474881840717893240976753790073120059609397418769446643988812379203481427818114097030561244441922428415972324762620537174801693421784715646158558478841031775234943049564244354876654420353637408660720231781873045495489478065141349388345152683554039726074047878872286260730442284194030036898453125280089288754388916034429668864677060920142587012246609025157197088561559657851101093557277006168297724392344477537634168141861319102796028735967196747490286223383422956085048597352481401117538515104696200183983054772835303081274857974415288501163899211305773249655863773768201984985065862660987533379347197677808703765789466132258318050527216649645031698524940448588064731768458934504951357488101941522769191063562015118526849231010119799087222811878355565814474885314035034383151227977088766616826937642556230625668236646826487656176287114357355523108883775300515961456593565655139830577940268145578719916089696392722613882562149825071507997837129558973068326359740987908097324541397483230583598499322884478631620656954798357085380574043730606996909630119263758150620605581032695144137568796695285755527717574817893610614528030203418117767006174281787716637126219071541381184725367217095734286055303481712150072123615599082708377868204387247443379341732246895332179421730768653479389652214556465047284471634476992265036976861690999549246053489943535041784197914081132535735080512724888520373486407704342401860908843341807610615973045904384366970679302897698154100743551010305976445488422403393963091385678485202217961952366911470184880916243630509796894474592597963088383868877594586947237367497350967544628400933648574944300640936963639587259065620769220428311770936359965667159823659745964872074963396712060676621644929076929184305208656442052877478368636880265418186339514111081691390967595010993365629765274312847358864330876569083798923704220899593280842893181346369907399906487693560566100246943626951123100609167043780845975463217794079627132874316150321487417139570851685708682509329203061406030341089584896954044459482026666832114002541951457187375546075913269763081542041902864133136902039687948990161236474625964113378160655192275473804534505187223561259133406878857092499750961101743762965177055271759132444363513855842904282154699097768908677561438906199002362670763525016832195768620362961847114938945146382449226783316293559376628503879871253776214855961981726662851636506838680245540254086237807629214508196537299075850438698982547327729617041775758775010347569771446827830477135390527898291731532749348619006718336314601742117458701165688567235128117838077305056521211245415670176514969019421611968748421129237058511038436743079530194922292912670618336994687235537645036115881426943234506334840833717350983275312861247675953220657103743958092391841542551678348685689005180678680058391068098540008724731550998124483903645141215959926001342525683588327680557859974576122702310459235953708141967158549556822030853058163601137890517644124249289252250580635195821482505072592026300230439731668745962138186274766180133596974674031105991307091932131668886112370377895987267953425145159228088569047351226021074086164474531817545494292173986227779982017333066641403177761799710505119448839004327942551040698748615784494391134275371225834726391235736554595472356069676468367654121782539112562829823862537383517504584694179212801514540223060334649416611291959938680285721621200491676507723677551518894388493502955866804526944531421373894146428643267798868897128568829131630354602715334400023939275324793912211782081145653718531772802505270845104600121400642845725774571521223386604962878041209631224178662592140746769887896519262535942933368856872191462269454220188428283980621745466957318311463949153343159560561655803739123686498230320221005264010745880070702429338877218291787935911692145968538192918242624564809348101014439494621299344655010055942867117730394015624781957396836273079335881538983551455703873790780707863074351900712186606246651003087777055417052068912938012075293265982722989944237000585332777308024351495610004429373676889904858556239641629995472744870183110880731258564197257532158243377584415692754635871786354600047607691359917925222463638637737442580666924190702538377666122015654395722868103047791865231240330719193190489935240932252716967991374108057369285938126882988460311597633832211748435759349016038175342173018499103068290287851539983448098381043942665099990881872821483826289703325371660509529261354932508958032319439876653820651727724671127495779953643254012840861176093049742252531184447922810133444494046354446663945630970701705073454861434618061004398187164379184042714759233776615911983805880392346477330281085182060599541825703932693585271774943097471019671836248106343736085169204453404714367320430488519933610760835111270308602516114570123632218276491115908923506830515406707677746951253727304387414301523488077667351939477884529460846849068841247812669458497173106052480603726658540771750162886689158816812615883895672889460598961857829261787660473208614077735534172955369172774586256172902788208333701728118037668399055189151146613210940918835244090628513269045502494930675390095480154629996778293027847485920090435286054066269312783170933171978953939740434259449771668919224457490909443207249424770617281994632556609932877931326431972525402407153476547211288704050791069434024391355810676860046404194705260603483996232577494732010957928544856285861197046154694950820371286249629920023412017201602535666048311675956076963054177921364199623078270517401997046280542336889969202632957881002067922651779205601587736839174619796272779824614582034852950057578159774167152134592098994097665294236646338346187510959448638820774444531078154831991402568562931298546343519884930115230579982267697145889477654870127687291727066522109165347528236140458058943631506101732796333810813046273906113057810434628534373955951422095132278501994211338494872042873144795325391834191049578028998028864232380893047788486505865096440668438333808695939151943274667784048318609363434778886860331897109683219762879862988241663269875504172023267214753933811649932960857380844217489062871263339280954625802466059816731550813567287286894267114002158502349327650712217041450706713072164827759110492006731192017082693587504727390385741720043910861927479371170638634035447647384161310848607357931873631589167550300717086120602976274321757964938896958026192363167440581791201923942216911056617340198942521017722506365692065442425849097453034806457097616958009473901250097321955731894785151178074798282474130559299809141197784782861415755630630124503250891164518175529652089242815634234793965897326447667042075268134101158313778263042385836568683962941327805698852160358103139546974791178088901760925313220148841198443942639604935986400150768388380775399109282255004838573714438718314570677620301757341081624011333579823372007088710389852838424381242158677750731651597522815524228015438516220057393345949277076062342923524298915024443979894166170225040955185068289227462321107453741164838441834132866521057727358013526358656719931576456358368018893180883442144448897439597888927364276826566445813983150609611121576422060646494394046384715943318190245222574715328737829727374915969019536551420751048786234196951749001437465147744166645464544548616250413974743905698458808016260957118786503242767079514367357250435494385822918640729109410927640472227146698557110766442681721763824058335081267619861629415756614982239265854431257287886771416165169589422320743400940973215033383171530119819621098315841332772345157246739548076864722319410905336763539354975247941800910483655982508789953569579720905527540088303832402456335718463104546549254416272513500564622347196716861943853757393988747472694755247400661827888087024935121373564216738867112907909981413081582325047135438775634827953104552318497045696701869202611026417400466964313309721741055156453219779473721170658560589975044729989059594988689741986015354452015872560147532830635443502626416513522404632892047780002868237452033736320271131604900617151058443699985203147720245890200711407107908157631294123939666783117955767000927987361678166070917766947370261601575689857562216885511759095467482514737721818540228952754561230417445885489851106731402648584215649776661340205233665793412589510999804976799228323483113157171189806123095399349830645705046952730278184334419717258925281794765517545440249139524192443434395695466576284125121329641548096361512091897637543889062343301310595028334663615506838319965109238865628533834853721350220755651371986814003016700591764789391274868014521752847577547352336142790983976297155255030138920354541335550389968488599995885815377430916460701294460783460706199230479415914940552098219098911517411948154356645490040887302022308160057318182904526741934962881989366745107459647818872705765135089664271450994035390539798535894796854687163312547206812970814439080463793561240788974707350620394095992712352560478771345973026011616514963576952459738293000201895664031738653229903197342381182535334070464492226512259271312803913597659811289713449306820166592055350489865901284272763691331508151609949651684080636156578401289569175242485330532900510038837567305825980113584635977832237667214171840601296146666423514507768351632045484650767491082238300571385991314659730904865344883874862142887147965597359175608931410710696472572015144876421279413830911540555844870467638686367068537906834273262669989477534442692563890431465144804834905179268273488283887349617801998714037778538163314157005802713641063859262449247235386258804385849513476407376021803883906666592642643195378342273323574544517807006518706427173381117647740652710257115043181343018364666213737195529771604472737221848982212127209215745571501236216142900342159461973331343268249278845083361892581266183963265598529771337387097762004737210302726192627733240813827706856849868568226712601659359630917507614403859841933644541464784572396192105390299364279649217417653402970552815215604637108948512526583695974762358791494933058097763457932759056785203915820461194807195712371980667969789509425864851357257991738631208322357760766137150009186976833640670534187575807226171565328874759217057778871129743185253235710853001277402873584090729824252703407104763476736542384467096939493499523294706212943966133913315141117100875654001300340028891689762023791063746348825208581901825744064526043403917837902744713025635544072169821408709580770157163315487483492015128271851728213400773493434588744540489101816277318283260592625275149179041411757306521325773706390072409408640169913466707339382716521753040629027278057349590934269760756886877621873528139358824292874287779728742850053085889807075690493760991229024549874490717168700159951750554303362071473714309555861584237141459581234181975163977782825099799016432438549359916766505327988461343778195908860766512025556941698971109583471769579435777874217764356204841478025647555706429720051229541962076337340122717245461267674930966736926172114562060889421372057668848445181321854170230516941444157079463359620133282838720113102121065299723957537153435796811207126399005292823770813711373093763249098652889322214711702968857858224610903023554850901438405921699257621200233977535869524160290656923903018932473641886065496792167245873792582265162867923604996193416433747553792397452499487639615694406906617282874248526000487900007470256419092293997420351360928044732893987724029381880696112806985782416182921137952508385743171127132421190343929854724958439940547601629917304620430755734135620423543388318829159620873283398891348930686466304658615771323704432258638691418140149676071993340051970307799716305254395848100961049037460410070322948045600621611377853972514704902016463870214297403920260302808386401587335479092296929568513202811375657718366412506246378921493789975150491677477750338051807467010756590699007077718442951725672850101813746042314639164473889275929343166542312035654844463674221473511505116386646162728018756390289914801439601960649973418160949757042837479450704794272564024520434848228309665661944628511479757840559703596801292105250382867547321574951321296341830621538890597664699797018630680385002043849626862448667629926051734968405805645212089273227067012566047409277739233773599711830643601122693830035898779535656277756639402236356400631078147962742633132623883075522399124577686372948184519921350327323474403730852736004832874489685118899228937395339671114710576345423699097869849262543286949750310149633963317249239294425375546260995747987085607783567848427390862943289690028746027332014642469720644751263663143657215382502866191154353363850275683547092807391652835057313412140361010384629615949427653013971047780491710284501863855265711408627886488395107202926967886441130462232380372227255364400169538575994346371415811535802615008443999459132419025096503918686347642944154677498927871147405672819220689145890875454204431275468746254652164432911677006938657077068718071313328065243634157853794086044336716227909583413380066435026189171144733362119124790989486723364822766416028856872007635612541963496188350490379595483546288278082128418887504815764215007719037050900675182081748314985525696282913135530771846785858520752146939537658048720831188568601371469818712906394881913635481018475373489624524587213153228367273011903368168821022466456726788746086425760396802561266868055213785284989474860024858051951533117539228049309056960796240105153732267326259662779468331849570494421423136472875428241124304837419830409535098910887967999175515369559227279106222440434445145383160127783048006913031075628328435194685360298730317705409822819872578415191022666655331698211277222671603876441136835190326956342502566750139579741544028070957725186198832545558974313436555130836114126046293762202372027427243976756086165527423857091347412243014440005287867045666181302959253138967144807120960565410770476521582689015340907871626341827559740316923937560467412606642211035477102847727237865896030451335311772693757158105571795923443816869981855464032180060199772153608830501590879606752301014519684996208427276412478629513369773445704421599660241360985671543159959941063262487644074033255951565985724069529794943007121094157776559066230925158733786664058167402950816313792781731957275934274512134905628663756349118671153379952144530441512677958034919979105135864271017461887700641986511222173876261582475027561117505931088851535128583403625824824950600439727156961953334261177432688100106310281059197483311840234082790358643673882419534149633474598546654866201149217718509032927908433343564912002464375092674308047134708621140924659775755460446497243056381029312952510724331249523592941067624481778641728150074583968588702046371040676130608406265150836998322646608481860071130325497017157132328689766575002815950001622811590692239244277583669145403459676878270703146875366773145333701919891694569692221221198646073942622694355746786478791470214108389353657409082373904574589486896443287093152346999677809109320835874590431834598336125467790299888927340825671491454662645927248445242340064088964381164192893722409565921595511176324285950873479639301844420262882264678239489742442160416992530628147644137839592766830010760228993612661328403821443080453754904841192740673746570910030428920705672073047112049760298664041650721516297290820623930378973370272244342248642805553124234112814571073553225362199093410414660181847733085836894278440856681071327325333662141015958894656778574848541667727093931389275450861794073169912498199414456285162701885131288414491614079484200941237263116726363698007012479570054151409992745391306188536463050266687584344770399664783531126380432270077314977893813936320483956500115655113503701964270754568749609829581826191357760397378170685572144484971237964820845736126964274420998376632326267908267199254204770580283403199753567564615389655920017682150178624669919642055433359597393585243831614419983471723826667212088860277003348809072812507723638280826336566969877544268218900135802327105980893488860240777012371121644269916504614042509234782297997255118679983296566230045787231688413606071597134858096556906585827173445819907661571146512553388052534575857099324451469643299197123880152826047697702244465269882431317112181490325012106421799864845956329625947215482283483505376626820333902977258578446597269635417349931230597151471238970186628009125925852456715311679762762161070492466183838516388097077166481930487911509757410580063429323547994849515386320663153000904303017466988035410879206032819017733276608496923204181781712928419617726510864234690041864262539410858202892616903486779102569111385903968235506844691438725036748564932184117728159774904603703044558562272348588451821089544798841540625942067437313614878747877921870388760639315744888473556265720823896789483663794391862795904187965776065311475762627548773679759578902708658399930636823333454925075869780016418271574394812651576869829810108846960126525610136049927642664928616697337601072182802534775208672686495469989906931892013267096756665821407407657654587654159846965249549968928836664771820620473057302467632048627476387881195316918712905245556700703167314196078141142814697572579201276931812731451683433630033580277101606214960620389545663682954483476048462121548920591054929940279984271859701095925423066906036486827259559705109880400733689398156263273321058491286360568437050750386033249875872897144932450471265814000612974143958509245590699232880918917564948891043677532048189288417508445526185873066860727839903812007645880865815816631482505348102467421510839038824524199751216423074491797590756046239247742091038201908301071240034742435470010173893005360914409086154695266539628513510222158884355042429931839439905169732043260841340119083275583927363033359722564723615000173904563171674484095731585258938748233992022880424429377196321774013397842602108464309499545309452026463386523966034359147262645218740227801893527049602766270905247063673325318041606930524848814397128474897365466762568471943300032901065187645560647465985924120265100771347248644431723120912644556155253284904221856423272054348373427464419417825483092671038854018224933462427521564674507751314542523841854126201236805077163046640330849320907363027149566590061833861861003038527133683554368421990238363050102122322461654728983842032207630399489269253916686627076685430860520067000978824434555620968557869367924977769925478757306492795311280395550525375813525750579884615710639528793587025420987559495721894030676844536249401955172627785609242113750947924870152994318659230898507648607800093844833045095494952355657246462882037397239163218048107012805880502397262816046556200736526274883942696195522274128763346280034589440192645208422284710806846081564817457990746025737686198169725833738159537320810535059051346224427074660261304669164569429293487189506703045484735606169730598044064765106978601329476437204863580091663522355817171150969726813749059651760077767432247947175122767550779780280219871817522243004974176060913551307428170259099045435164852724132399150298794348401905256721943377582751800941034383852757558336073890802227663756625304087370467630273261362473328602100881666174935989261738079069521888375472542364826953779199819094521607946778200005463455114689516141724138845567859270207218120781097863664766950424699585794014673049859677040959895735020292482735703641453370651304547833595360305738032213654793715015930680743486765128110777734277806684550032358699503173333138214088771288566823453792469196440728718037418516996808332518202763184827181808146700935319054362684055603262983087710443858379280202471059292342222172026363808344213077576685996216258154067502314259213352184192190874458145500828925927985960951516067899543843102358562258951091206659296605697424299424693652177492575251516456300914201558381041844438807709683592542195222413601485306943219953226372742098938721394190159093951020199685101421107901681909560162959512231392661879675779632319463092205324709082609292525171923471404880869959297654517030527218806014617175518700165374991808166648769787883255226180740785479128292646784256844674132188505223819620322798151336440886751408885574388196889199544791256705775411530461572745613494012491606033603104067005758862474990784773015762378219546146557063145869635774976751065927517153863230620099047845473754458964030744435475457701370350313166863283870313400393631660887301342447157566476948419430131155710049398135243819839389761176215486985759944434534865309868347357575698017426935694392667686994631640287460637626732186138809530610341501952882637860274549666629047082167637971272182472441409439578319091604098508881771019083298078263905306178131000885624734691572228780993009861200000583427812501159173910266721747243227545687967201368465320418476929072150602475178240215582849340961076391490553113747472743986079693446751635759914350519044481018850814481693711967911617945197458455184016272341065600195304140917327982212303067209671312276558330252080047015468744366477306161182608481154546211678968233917767577431830372441654058060936031241040268967283970664505727912122358894029345818076976399271693873320153786774147077088064944894040199438380350301434701650285262582279083350151617677002404109925398695491521066648831709171767835425123950996072757545677973375391420114973343163032634173134955234346115784143422625515831022463881354218629217489504517116136477337447064975012002805792323552515540361967302059045447925617754824998198143202160574303546742811267198319173780257896156780878208493502964342190102767193387861958307561150893737013241308160974744868851756248379656406760445440680545223716958003962267314605454499645553103009492366899863752579709011479437020604394595362491528488326032629645992532411051765882594786423738002641793574452187565731459126703574818651937463875518756803144232411666231887149862513500123040493062123289232188098935779714900345021718949451522265095841687551865603101464526183985012483564086801908504366885020273433319605581595871707770511690123037635177011314855424920453673376290883821159440009789445855277167853645607364355885331356768990840401358040155121719746256292558139717263819559929483448266042659900141352108481007338884877899167614472773251442683078610645699564906952153289122957569937191526760656837547778945286308660604601009388452686286199790415033555405664796540836336957440801395845371538369083770590692028591749923130019433269703738893295970060366503241246306238236811033688788112948520994420046300077058622346598193273064182152912582156456596366492815651895061015466103411661681100084193689320658714908244431452554887296531354605617302578534481696364385872638028334830375794636984745609007286596318339757545686038648214296830467881108445655722058851813074992376086743435013199633619240686456409422128953352089662771504435745182917535628477563205237055183838264272681727787721549477150702550078593220280657466901328041239210462887769040909186051477657901187761236931539670928502585609620086843353643767188660785162634508111880534134005325806936292840560630690495375080581338856884326546731411532910168214740319061736620332385840800414918537311430848920711428186114355082804735619162218610686171735041344625287301234653888104557885569004637446950091741569149211315569876439613354366400473044171158013522470634918248368084089211534787061806529317870150637504705742150855267471889474747600318701543741227940477226203830777727156661178736435017925363699303765297175958919839492660910524480211257670335831709710890081810324644899455722577381094405847306838747943823204974685455426253494141901146463382108811047952976957815948151573331125182701383521338642796488859582365969505164912446095118517578298741679196860399130449127538571290275662551857003072706841358980986835468235216827991796415979252661810190352214036178842940192510970831464296356172058734948177355210403566725590748485367573269960667988462187246928347148129744110363477000147200606340681272475958941367937806076669745990480073023630223282542802898694233946864762345209643109486152891780579520225260638942409654248461587366908721510779593668721761626996941608223191753010374687410030961800236023658041345857693169917644105936255918164227343988153863439525165011244328072149387343774936612396780316473805602052909273865909726694004867239100610336720120028998678004603587700493365461144893662757006929203484111928654762734836095048464532853602305964597491380256143757918807998933638661981734501893131429101953293713121848124283618515916100296485021204587601654994911540484987172126116239822917491226335313025110310545239922308456489313394565782027656666347405475538889910579677538842470620085216455755797504743028442834168319030317285199595937699283051804044345916507518110781238213605060089238274779096171112640125748971853351671752390016449675138838849932052901029030289734815307753348129366243451407475182887743192342154287636824349350730903538279773886850250740773183159194839784037081824523194542353503663879917785013261055779309677434827646626649799067034675161829657796303132836394411402029630634529349622299684005071730833124290955065727451781617587972009752260600250588689860172225584817696489282481376324630678048480823376148489045540458136788065159715346893731303949310890818490942021429590739901732808425009368317255790968731489548940924082278951070243537544548655560918005798087746298335477422927398735910419448082433761333882070773774318374877120155345984902948306893917727744818128148589366055781613915883881324967590509856132061739797376402354466295731384630332497045417490771619780052100529068697185508221806889661977226461814448096361363942598250948915925102159840499115711095010237384216668482352440150240486932016155309028609570218833747186339454878728971027474003164971975249086277719998820976060016992729651534950955241582285797108705274091134598703351775121431338595070403134511228596083600636470356311162251287828389574011098552669979719387128712685073468842675681952620798807128117043369483105823244355865621367151906643226160449963987150493739000684511370862891839363591082520836527592638968156016725497829019436449060547566625756540155311105058570866536696738464741441092857086376397653148436040635903941459713568938536249450788754598569183910271133765233996878186538318828733853967995531551845055375253439052212148951992282160124084660404831866253709705719286662454486439809794004990008618935632943273365715747627330230445671835587903204181309376647243378051914276385642681675297227992450567383787022027203779099080797805679194066559486986096105117003537835519672299391665716036649774720763852534736915589349313436852662355463432315373706794108131039857580255594871871926117613426886393578435239444279048750102190753983126867655725999200659406569090050844851955681268656682834068817080298193341438545434429004155481587394465112542442998702862231590101278024657880580471478990339082609150038417681443486519550783525322693862712649400013151809212009275699583558869832537527897489532893112618937245540659569393545750961927817918477282362365644539926442124860477400037826596389388813431665145838042520353287942175315930331149095034797148397458059754146065784178374802837040035777008826747506484919211708378544938235093174180472756525231595147986115248197155929100367471089768930113637803776708206069758036241442224121673511645152430783805302199746636214583994346445846868086370183741252428624640358074419636397269389808291323673316986154484300456731545356235687715303726277456956271086488316329691482813135834945202447414799386928456243241442367407048620375513709617618894740404446367122739814805583324006284579577436695562003626588990467559300484323554270633541456924679678111498832102628247548685449426612478858118939943801292701114744810412938906035415181788930368856505964278746419494783346713003761116437737154756287297668958220805997634208173668438572155691420646653774113613156940796229023913929148700584736899982358900466015580252032990913987826155186033927540485473412178446274019943238227810553925627025807943273284987988691693300198673885860037931330732859253122297465923132636625997469764842061666920417181607203448063677791646279762594499732279094878934635413310871830176488936717715599997846719217624943693429979890074714371440589369287610328414043156180770415680196314515731483299600660174573595580232953051006187098925568072649338819492761007602451325711304444200026974666082699946336913268240192941124045553328381177714432565834117578530933841866362694423458100780449515007304134292512253324135669438367002210191317353099261196839611496121477771939524114728145435447520632469446845791787272075682148746664149828503333706790100637575070935502798249620854780513849391759434706172801848460598450226931125158336643232213467640640537087215845942513538256257192831069719737099140026838742191437755945733627379900058417669708320333897782091601319248048133126289250764585457847858005640270177289431210942693599413908475368779430511944253742929460791760394950149225992764885178113947267486279573590109739807011300754124004835015666163496862597091863061860464745689301544712216569472835548565738002263910138436349115633463822182424088211260270095731760191254203662352784798237691407665405132521859839361010120925355075925254196815329705482159919104643878837776901883704420143252496799753877674341984139259651249885552727558400637688215291371059825049557223774750629191809786184415784623253976769694698121797966906696461086293272883250609386666832411031011699314682671454384153010384062662533877572151520951641049366373076290249748421999485528021228740844892362568210399469719855184893458683889473301135197533305252148739976004559873043788583667919888878030704607149908855190791854849306363094172117123869835353764922210960044076582390536695750742315233214140729790117673458343241462468735212280516297525744019803620389946052948606306802446610663629565040619213041642893015287216079752389070494294589830987421420883876003474778987590065647403133444744688993250867784838073331573797768907059418926262565357490477708468177355077767302339767238611250508359548777902017897427142897404341710378893017737538007914097182482215138169512548907743787364461851422957667049937704913927708607837292412758062910724647801747830380153055739243251327654263034190497186909310107305460397162746819003020156748357814297041773615503526965269081797694176300023669680910875588469792983969740702825452637438588553992726624890917185183678456592907998398441827291210826049293034860477108699607448603328647579755410021906776700713337838045212374565872874283285020968253814940270775378810902076757516721032318021037704185095752143233988477568180145605373925455750477524572722112169846492913056087156719801352564620088595398383659609117784127439865097508079300708533718790838457521421139285009500201560830637869137517954451086575787016352143609341566878271389034577863552956224308009685400637997561365565707082146936690759565719854961740475022396675828327283992020461185721857303014392866465249346479706562773545270900885619233250388640701924053829483790620207772042416884119411662310595438135896183970388439068795957305667779626606174410682495696663828395217326995007481266782981334746551805112372354453795209189248185602446171017410720738095175435799366845740728466547748242263271518342580506228846976356848205878980004010469267588717812021601595349886759280059571944583854612762014753760490830380102064152564655285919271193722364383521164298181844056668350568646632220578971514999332909019928894892538633134735910869943869276592723144229728292262576554210321546300716492149599115630985835766327062544648015891594457121493642905645552066774198580441790390622522982025917306961607593426490614171576765514937756270710249466804278159210663736375532492340238960044642468324967481020242954362591906228904972591143855956694739746656933329920615135733515700467014745935926357471943444202348938637264859630042968546153797983171147967304458164697563449509693819929536002501237658008166706030736699065807380808283992564692736364875811847347866768975713254669604915128872352195440896659176768794392538177630101287146581157371693778528378839623746857559477802442713551990527051144373078042468272668304185524082403102595765193196789307585360392375067409795399378762782630897858513648315078247081318571111871742580149508800800255439638843262342828803315532425398362139232000445783721636524724475905459521932427968920662586178670665211132790795853808442315389572333577692124645408576296269679011597013440580170745996945408714461910333897354285274271818561380646462153499298787228493326122164778235003779747873438799099038260231163819850310284231990836719138377816021116656012315990133013218998421113114120693116728016208844405171827531339399814080027689055021138152119402930143848414024355777405494117154365778873371763529750316508486931057834725544216541472772408484991579187886198054930518256073505899091581869998980885052587871697683582706450846351837234767988122677444760694739798144563993967209862169435518894840501229546519959199473326759126867362366718389529911443447852538727654118721197760568607519617970460327102919590060986813548764393834913392632784422997503873048380563276765984983890761907808009196207416736837424173398463657217856517348991407875971478284597665285502008653572126167642825105679911695892136613189489354303544330081644895679891438894938013598436874176108188780824698277408430624121044112477797917371255295562420970130691461205578910732949519579550907517371399096818240990179601140862727123498825876862483039636013132014879526095895727991202343742752087644947668059358354653188901866412378536341146620112642130605267545336455635134182283783141251414778811583876264384427135006979774552696951616432915968795201532635970371259078726930965176364990067554789176058825798319952471727039153714788881709089676029029479727741212242410378466810419529205681765765251059020678308569556358869184775282731065813267486184105982260360345841024046244687435988532446170215402187850138537549100003931358261085257558391453775541881976320946504703376522868226297201825954720749213286082402712300930220672588083658857428393089312573776009287254226830363351870844826679805699092436890226198591628658297863034231061585958330076816991563320199628100843107839975459648651890120465939336689533854426017921473824856119029397230525873352755133992579734767156629527139503272034027212726862545820379132031853549743315693003270676303376717426084267659115066653880816391456087222356558909385142752645303534263327190815091419140934319692752692831139795198597658724517787218565050274140251510513581050704509757255231471933311030255879278598127962342144586574206154115822131070761983332700835725028544677028875825054990791283590774818559131608835368958752044592286422166791422087720776861338252526934813184884856244869662356328605991955213656403360219091156776774489700118518921227277268726613267777779055277748292299627195820164701342720804771169508508963441800648176856658912091270954061275365884570268838894189157864402142694464750006241111883073681917928276841022016905610179400739204416498829423322115576174698580716523486178302117873504081223454442274020282217541661828226672802273402336258882015869442762481621091991997076542803060319182161202852526607031159967452632907892654883822533807100471066884693212266321525866467996372574137246765638280069301411010695092234100377667739930304689553207837013602739769718934338859271533414807206515398576967334920061631816228947841611569812824826504985241842724618348893217722428104324791375331205932888756684674626274519364916788448168764858083187690776928944150280967440811496201081647138769122098631905142573651259521370203419842143747649018001315000052748179736104459309742345208547074236478133765040890856488758645396504681294414533466775063140146783787264573366510441969662705959673359436026904909685612907838019987914678328536960641544176284417386847909442894559765511492922693417958952677413100634954111811864061803690233725175336370402040629699913445831918479516199910721550634883661922921509841085759414323970212617913412494874245328460650781469303798031356672565016765849979685281026539328397338862105880467294385194523381546315171784484897162692560620316297014799296228903914855254788589187630808199848659033884710934689975621613467073896145207983926792319153255620706005844158731818870377463309378802217004680364680185797791092302305412244759617608217643873549821340313053415390843129037200966557762460109608099539726303716203791390278975045452294744565453221515546531043139712067226347515118755197130002403336682000273089436351276625790111403048724669271987819016763774295566611573443750133146104032134267999940217329197714097251033495312157631343980666067018044242620237284671281051762389965759762441126165035009065915221748263261301303189412912451561521421198031386484441133471183515358886085842970789579088675271930012225289480152865271114630263754039155608044825581374005721744439789835370841847634842537200315754635109683949130298565145704874868852657197038662870910874735647843131593258148428160966247572258321216789437642437398910015280889508138522797765058232461454698640531772848810735865101532706143130815020106636088528437996259518667467463646431888861016263584925159505101516522297225776887022750653321877967922198143581584156771797654453084049725831822337901938881769380516200865163426034046200758935049035713995127269595160979750673473296633131265703686905936151496844494325636079121967924011129057587167188996665128466467757736986119949913153378564916102462226149574378974417843118981814153990849767955010935121281190115983401869122261273717707989947825999399680793665085252113250200766138300810441483349788551671258361703962981596729756445008173037838385791112436345078458684938785346263809632834763366636633376118924637812506901778498641117397515891079791627534983326761284549193852059616910759810894777168881282297015852085604616475793117459600045827443993566613870633088579393732886698250136347713456431926105175649755210937872257293352899992903308413505069185046637337041676772860860063628716526726546213559215743197359003835879187623518707402911736837563633554026861494562750724018792697653507237710526945473753270673401259113655612683737742049986060308369355255550424015003514988645669395230709751516456222705796665167533122057125929002007333245601990821733106683312514995325902216039424639872126325006802779375046509634415574445364177545318802760365197634283599506092906466045735522811269491605967708867273152236531707599048260358181781890793024835815998062395607925636039471132022742229959165140690433179892033053950092009431535470214840711660065436494175749404428199377689052189945011012344919740065909278931769090840871302644348364688033138553079882814925917069820932889189338661685772304087100367570887558942597871305902685225433044519983563268037922367869916797701950789059468949052161526795070665497027401641291747947614774881676009504087854405776264077896433991829837144941684671782346441249899912900530067627623948229322322468506195831445291340073617006746176742574774031421929433950669190635881747252964339498783689755425217710502724067477337596688376132110609073854792678500089711585397499731730565513794747626266546601294374489286102671502133343632498038850125773980472194430608578069753864591340815035751385361464869705100934369382358027781296952776558847501343932296593731926712636883413123873456154349742730337785200462377980866991877858931743414018119734448585625970278012433924828254282635755137786083805585517275722484416534252778222923494406838775963328719887510701832904487087739218611760440757931761531186413369406381723440614600091265907822458493695639546645884731263324393615849730457389073426312782493791580782072777714745117603670831011676246225316569280044734135716527112574567288034997033000082000396450535315879211235047969610888043311946299773671035633352101511076344823920063369581179798485391235721946415130690397451576600014315245796152104415618000936590054980359370301999563575564818179990588480782647203357034868942172019233501298493745375285987362322435475982620398651397885033941577651508543956967428560957829459607347738702738284538469358395982606833258535513978422915425239242101555427587705360192995264719522874985629953288970866481086770041515101228461557587127822731609257139608120081977986988447463518777002968580212413858089151464101237810971966261153839508207547795471015620546336566324649443254859706912113289048774789454297330839875637427277478628426731653002387158052093647126759789337966157748564678333736805770491651326754257564671175065372946741921903130918402546193819685300393609973231409292154375302529329404299237282076259876950641622312148363062785882662590004344005066610143501036078256632943877250800391231303654435579179349877663177098446550043958757161813501694695385893202777125905359079630029018898891904393483586374004619200012895828661238788942508674321491210537879127479111649168123536265651142260984028564950514778607115304743683870561527370543653529624873500925955647761821442124431072245470047457643246836752691667164426785609789652054560746769900165964366084630647877862996763024223683221847623830527525244970432958094990655408249120722997929483739852190252683350590923039141266358472218056531539653341501733108240286922152043421061360412768964381549767583127541613879904949482518174594416162641891034500885486281045681859399245569842911462004853544890659024832000475701953779153128453055796769637066815709055829038455606607726200768834633232950684500552131779699149246006521924964413468058361955170752633671558628095410898508616831855801970521409754662417447421358071649169500397037519345537023435071114450621749552868462274581441761600165242139303582670559967248633732506708950174560314818353466131725600170615802064657203249813287337242043758886047433241112536239477251367067889304654194315765552277066522018580874611132863539276778821539053157755421227167871355256669584076450217376637587602436189866058408140615515165210092345326044295719424861634577244715203201040198283170072028637463221118562130583441043560721726924076230240935217311129898011030880247395724912711850157294530445879415933320892348799577999136493653558441916336938530288061060473323304187104999769172197417580404041919010366811269718329310841385211179527436614952687407372566136893732112909092547028178340373471603895138245054618231724469471283577342065301704709386373198901886754604813392092633476807269597926602256130274909482078565390948214312309867416399695674569635590888681362875853440351675990566430078070339474785825895511562277533927642391245701423391521625649123580490005413471765102749781923418291636557650659475489047102041100936938735834745627633003015426126828643017718096158298190011127148864279524441899517381452911965630522774283414259261220793254244850424088620280968512787743916360249967536527173623350897247572500402562584711568224526319027153086267067250393634214387025275661742648593200082696146070976779769009308289321778053593101091590661125811745638412923743065434691900359784078188343332601496930846504462412720246370920154741322919276622149591090183626879912632167140304375073127367490781767161003652040847839145257765563185329786541576968197891668128948196342842846844730566355726471037429783547033041503385898202849183960118917165747842497494303909023416187558607921072020522247714116361685900929702252239761980438952279772865934068295794845979874679982528836642392863323552111731158148515755981586107322261859038869222817755529811177699815893342199061793882508575850899675728092704646513932861904513149747837497782089402553150082213254796042729361707478299809721510944946978807034255700762699723540852764986272357448789284876302507661787823164881056270076230889935164443594835400538356489863151635348313973278081763818021232925469278115180149250787547969785537351886952552543660115833729370270815010907809780618794005847513113657200759839017528556351816182264091478182257505932042837117690558440945501124658589485613654094943607472664178717878990713737104159013044579352465281344021231965156128924506376600320997045019085415544230335294035660560745396591206234390059980527521574334716222215139403771602338478422305149023388127233480491881749280107759633781161492188407269284972828890588881781005671690126490609144495465146628209343048251093430505551578670099055074316455685845685702553949661812298428345286541307593579130359434948259340180561488410381816864868517534424956690694923241122370775965508632864729814726974418221074062883133651901994610069932216826014742173272621538048223375016669234916903384312437131734792202204787576599603066976461316972778831302654853185836149957262523611006990817303258265400908907499814052810636375325436376329531293933713847387084942735569390593232852948612788994202236050868395804489561630778871861342751314731614853508423309171858108749756252707174886386391741015203423279694695907402529027803250607341327925900375836550308367357299700354465855724056892713552570770489807594388586958874286586729229245435258005131454473684399985474004101418192629514601755991793971313582550298945442184934898130940373582872433322003720027038871742780747833674359728580746251805300450974254773483158982869336674535038643384969885087497037463064682493008932794997728942359705321983190813729519126954095548645236907077256610760220272108880062278093411820362312150777580177501326551007432632565958111031317221835209829158926223366440863177520377867251360896804329398891474558756199266844503443948314572519035202611902774535400184702035931928803250607448702584001746473956919036700558508712446089170437881831522113276123611481293178357072685519082369733000939256207744201645386874021417269836388467724895955381292376986030772240542597165915134577138155378198522304723085171775807731388480817109663108035502484949671452367208914858507018461040842706120210745771426126346998920505634529944158716265733537400434469835860998187905174699658879895179387852672140366956296805600992070359844261995578273438867639953998843241991827568245751353082437448166616189126677260361126659086666627547444522778341263221345630243873002969781971725833193457529452561298162717298250294924640836275048485598677597057312247815755821414350928272198159025561487537451540208555760980262323159678381456183674406956915410070176770743052197634589059219411727411803004625919987812316275745929237077091453527437947606176370907862738534360502254342629435572064223543271127725166374057486093830043159296938084218921912514761821812419868908766949827980023409448745129146642883923949864856434004957541618948620471433243792904171637408265112783125246217483266316983124501876901208736755287705416477363561582454809523906038038695056065662238268721223744879583331439924916519371859941980227979168042215366918213109073500786133735932349575676339262690704445877905173569672001323017355151503987811218131191634397326138046427346615839306553384715566391469282224938344047168428147734074662849153351754187329761090018117969659799071261251495496640675596638524036000408425905064898064616296747831001245311668628343200613185126983214207411450942083835867911607469830911329399067338333648312285212488894427912121624834927626671722729486155521092573092817329885565933180387314404217787615201113238462366716549866982746772600336765487660073318731143766738627417289681291038907319974329369269210744211905016407705709832755577426552700852119564166316328653115002491021919624120193886071140251612247882509637397793555780666774595620660809918482340346866456192204496886260570163151603757080317224604047740365159145244848867578385281254001557501248614065373648404599476045085205341803431197776281442319651864725353594161341906491497161568849245708335185268181040082199277072729577975460372183952556868275778810062257058015024401154102363542952867126499478522686327000677998636302948681996369294901888535309064502207049626084306765583877686796568020707435088846129025820869476739078710785685456601759971342551105899966878958854656279706264346457112111226092795265714258528700992791182671847537771641681833304910908419066362896312363621023181330017466514536162591580650859266041171117254356891909274724103953826858610845162435475955217770368764620227528528862617205725703964285632531797870521063931656052399059341547659043546356822147973850285181152342295242978744120213587761493947152927788871340889232541127929153908376919706749290884425543654041299063608542668495636772830792244405454696936479518304239770364401062290032945948749388712949683713910162216743362750045143217884855879690183005411423527216871429311401121972757013264665327747953672125314412894377399358482860251389068015182835177237587524033987887143009754210493422784595272095502844960725333429918955488689383197509755359407072310945703081586598424668523511954161593382179781508291849276968518952266278118495294303629336863050485508622101430022715661524541090480968405724807043702792120815148623977486250819527603637745629929254902890943198155718418506202979523571089983748204592825505138047276050204997500065547835330802153347047837522703965819792509923877357853270151969188626176143252795602909910706880335482219596689709566003134797858387288110906016137558676321138277602609802941028987466210844428947131747097852362885941816788675000836712359032954486117932386759998192134381149781885755501236134308739852437099825790369433171839069626433883600925477075442159847656198050429372122327495602907464254206786040869565581673851667692102060527851240718028090061275873928790014891528388004078648507607459417800923090792151073182770709330457953979042360421509450499230629159610120073750316576088721547432924017026874893064883552387094799972695356446750389863188884707833904398836889248049428510607620947686381125382482011393246070858629341928106004145514366242986844950082045054328313674167180179115182985992811106526664312688462611047166119362171783811076751627800991690773316107443581233647713062326174599819245077915123545168164774102509926283633625222513010172568074136558544554803570470708941747348637247839565069123717548803671621345739631826756393238487656053586563482773227364212036727001456813147016669898828537221834664612363754267164260017885616490140519870037671797126644221935116072600021664608224730093644413665944523533432828413681260010881665503026421005177858369663387463943983593635082974544385412830169462620485216742211735102879674638757325877667495473417814254882779504847304545544626039314788272369331737964303202098236083454281281501151706677045255521209343722659193590579582507303851196212992037021129884877399652990231849644536256034937930319685094768356148434170028580867931774000700277671975772895779011330652429246516355199802974085445200142903976341656324577598894504758680728090416636238589424808307531798475525820647132016168411521044251574757354657945654281519880524323456884450433886615704651322794061527535206545867191289295833507658595799793174047034081567096746830167356165870743270356571788905496876466998837069384388347435642424372173109874524439912333189265132923266754187287939788275129614347833769609396982433588791319056443268241490912133244988935718944287170726346851160154331417349140990569522901237154301653471734584484232037167515397407105726095336217801810301759025852138447126568785022229339125955436095737790899354104149152869435438790427372517577246112471642850004773840246720535341071779801453051981840588938542834739842684974629102650818980757142155593455235053100513489552907499777254781617062174841210516456238590600093978267186239525905029773917431273279343361349776196385754202957531073833064211898103031033178723057092597796771609815184298649919254985179060536008250739678852370879860286272479876840932850685087759352087188386865332938648693398941409227700590677048814298438355089449943292897159806652251949032843757261190916517138606617057037515371885362142709461192126971426128544502022059922623504049733911725756703667520747637077979608702220940423166338475691507015243221291853536147423586867207426928723911683887925337795667446711406664660829694729844363657940202835893252204025120864960867332422691367113153868782006524483323732443200231954179064172666591526959287549493401236074351963277366258180737841720656516023536689625251504509300959453170109073767055266192744776643908713639969811940458532234744373802997803038860719283965801460093035235297880212411691202208176632203562310432501556706448626711376400175444031170194286113975908836661638336613183583265654385027250741162228224717177216748342001642694423055259382552491338348285653292929179417894192824872892939026787060123431512084201547579606427116127401514286151058712833710481143781313375693039144629793602939674367622546647705914140881848219271022127826664642964943229859966697434403112712295975853749812489576715682117784234573572461355244407961957426385972105124127224036420250199216133755425490898615560867448599977890962984629819818977767607978991009965954773593682724959766877436100734506236409511937438101771945459098465852876647770041066417081694082334865232339403995368900007055520110595144477833347450884625368906205759731061874212648288433206690526365170338469612793333888639553308762044537433332408191040738753780395448398204875653487606194301587106583075344185784056634566315746691480655713560711515134052711346368892868464584411357265930721132700967076524046055877444344198895293753627851451846968836687907269511475129320860771662083488513639139489609996318766202897982277069344353821655357247879668540609312831596891325517775820319410302661834315258062822124933314953261080102645420211768102568520087412091234688932362097494393029086326446133649389044226743461403329993191844049213983967643461821515366971299224450277037940954527673321620920284622705077046506128593854164294904933574952142764214187690742573115311308294980814888013007337769988752749490099746159448937228623564914603422097765217300157057392235886331126028037327223656243634221341066967422263250109740405902186779005108945419136946432929326054426005773230005245534214887331489038547285216198102512275288078421682116070467391331885439038162476722776883928992726385215004701913190392957317376487186649822015424758580573930786617298678937369704577506067282782502512120112730765122616691218695018256676892169162718029964132349544438041140526330305637036497490983269406151291602201343003589160052616632854488603140015708064381969764873352252714571181062420050749305410520420192249052082074373811314984346772813573678194510504607477812915988581673399128525441630128477505140957508295419468655544389035984523930888024433082201153381114744901109772679551806048300247079869617465696374718703596838353686680424911010881913247267060502341777031357831693622531656102501893909874744658154515968222349052806263310669276150684184925645237796263506869591847181948697352477983286348218128111507005927526570013902614835086017527592214610353254349819428198781802188735711904723964697268292925796852475107454472288253142493656192383597097404247583076113128031265247047730381252452352182750573687326210664847210667419988664651280771644753486179757636261486194397022772268648187319177038743908418521556337872354721154153085284931201890690025195260369302580574733925062782029850266498826757840330710389264169398353845174397277296922966122853207319505238510589252457973951256445454833804638688633173525258112095424039279576009380139353252245387472203526939586551976333419294764594439902419324356658081448996700746129639621829539876634782005999693922919105448881476659350727794021061804666056044225902709258986144461437745724434395611440153797538711229782467146348499001793149687506566068871721808625949182558090965634398749124278284962835481181744210239699395482972101865565461818775491667157858578994035615439400647741524192666873091612903257841127721168819304303614142874606056626001519764730744457547158280547772286571666512135889765147766193786322114707147029429855099442361548805205224827113009345439181322328203301758222071095296160084380821863737416919067391286995087933050209944848890750246727915024147920241862477640068594493884763820565887534487359410236488583153444262815054308238705722532029310620501139089380612573851370597679092333572620686441630101195023709538088257484356501787572780969124652118097153446186049582918530118741647928005940016485293200960629782527026203667192279484128521307619410448884560115570192968572235490323566909894071067429717902451584427769621686649719913512046907543881051555982453860607956959193395088790413393972163649265859619345348063876866937583161257818901388531918184645221986248872869653346161233750079329062872587529139918140133556508966013983875351817404675006175999902002430559702413324159501579136774622831488523418790455461996249534423439810181617970495991259310586417852773996861216199241269697852956167494612691506210966479803588050074658344966689507716939543968281481271767086135227676849866854291959737685549472001707381158100527181239356900553059817339369238897590303086906942692356496332217162745220803170406240742563582796122712907290616026773696920987406959055720008004792294788229060274356318803554695374826302836995852767554133329298275176119007465243088078650446184890949955299532643888277804062515643783103723040786334552172173451456971923246200261200923160678386236113849345689115919715901631844082555123012542810905104423393038006699758797151243691501113653156580899968864201691071376708566163390625156758082016652177653602862411312980326986230830781032463062587576475033673655944821566554656206047960063989175328616236064583070579870240067962771085470113364583622001157444241839099619658228053297191429571432055329767195708417226563363073709402249904506327040776449184943797102660562837325026897648607821826338291494670963825156344772665097914015051070903884433990786617280950472618175360692027164341528823675722582690595360208389980855485430621004376902658215242414224203884746489650171851005760524256242878887166859087059650247925211527345167744395785539546207947171824943926898918269554813470458769122678530476356218005392202011779508358582175846465857356526867418669715099558478609619696602850044839658179883308512178130647900044054438016673039313891767032638061302838855923287596149215982002141947367738632061764355644012977545358271501239228997249166434947643377894240036614681074609884527278966916091693787745643493692726162639074557959017058570033253907385664797736578615539238207717226802986458211406381617593604193831207182228042523606377290191445649454385668157358337860472545397886428995124122587221583865575470461040911493954768958177797244665243740961941603765656882020370496037844464985275500788835316567874014768437495327965883230041169936960438147236691228856323899742546936659703229397033256520161847201947149359449477068416730217281372819280760981039830728723111229717529012266353558700947554531095954809074840658384529360506858730944543270817227732873878293140363339628123423930639138250449287441059417307439976088097993713244011204863528820989722195297266774502784998803596144183379747670031628974538522248177848834651087891366419259866011288836987940642500807630625246227235522127729714558361667063965467627605988993387111067136710953676922628438667717052892506668833181723851485702021984764318074719526709874405579974419658664620437643764538327261445014471136379126057191586743921086062789202943437954477359407819632565951311846864936946944864365748795745737037173761127220012186821074422836162903836544441115605855408387344130271262891137857198997281626805553245766021549743395701213195114754936631399928236223501580786153926451137037827784709169637008595204704445908585557038745320814789893284348188351013986413623105036473431526111609395380626082913247106817973381742652532688782115207588801922948703789913177734271860675490777446218889362519717735239804037936954539476890518058691144575033299332464101513959786926207629512846490038781213164022630230854404175482195864594756420051961820477713949534427102517943601192010076530870702846978184683694062690725994191104928293353131610712542975394496278549238888650643746254092059043952407498727511957605380103947169492594762595782944893820641164217044710968747875089747824038111432470104568847401894594011583476869827258443953977708147693658470342070141807206696057686573080794800639181214659694258426678314309787381315220363995220941629470012498568654625913372598928232445046212133199203118761262702454907796380832856453097786695759072778588742648131030826913346583659461293294863061579858238757757841790602356088949993166418670149753096488422120601702611701679098923893204269545736910228303624007753634322265209034714995505002144900780048533226972894384527055641790070227392809174667203961732168020538463262747928942497645600477771224391174089895698775030009806623019395320539307584837533932540776070084040768067259001100710080578258474298477496648199099116965602515351361595070888109528036153255081346969009621737381349898349315364986293135062342875462921071995145981921025854593583551832454205255293859979194835907442646602829290640060107294285769632363265121454241994280712646181446869485966083497568051524034241568001853445956076321288384713569827447397329247967988505931534566487306509899827505209713299154469022920969391798002908813100107859100533371213720323555388711531967779147252820589009932712339493331541171646955238519619095564164219744086081325067284476669743498760143255998645131719700756072706863139847706665028101667057904748799931197055716699596720051683246159694084654442979731634076351009514058208580471144153624276159252379279227933913314880400983004835115688410511084322582916255535054443641975938046996556395035980369797555119992237069984875490897924236732777706581091208478788204707527519691335873795328109306645520403052637677951836123008523856319593732820405247972595631008846887379560943991786026239752970483222670875476193677245992824522517572903178285987964938413588692820416609685589604717223084160426900482356730395395676695458060975404718883428402255341427160909263162597651472470573735873819892178430246336582751941699806218191765747919536410684574844954211394848706090358386566149857413078200264433781164787305580084191628625247735931984908029735371349379380894844740516269611676061455633916617812830380082066295222860730676239552693048506565362437567950043090879962320351494977353566143678663314933237583007248244355052540042065793045081337638773072558174894277250633125012541326968970746848771575785049892185067177341988341559894739985147749739009285845004880813927581390363012304758723377189295066329392081106003473869084149530375049691629094802648744618152892751491546742400988830521075760675485963604445153745989368783932175591819122713601554844060818946835753816460218498840176441408000386201245509147147388799359151348866480683708469575522977312568566204293236003224173261666509320725130553065803066681934336478613244369635744287570740771284011638744448884051510808888674310377669236749263830686678245414418023024037481166872698171357555210825332833337233192531256347197115243602407330637417199558856826395025219637770286100503927725124436899678398639906843785632540128161132322064409755953196913776666459579768764960876114345767820446862939498643799095179424705662204002280552489260072462824335179401863162716603837011193015743940261568316189930350731952110961433308779262559311641683326241439261915011418608901727015709692643031407351721129750104031352739163322662453305946895116240181253617160506578828519798766735208532556662797613013607470457829908104686554909876432314451724328773637192867471584182663232046248657071192079067057061252842645096576679887084737366674051291992850100125512129965199202568404255298202713450999774295015451028605734495940730749764292505320031487055322411275692036369698709578548478386578762846278786005236988270440119044566893149253647405129813746752322524506399753619835440850246958546239627386539851150897125896511647101368149831598494994611616612827252456887378447068865109487040170510905640105221696310775322950098568792469177480501649921267697404012727580575007414111353920630619477129907024120598335618430722911787576570465960130528983230959022101947256582019058351251167805692454261511250611903661627026117501191611644819705372350980792366459772670456555885354220617795767003616402677308709376872353659558509247084335509166672683041081732923987533323850078618985821092962147927430548985677800201013491915635279138878842468889219856319184655824580452919547186001353042590204229916894551912629226781529136810953426131173656047399901462608486763699716626940275881608604050807079261670480877065460913152260791610158220505302160653345534513008749448007962732430417236175003390386334825739952380418259431527296856832272277611126543834885937694194930847050343767403756952082641122510397566636342267596041646139373513374049056999345114706551858082923462249057462270882092637870116129484146784880849634641258941732717467006817362080024159088113208644675612898620848328055516675303177597566737694997576606897138336182135160768981674409129826804644193555151777310477555075073855120202000869186467621231914276320847971833678647358077561615974335689004770024901164539169794917409225173090971125967871080987004835660870850883305505259915064517739737809737373651443823995568907982357789812080286353405876606699206063705703580554374892488973710624200800509259903805166019173259684954135271335203821622424835174434522354343735032087912241004396015948823268917324970870283025153470963673355904401982896653278530140526374350503470974302318544353183259487324723336778215475461288758397961496724848781481049023029364640032564084091778745687851717202959756623962776246837878827082662378963990515286075704648364171380175264278834841042044512824555000658780977940081855797792912415272422894554968522772345523619980611403325451302128990749422569464766917538718575147117662017197539703890007566551090747118587216892958934400725956190562296400954332205614571501145559584845431625382542047804683196401886830365303204107835110580742545103449831169219963584462157288602514305833881095042942768421204551148613416220391726408535342899677780821047174676871744292366686379225974268987159741457443178680341894987127628296877023143026292504827576497187756034629374595080669630977363522179806425031852318327065524222934917037507299901547664606470744570288476251112639699843948663075834462132527610499846764933234589391960430379490072581416083536922124828506541103318190283166677609123127029449823468606412078177700621977956742918759331323664783847720044917998768968421491584557978177471549252132775473477202861302891619428475249651983876275065997725413269428771531874312596359896148294777113802349487813603752131463742182780705749345268275068303934206098706409582656788184195755046836721011475280572585300579243109370090550182382496716181291215109372749717167046180972754197751712486258555205903591525765129850935524974691394131011508367333791586532533034071662261708520733962351828980940861997123796792997679205508936450691150643524819879330850350203576101515184817457530632177017882365255404271002222819877799794605137415380884461686662615433431458434491009242634837731813034530667070647848532104402517610101900411142729365506496356899766986816911984937132351815329687386414459306255184133524195189437669660689154722892506132482560396300439559189277460488249430985317054655831895937137560278844802908638537828649753239789107751505561096357676264640786432041060871557707932718582797964492464578533339272634639509728325073361318098683595342027404157855184041068788186926089952220481197773726449064394066105038397654749651971608404673276902854836318742642805103024208483514011711418432185489777613883523715673271226749434408866641954917435939200130035220170917370070920857455458163870076293168672670677194735872731822276186896701145188426645235732630038000446001109531039216008446956327290988489181942083125527877360222189534830998959277353591447047339372570752311898195280433136732798392513652869161568523606158756058349555704673679175634088696923853547853645780962640013098946523426038037051428957929999600688144894090872514729728388400943742698451957706184504375907523774647773080369199919149365852132857184229762020683375279109866304812023028532648830181966389440569396864594890801890324218676423757974651936160469384860295969003478661599057559226935110279189647714524781066495307936411020709566725978952518817620857572754428691144176683581689828288240351214324067199725016687981284534709613711496088654853973572022867628398498542125890036135190019879322110500657863007921360900019376964122451446283509377959355623665050729193370601974066886225967838698853545698179941157449907184493690161083185203160833773506017999359911953189387004414002033308263501462605392205978301435158145780102293790375261296205753727732843224186465940012874991061785168462671489237547469759703921868738984794943577613488637351209760477195064273472558458591085924043498084980296015655807196017616590839859674054210460857141268892471321026815493065727002620538664577831685611585722592072205389666046001423172512369377978942406736356243680598045495517295395448548890758280467849350880770395073817271020562620519575562249084468823957981093482476409324198105236082936907491684163531512287313080401658737918108704635641061175368121515535760346878701403826209039661358183980515018727544311971445072593064609813237050422051477262838154298917973840523370747994067544063972066716720342500695437617576532723866251659893875653570752075986844296526629036704634196456349283092635909697739861510650919920026633292416739616755034535370709680056990440323020787307651187981519117478814624674124912931338265794051304005896170127068723062097315208988814262762769897223614793780991839389412249489714317901020903560343592750449187979916761139395462881566134854057578428937242247302740195288701224792860489131284163904111768396756191298824505586359381323562002017162786850411274806697665529246680779894904752417278430140971751211156622626301801660285805945556397591516831961426702627893817740804536998431583365714706373089353032040145887933027253066562727569616394385926005374746894904661066360556774366033594033584290215918632784339321730350385230662015574317668729254563806660944084116613340263295271303433852017610335288531991426352652113844997391474293557091480088394288742999464181134230737419792129557543591718344942536706189185540578763400252994851686238880696149195375122165701132095866353560420098734725609849715123413196814694771350871087824460874843637890476021216121564031864125044442215798056554228776800516353974971446715703872575606382230825382765448703495028016106033233121819168948316263113075189627270011684878591912080147244848565354538523741838586057919071659852770773279169313225070381705571862207084457937605099481117288922476268825457377967633242447244309042289591541561883713494547584665921414391902696687238850504293661039230763640847471195422547100124377926547901573889052915963033004984832969400098438911590618485648786241573019982504421061334670455620721608607790240362749452231873478815548746044608719913424562760178842581075456325143018642185338138273233186674391013348600040685765588488833450238022482999592493914823337153160465192294485970578389464970562447458803704286916329325989567207871391080211714223914188439420399246092048538515309961070974351192267488673112726250570719374516563665740511427802959602862726483298820204176852064671336665607796919316337564808255333045073733788727539163392939849492108815165174498505338025390131996443404125494378872166254890075965573772909839533808692596318474274346921936305665049300277687829795812220171817943402014417317539265704232826290628638283923969693221608827238005624651955721387801854895585830400185670848733886739422073188909897312861142915098730472227686436341465177565122436057720260690141259304308830541886690052542538597227060448312331924279458415169195323717255742541658820500962504097392062511151183924765121703383461249401642447454496093971778289552404420881036123527785618470983803104183328328427112174767495706366306938834371041112581539572803854836215856043460651440083659591296562395989501812406872375361494324087547668197597472478190873482071564987156879153221193084931467077980047501843553976149052982740103566092890681040134188252710170867952561118277860793669382466312288875838918544011120258436836655734113109372493188308309521399038135737929291829570657368749525439062787242341357678128455069365364311536235909180475785868156552944291422374050260928368213431092086570372549440075131943609078025024521868118087778247579778687087535060803207256857487210497224670687123052588614728356273433407393016962225745548159383533423426308727875053558081719102091911877733775379398542604302776715883112525083472334930329067385509911683205157339662455913785026002322798901964782713635907601594707049181509513966582019849062050072643642609758130409612368672703906829414331844720096557798147744175823882756965924831202355661309938255868194830261373217048849854891746357304085355925999360714144135656525951724216178062545466667355262234419317607738334989883854882701211863431640865901854060320331499372107625943368746635672572418504734707457842646432949228335976722981209554332774965548578005203608843451027907899242368597569926136105289293515125513926244524988159976883788140635898122326766195061090371809534354469157829266563008178191857611306391849870074822220966790535500827511033782627752254053835350664605648293381836325341876998279653571448958958601397448384612937099084715116833831389333261695137029641710723756606125400918502051794729557534120735641927051331945230200321174411083656418107830503755661826162444127708895375222009454830109676218350923510674445355680723877998183866286039925664403515649496541586429323283517198126342449827154000127065428009914636733999040614016072013701647478394354909152419945863907747385456705436174040543983431700774672398507166676974499511390049660697261865057170097292683473505464703708531777165234020735672000901147980847009044849527782393431286889188239908620026884435111782739072062620268811990904911783684671011233665385119039757097563806081765224931826188111517195642525197951152019531501218015867102243424849046789881911864389013545445336069005666587385470400562335571900035172266549922501253693123464593809519332834986498486377135854986142351729871770044936286782562780418627576180584946032750027155492143118829199707758408664225987690065283924056438340649217300498469148498079729735077409551041901560970575432054663058985557377029309939362029767013823334327119284893427915762324509453495239566282403906173248084038435992398636559247477154170546233217379510782229483784467305604828439931893740998493687638711259934770542207005187492096506420563379823762134712709687714521401355620077510367479060963579667814269113140485912547602355992320245125586763424770787879090084155979577857931710684990674448104707999506562560048004009931428865330943945906271904327787984913070591660284267838205253663182849878848972489126340445302637182022728120419736815034274944336451638845357293250282076681447168329288881962230520165989960070692396218126493289688732732408114481771649255323006009993577929378669382705645065881808052810782644595167514619120824712514927909296036803800925040068855982694836702850177099510576583409423677453320962965083360080745707445024939279537774816713380526475472740262030485341272993762325443572261783126329364325936793143310657990195194511117227429206946825365754067048673641413016716810653469428539373218051064952431473539159677498791057822693627967522333965687536711268386055096096497186097382123219771373663361717345709539730261064851018517288047974128414169942249383381842006117746996604833495295387283843100937000751861096920354221814648323638089001827533598421747362826921919859803247375195160618767825374747970562994576048578127886769883159102837598678490132463428828085000054614293179050766825760819919020679420304020423703758370871605871012881191061240737171562751541725302841470192706499913733856608664859656150735554751092027628627053983570313757192679995903721326841407356306748982236415390577862864263209899501774822265020564818182103341650700068023221231069270812327747338196731703127762786975740427924679758962322304250048038800706894041236496358486741481553913587575377134379181908753934227756678784455745364224984741238080519898074618260917915385286318926796234020683491056662351307610285819436936915879252162057807184890602410569493429653707375662110669615311890444863199623119010835061969407834263924295712193936348752133141130625918121498743364231613185458242971218392409843793780632298738287864739697149410781941309571365471753462881223966041640387336692701973537658649756508621835135086578091078287278564989268807193377400257004189064665203152580980348181282023698715817162788946422553386036887882671697693233656039895889935104296251170724587462694726193221089236726540578267731568777536300137608149145083147324974799868216950470293061167600093712040446929109522113982917608340082448775427648865930286088887533373020850449959605932833809464815536419110351907791306587365177888303849876912919574430937449247930247677024334618512190909363595304215246549781696051286866022219453821123377661425411806494396344157853624076139817387389031855980819964281641476834284473761736944456472889309475586683631048711217510315383177153024688974192307861404898553963814015109306439315114794575452784172381462576858728507104692483276582945918790025046791427056579922672135688724325035747567049516421582282291011797524618349222371982688753249043449003406780989590713222575257673304716782220935139677136424408654225677771690381217181440243876347707789417852207717924184925127191486603800854746391362969322836055172107559813783745241429273148542780572047595618091091462482564398034012873920977704334728411028272714095301671962439771037275773145071932880390830036018993273837744802500528835944017162936495891089764750911786958647294996601910776773740356961740874558884300138761567419462847125511858145389931328867222557310261544373724221277654591028404248975281271666027035483694166387710390757140497713889932897328227918669101178798636176358646328672168714039540477572791334167231738482085282610275436736001203675322323405434171763355467613312741028755807719114610875352059651294718819524780201697621061791715339476398639923421644292289152002338421677243000334034753572528618375863263274799284874753200031632204528191805616722031758113387586555280470832722010295582882810400517748395589972236009725283123777597062088049632023690384766340675655918544130447182429857029834766016335291610344806189387410279667590412594371870420844565206330118198827964018653654997028716901448411091572538314428081918729136980788709779637178131489550174038981015678211975645625156843335461629619031831466673664514501183494399237370508833426520803742853500473300061571209950541522937816253574985575093575269352073529130560923915334214417597940360521184759803330838816442966233614863264611854146050994305670548165580621155022691801748092964585694415451737037173016376930105258172149286951540925021097185178686678044954726156533146731911628997657825319373452710320479731939837393078857333401814944414801890847765640487946267419873279891036345676797387790083818770002431436652845054747523230546115987509689993279181473022148637273952159450606894324871497377196206573878174520560734471058286388079963456687224994204574412380596737740470752699871114317978446728558477560252020865850384888606096082933167616394021424575929157474832792722150098921803010967230791999364899401606892185875816748756762871437094454179734167715046669336286429539194016928696319131826729283302005215780387795685637633412103613806342561004273896045335126033765199804778427684599393594150419135556492240116634378611086260419917159700116078102278645266410102964137220192006827614525056225315785473798828148426343207927694862411979192584583269860699223324140415685402356160247138167460877355303719864290013562435403563807184426007055790310500041169803245577473834970140699251261384035923047071074082829135202415184204208068038907715541211136612061324473891934091007162759816909601603346659425231250507779866095512511726536576941535266492153959860758884672509632808076512643971026628503515966212279632287977135750110937865356591980742071174789791988231493222546000129177042751826743418907154385802018500295463244805079732161657496445832481419090948758588806584883275208403355923145581591472816747648974254681998526595493223256582783003872859436546577196900450027159332382438326865330551349533154106808502968896121514955742729072537868291030745669758061540324875654328000127787684810510509073984539075532169817716627288638424628237690787911246843155345402320797319886453455293459858659364718986409426500919373940296318793908220707643683900409391369948211125659985233104833067348979209638941141369726384412704213169147096869542926914889737515488062053934757972319035184744600109167292662796683813900759055284258756155597140836764843573115223825735866121283635552818338076023428320152690995209096940844957099520853987146074496657399381991699574908238843836396774204952936752795195228334449380570197122839292676437828668972733447424923874583681121168228559339149245373094127273241449664795278289687334075262608559325289734385643544537993120288131695214313011705073532144270323719671860598751108570617305938526820227058185754551162794479531482036063472892699560811269635693411680368151250828995634687484926673379189720699561000043533433513330503563744388758002201808148591129782930026073394464186579277270318715599822704066795871439003066776617750972741069171187738894537063697448963124035717105459295075423466702122253847045594911825323776028792640635413297099690825441938122870396216148488688141556320960997455046337901032340106120530295273602540693998290878556242534565753526675034229499757639444688172392815114538979128792085446414257879424680087428720485516910985131570406618869984724701103314604947365930302539546179753318043607680128719398365853710262071268618222804261697823948696168719964163454796884016283860133740076724456067808665475862070218155053347618378972552095691261468303855196262003529146911761198012559883125378084665971385189680612208892355796496263826799684671176845377770868057552334237144717374361478996830833786109083545716770845651167000198813894263488091457487205146082948863982118464673661023504633910138699961842849037097894030690620365296951555446436321662514780709301878799671692448045488329726016792668590053557026087653898711642108758655517697976648083554031001739092314848272035416278668078728498311576294153309444733410976897283283490373731073419028428972924689178438494832613338473501834998090511783831159202103399101997381441412735999322976814620258807746310246761539171243846598382334174335584420894849638863302469412528525937483291165943086405397198777616402277296052853856190631853499383899799436737171179715086680651210377348369315571901577759139836360656182637111181504533344532592406623601398501045880614391133224168693799701715776964196923938304766802017445976094176147710260124253809927635637486933148746246178228876253305902098688037379340916428163136458017009714211798194549984162566082494331011870406432974614682079729093976633247785217936108099794205277829554105160768421861333495930930007652276534907788573261892577381262390060921583579658014721768895853450667743327241258001023584433381015672578861638667686058776430322330271487674777824044635119236347029803248012913514036198422393209688369362688382546573525653257179251589952395899403906315691310103755382087376621107963857185168299698734528424790382084077533678474099981690982720174421225949087165456113701240009049462084162568616874511148464049371677732515847524514617108593887287287036484276848881771480642018761697889759983027173212318619046539891737556712839040256344602807202500517093021072157477479685774224178306240666965497809273004476161196030452316377756737281482225567108025696223330242753555803591141219961798959021910044083867362509090141928180301679825529580622609009159228259629601963611239580477016491088297178624792150469999287636161430208159687130661207305425894535774524318591185829194924637123952202478106414323934143672361747940830964379539761090554238795376306984949791587830977118765540928676959977950635085640228244211999455540202678560426795680889696769239988589007129578358829287304911939255130584513140273562784304434851059825325530554144353912826283942294569791944600871158968304345826923823435828242912870980163961291643127175189349429888993087643964062067172328934170971150644851589531746688357386401709856480285239466697619585647609078957159596277864758221047126141099188281069563922065003656259159583101737131670071178880329347960810383543462186253253974560353411041675635192295876004971906952983661177441677931720710264497210568793837872791055818125377848332255278355352257718826877523796259712053421157611613285531241617612787644332424682490287789169653497130164808106639727371590188392279565184643457951219965022062606701112986845743940800081613753080016385525788339182080470866824128891266954383164536270177999721992019162384370869546628032445937757310627451951882202185194688065868058558116785533058535436838558515139383057824465983048724814684422270446745591539228543343964018077500020243661553802888389058555572290769871182274295705463204453410195436313590932939727244277196371292135148641680548851319801932928442880794040680260631073918792729480907257313510187198239012772235713993189112271728622179591990088806008327056873048013653572730659013441292159630077858336149622604977349714454841913298085580276508458399805966973068653083064940267829855955528510006524186076288539796542322295908032256005216575433295977294347296173461012838960062400740383309628615177223514710896937315735169271941066774604552122015262389720166243100891994620367999329431552994846748981349252286582532603067162217613298615029250954713614757000104887722332295797866267185501906472835599979085452199525866176642431229658465950143934276699475240761038360608411048438509391095068186017212970483482423330943756113178929749884600539422405106963506012786613435457937419892557982909665279667032978100449436472399420965931736839826802624039290378104289862573222877879505126800610417615135422875801281782892424720110815060385288478120365590259512994232881737990690709747341690206381730289451966634258342019359512783502894166823418075576251488715768803787786717244562068645967679191242761377341715193480269778184783015022749740805693442319979188307326047085118540429560213542481054010970484136560019328653460871927610961337939264679684061705386701637308975942150567337196860511430674137544998933001063163118364798954489984258965603999261819492615757054761463820690409536868826399432249284489472254227578788167942903361927290728983541903256724875530143126977948470930166037038639767856235261944438895623216255738659709315896764103406694299179271869090968712625981928053046363628410263050426643748725072025981835950165577614906194930474301669974783239065496759954034558476501048792513323369165435158230097825754138936468011521990329712970870159366665756325246422867777173136102373881155086742988010486135314593108722805723269904061133186171002473262419858422482161991799068266905583591146171336203710769181203763010586821785891714971534530684692946390490707061780668519296918123978764320071124950586198236938937403134180597586897729919615325506683528859988169346451508966123102485591002391629304366154846536084987990469813532685100164420929437186485678772944447551090434305274151080840701295406466205279488699884108381876279433327795156017393987952913795723114014523077278114260009265198936531597736470365973628551662572219899994244709565393462960856854972684434449769122514675264166473680000737199919257167067716575774712647269789645418758954573034715059973621674346949062987103786097260208498069031704540321249871444170051236083747455843892778362385091116636697782766055998849652247661338650750738837711100834737079737557357416897076539441159865373464627740262646881935377482172709728044147619135195840288993477918560440560922092373721354802074994237422476364731946086280482806570052361000816638035095275414073350319766651145381351930865687950876693763997156780729489681767183186139047744618956639359876977058067333679218100267758519032862370051793603183648332160560763401829255284894472125970171497446039600921985169021630753104492151051792725286008087773690323620214832383826628947528863326193556876313849467415167077487778888327114849643321260992293050645952155519238500327240946228884185437561482238756868287058229711798835020541734683203419804152179558645430645314628585208538355810782833440782696420765878377787986591237855636851458266606913559901105037354538162317655565236524307232074795684317074340837856470527920907304051099966132201209485070696119433972372197797624974637459720404596442738667607762531417336764882294532548656850571055619143057223304072714824628556459443354405629489228205659366082738710102123677927759782591457934688144074505580269445648254550231648429734164972784438669083074718067013326314071608225310247539395761874555638709318275166398438567061105659451906518247362121514282522605386332528777889765439876746553755432526101167702329899902744661895269934547473629104563937182423859112445470283878906460510303386154040728691352255225370004121769197847651289300276897053380190994337174988369016820533432423013987278005124795983910594526242397870668768253292528064773506452091270185298973546923571268301215335790452619585759240332549642047518579549747535671252893573276898890577798882720820505526378185371388616029696784382134462555624295283284742768579744058321868924788549707409855283343854861053717350963018473801789328554514345605613857000230384211855521651773052838194525775340111037736626881549212008267852234405172849028785885870117556550440091501059080034021376699157155850663880501043049877259016260273679699682672090408853230038484693492425528507497829010806124118281021088268051625185685326114813064550295662725351063559508526257355990444984702666123739725412674913398642089241560581283628296215594446022766667988693802844127998772338438923870637216116517109310699735578629928094501546212729302662355308941063629695760993190770166724425906845216461245820016453222341136309844310626051930826346491108716163735543842240368033695725454485398309038449405309997609322134649649575982190226942692046746380496267664645740209811792279731991488770280269560054821091311222614276725629688352844385705595995263951774640084918531431623352961583514228842059077863763610273777796370094475614892067353023026047238977161530198797034156210794862500581638992567642032313842562507982699039576800424020155469707840610041818509059742716868223780745066317082107425267433406913461008015047851349997588472897134740241327912758653142824767881947974179976401382420016206285867087288402615130090120465937905453564114048863699422821618862389073030745483023972141840602413814093699228818128586254095821027408757413001413612778933700830692852625059472602844923251239276226100408567730651452393922894547447019151382155941484446799420154624913658502722246559736863950834188931813206715243730858949509605855464801204743923070198301264729431414176998782976315618108980894236183869849150461837144006910215258550459453505917869439854783988856419173218732074396549944198798026336152902185394992499326546863085012447804328899022927340371621030969746609568207527746443883922253930393769375513408760141845758806184677761419603465222642898828609908605931241017366293599770690326523438966728185939729850660302698415906480246780008405199721741313352339571553257351690748614027400315488713387945637850478296533430148070520813393625692938774144490436996166294422310651133216350517718429606549502043947012064257421817098870394426647480115488903501041757817677443571172568573642190851950091919357487868540715421406223651116072740217204095278761917564808201268372403856383868615449651905205027607716464084577528600671393861020870062440114667052069957027778247830482667727332704791988489847665101480774655300088979280965863254399738175762294529444748399871827998510879548831265158158194068637414881208252580049372848380281386227530855344746978467606237766374303008861682538509871768126226307000583184698999841761069499773936679150254163696009547193763685721841792017154959638814664074818669001561873562388981164526137722899608082633575065013722354383528014001126801269829210273387592096775254399981854372798779440798721115330203522054797357744646771608994090626152433046698471475905380151319446670301689501755325002202646254883295430799622788474556242855822524497766997425664262249996892411212219979783559194787856758378043897841844036266907131515663185345572382941249889973166683674226508332293542192269223073895969843771860286433706746948721078381739954665905047236537116816621114853425393675985179840089527477873149619275051685496439831055722136026363112742381220759824121954666326202925226291104246201329687806427479398733330296813903958806117026687166244956016050204994715776563846240697052458366808507132848629391891754461234069522251770959032118230207397575319643161736492504675076517533834873572030070407416895709171928429943758463712254687163689245694111223987699299910283086626071661224123922810372552831537241214344913000800466968378946054112643852778107352079019378975881661065001432524728300224330214935775127007858095135526051787724395744274722387000172251706385009804477795126161634933799845786781790815452630887405863413373015449911106373081647391172407410432259433255012426117072868055280641482284531443262372847879532529361437669677567357778325347283589098902420463976045212257283672160153894409547475045329613289553250901257231750705301450915766565155031735263955052487948321378841172397398309492230834097830617553124194675343128002045291167399140937781332944159679604059513235652802846806391824178727722920488504061906015746277925363691989823876758092755842693763804439369067035771705012577985361810143416367540527745560722834155887713161076074241051519587779632179286235614581440445564268204508323142354795104084931496467295992986578650059053978681270212159831009884199849326666432351695055573466406561467633640494572391015089667415107167053556812557121456296514892541850538884875681967708424125608489919123476834837327333980220919806616008795263864737903838956778636076436789355193321393026582702263408784072911445034114000735193054620200422304717505467234480502350461369552125154560515838341887226762467953569514177412899430351747715076132276343446515838240804003233400661734843641459010728322019343270587925885877387533839707277617238128910575432312775910258973539718114118507066304663795255875563639111804910064552934509158063064757541487806667777866505670162318947210021225790017238382199755644329702723462947094894006421418691249491891535835295025008403162424387866411535143854362823853023437026508294351067843273394750277773947827235463296868304436842220323766988887214581963575459742364963828715738993824179603782493832763185513682289688079060408036909403555242964469890826590167159767965714329022571484385840476339825333421612928208535418357595425146086088293068224873853062552606106688820839833544757002794914352513520315352597423851240711279278441125539642019705285413531052244930202362365241655843157966814391605194742673945688997907158261356879639701878679177186128991430564213224217958795388287596440973217228369872976898195190720500545937423258614762730849358166415691413915383068693327391657242520908169120527576185594890248815083131972489373126700367595895241593087137041575208092547794481443485509386227873738224843475649599190451710007972785021876894014859184282259254757611279387318426773674286086596185408642911547621163387462227295264442280491057297813907458979652376640575609147992988923211231251228819608922498056877463911567911803152042557289099057779683541622297716947966773140431786961675978363175276109079044296033686827923501789006763040340148923362445327005287924942375364612928016914877163088962135016797424579454693245776213869824916445613146606454023887627392605579892800443262619586025410685582849622739983361550232738680919776781506770009658867783111315437913465529569370946215512815872643359509548553494680550745749014671075624952527011962465363424705193573002809820021596572401986862809943809093386037353063028558746773815435137922323141424360046071675832676780388320045905769658702809894390606632922555108907796671702108042309767087007381521818341890135251478553203135370656659318476916392470456566373861951105062804354144364633184031600441752534837545453401211992410157289022822177734966554007608000448132696781767469325104647077237031448932959298350556982471138115325278276565168618102601417660170518510247009164154629468509382352235196050015696318339132997763279769874175528920680561294292301250595417836322122601738292644364436436115597896477342937582999406071736606518805178286606215717779142070020186606902316291232647886169060976874416816065460864645102267817118254792405126526027251870048614866783272880506765021866037429753175996907844858293445448878144477526718005956085214396077452051038750638525597190130736884700726701168360659276138849507494534019247613628639853029732143604863128658078687795036242450484250738933942045169921520540320532472968739671249383249116014261657408176872118845700887259898351612010097227173356553798374412122337899944862035364472193836308643757955611068385951560019127781123742750333363837166836935004306356682551725500060143234623571960369663954426898991267510155726305865264922994055390041242904838902795668560938509447474010995077473159832222860001110391004988350868512063218363947524497982369276683469893666121262810805649166188605008041942158287103206531924805084132757985359670848335505970057603106155383734053428398639195187955727053537932562995632691457098489882202633624639759253404239470521336575117780678948817274374735208831988989441726089232510977210909005358458763720367280323677805274290467551066378691173132481616591040529257877144079061433868244807545816639914367880245266527842907793305587874896164475265106791755585369706897326000011348835023355345782481432760555615349272658988464766016110972101747478899873292330907340975175538254725794678793871097712687422449020306878904303789326635555741743646027649531803198681296555565151020526328719186200635133023000509387192522993265439701891505138889914321221842038310324919411101575710035713275776405775033756249879307472307576264776997869863264034763135276314805868704080694405961603375329581150007716575959478580468042693754526697881083787552085334731599459863047221719187050132559636081905001990399584665868084743678781102308225981118164171209997812013695407577862785155315006919451669509245585992919306942441964156760160772778491253180748360175846896200365494529661071007722495246297833125179589446140899686945810129665232556826446064987229189688490805956469105649008992606242756919846431564211394057440665933736262504917526355099189841877910905145259444329796031487077685324941127907712665198880150523422680147742378574384744209606329231561049790016767960983710828288253789021569443241980919630939275959112889736054652506867755745976967214079270866252524136647885960665926606838082439140027471598871609591751675767846542089317428299507157647280452742634738528748662245015157794640895248113341337009381482563330028243432860969206609275191971176507998394695529476271195161438057809190182132858863886990240973733158767573577621475137935022388898826453574338988671532744464647144903030015154071641818358170787180091727949943080196991487873058660552747100674019132931386121251658721787717487434366866947040693996638286165534292405663832621714868525570209870363326352991458142916880530376760046489556933218485618766036148325858694199014045326995162187188425013484940646435833949955196653547369887929810797573088138275056093339895385158467933187488866163922525164882181756829290989140216558853476671706090255189520009944192088523510973304120051783770191240810666129966935611081973898266803142414796348285924977938653018817782304662229951609546867089131348822347487513021636246860221599458648894191288736691623000716450525130754078299703105827029295054502468815243545021692604205673638467421772151390077471554052173358899629029558658550506796776430312409595505644477718942949095826137717236288880632994592192186856108536376422404455161349772447979972014193199399670114403674869263823144105612951285430057837613179345415060362723056398239931536746323314121629640985042756824373172339887682680312318038185993795863015750003499220741986355745757594923514315727196685976932035769906167116327697329206062930042470519793537108376282316672907673859480500301293018757115103832967718970942108997135366392628187379220746415357751439643621861459724026194581965954752989294315795472319948372729990296660622136973629244692397182442101354476848441194976358926324482776867647965131847190925811491535109985244588028632727002864199598703594180824289017660061971438739637518656193566288497824712775822382762572655639783550562235512754145683485293348477403030211272706031984061710906810126647963037749104536541922890423432738518759453231099881492878425337189633955250510610376104226387011399924231176622097754125946729466857507647543498837595490027679630975992547593962245965798064809430794485660689294537254794042389477024368449736611509851639820791146893828469710711767888968448572208885486983844986758287663264935141934592532637276575303434976641221703104447864729766891183519819266873489454297647948454693274885587962100239600217221858095712807065311325266740815811490710571411984963449026422531773131550091720843828211525589896585276706592567724400010040175186164755200944570950891395545240113546392457518207677562247683613645164829520921174473478838000372243737780648306799884991416258764512323522263322941621552776425871629293385975276765757954210132484922649821952309545732302933392256386791880827134713450836059319324965120138840642965659558318837847046789095483982782845019883624577494788208355732414840787626414491422262205013012222443136430083289929924806963619066611993737023790660284960224945795197784845135593108338774478498440191399333050072194149195873031256964801330651524202705954476332023648286777673603935892670329256644409469732119803088426249653790227997893939240290876634591094058933815231846093336825729788537905449288447691020213647584941208380496437373613213129619761216723233083569601675234687067121040193783856462799457978065337184488397517598685271245760451759499097030466763785439378777797938638470725118541726489369182327628172129029784825883727055231086307159122083294444970384892877867909051507840567909787042676168526514022996610361562997204233646633932507521116854961017839753834235385785229597527073258353599605010372114698474028939663611432822026592852742613632192426606147411067364173874557846310298818728202723921051515537269744765057827479890411385551512489016690445496621053483998296744607090882482942249923178688182869613089028438920930682599333286117890145681043573406144696846990392939941421052236319855792240077063447003040632441694274860798981586899232611886199961265935065328028436438739023373375748063194898255905684175205323842193568728408278915435049799801576067920053481274734486743042559413388829794614187992964908793131642927111389340999731488635202736740917958607272853221460082662368413320995798796068675618881877502133335288245376114548485738781535912373347880295483020579271373430535236800102840108358505097610756877537737531364963415561656936999863760868017692807970459827561612027677394848064742316674831714305198379301345112201167514423281252887866944383842972728285083895136234016437917069919346386786200338187809483016669931868022456104644415376205108184771358164272133174657411047593247740168133136157150006400466784214117366632320691649022739548512358821289235198628819958626293862099054271429564467677630542478771232154722227643345185108845628644213452812647089318285621621465763235578668726228257687169517466864233454484050374487919400541327956443044108810945572304917984595611476345585946176461951083144986302864176507145423604712616104391486598037144725170554061223647937858931159408377433795233670022030466416533972476325880257335303673524867015432685437130657615727715609091405034411567995880885571715403636216007122072231697585105401560567630605235482938933490818737373595132262982932052383002783452097770022823400688329898042066442574565466366413423320752995957032686290979406913641537083323275445011424550355201738017644708143726734618137915054594586268516960410367256657509496762246345709844704845774776987318563025380249675447458942714629662932340491276502943465160730989988579487574536701195558807066883512868762902836133279889303378973114872681326242810471047298832452523492257037334222232511004170314814665459049202176816447381362439595034400512381450236051500780529454500051914790172466036057248181569499980799372004062795301262257897693411428913671754858016660398089130000832566575334780723318998655077777492772708616981969429761109831459423574691118154566768271926444076142536507923083256425442572297779269870726313843255494839630369779615848025349571179866742056373673251575359874323314937226307312516638188368163640977515574036993457433657124779009006548774995363527741494261612376688561961556958462943041083943958217621396019909528840239874942916370850825374776540264696280971140275573901725649628204884125213166551854402260597860352700852155166103065699648882893930333727604344639049131640039097753886331782780427373746066635084351488996171342244585146458927029289512234005451757475071772806401788128581617785675804495105633749115603534517374521579160661171182288573535613356156838258244385679306807498633626095236460326580282042745061182996888818976840487932624839094409089256654278068928028249883694855924797437030761802795720980980391031310653777769806031186700493291789705958156219784127846693095023274009454606990182703828217823879811390083695394235767262390514036239724059430728916848082839851099366055329404957070352588817451721499746206299670313648985867182154505015130709103761973377642312544338036212763638505349971310653400601664773179838587461563663350304755306316883089793982858433757742968456203302654757934903351198311703030321789051489686330163730966395321465107201663095710053474118299958400751247164614784093086227658491011971839337910120752215925170435355906804130141537064121244595510342695634264663182611307712982865676107512590734759031356807989767188379041414949956708949760645919929186583115297441770676899127945039610878480181849362785492616646529984511857025768023340652006750299656054957881884784285310618794866948590967964001903755417181273766222777060542757254824296967369686552962463558332052995222751765304457693495758979518341662027975235917331000444809279305088607212854062836938551346056030791015409167132411137175632591139286181503812732451151870170269510631113305093060229947695290005641584883722713450646757735231482862354367986138572127365727695951447234619938096114391737844723101095045007532371913769520252904576191411488102127848443268861117854897452694292852349846601448797152912932971137055839960042245737487773879874238645213662472115192983071232361691790229333321813287095111030337944636926237127584609148669631765876788520568002459159104322999305804715254619366112417486461592235319718281886076553692662118549327772063485128759290813956707712369325670033244768501339297062311965921000038031842026924684047687270551876510704584440531028134846845365713171288985833601781202432959422251231066712412918151414261627646452589729097127886345160206671585697756930975530731077537962623413342420037746604348299794093140122856325855342445980168734427831528158098651756883141600333472325272535315829402406611245594406616268087492715360528153854789935148912801397710738519254475335662110701677460425298056559959021561051134655063175026699014767854665514296429960522903170897206150486500919375917937062633374237811371160297618340928793790188296670247071711690366271277004780917127578239486518104628290068385672288975409111377655937443742926784950067880617871315204801712921477061387890612923950711085566771433916893459701647064625647588122167482918381978845702870557704762189264701066759820326079020664410700238309255720468619086203553806931259384110265678951614987767688871970805275177862094289298789336050653481091769953146113326089400155093830129141676034014773230063400358602021008853410086814241015052387731257682676122309993903430174476161409046765210185302685493101060630535637061111243847157717818167535733122412269696108449220590021420196974790763790179542039550967313668313648211886395185351994355979086156367363941871288171758302111843779084963543748362670516101567397871605536711253468593448211593369881685835632213893136715470118143067421229861228527355357656129549844159966775822218915386661553628429280510705448903571175601428190931655702094375512729654459039153540141463632934508073784921667818254112362039048394097965449336613152522436409476214769861054204382890286016165111636647480027841682446211927836224732839949332475420196577191860997492731548178165851226680676184816633187443210718410090519479718595469136125346084616838107689029560316925027912938368887857059174538221824059790148559044139441976055191109485006943270183271777580408672173802157991414050704603340211397919122121000744090554106269908928655857238660914605171458393913079616399312951751928051058566797585118439707373295957138970343926260293868326182467139676734489687471929798013944556046139985220606173872670053052365077403338811611120720196753400396518426607807909772991943762129400222961633836390071527602393289820805922244566678784493777329558508704066100913338284395384007621490467148033144579377642117665132134372043723167622676618641281071886723509774036173173856568508106852597915959534279709218328545635569205839453487536504002869857771266375237123738936517950044732163422852371485688761507727123721136570924689923720297910362333017550881648150027241762697620532638114674188666283602554277437891191665260513984839808303213295253672560386108780475281249765033251736455237584468312159812667607175982545342552183283388592871178901997908448076532151902074329514104750945995398053307192006328306102543625815115632225063142797847902765205932488877027409589988558916668727202322578115120780662275188339882176619879378597523536988295909156858740280916326659878061716575772487484876095433140711694818285774378349659655456587609500730250680500174003952873786215699727140697322241354222146879957743991502127494193658642313460086271099237300105217199678143459082220382922398055805560257753677457395516372528088548269006878317279020268519304001596539985412352089611503901105950215592819542111592534002441522139520457231584089546404581726821348474018084799789600376231179795354223110040447363103465466352224234584013971281953535286922845344745300625516813493789354030196667714061711529750859349933451973978617128176648715501447812948297768321905988624620732731522089659458690368386136285219621643754542895470480151796769329055341313438570841969411360787711617845912679222283953136249847153303754287169261576605404134580258626639516595499378126355730954194700618962061037268439208493872757197540604608913288681076794836331456296879802471649183779491214322300023576865409498103256486037246102190776789712141760861004401923642327735115279115820752551602169125870855770425352076664433988249653520343021275866096411189252175577615469935566467111575297910720797686825319168941595856704794188798311953855302200274708964761760113584070195678815672447570696797994253417351061467321578720447581543523753669163400900285070759210180988623429762714538067233613432629551795601689604322553446010565552094512286561291641503743920596559173497609511348906858474058876489806670244910091420914792210291716925215065419376943568441513339875935115567720276074820244062014376841590957556751209775749247109991599270569191539560958729150819249765906693289110757761548826935434846790330489916884974691459278761207341185420971555342934873776234297379031952234554691853530791048677023255607331006767044732965866621294883874850382848598651958560580287348785684395088397399164521564767732891149334196446064796390816672664815893112569249773670048105071777321299094422192104381024958579767688344257437552662580675484207025610294476169241795062160160027859151373902014401312676075636554563041820946807946676479139665745817987205750776740425523824474655289569648730995517920718441495191561467214619684911153908146244927255955201920669510044628485817546977774881437734842635568685701689438790092467738189358878126969145808466093299765218780733560270190269159095187931633177350124257776836170361238707660645831637668061454955417688222192329794058274485345841619452426019312748464701440977060605803176323159969040540460700370558734297619496376068906109297212179084388017348318534763059302500219594630968987324710934110249057604111885294431259499053906096530471271725861905233056819799713621550462959536283875713825825122032465117471611773322054772580568967882838180875981706107377060222537588360154131483826484600441464312303321315134350883091454377257528454653951647867040488780645892463374038124977431566955049914535281871719221948663450572922293267752156878986409217319020027373692803405658052655410714232777618707680913116887428142618910589963120565301245443523252839241047149478946442042712790420210495899934454262826884494474990253824035231895779683678653140301753614936359610987661066288957685886446428366388724069809339178011393906341470089206736964402599299821265379630478370628109724885720809557321449820548862742787722767624984330967107747296753604977930492698258681313572611061417243105294768796833744624778228849157550692962071855167629357290162834761954695216846404082287911394804386585932957941387568876113331390205018844325738455756864951455424900542176653247749686081156052337054706736735423408079233438059973499031431596726302141391584676018817361211252007200851737280015881244913371251517072944509295063606767809012097672087180491831203437640688401039941256194644512531916831310362679442665923633202637424270163899986222462018867273306090178466020058045109748645782830218224279881369629896129373565728666182652978856944763170480183402602517867653661717314403366824159141376255670443284898103809900360101100675510410479863357093458683718839964411207739742202033621785672803520113449988747098820919130749839913759540365084845653559091459195720279137522875758772949991430805086816623390041880595306482178924439229199718072667539517584327503550107793634561988414867170991065671328831839689618885689360724364327980017172778078853717002214209729036417899029261702975892754586139880240614298798235868274367249202217974810850921149619551559491860334811889200188317038688397127698450786130675796775740615885733816101505576875561271800473404452310463793333600858090695719269048552191835082120273184405750641627216955880636587433951403501425187140174543447146959748652223614896541396797708235972979584266638054376862409335089480088360675458344190761068894823158664707812569447433095075250119722352011878290767137902267948352381177840656484171775087986797576041085992077867780059712825347229232533550360522673766075275387144742304746418422088900110409931888807130934244595119568726347805799979912787830563462536919545142003125617382193479820178097570638206485985569082960805094549790952842269574747100869925347245118296594511167081689495950478894759011077585939596633869186103034233898088706672312108300787780815365812847906105903635306410504832276712060574339116251712918728347182052186622487173726136893689722679595112365954765814962705792655962544216338048224758571950525979550198812060699930696475390343892961662646355626529923008469588760614248588619312821290292006077145833635005547953335767605794256369496718357557947836816901056790489875432598409274577398655564117342358503680052561007624967467909016277354044215929355089223393939986826360156118103663562728094026958567235637310668936196839895698357435367086898100490353613518808844968727021272862561956286896679798582118137164706450721750597205616358819892997681588505459106264434946199646723652664580158650302652286556265793846631303831433939351499507393824737158790471468622033133197091533677949408629738511311238167776066306273422460848229093246227051542296507122881629245011511362585670090655085099605063610745057012632022880880068434980150667920467357859100969997654108258457966704521381581996732833957697451134514074160340343597398240222479411172242098818449572778719937932668281538481362280150213377730147683507398617794422211593506685443759320812767781125647147031369905977538009755550655315224811353399801723642288669658491758037674090375569911465596619010135715840194451229419403118018477459590338377869507731479779013366208558797385311556255377032043172375430650716273082806910730840070046879981645160752079791272223623769479041105699714887565167814152343368109319985391005294348875737903555456031676334895721866672241027365605223432801184319722634608976418607277066680743159805394142385794230027274697269846048261411091686361483579977130605661951329877895368927330132891153925481335943747910483061245999131765844528899382522674812005974415241026122327014406576269714208735689571903064571340218892572246143150145161834690449891759262450899463266149259094098469656790702872382463211849895848051398235591874809488552559221230953389884389466178692422935170266337552944310212046983927751511919511233869591553210033063376138154834628843456553861574353258968088767674935513327815659378320268419917322865609329179651577940165170333957236016957026291074904844077736674743217679152238316274153962443108579554267445697555330565163730569795145785413256570918496297985865610224874528755824594653522803450629692370420467561046767954332406628119877860891165864887888285740840344169903495165289196686236397207143697458451946559003217566614685871147462773801859327026553861355794809554223700438028035183433989631005288225751647247147262947305993121648264636369370278398822347735922351781743832436118969561837535668875326819559651792838965159545019159648795787255015306210861260059892800193741304732774633655726650974460956759462461722221580881496500386487858040020593108346602382627347235272940342301917194950105864373703874257248480373208905821201186117718882101632580398263760302532355364100144000889673514547046772120074024178063818393327784706460664670821920456545169523301363751328790315997135862478145147096778801387798824117161623388845051744966180522400743043480709510732915942877839141817466955289719354038389604628405015863953293681450343398931751115479474107002878904264799873514954847220214266014281632487540336000441072603904653974654305203347634001528567240425729719203277952883893075705093721763657553900882773341800151660039863649304885247234051436149766516130481617806461780728664224505136612618660838213735347554510249982043860197084437677601500498986919966810020441420545819598652929223295458614459131456329670667494756846707441952990356786360609666296313473425711142142953934162532759964270988246431008362573246371320424650568670945632974857868271402604940315211335239500036394096512204483895030543865097575300349263253843948124737280999154729503774366127004531310985988444087908749515423937716131411077113671001547462537326854002579337881088839682202663370379634725785137160594944414785646921023412807412544188350047931876753417399170619828604548890890981772890956500633113724291852575595099850033538061713201799254923351415715085077111471029360146852368267623752134254766570941578821162206528008984056637340512160986959347581816571618057124493695868005122364631835448967326883718504396821271434032536575006033185346674653677248617383088863753432637448351176821130624330449168739360345214625869923554036127695849425120154831672712034695310867919412764842823560426973042795778047587663409406049518950808393635128837371227388715946619814969008053823234354578756350243794335667884346646969754435751050230391108883269565875930245849386651337711892577091796801254570519199636872798338035151872970214535318616684737254027149067760767913369512791302059933986199147674241795694003902777394686396071823674786266608823566265367589179294465772368735441871667607136164902787816326338161691175388459334317217809092655834590425686369603156379995964887459579543595261837268717842054607773643560236394776424765643774190810017144676049080684739226935661568264006514503558199762789320125512836576218255170229234100822371030748162091979688005584731540545817251817197146284747154537680246111218017021344212790564984788154249154140890069182751789252561282027582538299012670763127569996353116520949802759925559068087301463650360541010451227742148363573786149959988613205491804410221279874367789314573237967632905880885171241632275827460946283779810713049638780426483590043586804511872014122121785876040501401150276442476671420515760352222829125019456783361346336977341321259414146516229271262722941543699987186238894760623662260862860577686451152933523888895711135975648506822041187557019720657940374743671685018761216906692553703826434789834634643540299427985496690719511339317530899435654393355058976381672676139990664151920011060904359768759189303384112062710505043204216426620547108400255721983107198617099109504832134092293438550002607926167688413545828777626176451758261109362788362704226908941909017020367198346722758536870103950914357978597499009409675629999390012349473132052530189216872134773660700187753194511483061151346537991219117358852545989267865712746437259491560092715427499132301084625461385139081830272540784193335368258542012943044566489591394921064765546695039461033409343893201644494683925502804571314478344849321109754339932338790471664453874019099068182763994248571913040283389772702553907943456036934807141931486815967324981674728283398074343061056807077607383472986330682368751053167869741798285827192542580117069804024587154671953091167620093695508394742455864965259439503441943419646712984117154901754909275782641255836942441254657509898994544977892460202635606238877005114023341791347719842749941829051186796919001155403193290166792219610859954636147523936170896334713757128018625714232694315786422859891318840393440974584135123733901187077040783515633309855715666603394138131360569841097790942316929447300680169037281997465593590480958771170658791298900542840447813462644093191769307878485043241854093247336965567706048856993226174244504144891811331256053066301905532278045102626242021199939318420453393939119781934032344090087264509299894634904208155443912368787790438582775931289943211989931933072921784429487387422452531017526488305476495200718769379329930087619358753537010262953373635891142790250253818446525860728372519098810838337737594440189481318771600921574757503169864424798398898167389051312282168706748739389834987413388788663421865712508787998599850040242680452056861097439569814845382587259952843399380249252756562217454189295273622778245207502485743360935624266358354005552786616195948272030945499015100911468555852847190764078210456864570149562687399527422699364527930833546220756866111418732469599172575041676838242505484262812472261099878034329656232466905180981661237596535976411109287317705044387299116302835279283968177307958335968725454482932304954159951234645029628407367309402215663771486629326272554719028444573546516226782421391901571064609204689856610699982835278863515167609953176093226846019610861049986832556926355518342292988664658112208376445800623372260113027840860998239904255722020207791756452194772617738311908840942905053753318771024363410416516110891818132642030956341343884034008959831239318875746797740940434049998881332798688150469087729411050629941954537400178344333797344535960069709866180834034075515876858313570555247935857451315115921657191001696820722190297779230805075280852586425661697830370939319895464103812741554563509821335357363504748388642668021601460796842305184815471277095254635670169290554972805957669868946226636787398891416282816055918490575173164495779090642755567784937193801061220917541486130995901160202813380248538821844420732942630290010180078747276868276400328878969520471910165163759649397123379222253212856551256843220795798313572156744603210214723838975903551480425652795005470276546038055336448331154593104761158628607284800311063744172873284826351293263593066506782456311474286275363379048876756476042847234125491942816283030949298980347135205713089452886563886344616964480865324269041414739576794958459515712680110629870153288234784626492997031567012755229149560001701097047801099096549079046494956919683545944116227040504933423362393485227829243004397150993469579065886193280824690287335276639874084825774073155495668634906570624220479858403878280073882269019550999617370987185529449686374390715179408161793448688276223787125164512350520668126472304456635693877443329028972788308638301953518310476202786257865610162975429025367133795510843636175917049698462462198108085325122787189784228921168625629807168329359756716179422698211403644875324367577153208580186962662778325652524057732897900538473699123507932110610450537896690734307441969736281492863240281893381457068673361238951121720287244481831759773561743771230226284554133053045648888281772864554051580844489994604267205802500369951389973780635098255510087925220298080943255868250159056386239005807030877320613739652526176609642138202218246875768926399307343390119510368276701851584076973905978435948069020277680656584712794577182594718031488489530478631263874788409731621556678770290439227175175228177229256280814359309988167522397582846193871321737223009028204019385468617378654115521021662909489748624912949938369861760011101207386580129307201378600712903347584305032374244387006217030070839728529710024917689376531867328641616496448502950658087522061973546863366103896700326094404341175157519363732993266072713039104040145903691119010740680427857715899824623602473295771516444155425614159897083101508480043764041549364271001810824850533629355420339807886698460665992578556653564606946540968136642390023736573007608256802630619648137158771619891330036525760847152313059281058707392066078792714245113735001634917363326535003566530900223704370373168628090092177461441536077355780645755354213365397032672371764899324062910444608324317440287283823666368333275174415369483872143060465694828378855573898844964031546118553378050703846686490992114445499617370949312957424530031116453780385739688095589147032380621475371413005267075329943951492407783988306195517983195951005026749122403525758284930104400768806266787223916274236504322483779856165429549516273288636349092541915354408297873533397120284917381408448907263340898804791643579431151649806626162051048759971131572531602268018228319598206864355161985707952879833767001617406913554422456214684787324002763348255300386516899938780212264705278801303951150361559922945410368244874163934188840553047676452636284207398513722778417108208047377317190757074582548620700068370202646541395922655757183663051017412342454632619532500252875189034156328069326396881525021488182931801245667371843590100956519647674856490781846192657946110497078551859763228245174286690512779405466771621706365883633702201965885200543535012777986277941392767914427358244097856164247642314155784038597577813400515204034216999286350353267495553578488907622253382551934797208860435148164036136444064288598352047021613005499842073843122318235733087333975345952378540540515681119875458305365630502771039662928611767254185945544158902140836018081950476036640367361462422198091505200412921781624513534375614949063382419730383161814294375832980925874031323750378622593567174942346864522338785661535925383555425395104570119430087325050251511568419578088417400030839850716293131461536988458561524341599842492461515015879189845195647078228072019126616203372191724170300782849936575138660297318058623355923463208481679930291418937463607355142554181281052496715495206889041927886973630606312844068198522683435844732146641909050244409892279676028281732297680587275445286025397886943630669574139391118298903548625618839766180246475138725486751499287523430854344111478924296471038326598093728466476036064539114629093996298814519627878138481468370348251396933098950040883782042717639579334618917750808306401080183851294792425077292152464326549595347673210603904402485321612162767240848993959095529237066954316313438370766277724544967127528094913304860312716555110894421204666809320914152256375591228518754604902784501116126637347443291531588003031666543784951294339281575884598314372075805579150133560144234982266085026586278089799582558498792016301897503778535333750024496380802381702485554991315581483560940104807722112854881010284016129924770524060118202045059219623826872269555314491275634929976786095133580578267381497752376639151755461066138244224736922283253762201195663648789835526171152622620153796433110394671006325648844787412803801803949000506551492411331036674839729846916523251119066332774177998955246602235767972266048308480982639662505050147953892995370358983667265508004391438175406020916201229829976933330191877456930621455879585428134055748896738221566270303502221026327271651652585083545605255078697696245068509289303511164468283270709653977831538667447483534326795527340712968992145961774213763133691275323314773533468444281434617899083313670535017818363479857090332628748401466741374899995976940135467609044453464322065292314458207356371985207743345466600887074436602040492510301468141007746717835989618479568860765643246029191032200954940506349064876627829423976665098290821463217999328509646200071181253505892390472357465063266621313588518751525708557447837657146751311154767559801394161283834610985393942136364356911702388548072423622527014523441607885416117252627234663421900835386424410870645989475057326557725402013322042152537360210463650563605296279851802886957138359352727753483108301538234619550548163305198010966028596144132339847739426176607919848277622717986063679311800309238083474220288202873266360392954381511339654610243974952887854736473127087583464760286845071655975542994886209295366960562144959657586912005573178975844978276888580743020074181365646234063043043341292929174897571634553804705021116756784414121088537122302381039869676444480264012835894652859808384857565851181399097861021086349459788993320662890900935021920198497146290221537417721805527069466938919585058062086760260385841303582517095592936976731814548063705512238964815237284512155645575398299077642014773020283254652185775427593954252029099437562918390508540665680008909818008097483366455459484989690909829714637986277728537447458115540344751043846453034870160570304121556077061975258739117499982880758050732784924149958705808136514249142415324443764508348864153653122513253780475039586771371161687176275519530068338799887178666947313915173268677445799781851888188916096497422979445828386868134704833164966717170725722297071498217127242944138387486275697175899581444106571809376032404799139851929080926169626313301163577096104256224622892000402537078898195008879483169271130393292426506640702423781150701783220956334813281000772006916010463287980539190370816652203221541560417954070737916872374193953637732602607797468772004018754686469521860386809646255240047404179179674431799329693257257765706294668439432938451965812760775931742903879604087873156440605697671727911359543994412573377953946763561690106801452965190378873274164888815436771755792719119376074952949613694345402993744828245618147441590448028482819658074678174541046154848719777812019449538466981935361233615775443257896968288401314609586394695220204446432791969872978313173246242729885820316395802691831773950713576052785621013756887832633426126762133718234138547071399879879050348012809869390729028655447312467231037445895505945183187683029777606911969635597208421514865231653975879457084783685710223903025776021949566994991498786800586184439384958641669301093540227956578746876180343123925334142630458028803915321707437879874745194600875223560170678038879179367019023636329859245916242426917974795967254106884757345284356391612102412267725667861609872155131414640391028835974845510029532124691890634208944289565761662861228479541632148559752477535342375088128145550756114450561677812516512095979852076539038334117639222159275060132675542981267041461228410263071777031652217042295953459458392405497146149621239580574558439176505184644666901214182438350869327398486216501873447490374859450436424485996548308310423727415977911370388012938536303796489132180314846521013635774759199597671979015484776503120687365437819944309588220866676143748212450782469046571530030667374758134212496218536151769384283658627341723545239624457467594257559260913613894254193203417729063974932562868523268283519119270198405466065226176230593355031695756839807646111137699375254816620016126814000375406854230903724095076975735184260914551432629067101941546547763442363355825299011784202850813298304483137907060915909877248795698389903834440513209152560964514950909681644001957351551328467999729307473167838346420767156687627796769331767050410668135256928139206820331359688679037503441933726611126455981236506206140932859900974400779504001586196915086874839046602492991760397514483714267252133475670716900817689902230333261873620293711016408115108573379735796513291097513780979420588014150971320930286429152611873559170757818516812756458823213816316801050094583266604551371481238548410418042344773918113664527892276158274445704228908675692912388094707807686958729332135852370912578797789505447451176563875060870913884205485526438137096493593398150487058003681652302037943308925142131981020603148324875240525074154174099845262849640202804315499546310229699639334611539098556150007799002081355706272136676985625386261981302359529168686057547728393939572173828064674470624942249928310276311386157848892869837964549153776768257607871999770241308994319422450595192642239581311874104531179810033611890492112363881556713198754449041193017587536439377960270051967476527712375058183501497255305741363538728995903688663477091212039011331537536961313040180774963600799546687416781723458289143488206869056565241944268559796853753812862367295688844883968970585149228585925323638298097151651112268910819133650523446684924204754489182391213105465642062051669008898633406610484530771279304294202083693202737985081666318701765881028917022554860147684743847466253104402951380808698214946685300398678143811378341298846819796589329034707156298171902642105915696391854462681929328416027224539662003196789374017249559639440490269816950042710423659004697663741800533161699099851318650618673518540778610504450539537302043421829526059033951019373438428041680401865884079350725823097121172696553918506367312591398993187082727804760038972260043283623938517121103130500619800842063881237581011389846134735279485391221666253914984832979074992262867180909034408809948968765041390045353915480604362797089125184822623052062769407982975052123403588391385983682766021828999460419281454760033227399776938699046310907191809966543403033415829050185978416924160623699190429130338022770904706614423106038064403435089017492614010793746573460146197112158868111394233482629815002201567136754579507054325041619731011313148217913591406983598839919584232389385521967278855859282631666444045861467323310904942464934495997416246577417137248206039071739014285307424585805772211836745308585770978422997043104510702638875624464380053289735442455053646767907814734725704827421174684142435936865158457694339634751757958449600176250453683688777487023003736683367734113963174611107665801769296474369978895754544923178835950935108176074419817181778450446576724277156413503104339270048554018122043465883895252759583227164216595807442513124469908492308739631842728776180567325757757346917196936505704705273171155168088948072407339540785501278781832119199934751177895422445683371842450968780420620471504726191254304011023921873620585616467112291636533399518158017024196890162747274948090719952093888610623265312213708496130616611558982356197765499707480396623313545402163222910060803686913398143739719919708583652380980030402643709160423080149082479823534931251956622598911798823817640780841592651688899247209524123818798406469466132393340602848185543343917538121903865656795193998368269464600643590760886077361497386693554153102522283984544216559646326084861351362678805605551246376482535228839512752220986479227239647979937334323974212650296603742531548061916629924180502677669316158002459562535035957658863955281898951733211714824673599381267305490913736574278062948050669314861788848996705858544821983959509142635691241856921353540641313064797348123214755181991862102308586695722413959077664057399683922278182577656727189990725513103537532965217436645538563589185674008833302919088923185224867630469004925359456837754872726180152782607879543677637600109432338025982425163682429825550907336086198876366819110152734184372207346841726518401294430451066191324289826978198187343006691822497754697698735384139921344287129961863208820159521021401421173597700487587290797591078886413698214379328748206346584788074633666934884051065862558242525134238293646462523374524031949425997316128297478064861745047215467280058849146714887065870102726014816361938179864149484389705357344993717730096292698888720543676819561165932767645232921128320301146406004694150545330146924830116702987372985167322449956131228512844502987515102321926010456090898885883561758584628191664482706113337282818523203681562035376139064589302594715948472958043345165821540358838263309959615721078573895557721144799768318593687954904346358725496291886334166268721290808254709369375764866908219487154551558141403587928007494545228443207560766389625973112386932561354342233607684258574056941474282468741120810590855486834717228585349568628268619219656063966736333062011206236346159975082863754843871251476009435236978276056766839212304555762992928837104199103196222738255906366664165848362487569561802768688635122953114818759293686486861028942961299503405231527312885713498350085006935668382115639140217197181593847256614989317478540195783484146914492343107339658540593325947636153209706001103799454355174199278180231742826863883388152858796693618995280743270013604144417136404551536276655482450023302179266262425681167248665111163625137747625297915516997753388137072687508483092740384298351418174436510977377900627171584720489413876081970606825862653932927384589622043428572625971584130616754116856576044724666824447380769987134320571670186965195685688025718818950609118210242827107917324970643864539459974650000091695914810263896639797201181105821374571436504277534824958698645891443784982394264698940157300294691926725780808025850332193334691709882140300918066610425667241073532163354877180630564489798111641901479950547830307856791635665902477075580314861396493820581883108342942248881115837441707427075878380444295581891172783828287495106274695169053955395361769956900918679812924823389190787038432570617506026280905517149649899194706792316197751461549227220894278087992797695753905293155908516600303068639670785617688428156930423362279152919828609373837016396345895937084009977216033859654082559827784636638234284957933444360518042693981312403929609695816773418303770147333783023630151730847240568669477423068301509970631417505964528647528960542082607764806964174837147732863199916516344927851388058371107420403055112171216166508834694044388033556211771845070149276466822691400983416520172219528130122227735525652562257892279745914547683889902592054682398964195398447948800584840725310673783041987577281833460890569548523696202116974499493472674284721912283636878257935784313160669937083886477006165251005592839600268729818869440840920652228487317722546204798419968432181749540188554505134136249820160584819674544910890764439415313022377974167794807914545366707828408747457398584643528759627400028756695574930362823140218207494807369441768345596067555413503966707218148153574172879460647605236738346617356066592486652889978206638813630242336009160232581021333108648406958784342148876014424861029972035306419498838167789141876134915323713421100937370986444649357808361507329618708670077618684980640549399116720343865367163666826274983921967918094970661819055952555433251031696299633235523821990777509868758398665113952421476018818722711564348835939867660706125925545762689691126713414664496885573829079442708443819741731308026463467406101748306832890535632793176478570245213719442970253731401577538262545590003612313887105643805310765317577055249913541524059950432499289313462936502705471063096767462195878957085603534048576547303440218216808804638800907329317025238256375813017360732409065750793205252617505144174291843517324677112121795062259797276095847608093572577549467516324646285267645775491344129798072290649631326842391023372227673322395566828498386398064103501164786862093992204442791075750703971947301999970554629715490181111558072136251337785037769600684819437631974831089374508716913410174978839905714164642021056410808078559530203318515902351141528858689369647181194016299755887471511043692706274568397744878121271035375524335962353417983320607959497875221218687860600968795663498860413471885118623977175906480630648806890696316900986483819798127931818763221787464356826543937839468716204330873183756028399263620438667828917802831198965882875734812338813170297192064515778803710160313318159848130921931371796551913019038412531502246796116787055474546933268985889346406780928320459777817575856560750198745019762774993688261895813617744161949034577821323996963115708334879052514619921402798721118585913551483749486539354894386661612824002926519730358858380689886461885605366033530848612777262834015705894269905846553114623797046637611230803738369187217888633681719919450672864272521508555508951212509850870918819471290214804074094394225337270609071730816218518511758885314249995389011433261191992288430947802502799514208626966810802832232389050714449236250421563323233759488783892141045817925588482486526870054891777891906255057032111039226293573074102885538228670520125321081105886433732527668100950374461124188803439160358883321045490922852322434642102511340901314180007736635131306209953912719430154509990120364651590034996900513420621595996112243031696949914012595172134230148021753537186756025718163531154761837261672312643036959512956860606984973575023639556956271233151315639554325650851894764171907153529794562780080665967535173673011008266533621049061550761107746702778780671953769840063825239551623316543681165877754479630674987329591888715487234540277477208031775361298935881249374756921050185863354673506374160965629919700266487932462308227929394515620524444088849604954614829682078690093601683676007282241146966244675097213200813356016547060568410174099921536635253933006771398363964149032626870670584901136863312393291884272873650234709024145458075185952394248466238689053350100454796641859792416659648927993123073946142764444419173852226063663314636679259919667171807729212092902709639177157234540619369367996976894173334065826320434417593210389432608647311285311504462528977953302426392077835574001603493977502776940285918741380408500165365452391419133099331969553207392072333306664159110351847938919128876242088578386168530067338473528742142110414374621370812769101784685983405278709010952210670343597154056030267723802074976794662322976181865407157425591016702078898472004369066086092432952602058911887019645847280221144926338160975847856117440044705983868290273442384216880485014004791296728708594892224115609282635616924444559475915549945766969330512313521407820580528382349825832621920352078190581658931016597548681248932957232364820956532494583773586472155716177391194957876831587304708361371586760675865168890747387879516458194015291183887829142212339738303082124209947032830161594514166290888157291462347690635318404259628079745836651797410776673978307226128785371283963094510221245861285902041463258722547208368700998852920855814646726274365139044446424410855361565866220390775067421025973762781863804431787744362491833084902685233320394203003638909752480738864836696901780772656613190725109982961794145277134659111956730066723136762502505969379255330081175899197090684479279024614369011359184369944393946218321085144211675288257131082893350139596259123817608919464530876439374761623750331241997699080123876599213607058262862710457840621571210330491205722938748622196365354729531770040021959131846897132397770110287174760181090760619712830305885601274331190971309901906455728335204959334940094561309495279632516081389403478144993069109472302008795804774526343886713335958948261004209028230805759254008912164042961598393166473163864490739489545614441253420950099245341722539459049157886745833786983741018310526742636878841457674961303878090099049999169631663029719716595206464893233501875364179322556429772527535734925991577127532946073947276033610562159071142395064752795014502791379059482697154822385558776181672912296379130509277990371773102450255540664849211166558815060234868420609511737537665852258753208838708946493288034864618274329189777374952171506326893432012396015273906345004166678345468952644686825961871258120226685882994796050553994577957063714679446713643884445164096808996415035405108934952369049044731034195191686221451599292400343313877615336025377074537946837484628438012851130051985589166638263973350427730730264737434972741446278594173422375697941181065191840502225925286648232795764302404455319082602049997205101346654218855331471612752544083422158266480933941674674138045940526981274051864699020536407794004319835119615054647256426749634236920900988703065425875879875348036025264886233694684546009293795073011905695238353036544480977329777841723968533131203242730757545164933632361032690745938610901814026867681668935978685035134290145330314553188469282463292920859557124643003120887443753925430851352541915302684306869656081584192975661324816876443970170435888349427528557296327761649174573655422637144229088022283364943573764052707548923454179738455958976953455303480221100108996810682639388345562391111652234048630940812914262693841099707027939401791303622137581750856508723706194287400336870119148401254299666331217158055747722068666436485579309966070776330490181383714456741378171749381397314530864157080848213475655627741890278238876309331347098309142990047137434754454182211581214341015437138404885845943927951461366314304564242572140143469082067711851045418056427302253003104977006057213659796194884421835835164611716838354205324946772015653983194686958549172618986050839976157698452133037761054511202938946041252188635512715947292702965428352703225030653050673789123006798666906187465943226481350749820004861590552567083209574903047426191234147373083989055026925207838286533894172994076616555726766900474936639351068258278491711798005582796134626453084215622924609352581171227257037291748278142241466351619152538445738728597130104887363787587746828055072108050674904939103222575774131024631205767575916710494760598155161323605678273110006477238731519032810695774709868883698862742474627309692273286058432232412904950472546348478423869006687228450520552342248923382596227934301892618640838626647472333642031741713578284025550170578524732936505032873397169611041683792500384109239468059507440482825314337732672629544472247122744040795656433881678271193181874519736658038909245926545467292914816982572946450681989888566349460092765349248747580888758270245321861991249981140292557794002785529381382705725672503542426963216842714056461671983141748744354705358430409896227944348607936988638995419922515497055613674108356896402867338629132633970461249954488637746606684395129102214895706893385323173683918287503072236816595510380227015586956902059007130936454005784102767773800727740381554674438284645371489218945546266512819122238336037104443186788349809040681748501173029814706705361415371977184964043262896229904043976925986449947128628321650524078955911658247097591671830664085429141428715661033218340613165136741180159580650638454345105702255911302238726054270751828785679907968514702002578337232846342625301917791052016415610808758102356483225750036553450556533106310974823189605301287536539490086656363974478409345040156255711582993307894396546488944877801421902043999164250358144975735993533082724889302834443562645705229752755473525074670217852484715497452346970576206530861035443444756188314714460198938925630295288131856356876246603204752914322116042265154456092877278166767690285231840904620752523397245100292313860397950332686712644260920815747068186859725638598388584819916729417332017494075849991304134447388682644478035291936652557202981602340572789287957631826805137322421662398628120309971697367822404322082323499170018463261856359063626952918134973967632102632278861565565962243448752026242332697898431820273061000032758495420284401913983467079270514664468584462797817934473928316013242593128678372254440406233206409631843997348602004064185766716415798540317994224286172153653119313914859434520956722779502713809053515753033295034164515012175754119580865459087564530000503276626941946879491393484024628864375720859424228140250886913030396717263741998664271433586196170148313884358343551013582741207727729059857899954038076280904638932021941270399876517776851380073929352973382115300159087490659466196672797379296402574952224620773748779823693458992969510676150994055724811880902489611142130155259399837732274726976639305871578097928008313111919064724304921104300819660389404094770339178699976382881084385073952299168118393911958468289739999126180662373935211194421359428022062498093465467472344157459952032895595435632510906688831259160205361891997462002546656272646719420001973695626604083507824475658470900696098464092874689931104908958462641336780592708843217909519615823409954217780178563388653944812720952107316492827357148932116838928522098685015002079740376161435343304302981855689643180544476908405403778039494300971034038171716157780628261779711117724107532631781598234198734920801380777228622515189611534111025457200963039814540768034835388887262401496011468734852777764992343398530305200452255156615317597543876839224406370269765971949944098034799614390509343784119039687079958376682878845132075674906135839522556736887293564603187682192327093628582784252216844903862219245079525158303362664106988891780202444374471301342312816633063866349079951052206475312116201196026397683185405012615043135263604151794046549743784660477332496813959216228680020973462727928929829855459450632577230139513474780285274284310207954765884578464123730687342086241495643090299593268360337998047590353711142441113060497887006024908723694537497157036269649115809166925497841388492096839933688478094456166543506961473502155767515141324458814249592873450821516825168008749317174339851004070750724570901584817599032166721937402775119102335386058578229691601362645209582524322790721640553232346563908630822801018644558423617865779753474245653787887168727367351077030229085836386960984130850830290399347287044835026032151723568350721062281170286012630054445999387234294546710120763265112766684708059713682281450131983824854403286960684140976595823733351715925212863299103156645440403907224346011131473842148860369860948426414889500611921364561741654498456796743648163672359329435524979658097474466769169827148293791423299274813233304462831175014566101298314239554689518981377152000966552939988453061811015261100639329557585811468141678968985209483414434393765765471152406294520671012819547402488975292281733639989356512889884733768378257164765052219813708381869634904218971983331992515237930054886639607255422617082763548258151110791291643294058479875173563059366225697408389326358698378397132435928981714132826402739806234393426946466816409263610528974306893721822287637109864972033814578530728689374494256600768945661407599292509677714028340643664046208337366687299657450901384749209886147927055057650381243590286359534571329580092207503812923723615975375502455039300164872674753916741806991465324293666207678439171729721998747177504629057360190497693472086187382283308910050117489409652433444501316676213523446361216566920692770918768077162005525582396940131458089939342510050842909840385657478046345746824551553443677349805962044404497236289361121944976595953804833353052198489531464315204238238289160022021291785141418319054779089190916269851926172787762090662268235272885640565672956004274218499759785688864431394079884914641923421687728210103444079008144141450847120426148042181618741659377331663240955935184525592321017703548532260225042817971713966480386756797261235870925947970067310077382804770895935943491822084725141643167829456038632551877382003852718775920061489960027431494359548729039999662235329120429850753506863612304626908686073004320326705076156379447131073758028850236299582937230351963117143945071032438382915256817974282763261126765370439701180208073338583255381475497852228765162450147090823469545727369097172041364546975858784416960921353820452966578660817747607192814296617211628055956209191420617786564934079599701056000100774933611090966082747632437509201142511595620145678033084026985727339334639673217388010454161598955829559529520554368725705770651386690953755657139174258107598830021558989600059987489698006359078232956607448158594616866844137792948994901283389231476955401002493843512262085587858356941791545876105910939638787209060217281811089810965160391630442551238084721268239310047676596451454922791347603602152899807117055338524139847491006527170571476882671139508960369092508771171343988221543089084224196250651022870531596036702430080797907393419866312091172114497877075869481112865748969440226325001475075160277135353702711973513147704292386962302362749566182930122739281877197461977613948570983388187837089811198730305866532487310722878851331187499919864866510986657527745579190483080681208895756480364967595172547047270679727898922699016427716424552308947245266161577623395066663110539809689714717036126925242087890873849127575744041699360169718883431008607696735849532548875273733706053414430603797883956474555923006777110897814403096955002134246088812259878244603406464032458898647433684329841407049534336943085920206212033979455824483303504727318398875178214789203932919557653062771730731846756289818845118570047810261334404408875499995328158037120276705884006969440991019873395760359540884815043113867553741125585503339462245754919065224451628119700167237062157568004537242458675303303241870443180142564026508514454017445400852805581129507891955154953025599760725823458983235878813705634096243656141758634227162481642455444869782730762537105024999262939457687847939550228603374811760983726613067872732023938056958965512543931444677184874285603167458708936085720411082865726158172602570766626801669725778752940322496635658876124036978161354233468177342485709751541301548171950891251576411795717063372681070235780421016882708821572171202663858635178051947802044010302091803542402205825049679599277279679788842484221400087294646438723683141494131720909241803484270112364826695615972572865892335759816416588883815851754169697471642660114854632463715414162500161749204152296318360620934270346154851710804862393531733506031063176394927808125791282150740677365768305193162344307679065295122103098056412697368810472743498847876819878689675309269280032192548417809787310222189763769330019130147680400089971402496781117108955813382567017250620694432677186335478362358455730995025074480933586127101534996526943800444641229373203199563811094207883616949425430401121085773377602644114001695044784744070965635895440199101746584709277329538611341625433493296595832122529043007118361400182680611813043591346519219461494110267865050633239479116313681234695941775256960127286569128731636026762402286771921295468349571204179924811071194104802980070379965737188392454780262853895021810493703183421264176014007879423983410673686658839556838849982308931639086007638247005108217012314391689683271056909225693707565042464779987174958772896885118515346180197550884414033107169844181712750931399755228119205882704844982793406058294384784455211973359296102412204331407991884571280542952231322841797566496240191222795758494372010372303856791387803889514172381147661893958119314259475721409295692989215900765468788841219029319850988105551766676950173784655869564718533237960550194371454666305408411397799839476226009503468503118124021449425349994238232918734388398259064639124277947961091397001564997009382355261807558281445777274626363730223938043490549798462370072660594898443967911918281198801759092278854461526010933048607229918992926861456815666987092241341941566393879718841434991736378346623020765202320113582135642895848916767113703110989597819693676901952241840361224236217194566782788834151460381090400052025520556107642117583412751599699288628654484079139217193487304318980924156162444200522465702529284334388692628614120398540220780280816992915440005006766791451692557586914601298082835181523491010642270485966387674309624628811333872131492936918811676519504539945747766991765782560849109638416276237209415426890013673594342115691717003172862865337512173960166907286208202867026598233968655657690812590141568566849966553251275600857374204313251560511313180171677290509125124925001041466428362413532410986752362401264815184945994208960958930023700352595161599727446259485197776859836152632901778441233939660635377430401681866418210085060503802110864328938793624810905865978758766276303176219331659284602353841988106927052593597716564638705851217970643214776966908523816532346225925925101200172111368915680482410130707528318591306710594959529965439854998382968772817949901098995530386973839594120683109541832684688953366489300349027093771123660458307755059277881920038751510311931172948884803927927070902399398935680169376422624317330221749473159160982661653185004691299473921540498632642139292674182465469675137733357057320113791907118438430782073115424187094032543009572771112954976469908471227472972773538675612712867742674829807750123669743774050872933104199194897773776869009243703237980373310077987267630478122608794268671838056930086378275499196268796927491820134845030818300461067237970627730767598583884727521610363804408882625789001889436522456095966323339675652679220272619895633954032388527418760948868918634133903978912383243065851006907701260195457086829480777873745589732255308127620654882569301649580634496030542425259373773933660898890737302224408499273031515032258384468109003958229420595211033739917062712599485768207398219394227196413431307342032874018033393690018627507699837426033867781822917420958107416472891884655927004139496848699718059172456071613054931978949533215229540135606858591212958941022803153024737029292287259210526454487264342139492163062897084588444262863872337396969039797515484475901452820920835582068598945840167501373657674554831089753002106892087422305248053400490418530375685548932822195127629647988720907070740667013632538669282355260134074964510753010188669324521713005937754705705095846327745830724059113776840143041549769314772453625633679111368364629930843499090876929296393411466804611770437163419114609156404604631835743258592457723323391214302482124991805451134162232644797149747112081625390462808392239555043810734492359837553376202308369953167281600745287672347271157690773337695128008102173225394261008855278945731037111702369205743953072241863218030836153347818914620650324828396671772483347533173651248356154873605226950744304532993219019241185544509082324447237413155674969744381509274174878319463499693607953684458041659229828029669900824285095373335418543650956483419535677504298326853308176993919682474448576874803146681979076571828736989867033524984521633189210586336514762787962904586177827620170050116172389967176174186350398213369681909541240052614648811092323604004945616980478105905604498312452421006520913000010844754765969601462812611770698203143826822218627306215363427075298859027750780108773077012754812310055473836423560392925285145646003697873559669723580270828340757246412260786962436734434339270426966822294319986473217735847553493460164284824298860079201193875503056957483971755005362270925297762331199692399985293831436528100766078412406812256440901094672056227567154283496301088228826061754021288591995397783426099728139642586994553388029007198637119396742406874744645817923863159709908424383815503207420826927976902055416373547986729533879631844569978534891055972315995002149939724666325919543555888694446037256367625511242149396059007098165836705612514613063004920634855332337848126145575162916284301814291405578595648209905329059164728637489875509312814698895935751608446773724566444648046477280081412719973035659426612185569139979897148415536473101119482642224216017067276631316693513626335569395018133394988865915479618942121611346505138392113690583458830045054713532641315318095925602111277142567524082340863277971352862513225084906790754182391924336376764363992702047794199656298514570084387628016236195881387263487621647832314627454937842385879321956755201197466326464388116872470267081798713309259776310039100323003580777029623234003699897414400306776387426682965050408957625461246935319010185727113525141800259307934987510221497764258945649550534214820117367383344049070378673571914551654424899512357316427381804102526526330857695370305511102406694124927034661986134542257608543223234729056891998600695648476132744583166097119222033681950567346423341020249229557361769385586518600155479129691545591420168293099111049558828880545231800865807050167738786883703499677126748002257422229294185324117011741845428231098845965812596605691005322192365330017049637172643250536858766466142498773388245006431597272496493484352640213391501123823235442939606524119473295906459329385011186099985656620543839249652172180092910242924913876715048810671743580431118137199968113098020484913263230809372894200058860857884968119055792452017319229945482853175118709458345407248495303764177682927201697304547890071909170402536981280029988252243165726695951856216411389275833404608255200341407321150922187007897143335057808233595394524276421162150199850440038545620060898860556703672092460687271057733631508772963990022112784989451534731738064192390860210404161875335544024768836527911786322810847414355917044440960027991686747443116818081117223133510807722039457305273275200065151687251754698765455621213582261467762498440805197070604716959155416576875481893743444930706507751174886486881200302771901541304272832451140302354239878555570903129928728643258842334554498361374903228069770601830912712732908310855418287299247515389371625385541096012722894272821096006994348408332520598963269589398716501995536220457373043437325986314746170077072407770406708070844387628882499751560993899170277712374265633126105283293475085536871599820643408619135411464415546117089810526886962041887660996859472736975936315335941025572309497041052013915060781923341426584606036638824727415402897681552690267600619435112999978537413610395933742641201976739287202129832693155722321660051671862182253293096453560738804155968849472170477163814534510153442099676606894956558734875225691325227275366564333609965094205095158850428090453475968373731217853741874074348721658024366777903808920999374135442737642059997398175277692172224801079711070062069824803281899077892848008244036170139060633135260587087109181738484374641496354266653795812343585637010470792635854769399187302232027552050016919754170319023570315701143839862098174054139715263679260434559942862006543609047550013249309834533280967769838792511399275451251266279734349120020768441790728152782836286294609930115483330662197087199529288196246991265957832912618074048322352501687903445789538441971441573716205765842564531871171650963750170791359695293540097785821641690131094246307094827291936161677302341854096307446353082185454547737359078650672794475391305761049597465310517529167304084926639247583107819322146542073620252101425106371400518601266190416762597326794182998181064337163720396799200977838667349362937772397636544869916210437759343594513792213525405218541629255691038501829748754644554010602623915616071568764473502821508585767429531646558558808370065157192349446965378404739932224962404436472545217025501789781750002304813038356341962411046798351545807551491959730325453422538343135467150446055889712444427418561750257752094893595499193207232538346234846797680074771336725570571858308808177729736169410283359240624712561473946437038238876949979123680739980294847368908608081741210647786542791020218644132942627781419699089658602402133521963726885596257318522348596772763925635423096727206881824439806450330339369243413807567503583985239069935187075745057057928386849372631350003250687680010322812129822426974329406720002571989757245187155567562094613057975736434154930249865529713698717133292316345675011737319535631576249346367828736919653805857653074828136193262774203432605143464553490518614698058196816805487810451949692676825077689983841702425080320381043739087353907153208408555847763804565048219866867059502009722608319944326326421944234081563488716571332833022595246022839664022532494791710486005196562530244424534813868687739257844763581092595630533487095539945893476603568261004612183935993816832905275689477729603077973517885115092356146949028853431265550867269140071163017410199616874912610517835345009687443316084591629931899578072276893383625054577308149545382866622470868074995323352786801946419886063256044035621975379090495094132502505107148151645422010160558234193299315087171563118743936522662093353988667328929484560828378329124646241682117389919518438812860846847224098143174253723345960503438874443326213722532760546370697271609061532109449283553605352441126099148126861523259792919731750554199632843695011985844443410864595113869159414820384374979684060770073188690034042471813786691103239351556006688825060156884200254298952973773006105818800459248014578913513633923176362210351396756459867925160358217987996948261084150236028318727564369256306881185971860637714566516038266462764235544589888910644156506276382626086511369498578283030899894713546476370670281864819746661595398092135006191951387105696816828107241666892928808806741078272044850349795096190286091375443819802288532236054612234958419061255429015063591293125469129960946147767211629478602184235228805779926275752606405017930560126387584681669715018207389233404257674878236110917642974151336822949949427586994531727169694253686010409976403794566675519247848153905370564717197199633707514723864312904268087551381959220127086051901537686178606685851470802784589161329134905457668171529083372174616078586758942704060505426259892106272070724120928112172267705392521543945733251765414022333428366380652205684680264686426530745098371484952232709667968256780613689378021580476314885752871453798520908234331438517196072811799865840248677240300823550171273532785565967897256536783710716897627850795075305697726986771985269178107825020766322364384040265352468331615418275317084855897272549273186249640599842949444948677682398952362606031829559244472824496302164185023228170627498133703365315932577927693437486712133490549770829948137248707066969419158920110200427640918992541795837585339977027728829334696136122834218977688220880613867019086201191297571050357136902760058189590950644879129365243783083343216742612365458178903601039842129660844551158034068441512039945533658852638241255521627105917707199669301102839258001446175098476992338212335085275919285134371106042476849475137207220739275343938765075872156105227067121159392549575543808313199121175180610988363061797197796669857087152990113050311103280295667570130420850946921439380984470968016987828130418499613295093897075364578175982088643722991241911474188054151248970367802646365783350784572210434870050362019268026654923141435100842768613008778924621272531556240669307833792328481686876726701667085997958565801683673606930783640434195870517488077889271221788812986704687330683664943711412083010879295779308263461399658409361225663123383056855090479106538425704171833728716138544978434683064089705677531591796871727271693549767943159647886389162946004329103101224820072389026244650343055396462587888357840641875391884669686539525468333666016408630595161904578246288612014916528433677772918157520960488336012067776142581133411235722276332090846386895008108959955155751541986837613353346522202932456444466214049083699005165873163770801232985155255221395945126131774190100636165044988706300514654461889618775138570144998498474357204891469245650257562640798997470085305122366383492114401659604464122612061797256159769284860046730175256395304795102455565585429029252383430780427929532245157564147173291845669625145676696043532590079476594439920472217151979961480670295142934464196053899081118063511005084638693858346585932910134090930421420433854077411341092431946679820065853716423499299631545047992586519755160480379808926581928534850194775759086389099860432829344541924104900071045173820144177266705467108394694420802908938712681854534486571838223704929086087141235927189159655559255197028764782298731358373078708512877224564533653651214550532050097979654843356955179493590831254973972385532233479664755055824087456681020519603169054018822495939886839892997984604720865251386845629380760941490461315569225517671878721999930726171164116568753082724128628310208250527517217934623416751583103507064510378922070187335862973504271920101540676252609393769468486972976992279358316201266381562774468572598889031654811620424590942322617606208765164542155750309333073583181969363419074836888962319627779532836277676530728920667196524624496558142585044634767474324938740893651369518564620556329700653840494184021853377209329419016996644836158510261565837623988867104729814816638880453934038943252112129951965004165967098859261532953153018168596093854432375481566486755117438576475492724974307975124227025571765107554257913933862654292063667844649129979456626622273386818518180264423330944823749485870494628282862121291675655340835837407673123230376670700630808248844493165737421855796101613275265056225998113224158814733569602665806556355814880571201505212042152860897368215652391145257600129948706406641425892118281151548725361224307026400189931902583671370654681263857152199981879728094225093809193111243094560236760378088105442870320204283110475139863133885018997802302966962304748443439036338438435753361460419991041551907509066235081279700309464638126682009042201030438511802602249425252200225617107743628587744335846978904239827484332734324882377064271401020049011992981428619214255405726376913761903077090585974057948052046519846811597023259030265340943768795082586134025805059347394076095674491725771592849896900978348475182698969645497353571126599932445445226067820532156725267479771538264945112618795611088739704287587091632383109849240175684426896117061702756203002035269679198122529268813658795188834725242371497770883395565701067288871636444672135499747388308368309186777053447486761226671688283039923104019996701218181057919222729464964181887120300612691116629067276828348820821769936751145977124152370873987523771659529058649905647084436784845977773961460647369912080059311733897645276073975080664129120086773724832278760926262891725889940794387216527592851032017786680692602204464456453630198548686362732427958723564704959091619308906305123599701378178722532540513246243972549676392886001805101262966027690605278272195887853951136054235162884923595205127231924727498950953990462633693183445262538801091394446246225442576434002073886198648598996527502865737934977521740134127621682656632600566323808357418108341039803664866600906480925379491861769367944642923248856719010940649024517767653341712052173568786831529482824507732428947042232547047679146300923988731986093535563386152714610646920810466078963662367335477219517434089764631266395321589080345201778849788131829782238689692580142232644120524644106563323837625554225427492290633192882417362743400683803475242164956241180879814291311579242831857229521199149556437854020610850119524327843798579327494941851595950435521128506492528567902858978358208383084342927850560737667646330121269960380556241211570557990048430753443827097850233393760989751719746652264648484817959578308461757829405088173457172456230425978275065840341083108040354316084503003959833622643456206422021414441796509562659284317968075032551024637733925706433996855708029945162935630983256925136657406937202854885610428739695335758154728244495476687753581686468058111763022199788637833956672013204008012878576425634004649338719709126889589282784027872466897131713534386021059517630306661257898995569906437166528577136929568245747731264321004408461226207378113886684858775935235176656384269003371228271632380654194916519822853268398055472353488017248064304428815886061010799393671707791500291364450659703809700909990146035291101329505706555776155366722960103267193265015230470666238238032965498788026930466432017349853119762642541963846152665774908118407030362543746644302780370320420727883255577385686039852732117412950198717698783253650136116250034832172312473667392137674134422041001970685496402363765241631439591115388432254460462222132323723363516281175455449498325422748079872704799839893749723948493416408925370135120027537227604899038671636175561701050117260512684104902537125221466692975132964491547510189317559167582775763111692368339821567788289096033768551570335495976758429966102752976152768041846798812633879494673679201757918494659481495512269828378802260292900207710634209124642897458641017302723671411224641311472207422756373835148346540593621179117000715464279587199424623912039913140029358123500175102914214187558628924697242572150038769415029676963408054803643109570174644966200123494832760253820063550330288769093121427512660304575986863039337938400979897548914466740221177706935336852117805027594310851809197580919775745257828800717959975109282389778940965536262600512428556212646805695317476437656113533516987570944839544338186331171882352234073859488821127164619326348178042383311691478384135399685819937106640658313183857988825813924371954189833201424613766489758263164337489361102362695675572932552845098787623642745982430090351625092959917269214711839560837354718849882641309595986138235732572484641150308022171324105108128522897884303686904680774258285643766327770062044208817081261052202532552470289823475688356418696352452075915250826808405722878448393663405856807131668808690758308399721964919798562900736443540053526078423494810718985472913887655204230039226085322954156531568246765424678459900753271556714209269075373919558409076944802234179820635171523494051851682769484352885712166398321446489427431680435449077702118492479352047197883070331157524968986428584200876219959820842807943242512075014409745463233961143157639469471406439898570773010606760248076648712996470438927219192367236272996084396474760438224294590099045093298486649665539168897765701051988164725207821292583287888844422841673948312970216129613145782672325507546147442142567809697820152019341267590931179951338013986261188099391786879054259332651315513800259885206495737677313298266016362267793321758547319520915158441871224454129251673854896144833982900645277112997262794991168825813431745653510117934407279262605049925667778887869225021049579950399177662942232814341973757990953927800338396203430571906325070797661814429495979327644966017666105349034123006454661879348744119702619994927872832813230542616812372897940393535766889396219714962668341062423039915763191723032764556536049169389907621754458721788101206840639699171222973826542408249783978096905618892608715857956109327955361929609742093390149734306764301224549454315323948968323787236512074054950933825421450626012258224158120907414035997821162926298038512234190826129995698601486145008471533677246721652757822151760250340290739497366912159121433627688543407418707361618852168168592896044878613293673610806234647619423152616324035190362116143091134964285589001653227568610674040753194673302509209389530442800844301929874137741376232480469482541351180366758389794120437657307129186679862096587880912144764171813061126853919625218167143512409452482669007541020606017793961645459849893223478371381241721622272504077833944191653698604152393699280561867811661468484137539193577124948812601461834908497872200816751227332434940699173192279167048392501492852708417493939300079404645828189231011438371872706968564819412631242245886130909891159556483576176311007891203471500073210119912359104742581895909009683945190240442127413171341777987742925913976758209825828545349783120734220727720227509951908810143227687607668708649237449579517782138039199174151810561374204632947041128050808203108840362753284668516616744089944692984055502195753243738061217516688155107126666934079455358965279360405856460811358225398319024568810299412578087796745087667976394707346474791856882602344979228454184197042685376536434056441223668568925706867174937871161584473085318632273070209822766922084788303570277352634148117733524993577308645737528159759598184939538539609532510479318721676557000339836897484631348402783338277139265282018044088055785981166783066472268205595538905497756250913699150587294217802745052801105813357544040410453064552216797406699535465759564778506024287088193532297673758759999996124307578036065859156073789357415897305300267668590977911075084777008049934367627146734519601143850739405432142370352767446348726075811604881359520833854258632028617608837951395133835171528011211073463413046855093077031826187909054713339411169714874434816395454958555094641719384575463943413236837513689869907440882882830547426126709364182614625005201595408415554327271401649144165423415422427247237346211750901722833468973887418703285986310778710112848209990419319743307003095454470722430217418050595195829942768344719117278372716048365283950022625785045114982295656118966121812375446947777548210005473621042619267854259430907145584463836429838276457949871303831263764952291845822567405274050763364416048290860365419807554588712018676790431345860591396821816957391002142873132242547161149108270281889483218256527388287416747879949786771525166186587639924178171746162014039861063777053352667302417048674006047901094382282047173693753486959246011918364021370157699015014734136135866292964940776268439221776227070185097979808789625076279621474472279635519668279003921876331382982296253456136319797208931423933987680296093523784735062502048505007184939990606435049436704039012068987633986251740909730114586781873238063093880648817381156059705179284687559669955153718546311766911092553021265108498953330836473224695806059702732838255859659017418137335829157099100183398028300624025103263991396068589638115249653409746149378491484701067906058832580659156637337696125366103539957808863959169917481306415870078814774713176644522690357649784025606070464539569732817985192360603300414537062516180446232697889527718188929629628654105715086960215454513784955350177590411071316318743388117658306758859126316517796819424317454159750458737716965917735505317383741676766006496851209796632177978745246352482217725952511495472573226408343547205889150185289189532699095258065203790368926042474788300322765361110662074049421058361862143780542771899374099314620244175358331359204659429376
像1234 ** 123000
这种级别的指数运算,很多语言都会直接溢出报错,但Groovy能够轻松计算出来。
对于非十进制的数值,Groovy通过增加0b
、0
和0x
分别来表示二进制
、八进制
和十六进制
。
// 二进制
> def xInt = 0b10101111
> println(xInt == 175)
> def xShort = 0b11001001
> println(xShort == 201 as short)
> def xByte = 0b11
> println(xByte == 3 as byte)
> def xLong = 0b101101101101
> println(xLong == 2925l)
> def xBigInteger = 0b111100100001
> println(xBigInteger == 3873g)
> def xNegativeInt = -0b10101111
> println(xNegativeInt == -175)
true
true
true
true
true
true
// 八进制
> def xInt = 077
> println(xInt == 63)
> def xShort = 011
> println(xShort == 9 as short)
> def xByte = 032
> println(xByte == 26 as byte)
> def xLong = 0246
> println(xLong == 166l)
> def xBigInteger = 01111
> println(xBigInteger == 585g)
> def xNegativeInt = -077
> println(xNegativeInt == -63)
true
true
true
true
true
true
// 十六进制
> def xInt = 0x77
> println(xInt == 119)
> def xShort = 0xaa
> println(xShort == 170 as short)
> def xByte = 0x3a
> println(xByte == 58 as byte)
> def xLong = 0xffff
> println(xLong == 65535l)
> def xBigInteger = 0xaaaa
> println(xBigInteger == 43690g)
> def xNegativeInt = -0x77
> println(xNegativeInt == -119)
true
true
true
true
true
true
而且不同数字类型之间的操作,总是低精度向高精度转换,因为这样才安全,下面展示了不同数字类型两两之间操作时的结果转换类型。
byte | char | short | int | long | BigInteger | float | double | BigDecimal | |
---|---|---|---|---|---|---|---|---|---|
byte | int | int | int | int | long | BigInteger | double | double | BigDecimal |
char | int | int | int | long | BigInteger | double | double | BigDecimal | |
short | int | int | long | BigInteger | double | double | BigDecimal | ||
int | int | long | BigInteger | double | double | BigDecimal | |||
long | long | BigInteger | double | double | BigDecimal | ||||
BigInteger | BigInteger | double | double | BigDecimal | |||||
float | double | double | double | ||||||
double | double | double | |||||||
BigDecimal | BigDecimal |
Groovy中的Boolean
类型和Java一样,没什么特别的。
> def b1 = true
> boolean b2 = false
> b3 = true
> println(b1)
> println(b2)
> println(b3)
true
false
true
条件判断
> def refundMoney = 1000
> def amount = 100
> if (refundMoney < 100) {
> if (amount > 10) {
> println("1")
> }
> } else if (refundMoney > 100 && refundMoney <= 500) {
> if (amount >= 50) {
> println("2")
> } else {
> println("3")
> }
> } else if (refundMoney > 500 && refundMoney <= 1000) {
> if (amount >= 200) {
> println("4")
> } else {
> println("5")
> }
> } else if (refundMoney > 1000) {
> if (amount >= 300) {
> println("6")
> } else {
> println("7")
> }
> }
5
Groovy中switch
的使用方式比Java要灵活一些,它的case
可以指定多种不同的类型。
> def condition = 3.14
> switch (condition) {
> case "string":
> println("满足第一个条件")
> break
// 在列表中
> case [8, 9, 10, 11]:
> println("满足第二个条件")
> break
// 在范围中
> case 8..20:
> println("满足第三个条件")
> break
> case Integer:
> println("满足第四个条件")
> break
> case BigDecimal:
> println("满足第五个条件")
> break
> default:
> println("满足第六个条件")
> break
> }
满足第五个条件
循环语句
Groovy中的for
循环有下面几种使用方式。
// 最简单的方式
> for (def i = 1; i < 10; i++) {
> print(i + "\t")
> }
1 2 3 4 5 6 7 8 9
// 输出1到5
> for (i in 1..5) {
> print(i + "\t")
> }
1 2 3 4 5
// 输出1到4
> for (i in 1..<5) {
> print(i + "\t")
> }
1 2 3 4
// 输出2到4
> for (i in 1<..<5) {
> print(i + "\t")
> }
2 3 4
// 遍历列表
> for (i in [1, 2, 3, 4, 5]) {
> print(i + "\t")
> }
1 2 3 4 5
> for (String str : ["a", "b", "c", "d", "e"]) {
> print(str + "\t")
> }
a b c d e
> def map = ["a": 1, "b": 2, "c": 3]
// 遍历map
> for (i in map) {
> print(i.key + "->" + i.value + "\t")
> }
a->1 b->2 c->3
> def num = 10;
> while (num > 0) {
> print(num + "\t")
> num--
> }
10 9 8 7 6 5 4 3 2 1
感谢支持
更多内容,请移步《超级个体》。