Merge pull request #11 from ahassany/links_status
Add reading Mininet links status to the driver
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 8ce53c8..a003f1b 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -676,8 +676,11 @@
else:
main.log.error("Connection failed to the Mininet host")
- def check_flows(self, sw):
- command = "sh ovs-ofctl dump-flows "+str(sw)
+ def check_flows(self, sw, dump_format=None):
+ if dump_format:
+ command = "sh ovs-ofctl -F " + dump_format + " dump-flows " + str(sw)
+ else:
+ command = "sh ovs-ofctl dump-flows "+str(sw)
try:
response=self.execute(cmd=command,prompt="mininet>",timeout=10)
return response
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index db01cc2..7878378 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -1195,7 +1195,7 @@
self.handle.sendline("git pull " + comp1)
uptodate = 0
- i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','\sfile(s*) changed,\s',pexpect.TIMEOUT,'Already up-to-date','Aborting','You\sare\snot\scurrently\son\sa\sbranch'],timeout=1700)
+ i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','\sfile(s*) changed,\s',pexpect.TIMEOUT,'Already up-to-date','Aborting','You\sare\snot\scurrently\son\sa\sbranch', 'You\sasked\sme\sto\spull\swithout\stelling\sme\swhich\sbranch\syou'],timeout=1700)
#debug
#main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
if i==0:
@@ -1221,6 +1221,9 @@
elif i==6:
main.log.info(self.name + ": Git Pull - You are not currently on a branch so git pull failed!")
return main.ERROR
+ elif i==7:
+ main.log.info(self.name + ": Git Pull - You have not configured an upstream branch to pull from. Git pull failed!")
+ return main.ERROR
else:
main.log.error(self.name + ": Git Pull - Unexpected response, check for pull errors")
return main.ERROR
@@ -1471,14 +1474,11 @@
return (retcode, "Rest API has an error", retport)
else:
for host in enumerate(parsedResult):
- print host
if (host[1] != []):
try:
foundHost = host[1]['mac']
except:
print "Error in detecting MAC address."
- print foundHost
- print hostMAC
if foundHost == hostMAC:
for switch in enumerate(host[1]['attachmentPoints']):
retswitch.append(switch[1]['dpid'])
@@ -1569,3 +1569,84 @@
main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
main.cleanup()
main.exit()
+
+
+ def block_peer(self, ip_address):
+ '''
+ Block traffic to the destination IP address.
+ '''
+ try:
+ for chain in ['INPUT', 'OUTPUT']:
+ check_block_cmd = "sudo iptables -L %s -n | grep \"DROP.*%s\"" % (chain, ip_address)
+ add_block_cmd = "sudo iptables -I %s 1 -s %s -j DROP" % (chain, ip_address)
+ response1 = self.execute(cmd=check_block_cmd,prompt="\$",timeout=10)
+ if ip_address in response1:
+ main.log.error("Already blocked: %s" % response1)
+ return main.TRUE
+ response2 = self.execute(cmd=add_block_cmd,prompt="\$",timeout=10)
+ main.log.info("add_block_cmd: %s" % response2)
+ return main.TRUE
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+ def unblock_peer(self, ip_address):
+ '''
+ Unblock traffic to the destination IP address.
+ '''
+ try:
+ for chain in ['INPUT', 'OUTPUT']:
+ # To make sure all rules are deleted in case there were multiple
+ # installed in the iptables
+ max_iterations = 10
+ for i in range(max_iterations):
+ check_block_cmd = "sudo iptables -L %s -n | grep \"DROP.*%s\"" % (chain, ip_address)
+ remove_block_cmd = "sudo iptables -D %s -s %s -j DROP" % (chain, ip_address)
+ response1 = self.execute(cmd=check_block_cmd,prompt="\$",timeout=10)
+ if ip_address not in response1:
+ main.log.warn("Already unblocked: %s" % response1)
+ return main.TRUE
+ response2 = self.execute(cmd=remove_block_cmd,prompt="\$",timeout=10)
+ main.log.info("remove_block_cmd: %s" % response2)
+ return main.TRUE
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+
+ def unblock_all(self):
+ '''
+ Remove all controller block rules
+ '''
+ try:
+ unblock_cmd = "sudo iptables --flush"
+ response = self.execute(cmd=unblock_cmd,prompt="\$", timeout=10)
+ return main.TRUE
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+ return main.ERROR
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
index 4d83c41..4ac9aea 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
@@ -1,5 +1,5 @@
<PARAMS>
- <testcases>1,2,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,9,8,9,21,9,61,9,71,9,3,9,4,9,5,9,6,9,7,3,4,5,6,7</testcases>
+ <testcases>1,2,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,9,8,9,3,9,4,9,5,9,6,9,7,3,4,5,6,7</testcases>
<pingSleep>1</pingSleep>
<pingAttempts>60</pingAttempts>
<CASE1>
@@ -18,14 +18,23 @@
<CTRL>
<ip1>10.128.5.1</ip1>
<port1>6633</port1>
+ <restPort1>8080</restPort1>
<ip2>10.128.5.2</ip2>
<port2>6633</port2>
+ <restPort2>8080</restPort2>
<ip3>10.128.5.3</ip3>
<port3>6633</port3>
+ <restPort3>8080</restPort3>
<ip4>10.128.5.4</ip4>
<port4>6633</port4>
+ <restPort4>8080</restPort4>
</CTRL>
<RestIP> 10.128.5.1 </RestIP>
+ <INTENTS>
+ <intentPort>8080</intentPort>
+ <intentURL>wm/onos/intent</intentURL>
+ </INTENTS>
+ <TopoRest>/wm/onos/topology</TopoRest>
<NR_Switches>25</NR_Switches>
<NR_Links>50</NR_Links>
<YANK>
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
index 3543b65..fdc5f57 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
@@ -9,10 +9,10 @@
#Tests the startup of Zookeeper1, RamCloud1, and ONOS1 to be certain that all started up successfully
def CASE1(self,main) : #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
import time
- main.ONOS1.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
- main.ONOS2.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
- main.ONOS3.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
- main.ONOS4.handle.sendline("cp ~/onos.properties.reactive ~/ONOS/conf/onos.properties")
+ main.ONOS1.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
+ main.ONOS2.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
+ main.ONOS3.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
+ main.ONOS4.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
main.ONOS1.stop_all()
main.ONOS2.stop_all()
@@ -187,21 +187,68 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
+
main.case("Taking care of these flows!")
main.step("Cleaning out any leftover flows...")
+ intentIP = main.params['CTRL']['ip1']
+ intentPort=main.params['INTENTS']['intentPort']
+ intentURL=main.params['INTENTS']['intentURL']
#main.ONOS1.delete_flow("all")
- main.ONOS1.rm_intents()
+ main.ONOS1.del_intent(intentIP=intentIP)
time.sleep(5)
- main.ONOS1.purge_intents()
strtTime = time.time()
- main.ONOS1.add_intents()
- main.case("Checking flows with pings")
+ main.step("Adding Intents")
+ count=1
+ for i in range(6,16):
+ srcMac = '00:00:00:00:00:' + str(hex(i)[2:]).zfill(2)
+ dstMac = '00:00:00:00:00:'+str(hex(i+10)[2:])
+ srcDPID = '00:00:00:00:00:00:10:'+str(i).zfill(2)
+ dstDPID= '00:00:00:00:00:00:20:' +str(i+25)
+ main.ONOS1.add_intent(intent_id=str(count),src_dpid=srcDPID,dst_dpid=dstDPID,
+ src_mac=srcMac,dst_mac=dstMac,intentIP=intentIP,intentPort=intentPort,
+ intentURL=intentURL)
+ count=count +1
+ dstDPID = '00:00:00:00:00:00:10:'+str(i).zfill(2)
+ srcDPID= '00:00:00:00:00:00:20:' +str(i+25)
+ dstMac = '00:00:00:00:00:' + str(hex(i)[2:]).zfill(2)
+ srcMac = '00:00:00:00:00:'+str(hex(i+10)[2:])
+ main.ONOS1.add_intent(intent_id=str(count),src_dpid=srcDPID,dst_dpid=dstDPID,
+ src_mac=srcMac,dst_mac=dstMac,intentIP=intentIP,intentPort=intentPort,
+ intentURL=intentURL)
+ count=count +1
+ main.step("Checking flows with pings")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
+
count = 1
i = 6
while i < 16 :
@@ -277,6 +324,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -338,6 +410,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -395,6 +492,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -452,6 +574,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -509,6 +656,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -573,6 +745,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -632,6 +829,31 @@
main.ONOS3.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
main.ONOS4.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
break
+ ####New Topo Check
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ global MNTopo
+ MNTopo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+
+
+ topo_result = main.TRUE
+ for n in range(1,5):
+ temp_result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+ topo_result = topo_result and temp_result
+ print "Topoology check results: " + str(topo_result)
+ ###End New Topo Check
utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
@@ -753,7 +975,7 @@
url = main.params['RESTCALL']['restURL']
t_topowait = 5
- t_restwait = 0
+ t_restwait = 5
main.log.report( "Wait time from topo change to ping set to " + str(t_topowait))
main.log.report( "Wait time from ping to rest call set to " + str(t_restwait))
#print "host=" + host + "; RestIP=" + RestIP1 + "; RestPort=" + str(RestPort)
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
index a9c85ed..d97e541 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
@@ -130,7 +130,7 @@
<COMPONENTS>
# Specify the Option for mininet
<arg1> --custom ~/mininet/custom/topo-onos4node.py </arg1>
- <arg2> --topo mytopo </arg2>
+ <arg2> --topo mytopo --arp</arg2>
<controller> remote </controller>
</COMPONENTS>
</Mininet1>
diff --git a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
index b5d7628..dc9aed2 100644
--- a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
+++ b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
@@ -1,5 +1,5 @@
<PARAMS>
- <testcases>1,31,4,41,5,51,6,61,7,71,103,100,8,61,9,51,10,41,11,31,104,101</testcases>
+ <testcases>1,31,33,4,41,43,5,51,53,6,61,63,7,71,73,103,105,8,61,63,9,51,53,10,41,43,11,31,33,104,106</testcases>
<tcpdump>
<intf>eth0</intf>
<port>port 6633</port>
@@ -68,18 +68,25 @@
<restPort>8080</restPort>
<restURL>/wm/onos/topology/hosts</restURL>
</RESTCALL>
+ <url1>http://10.128.10.1:8080/wm/onos/metrics</url1>
+ <url2>http://10.128.10.2:8080/wm/onos/metrics</url2>
+ <url3>http://10.128.10.3:8080/wm/onos/metrics</url3>
+ <url4>http://10.128.10.4:8080/wm/onos/metrics</url4>
+ <url5>http://10.128.10.5:8080/wm/onos/metrics</url5>
+ <url6>http://10.128.10.6:8080/wm/onos/metrics</url6>
+ <url7>http://10.128.10.7:8080/wm/onos/metrics</url7>
<switches_num>30</switches_num>
<RATE1>100</RATE1>
- <RUN_DUR>240</RUN_DUR>
- <sleep_t>8</sleep_t>
+ <RUN_DUR>600</RUN_DUR>
+ <sleep_t>6</sleep_t>
<loop>10</loop>
<port>10</port>
- <sleep_init>160</sleep_init>
- <int_num>1000</int_num>
- <addrate>1000</addrate>
- <NBdur>60</NBdur>
- <NBsleep>10</NBsleep>
- <NBloop>6</NBloop>
- <NBsleep_init>10</NBsleep_init>
+ <sleep_init>540</sleep_init>
+ <int_num>40</int_num>
+ <addrate>1</addrate>
+ <NBdur>100</NBdur>
+ <NBsleep>5</NBsleep>
+ <NBloop>7</NBloop>
+ <NBsleep_init>60</NBsleep_init>
<db_script>/home/admin/TestON/scripts/./scaleoutdatagraph.py</db_script>
</PARAMS>
diff --git a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
index 2dbe03c..ba21e61 100644
--- a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
+++ b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
@@ -13,6 +13,7 @@
#Tests the startup of Zookeeper1, RamCloud1, and ONOS1 to be certain that all started up successfully
def CASE1(self,main) : #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
main.case("Initial setup")
+ main.log.report("Starting 3-node ONOS cluster.")
main.step("Stop ONOS")
import time
main.log.info("Stopping all ONOS nodes...")
@@ -43,7 +44,7 @@
time.sleep(5)
-
+ """
main.RamCloud1.del_db()
main.RamCloud2.del_db()
main.RamCloud3.del_db()
@@ -52,7 +53,7 @@
time.sleep(5)
#main.log.report("Pulling latest code from github to all nodes")
- """
+
for i in range(2):
uptodate = main.ONOS1.git_pull()
main.ONOS2.git_pull()
@@ -86,7 +87,7 @@
# main.ONOS3.start_all()
# main.ONOS4.start_all()
- """
+
main.RamCloud1.start_coor()
main.RamCloud1.start_serv()
main.RamCloud2.start_serv()
@@ -97,10 +98,10 @@
main.ONOS3.start()
#main.ONOS4.start()
time.sleep(5)
-
- #main.ONOS1.handle.sendline("./onos.sh core start")
- #main.ONOS1.handle.sendline("./onos.sh core start")
- #main.ONOS1.handle.sendline("./onos.sh core start")
+ """
+ main.ONOS1.handle.sendline("./onos.sh core start")
+ main.ONOS2.handle.sendline("./onos.sh core start")
+ main.ONOS3.handle.sendline("./onos.sh core start")
main.ONOS1.start_rest()
main.ONOS2.start_rest()
@@ -109,11 +110,11 @@
if test == main.FALSE:
main.ONOS1.start_rest()
main.ONOS1.get_version()
- main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
+ main.log.report("Startup check Zookeeper, and ONOS connections")
main.step("Testing startup Zookeeper")
data = main.Zookeeper1.isup() and main.Zookeeper2.isup() and main.Zookeeper3.isup()
utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
-
+ """
main.step("Testing startup RamCloud")
data = main.RamCloud1.status_serv() and main.RamCloud2.status_serv() and main.RamCloud3.status_serv() #and main.RamCloud4.status_serv()
if data == main.FALSE:
@@ -135,7 +136,7 @@
utilities.assert_equals(expect=main.TRUE,actual=data,onpass="RamCloud is up!",onfail="RamCloud is down...")
-
+ """
main.step("Testing startup ONOS")
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() #and main.ONOS4.isup()
for i in range(3):
@@ -153,6 +154,7 @@
def CASE31(self,main):
+ main.log.report("SB Throughput test: loading ONOS cluster with 740 Topo Events/s")
main.case("Staring SB load with 3 ONOS nodes")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
@@ -175,9 +177,9 @@
import math
time.sleep(sleep_init)
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1", "a")
#time.sleep(10)
tpval = 0.0
@@ -227,124 +229,50 @@
print("\n")
tpavg3n = round(tpval)/loop
print tpavg3n
+ main.log.report("Topology Event Throughput for 3-node ONOS cluster = " +str(tpavg3n) + " Events/sec")
main.Mininet2.handle.expect("\$", timeout=900)
- # main.Mininet2.handle.sendline("sudo mn -c")
- #main.Mininet2.handle.expect("\$")
- # main.Mininet2.handle.expect("\$", timeout=900)
time.sleep(180)
-
- def CASE32(self,main):
- ip1 = main.params['CTRL']['ip1']
- ip2 = main.params['CTRL']['ip2']
- ip3 = main.params['CTRL']['ip3']
- import time
- rate2 = main.params['RATE2']
- run_dur = main.params['RUN_DUR']
- loop = int(main.params['loop'])
- sleep_init = int(main.params['sleep_init'])
- sleep_t = int(main.params['sleep_t'])
- port = main.params['port']
- switches_num = main.params['switches_num']
- main.case("Starting SB load on 3 nodes from mininet with " + rate2 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur + " \"11\"")
- main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"10.128.10.1\" 100 50 1200 \"11\"")
- main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
- time.sleep(sleep_init )
- import json
- time.sleep(sleep_init)
- open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate2", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate2", "a")
- for i in range(int (loop)):
- j1 = main.ONOS1.get_json(url1)
- j2 = main.ONOS1.get_json(url2)
- j3 = main.ONOS1.get_json(url3)
- json_str = []
- json_str.append(0)
- json_str.append(j1)
- json_str.append(j2)
- json_str.append(j3)
- if json_str[1] != "" and json_str[2] != "" and json_str[3] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
- for j in range(1,4):
- f.write("ONOS" + str(j) + "\n")
- f.write(str(json_str[j]["meters"][4]['meter']['count']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
- f.write('\n')
-
- f.write('\n')
- f.write('\n')
-
- f.write("--------------------------------------------------------------------------------- \n")
- time.sleep(sleep_t)
- f.close()
- #time.sleep(10)
- main.Mininet2.handle.expect("\$", timeout=900)
- time.sleep(180)
- # main.Mininet2.handle.sendline("sudo mn -c")
- #time.sleep(5)
- # main.Mininet2.handle.expect("\$", timeout=900)
-
-
def CASE33(self,main):
- main.case("Starting NB Throughput test")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
import time
import json
- int_num = main.params['int_num']
+ int_num = int(main.params['int_num'])
addrate = main.params['addrate']
NBdur = main.params['NBdur']
NBsleep = int(main.params['NBsleep'])
NBsleep_init = int(main.params['NBsleep_init'])
NBloop = int(main.params['NBloop'])
-
+ int_r = 3 * int_num
+ main.log.report("Starting NB Throughput test: loading 3-node ONOS cluster with " + str(int_num) + " Intents/s on each node" )
main.Mininet4.handle.expect("\$")
- #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
- #main.Mininet2.handle.expect("mininet>" , timeout=400)
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.3:6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:" + ip3 + ":6633")
main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
main.ONOS3.handle.expect("\$")
- main.ONOS3.handle.sendline("./loadgen_NB.py -n 3 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+ main.ONOS3.handle.sendline("./loadgen_NB.py -n 3 -u \"" + ip1 + ":8080 " + ip2 + ":8080 " + ip3 + ":8080 \" -i " + str(int_r) + " -a " + addrate + " -l " + NBdur + " -p 20")
main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
time.sleep(NBsleep_init)
- #time.sleep(60)
import json
nbtpval = 0.0
global nbtpavg3n
nbtpavg3n = 0.0
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale3nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale3nodesrate1", "a")
- #time.sleep(10)
for i in range(NBloop):
j1 = main.ONOS1.get_json(url1)
j2 = main.ONOS1.get_json(url2)
@@ -385,22 +313,23 @@
f.write('\n')
f.write('\n')
f.write('\n')
- if j == 3:
- nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
+ nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
f.write("--------------------------------------------------------------------------------- \n")
f.write("--------------------------------------------------------------------------------- \n \n")
time.sleep(NBsleep)
f.close()
print("\n")
- nbtpavg3n = round(nbtpval)/NBloop
+ nbtpavg3n = round(round(nbtpval)/NBloop,2)
print nbtpavg3n
main.ONOS3.handle.expect("\$", timeout=900)
- time.sleep(180)
+ #time.sleep(180)
+ main.log.report("Intent Throughput for 3-node ONOS cluster = " + str(nbtpavg3n) + " Intents/sec")
def CASE4(self,main):
+ main.log.report("Scale-up ONOS to 4-nodes ")
main.case("Starting ONOS scale-up to 4 nodes ")
import time
# main.RamCloud4.start_serv()
@@ -411,129 +340,112 @@
main.Zookeeper4.start()
time.sleep(5)
-
+ """
main.RamCloud4.del_db()
time.sleep(3)
main.RamCloud4.start_serv()
time.sleep(3)
+ """
main.ONOS4.start()
main.ONOS4.start_rest()
time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale up successful - 4-node ONOS cluster is up and running!",onfail="ONOS didn't start...")
time.sleep(10)
def CASE5(self,main):
-
+ main.log.report("Scale-up ONOS to 5-nodes")
main.case("Starting ONOS scale-up/down to 5 nodes ")
import time
- # main.RamCloud4.start_serv()
main.ONOS6.handle.sendline("./onos.sh core stop")
main.ONOS7.handle.sendline("./onos.sh core stop")
- #pdata = main.ONOS5.isup()
main.Zookeeper5.start()
time.sleep(5)
-
+ """
main.RamCloud5.del_db()
time.sleep(3)
main.RamCloud5.start_serv()
time.sleep(3)
+ """
main.ONOS5.start()
main.ONOS5.start_rest()
time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale up successful - 5-node ONOS cluster is up and running!",onfail="ONOS didn't start...")
time.sleep(10)
def CASE6(self,main):
-
+ main.log.report("Scale-up ONOS to 6-nodes")
main.case("Starting ONOS scale-up/down to 6 nodes ")
import time
- # main.RamCloud4.start_serv()
main.ONOS7.handle.sendline("./onos.sh core stop")
- #pdata = main.ONOS6.isup()
main.Zookeeper6.start()
time.sleep(5)
-
+ """
main.RamCloud6.del_db()
time.sleep(3)
main.RamCloud6.start_serv()
time.sleep(3)
+ """
main.ONOS6.start()
main.ONOS6.start_rest()
time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale up successful - 6-node ONOS cluster is up and running!",onfail="ONOS didn't start...")
time.sleep(10)
def CASE7(self,main):
-
+ main.log.report("Scale-up ONOS to 7-nodes")
main.case("Starting ONOS scale-up/down to 7 nodes ")
import time
- # main.RamCloud4.start_serv()
- #pdata = main.ONOS7.isup()
main.Zookeeper7.start()
time.sleep(5)
-
+ """
main.RamCloud7.del_db()
time.sleep(3)
main.RamCloud7.start_serv()
time.sleep(3)
+ """
main.ONOS7.start()
main.ONOS7.start_rest()
time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale up successful - 7-node ONOS cluster is up and running!",onfail="ONOS didn't start...")
time.sleep(10)
def CASE41(self,main):
main.case("Starting SB test for 4 nodes")
+ main.log.report("SB Throughput test: loading 4-node ONOS cluster with 740 Topo Events/s")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
@@ -547,7 +459,6 @@
sleep_init = int(main.params['sleep_init'])
sleep_t =int( main.params['sleep_t'])
main.case("Starting SB load on 4 nodes from mininet with " + rate1 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur + " \"11\"")
main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
main.Mininet2.handle.expect("Starting SB load....", timeout=900)
import time
@@ -555,16 +466,15 @@
import math
time.sleep(sleep_init)
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
tpval = 0.0
global tpavg4n
tpavg4n = 0.0
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate1", "a")
- #time.sleep(10)
for i in range(int (loop)):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -577,11 +487,6 @@
json_str.append(j3)
json_str.append(j4)
if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
for j in range(1,5):
f.write("ONOS" + str(j) + "\n")
f.write(str(json_str[j]["meters"][4]['meter']['count']))
@@ -594,9 +499,8 @@
f.write('\t')
f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
f.write('\n')
- if j == 3:
+ if j == 4:
tpval += float(json_str[j]["meters"][4]['meter']['m1_rate'])
- # print tpval
f.write('\n')
f.write('\n')
@@ -604,85 +508,16 @@
f.write("--------------------------------------------------------------------------------- \n")
time.sleep(sleep_t)
f.close()
- # print tpval
print("\n")
tpavg4n = round(tpval)/loop
print tpavg4n
+ main.log.report("Topology Event Throughput for 4-node ONOS cluster = " + str(tpavg4n) + " Events/sec")
- #main.Mininet2.handle.expect("\$", timeout=900)
- #main.Mininet2.handle.sendline("sudo mn -c")
- #main.Mininet2.handle.expect("\$")
time.sleep(5)
main.Mininet2.handle.expect("\$", timeout=900)
time.sleep(180)
- def CASE42(self,main):
-
- ip1 = main.params['CTRL']['ip1']
- ip2 = main.params['CTRL']['ip2']
- ip3 = main.params['CTRL']['ip3']
- ip4 = main.params['CTRL']['ip4']
-
- import time
- import json
- rate2 = main.params['RATE2']
- run_dur = main.params['RUN_DUR']
- loop = int(main.params['loop'])
- sleep_init = int(main.params['sleep_init'])
- sleep_t = int(main.params['sleep_t'])
- switches_num = main.params['switches_num']
- port = main.params['port']
- main.case("Starting SB load on 4 nodes from mininet with " + rate2 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur + " \"11\"")
- main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
- main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
- time.sleep(sleep_init)
- open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate2", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate2", "a")
- #time.sleep(10)
- for i in range(int (loop)):
- j1 = main.ONOS2.get_json(url1)
- j2 = main.ONOS2.get_json(url2)
- j3 = main.ONOS2.get_json(url3)
- j4 = main.ONOS2.get_json(url4)
- json_str = []
- json_str.append(0)
- json_str.append(j1)
- json_str.append(j2)
- json_str.append(j3)
- json_str.append(j4)
- if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
- for j in range(1,5):
- f.write("ONOS" + str(j) + "\n")
- f.write(str(json_str[j]["meters"][4]['meter']['count']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
- f.write('\n')
-
- f.write('\n')
- f.write('\n')
-
- f.write("--------------------------------------------------------------------------------- \n")
- time.sleep(sleep_t)
- f.close()
- time.sleep(180)
-
def CASE43(self,main):
main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
@@ -693,31 +528,30 @@
import time
import json
- int_num = main.params['int_num']
+ int_num = int(main.params['int_num'])
addrate = main.params['addrate']
NBdur = main.params['NBdur']
NBsleep = int(main.params['NBsleep'])
NBsleep_init = int(main.params['NBsleep_init'])
NBloop = int(main.params['NBloop'])
nbtpval = 0.0
+ main.log.report("Starting NB Throughput test: loading 4-node ONOS cluster with " +str(int_num) + " Intents/s on each node" )
global nbtpavg4n
nbtpavg4n = 0.0
-
+ int_r = 4 * int_num
main.Mininet4.handle.expect("\$")
- #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
- #main.Mininet2.handle.expect("mininet>" , timeout=400)
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.4:6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:" + ip4 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:" + ip4 + ":6633")
main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
main.ONOS3.handle.expect("\$")
- main.ONOS3.handle.sendline("./loadgen_NB.py -n 4 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+ main.ONOS3.handle.sendline("./loadgen_NB.py -n 4 -u \"" + ip1 + ":8080 " + ip2 + ":8080 " + ip3 + ":8080 " + ip4 + ":8080 \" -i " + str(int_r) + " -a " + addrate + " -l " + NBdur + " -p 20")
main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
@@ -725,12 +559,11 @@
import json
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale4nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale4nodesrate1", "a")
- #time.sleep(10)
for i in range(NBloop):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -773,23 +606,25 @@
f.write('\n')
f.write('\n')
f.write('\n')
- if j == 3:
- nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
+
+ nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
f.write("--------------------------------------------------------------------------------- \n")
f.write("--------------------------------------------------------------------------------- \n \n")
time.sleep(NBsleep)
f.close()
print("\n")
- nbtpavg4n = round(nbtpval)/NBloop
+ nbtpavg4n = round(round(nbtpval)/NBloop,2)
print nbtpavg4n
main.ONOS3.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Intent Throughput for 4-node ONOS cluster = " + str(nbtpavg4n) + " Intents/sec")
def CASE51(self,main):
main.case("Starting SB test for 5 nodes")
+ main.log.report("SB Throughput test: loading 5-node ONOS cluster with 740 Topo Events/s")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
@@ -804,7 +639,6 @@
sleep_init = int(main.params['sleep_init'])
sleep_t =int( main.params['sleep_t'])
main.case("Starting SB load on 5 nodes from mininet with " + rate1 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur + " \"11\"")
main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
main.Mininet2.handle.expect("Starting SB load....", timeout=900)
import time
@@ -815,14 +649,12 @@
time.sleep(sleep_init)
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
-
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate1", "a")
- #time.sleep(10)
for i in range(int (loop)):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -837,11 +669,6 @@
json_str.append(j4)
json_str.append(j5)
if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
for j in range(1,6):
f.write("ONOS" + str(j) + "\n")
f.write(str(json_str[j]["meters"][4]['meter']['count']))
@@ -854,9 +681,8 @@
f.write('\t')
f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
f.write('\n')
- if j == 3:
+ if j == 4:
tpval += float(json_str[j]["meters"][4]['meter']['m1_rate'])
- #print tpval
f.write('\n')
f.write('\n')
@@ -864,89 +690,16 @@
f.write("--------------------------------------------------------------------------------- \n")
time.sleep(sleep_t)
f.close()
- #print tpval
print("\n")
tpavg5n = round(tpval)/loop
print tpavg5n
- #main.Mininet2.handle.expect("\$", timeout=900)
- #main.Mininet2.handle.sendline("sudo mn -c")
- #main.Mininet2.handle.expect("\$")
time.sleep(5)
main.Mininet2.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Topology Event Throughput for 5-node ONOS cluster = " + str(tpavg5n) + " Events/sec")
- def CASE52(self,main):
-
- ip1 = main.params['CTRL']['ip1']
- ip2 = main.params['CTRL']['ip2']
- ip3 = main.params['CTRL']['ip3']
- ip4 = main.params['CTRL']['ip4']
- ip5 = main.params['CTRL']['ip5']
-
- import time
- import json
- rate2 = main.params['RATE2']
- run_dur = main.params['RUN_DUR']
- loop = int(main.params['loop'])
- sleep_t = int(main.params['sleep_t'])
- sleep_init = int(main.params['sleep_init'])
- switches_num = main.params['switches_num']
- port = main.params['port']
- main.case("Starting SB load on 4 nodes from mininet with " + rate2 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur + " \"11\"")
- main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
- main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
- time.sleep(sleep_init)
- open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate2", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate2", "a")
- #time.sleep(10)
- for i in range(int (loop)):
- j1 = main.ONOS2.get_json(url1)
- j2 = main.ONOS2.get_json(url2)
- j3 = main.ONOS2.get_json(url3)
- j4 = main.ONOS2.get_json(url4)
- j5 = main.ONOS2.get_json(url5)
- json_str = []
- json_str.append(0)
- json_str.append(j1)
- json_str.append(j2)
- json_str.append(j3)
- json_str.append(j4)
- json_str.append(j5)
- if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[4] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
- for j in range(1,6):
- f.write("ONOS" + str(j) + "\n")
- f.write(str(json_str[j]["meters"][4]['meter']['count']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
- f.write('\n')
-
- f.write('\n')
- f.write('\n')
-
- f.write("--------------------------------------------------------------------------------- \n")
- time.sleep(sleep_t)
- f.close()
- time.sleep(180)
-
def CASE53(self,main):
main.case("Starting NB Throughput test after scaling up to 5 onos nodes")
@@ -954,34 +707,34 @@
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
ip4 = main.params['CTRL']['ip4']
+ ip5 = main.params['CTRL']['ip5']
import time
import json
- int_num = main.params['int_num']
+ int_num = int(main.params['int_num'])
addrate = main.params['addrate']
NBdur = main.params['NBdur']
NBsleep = int(main.params['NBsleep'])
NBsleep_init = int(main.params['NBsleep_init'])
NBloop = int(main.params['NBloop'])
nbtpval = 0.0
+ main.log.report("Starting NB Throughput test: loading 5-node ONOS cluster with " + str(int_num) + " Intents/s on each node" )
global nbtpavg5n
nbtpavg5n = 0.0
-
+ int_r = 5 * int_num
main.Mininet4.handle.expect("\$")
- #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
- #main.Mininet2.handle.expect("mininet>" , timeout=400)
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.5:6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:" + ip4 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:" + ip5 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:" + ip5 + ":6633")
main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
main.ONOS3.handle.expect("\$")
- main.ONOS3.handle.sendline("./loadgen_NB.py -n 5 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.5:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+ main.ONOS3.handle.sendline("./loadgen_NB.py -n 5 -u \"" + ip1 + ":8080 " + ip2 + ":8080 " + ip3 + ":8080 " + ip4 + ":8080 " + ip5 + ":8080 \" -i " + str(int_r) + " -a " + addrate + " -l " + NBdur + " -p 20")
main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
@@ -989,13 +742,12 @@
import json
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale5nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale5nodesrate1", "a")
- #time.sleep(10)
for i in range(NBloop):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -1040,8 +792,8 @@
f.write('\n')
f.write('\n')
f.write('\n')
- if j == 3:
- nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
+
+ nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
f.write("--------------------------------------------------------------------------------- \n")
@@ -1049,16 +801,18 @@
time.sleep(NBsleep)
f.close()
print("\n")
- nbtpavg5n = round(nbtpval)/NBloop
+ nbtpavg5n = round(round(nbtpval)/NBloop,2)
print nbtpavg5n
main.ONOS3.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Intent Throughput for 5-node ONOS cluster = " + str(nbtpavg5n) + " Intents/sec")
def CASE61(self,main):
main.case("Starting SB test for 5 nodes")
ip1 = main.params['CTRL']['ip1']
+ main.log.report("SB Throughput test: loading 6-node ONOS cluster with 740 Topo Events/s")
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
ip4 = main.params['CTRL']['ip4']
@@ -1073,7 +827,6 @@
sleep_t =int( main.params['sleep_t'])
sleep_init = int(main.params['sleep_init'])
main.case("Starting SB load on 6 nodes from mininet with " + rate1 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur + " \"11\"")
main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
main.Mininet2.handle.expect("Starting SB load....", timeout=900)
@@ -1084,16 +837,13 @@
tpavg6n = 0.0
time.sleep(sleep_init)
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
-
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
+ url6 = main.params['url6']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate1", "a")
- #time.sleep(10)
for i in range(int (loop)):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -1110,11 +860,6 @@
json_str.append(j5)
json_str.append(j6)
if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
for j in range(1,7):
f.write("ONOS" + str(j) + "\n")
f.write(str(json_str[j]["meters"][4]['meter']['count']))
@@ -1127,9 +872,8 @@
f.write('\t')
f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
f.write('\n')
- if j == 3:
+ if j == 4:
tpval += float(json_str[j]["meters"][4]['meter']['m1_rate'])
- #print tpval
f.write('\n')
f.write('\n')
@@ -1137,93 +881,16 @@
f.write("--------------------------------------------------------------------------------- \n")
time.sleep(sleep_t)
f.close()
- #print tpval
print("\n")
tpavg6n = round(tpval)/loop
print tpavg6n
- #main.Mininet2.handle.expect("\$", timeout=900)
- #main.Mininet2.handle.sendline("sudo mn -c")
- #main.Mininet2.handle.expect("\$")
time.sleep(5)
main.Mininet2.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Topology Event Throughput for 6-node ONOS cluster = " + str(tpavg6n) + " Events/sec")
- def CASE62(self,main):
-
- ip1 = main.params['CTRL']['ip1']
- ip2 = main.params['CTRL']['ip2']
- ip3 = main.params['CTRL']['ip3']
- ip4 = main.params['CTRL']['ip4']
- ip5 = main.params['CTRL']['ip5']
- ip6 = main.params['CTRL']['ip6']
-
- import time
- import json
- rate2 = main.params['RATE2']
- run_dur = main.params['RUN_DUR']
- loop = int(main.params['loop'])
- sleep_t = int(main.params['sleep_t'])
- switches_num = main.params['switches_num']
- sleep_init = int(main.params['sleep_init'])
- port = main.params['port']
- main.case("Starting SB load on 4 nodes from mininet with " + rate2 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur + " \"11\"")
- main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
- main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
- time.sleep(sleep_init)
- open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
- f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", "a")
- #time.sleep(10)
- for i in range(int (loop)):
- j1 = main.ONOS2.get_json(url1)
- j2 = main.ONOS2.get_json(url2)
- j3 = main.ONOS2.get_json(url3)
- j4 = main.ONOS2.get_json(url4)
- j5 = main.ONOS2.get_json(url5)
- j6 = main.ONOS2.get_json(url6)
- json_str = []
- json_str.append(0)
- json_str.append(j1)
- json_str.append(j2)
- json_str.append(j3)
- json_str.append(j4)
- json_str.append(j5)
- json_str.append(j6)
- if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
- for j in range(1,7):
- f.write("ONOS" + str(j) + "\n")
- f.write(str(json_str[j]["meters"][4]['meter']['count']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
- f.write('\n')
-
- f.write('\n')
- f.write('\n')
-
- f.write("--------------------------------------------------------------------------------- \n")
- time.sleep(sleep_t)
- f.close()
- time.sleep(180)
-
def CASE63(self,main):
main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
@@ -1231,34 +898,35 @@
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
ip4 = main.params['CTRL']['ip4']
+ ip5 = main.params['CTRL']['ip5']
+ ip6 = main.params['CTRL']['ip6']
import time
import json
- int_num = main.params['int_num']
+ int_num = int(main.params['int_num'])
addrate = main.params['addrate']
NBdur = main.params['NBdur']
NBsleep = int(main.params['NBsleep'])
NBsleep_init = int(main.params['NBsleep_init'])
NBloop = int(main.params['NBloop'])
nbtpval = 0.0
+ main.log.report("Starting NB Throughput test: loading 6-node ONOS cluster with " + str(int_num) + " Intents/s" )
global nbtpavg6n
nbtpavg6n = 0.0
-
+ int_r = 6 * int_num
main.Mininet4.handle.expect("\$")
- #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
- #main.Mininet2.handle.expect("mininet>" , timeout=400)
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.6:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.6:6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:" + ip4 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:" + ip5 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:" + ip6 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:" + ip6 + ":6633")
main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
main.ONOS3.handle.expect("\$")
- main.ONOS3.handle.sendline("./loadgen_NB.py -n 6 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.5:8080 10.128.10.6:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+ main.ONOS3.handle.sendline("./loadgen_NB.py -n 6 -u \"" + ip1 + ":8080 " + ip2 + ":8080 " + ip3 + ":8080 " + ip4 + ":8080 " + ip5 + ":8080 " + ip6 + ":8080 \" -i " + str(int_r) + " -a " + addrate + " -l " + NBdur + " -p 20")
main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
@@ -1266,14 +934,13 @@
import json
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale6nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
+ url6 = main.params['url6']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale6nodesrate1", "a")
- #time.sleep(10)
for i in range(NBloop):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -1320,8 +987,8 @@
f.write('\n')
f.write('\n')
f.write('\n')
- if j == 3:
- nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
+
+ nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
f.write("--------------------------------------------------------------------------------- \n")
@@ -1329,16 +996,18 @@
time.sleep(NBsleep)
f.close()
print("\n")
- nbtpavg6n = round(nbtpval)/NBloop
+ nbtpavg6n = round(round(nbtpval)/NBloop,2)
print nbtpavg6n
main.ONOS3.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Intent Throughput for 6-node ONOS cluster = " + str(nbtpavg6n) + " Intents/sec")
def CASE71(self,main):
main.case("Starting SB test for 7 nodes")
+ main.log.report("SB Throughput test: loading 7-node ONOS cluster with 740 Topo Events/s")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
@@ -1355,7 +1024,6 @@
sleep_t =int( main.params['sleep_t'])
sleep_init = int(main.params['sleep_init'])
main.case("Starting SB load on 6 nodes from mininet with " + rate1 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur + " \"11\"")
main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + " " + ip7 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
main.Mininet2.handle.expect("Starting SB load....", timeout=900)
import time
@@ -1366,17 +1034,15 @@
time.sleep(sleep_init)
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
- url7 = "http://10.128.10.7:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
+ url6 = main.params['url6']
+ url7 = main.params['url7']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate1", "a")
- #time.sleep(10)
for i in range(int (loop)):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -1395,11 +1061,6 @@
json_str.append(j6)
json_str.append(j7)
if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "" and json_str[7] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
for j in range(1,8):
f.write("ONOS" + str(j) + "\n")
f.write(str(json_str[j]["meters"][4]['meter']['count']))
@@ -1412,9 +1073,8 @@
f.write('\t')
f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
f.write('\n')
- if j == 3:
+ if j == 4:
tpval += float(json_str[j]["meters"][4]['meter']['m1_rate'])
- #print tpval
f.write('\n')
f.write('\n')
@@ -1422,21 +1082,19 @@
f.write("--------------------------------------------------------------------------------- \n")
time.sleep(sleep_t)
f.close()
- #print tpval
print("\n")
tpavg7n = round(tpval)/loop
print tpavg7n
- #main.Mininet2.handle.expect("\$", timeout=900)
- #main.Mininet2.handle.sendline("sudo mn -c")
- #main.Mininet2.handle.expect("\$")
time.sleep(5)
main.Mininet2.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Topology Event Throughput for 7-node ONOS cluster = " + str(tpavg7n) + " Events/sec")
- def CASE72(self,main):
+ def CASE73(self,main):
+ main.case("Starting NB Throughput test after scaling up to 7 onos nodes")
ip1 = main.params['CTRL']['ip1']
ip2 = main.params['CTRL']['ip2']
ip3 = main.params['CTRL']['ip3']
@@ -1444,112 +1102,33 @@
ip5 = main.params['CTRL']['ip5']
ip6 = main.params['CTRL']['ip6']
ip7 = main.params['CTRL']['ip7']
-
- import time
- import json
- rate2 = main.params['RATE2']
- run_dur = main.params['RUN_DUR']
- loop = int(main.params['loop'])
- sleep_t = int(main.params['sleep_t'])
- sleep_init = int(main.params['sleep_init'])
- switches_num = main.params['switches_num']
- port = main.params['port']
- main.case("Starting SB load on 7 nodes from mininet with " + rate2 +" added/removed/s for " + run_dur)
- #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur + " \"11\"")
- main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + " " + ip7 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
- main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
-
- time.sleep(sleep_init)
-
- open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate2", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
- url7 = "http://10.128.10.7:8080/wm/onos/metrics"
- f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", "a")
- #time.sleep(10)
- for i in range(int (loop)):
- j1 = main.ONOS2.get_json(url1)
- j2 = main.ONOS2.get_json(url2)
- j3 = main.ONOS2.get_json(url3)
- j4 = main.ONOS2.get_json(url4)
- j5 = main.ONOS2.get_json(url5)
- j6 = main.ONOS2.get_json(url6)
- j7 = main.ONOS2.get_json(url7)
- json_str = []
- json_str.append(0)
- json_str.append(j1)
- json_str.append(j2)
- json_str.append(j3)
- json_str.append(j4)
- json_str.append(j5)
- json_str.append(j6)
- json_str.append(j7)
- if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "" and json_str[7] != "":
- # write_str = str(json_str["meters"][4]["meter"][2])
- #print str(json_str["meters"][4])
- #f.write(str(json_str["meters"][4]))
- #f.write('\n')
- #time.sleep(3)
- for j in range(1,8):
- f.write("ONOS" + str(j) + "\n")
- f.write(str(json_str[j]["meters"][4]['meter']['count']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
- f.write('\t')
- f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
- f.write('\n')
-
- f.write('\n')
- f.write('\n')
-
- f.write("--------------------------------------------------------------------------------- \n")
- time.sleep(sleep_t)
- f.close()
- time.sleep(180)
-
- def CASE73(self,main):
-
- main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
- ip1 = main.params['CTRL']['ip1']
- ip2 = main.params['CTRL']['ip2']
- ip3 = main.params['CTRL']['ip3']
- ip4 = main.params['CTRL']['ip4']
import time
import json
- int_num = main.params['int_num']
+ int_num = int(main.params['int_num'])
addrate = main.params['addrate']
NBdur = main.params['NBdur']
NBsleep = int(main.params['NBsleep'])
NBsleep_init = int(main.params['NBsleep_init'])
NBloop = int(main.params['NBloop'])
+ main.log.report("Starting NB Throughput test: loading 7-node ONOS cluster with " + str(int_num) + " Intents/s" )
nbtpval = 0.0
global nbtpavg7n
nbtpavg7n = 0.0
-
+ int_r = 7 * int_num
main.Mininet4.handle.expect("\$")
- #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
- #main.Mininet2.handle.expect("mininet>" , timeout=400)
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.6:6633")
- main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.7:6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:" + ip1 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:" + ip2 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:" + ip3 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:" + ip4 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:" + ip5 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:" + ip6 + ":6633")
+ main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:" + ip7 + ":6633")
main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
main.ONOS3.handle.expect("\$")
- main.ONOS3.handle.sendline("./loadgen_NB.py -n 7 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.6:8080 10.128.10.5:8080 10.128.10.7:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+ main.ONOS3.handle.sendline("./loadgen_NB.py -n 7 -u \"" + ip1 + ":8080 " + ip2 + ":8080 " + ip3 + ":8080 " + ip4 + ":8080 " + ip6 + ":8080 " + ip5 + ":8080 " + ip7 + ":8080 \" -i " + str(int_r) + " -a " + addrate + " -l " + NBdur + " -p 20")
main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
@@ -1557,15 +1136,14 @@
import json
open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale7nodesrate1", 'w').close()
- url1 = "http://10.128.10.1:8080/wm/onos/metrics"
- url2 = "http://10.128.10.2:8080/wm/onos/metrics"
- url3 = "http://10.128.10.3:8080/wm/onos/metrics"
- url4 = "http://10.128.10.4:8080/wm/onos/metrics"
- url5 = "http://10.128.10.5:8080/wm/onos/metrics"
- url6 = "http://10.128.10.6:8080/wm/onos/metrics"
- url7 = "http://10.128.10.7:8080/wm/onos/metrics"
+ url1 = main.params['url1']
+ url2 = main.params['url2']
+ url3 = main.params['url3']
+ url4 = main.params['url4']
+ url5 = main.params['url5']
+ url6 = main.params['url6']
+ url7 = main.params['url7']
f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale7nodesrate1", "a")
- #time.sleep(10)
for i in range(NBloop):
j1 = main.ONOS2.get_json(url1)
j2 = main.ONOS2.get_json(url2)
@@ -1614,8 +1192,8 @@
f.write('\n')
f.write('\n')
f.write('\n')
- if j == 3:
- nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
+
+ nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate'])
f.write("--------------------------------------------------------------------------------- \n")
@@ -1623,16 +1201,17 @@
time.sleep(NBsleep)
f.close()
print("\n")
- nbtpavg7n = round(nbtpval)/NBloop
+ nbtpavg7n = round(round(nbtpval)/NBloop,2)
print nbtpavg7n
main.ONOS3.handle.expect("\$", timeout=900)
time.sleep(180)
+ main.log.report("Intent Throughput for 7-node ONOS cluster = " + str(nbtpavg7n) + " Intents/sec")
def CASE8(self,main):
import time
- main.case("Scaling ONOS down to 6 ONOS instances")
+ main.log.report("Scaling ONOS down to 6 ONOS instances")
main.ONOS7.handle.sendline("./onos.sh core stop")
time.sleep(8)
pdata = main.ONOS7.isup()
@@ -1641,19 +1220,15 @@
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale down successfull -6-node ONOS cluster is up and running!",onfail="ONOS didn't start...")
def CASE9(self,main):
- main.case("Scaling ONOS down to 5 ONOS instances")
+ main.log.report("Scaling ONOS down to 5 ONOS instances")
main.ONOS6.handle.sendline("./onos.sh core stop")
time.sleep(8)
pdata = main.ONOS6.isup() and main.ONOS7.isup()
@@ -1661,19 +1236,15 @@
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale down successfull - 5 node ONOS clsuter is up and running!",onfail="ONOS didn't start...")
def CASE10(self,main):
- main.case("Scaling ONOS down to 4 ONOS instances")
+ main.log.report("Scaling ONOS down to 4 ONOS instances")
main.ONOS5.handle.sendline("./onos.sh core stop ")
time.sleep(5)
@@ -1682,19 +1253,15 @@
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale down successful - 4 node ONOS cluster is up and running!",onfail="ONOS didn't start...")
def CASE11(self,main):
- main.case("Scaling ONOS down to 3 ONOS instances")
+ main.log.report("Scaling ONOS down to 3 ONOS instances")
main.ONOS4.handle.sendline("./onos.sh core stop ")
time.sleep(5)
pdata = main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
@@ -1702,15 +1269,11 @@
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup()
for i in range(3):
if data == main.FALSE:
- #main.log.report("Something is funny... restarting ONOS")
- #main.ONOS1.stop()
time.sleep(3)
- #main.ONOS1.start()
- #time.sleep(5)
data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup()
else:
break
- utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Scale down successful - 3 node ONOS cluster is up and running!",onfail="ONOS didn't start...")
def CASE100(self,main):
import os
@@ -1748,31 +1311,36 @@
def CASE103(self,main):
import os
import time
- main.case("Posting the results to http://10.128.5.54/scale.html ....")
+ main.log.report("Posting the results to http://10.128.5.54/scale.html")
db_script = main.params['db_script']
os.system(db_script + " -n='100SwitchScaleUp" + "' -rate3='" + str(tpavg3n) + "' -rate4='" + str(tpavg4n) + "' -rate5='" + str(tpavg5n) + "' -rate6='" + str(tpavg6n) + "' -rate7='" + str(tpavg7n) + "' -table='onos_scale'")
-
+ main.log.report("The graphical view of the tests can be viewed at http://10.128.5.54/scale.html")
+
def CASE104(self,main):
import os
import time
- main.case("Posting the results to http://10.128.5.54/scale.html ....")
+ main.log.report("Posting the results to http://10.128.5.54/scale.html ....")
db_script = main.params['db_script']
os.system(db_script + " -n='100SwitchScaleDown" + "' -rate3='" + str(tpavg3n) + "' -rate4='" + str(tpavg4n) + "' -rate5='" + str(tpavg5n) + "' -rate6='" + str(tpavg6n) + "' -rate7='" + str(tpavg7n) + "' -table='onos_scale'")
+ main.log.report("The graphical view of the tests can be viewed at http://10.128.5.54/scale.html")
def CASE105(self,main):
import os
import time
- main.case("Posting the results to http://10.128.5.54/scale.html ....")
+ main.log.report("Posting the results to http://10.128.5.54/scale.html ....")
db_script = main.params['db_script']
os.system(db_script + " -n='1000IntentsScaleUp" + "' -rate3='" + str(nbtpavg3n) + "' -rate4='" + str(nbtpavg4n) + "' -rate5='" + str(nbtpavg5n) + "' -rate6='" + str(nbtpavg6n) + "' -rate7='" + str(nbtpavg7n) + "' -table='onos_scale'")
+ main.log.report("The graphical view of the tests can be viewed at http://10.128.5.54/scale.html")
+
def CASE106(self,main):
import os
import time
- main.case("Posting the results to http://10.128.5.54/scale.html ....")
+ main.log.report("Posting the results to http://10.128.5.54/scale.html ....")
db_script = main.params['db_script']
os.system(db_script + " -n='1000IntentsScaleDown" + "' -rate3='" + str(nbtpavg3n) + "' -rate4='" + str(nbtpavg4n) + "' -rate5='" + str(nbtpavg5n) + "' -rate6='" + str(nbtpavg6n) + "' -rate7='" + str(nbtpavg7n) + "' -table='onos_scale'")
+ main.log.report("The graphical view of the tests can be viewed at http://10.128.5.54/scale.html")