Merge branch 'master' of https://github.com/OPENNETWORKINGLAB/ONLabTest
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index f58c8f3..76a8fa7 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -189,6 +189,7 @@
'''
Verifies the host's ip configured or not.
'''
+ self.handle.sendline("")
if self.handle :
try:
response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
@@ -530,6 +531,7 @@
def get_sw_controller(self,sw):
command = "sh ovs-vsctl get-controller "+str(sw)
try:
+ self.handle.expect("mininet")
response = self.execute(cmd=command,prompt="mininet>",timeout=10)
print(response)
if response:
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 0a620f2..41f1951 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -69,7 +69,7 @@
main.cleanup()
main.exit()
- def start(self):
+ def start(self, env = ''):
'''
Starts ONOS on remote machine.
Returns false if any errors were encountered.
@@ -78,7 +78,7 @@
self.handle.sendline("")
self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
self.handle.sendline("cd "+self.home)
- self.handle.sendline("./onos.sh core start")
+ self.handle.sendline(env + "./onos.sh core start")
i=self.handle.expect(["STARTED","FAILED",pexpect.EOF,pexpect.TIMEOUT])
response = self.handle.before + str(self.handle.after)
if i==0:
@@ -176,7 +176,8 @@
elif re.search("0\sinstance\sof\sonos\srunning",response):
return main.FALSE
else :
- main.log.info( self.name + " WARNING: status recieved unknown response")
+ main.log.warn(self.name + " WARNING: status recieved unknown response")
+ main.log.warn(response)
return main.FALSE
except pexpect.EOF:
main.log.error(self.name + ": EOF exception found")
@@ -1295,10 +1296,10 @@
i = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
#main.log.warn("first expect response: " +str(i))
self.handle.sendline("cd "+self.home+"/onos-logs")
- self.handle.sendline("grep \"xception\" *")
+ self.handle.sendline("zgrep \"xception\" *")
i = self.handle.expect(["\*",pexpect.EOF,pexpect.TIMEOUT])
#main.log.warn("second expect response: " +str(i))
- i = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+ i = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT],timeout=120)
#main.log.warn("third expect response: " +str(i))
response = self.handle.before
count = 0
@@ -1306,6 +1307,9 @@
if re.search("log:", line):
output +="Exceptions found in " + line + "\n"
count +=1
+ elif re.search("log\.gz:",line):
+ output+="Exceptions found in " + line + "\n"
+ count +=1
elif re.search("std...:",line):
output+="Exceptions found in " + line + "\n"
count +=1
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
index 242e07b..abfcb69 100644
--- a/TestON/drivers/common/cli/zookeeperclidriver.py
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -107,7 +107,7 @@
This Function will stop the Zookeeper if it is Running
'''
self.execute(cmd="\n",prompt="\$",timeout=10)
- time.sleep(5)
+ time.sleep(1)
self.handle.sendline("cd "+self.home)
response = self.execute(cmd="./onos.sh zk stop ",prompt="$",timeout=10)
if re.search("stopping",response):
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
index fad681e..ecc1e60 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.params
@@ -1,5 +1,5 @@
<PARAMS>
- <testcases>1,2,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8,3,4,5,6,7,8</testcases>
+ <testcases>1,2,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,9,3,9,4,9,5,9,6,9,7,3,4,5,6,7</testcases>
<pingSleep>1</pingSleep>
<pingAttempts>30</pingAttempts>
<CASE1>
@@ -16,16 +16,16 @@
<end>s2</end>
</LINK>
<CTRL>
- <ip1>10.128.100.21</ip1>
+ <ip1>10.128.5.1</ip1>
<port1>6633</port1>
- <ip2>10.128.100.22</ip2>
+ <ip2>10.128.5.2</ip2>
<port2>6633</port2>
- <ip3>10.128.100.23</ip3>
+ <ip3>10.128.5.3</ip3>
<port3>6633</port3>
- <ip4>10.128.100.24</ip4>
+ <ip4>10.128.5.4</ip4>
<port4>6633</port4>
</CTRL>
- <RestIP> 10.128.100.21 </RestIP>
+ <RestIP> 10.128.5.1 </RestIP>
<NR_Switches>25</NR_Switches>
<NR_Links>50</NR_Links>
</PARAMS>
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.py
index e5804d1..02d778e 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.Zookeeper1.start()
main.Zookeeper2.start()
@@ -149,7 +149,10 @@
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
time.sleep(1)
main.Mininet1.assign_sw_controller(sw=str(j),count=4,ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
- main.Mininet1.get_sw_controller("s1")
+ result = main.Mininet1.get_sw_controller("s1")
+ if result:
+ result = main.TRUE
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="S1 assigned to controller",onfail="S1 not assigned to controller")
for i in range(9):
if result == main.FALSE:
@@ -174,15 +177,16 @@
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
+ 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...")
#main.ONOS1.delete_flow("all")
- main.ONOS1.rm_flow()
+ main.ONOS1.rm_intents()
time.sleep(5)
- main.ONOS1.purge()
+ main.ONOS1.purge_intents()
strtTime = time.time()
- main.ONOS1.ad_flow()
+ main.ONOS1.add_intents()
main.case("Checking flows with pings")
pingAttempts = main.params['pingAttempts']
@@ -201,18 +205,20 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2
if result == main.TRUE:
main.log.report("\n\t\t\t\tTime from pushing intents to successful ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
main.log.report("\tFlows failed check")
main.step("Verifying the result")
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
#**********************************************************************************************************************************************************************************************
#This test case removes Controllers 2,3, and 4 then performs a ping test.
@@ -221,7 +227,7 @@
#If the ping test fails 6 times, then the test case will return false
def CASE4(self,main) :
- main.log.report("Remove all but one ONOS then ping until all hosts are reachable or fail after 6 attempts")
+ main.log.report("Assign all switches to just one ONOS instance then ping until all hosts are reachable or fail after 6 attempts")
import time
import random
@@ -258,6 +264,7 @@
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
@@ -275,30 +282,32 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2
if result == main.TRUE:
main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
main.log.report("\tPING TEST FAIL")
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
# **********************************************************************************************************************************************************************************************
#This test case restores the controllers removed by Case 4 then performs a ping test.
def CASE5(self,main) :
- main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+ main.log.report("Restore switch assignments to all 4 ONOS instances then ping until all hosts are reachable or fail after 6 attempts")
import time
for i in range(25):
if i < 15:
j=i+1
- main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+ main.Mininet1.assign_sw_controller(sw=str(j),count=4,ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
else:
j=i+16
- main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+ main.Mininet1.assign_sw_controller(sw=str(j),count=4,ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
strtTime = time.time()
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
@@ -308,6 +317,7 @@
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
@@ -325,16 +335,18 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2
if result == main.TRUE:
main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
main.log.report("\tPING TEST FAILED")
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
# **********************************************************************************************************************************************************************************************
#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
@@ -342,18 +354,27 @@
def CASE6(self,main) :
main.log.report("Bring Link between s1 and s2 down, then ping until all hosts are reachable or fail after 10 attempts")
import time
+
+ #add a wait as a work around for a known bug where topology changes after a switch mastership change cuses intents to not reroute
+ time.sleep(30)
+
main.case("Bringing Link down... ")
result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+
+ #add a wait as a work around for a known bug where topology changes after a switch mastership change cuses intents to not reroute
+ time.sleep(30)
+
strtTime = time.time()
- result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
+ result1 = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
for counter in range(9):
- if result == main.FALSE:
+ if result1 == main.FALSE:
time.sleep(3)
- result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
+ result1 = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
else:
break
+ utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
@@ -371,16 +392,18 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2 and result1
if result == main.TRUE:
main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
main.log.report("\tPING TEST FAILED")
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
# **********************************************************************************************************************************************************************************************
#Brings the link that Case 6 took down back up, then runs a ping test to view reroute time
@@ -389,17 +412,22 @@
main.log.report("Bring Link between s1 and s2 up, then ping until all hosts are reachable or fail after 10 attempts")
import time
main.case("Bringing Link up... ")
+
+ #add a wait as a work around for a known bug where topology changes after a switch mastership change cuses intents to not reroute
+ time.sleep(30)
+
result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link UP!",onfail="Link not brought up...")
strtTime = time.time()
- result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+ result1 = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
for counter in range(9):
- if result == main.FALSE:
+ if result1 == main.FALSE:
time.sleep(3)
- result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+ result1 = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
+ utilities.assert_equals(expect=main.TRUE,actual=result1,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
@@ -418,11 +446,12 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2 and result1
if result == main.TRUE:
main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
@@ -433,7 +462,12 @@
main.ONOS3.check_exceptions()
main.ONOS4.check_exceptions()
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
+
+ #add a wait as a work around for a known bug where topology changes after a switch mastership change cuses intents to not reroute
+ time.sleep(30)
+
# **********************************************************************************************************************************************************************************************
@@ -450,6 +484,7 @@
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Topology check pass",onfail="Topology check FAIL")
pingAttempts = main.params['pingAttempts']
pingSleep = main.params['pingSleep']
@@ -468,11 +503,12 @@
elif ping == main.FALSE and count == int(pingAttempts):
main.log.error("Ping test failed")
i = 17
- result = main.FALSE
+ result2 = main.FALSE
elif ping == main.TRUE:
i = i + 1
- result = main.TRUE
+ result2 = main.TRUE
endTime = time.time()
+ result = result and result2
if result == main.TRUE:
main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
else:
@@ -483,9 +519,74 @@
main.ONOS3.check_exceptions()
main.ONOS4.check_exceptions()
- utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result2,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Testcase passed",onfail="Testcase failed")
+# ******************************************************************************************************************************************************************
+# Test Device Discovery function by yanking s6:s6-eth0 interface and re-plug it into a switch
+
+ def CASE9(self,main) :
+ main.case("Checking component status")
+ result = main.TRUE
+
+ main.step("Checking Zookeeper status")
+ result1 = main.Zookeeper1.status()
+ if not result1:
+ main.log.report("Zookeeper1 encountered a tragic death!")
+ result2 = main.Zookeeper2.status()
+ if not result2:
+ main.log.report("Zookeeper2 encountered a tragic death!")
+ result3 = main.Zookeeper3.status()
+ if not result3:
+ main.log.report("Zookeeper3 encountered a tragic death!")
+ result4 = main.Zookeeper4.status()
+ if not result4:
+ main.log.report("Zookeeper4 encountered a tragic death!")
+ result = result and result1 and result2 and result3 and result4
+
+ main.step("Checking RamCloud status")
+ result5 = main.RamCloud1.status_coor()
+ if not result5:
+ main.log.report("RamCloud Coordinator1 encountered a tragic death!")
+ result6 = main.RamCloud1.status_serv()
+ if not result6:
+ main.log.report("RamCloud Server1 encountered a tragic death!")
+ result7 = main.RamCloud2.status_serv()
+ if not result7:
+ main.log.report("RamCloud Server2 encountered a tragic death!")
+ result8 = main.RamCloud3.status_serv()
+ if not result8:
+ main.log.report("RamCloud Server3 encountered a tragic death!")
+ result9 = main.RamCloud4.status_serv()
+ if not result9:
+ main.log.report("RamCloud Server4 encountered a tragic death!")
+ result = result and result5 and result6 and result7 and result8 and result9
+
+
+ main.step("Checking ONOS status")
+ result10 = main.ONOS1.status()
+ if not result10:
+ main.log.report("ONOS1 core encountered a tragic death!")
+ result11 = main.ONOS2.status()
+ if not result11:
+ main.log.report("ONOS2 core encountered a tragic death!")
+ result12 = main.ONOS3.status()
+ if not result12:
+ main.log.report("ONOS3 core encountered a tragic death!")
+ result13 = main.ONOS4.status()
+ if not result13:
+ main.log.report("ONOS4 core encountered a tragic death!")
+ result = result and result10 and result11 and result12 and result13
+
+
+
+ rest_result = main.ONOS1.rest_status()
+ if not rest_result:
+ main.log.report("Simple Rest GUI server is not running on ONOS1")
+
+
+ utilities.assert_equals(expect=main.TRUE,actual=result,onpass="All Components are running",onfail="One or more components failed")
# ******************************************************************************************************************************************************************
# Test Device Discovery function by yanking s6:s6-eth0 interface and re-plug it into a switch
diff --git a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
index 357aa21..d97e541 100644
--- a/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
+++ b/TestON/tests/RCOnosCHO4nodes/RCOnosCHO4nodes.topo
@@ -2,7 +2,7 @@
<COMPONENT>
<Zookeeper1>
- <host>10.128.100.21</host>
+ <host>10.128.5.1</host>
<user>admin</user>
<password></password>
<type>ZookeeperCliDriver</type>
@@ -12,7 +12,7 @@
</Zookeeper1>
<Zookeeper2>
- <host>10.128.100.22</host>
+ <host>10.128.5.2</host>
<user>admin</user>
<password></password>
<type>ZookeeperCliDriver</type>
@@ -22,7 +22,7 @@
</Zookeeper2>
<Zookeeper3>
- <host>10.128.100.23</host>
+ <host>10.128.5.3</host>
<user>admin</user>
<password></password>
<type>ZookeeperCliDriver</type>
@@ -32,7 +32,7 @@
</Zookeeper3>
<Zookeeper4>
- <host>10.128.100.24</host>
+ <host>10.128.5.4</host>
<user>admin</user>
<password></password>
<type>ZookeeperCliDriver</type>
@@ -42,7 +42,7 @@
</Zookeeper4>
<RamCloud1>
- <host>10.128.100.21</host>
+ <host>10.128.5.1</host>
<user>admin</user>
<password></password>
<type>RamCloudCliDriver</type>
@@ -52,7 +52,7 @@
</RamCloud1>
<RamCloud2>
- <host>10.128.100.22</host>
+ <host>10.128.5.2</host>
<user>admin</user>
<password></password>
<type>RamCloudCliDriver</type>
@@ -62,7 +62,7 @@
</RamCloud2>
<RamCloud3>
- <host>10.128.100.23</host>
+ <host>10.128.5.3</host>
<user>admin</user>
<password></password>
<type>RamCloudCliDriver</type>
@@ -72,7 +72,7 @@
</RamCloud3>
<RamCloud4>
- <host>10.128.100.24</host>
+ <host>10.128.5.4</host>
<user>admin</user>
<password></password>
<type>RamCloudCliDriver</type>
@@ -82,7 +82,7 @@
</RamCloud4>
<ONOS1>
- <host>10.128.100.21</host>
+ <host>10.128.5.1</host>
<user>admin</user>
<password></password>
<type>OnosCliDriver</type>
@@ -92,7 +92,7 @@
</ONOS1>
<ONOS2>
- <host>10.128.100.22</host>
+ <host>10.128.5.2</host>
<user>admin</user>
<password></password>
<type>OnosCliDriver</type>
@@ -102,7 +102,7 @@
</ONOS2>
<ONOS3>
- <host>10.128.100.23</host>
+ <host>10.128.5.3</host>
<user>admin</user>
<password></password>
<type>OnosCliDriver</type>
@@ -112,7 +112,7 @@
</ONOS3>
<ONOS4>
- <host>10.128.100.24</host>
+ <host>10.128.5.4</host>
<user>admin</user>
<password></password>
<type>OnosCliDriver</type>
@@ -122,7 +122,7 @@
</ONOS4>
<Mininet1>
- <host>10.128.100.25</host>
+ <host>10.128.5.9</host>
<user>admin</user>
<password></password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
index f1fc56b..f932b70 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.params
@@ -1,5 +1,10 @@
<PARAMS>
- <testcases>1,2,3,4,5,6,7,4,8,7,4,9,7</testcases>
+ <testcases>1,2,3,4,5,6,7,4,8,7,4,9,7,66</testcases>
+ <tcpdump>
+ <intf>eth0</intf>
+ <port>port 6633</port>
+ <filename>~/packet_captures/Perf.pcap</filename>
+ </tcpdump>
<Iterations>3</Iterations>
<WaitTime>60</WaitTime>
<RestIP>10.128.4.151</RestIP>
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
index b4b73f4..a0df7b5 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.py
@@ -12,46 +12,27 @@
The test will only pass if ONOS is running properly, and has a full view of all topology elements.
'''
import time
-
-
-
-
- main.ONOS1.stop()
- main.ONOS2.stop()
- main.ONOS3.stop()
- main.ONOS4.stop()
- main.RamCloud1.stop_coor()
- main.RamCloud1.stop_serv()
- main.RamCloud2.stop_serv()
- main.RamCloud3.stop_serv()
- main.RamCloud4.stop_serv()
- main.Zookeeper1.stop()
- main.Zookeeper2.stop()
- main.Zookeeper3.stop()
- main.Zookeeper4.stop()
-
+ main.case("Initial Setup")
+ main.step("Stopping ONOS")
+ main.ONOS1.stop_all()
+ main.ONOS2.stop_all()
+ main.ONOS3.stop_all()
+ main.ONOS4.stop_all()
main.Zookeeper1.start()
main.Zookeeper2.start()
main.Zookeeper3.start()
main.Zookeeper4.start()
- time.sleep(4)
main.RamCloud1.del_db()
main.RamCloud2.del_db()
main.RamCloud3.del_db()
main.RamCloud4.del_db()
-
-
- time.sleep(10)
- main.RamCloud1.start_coor()
- main.RamCloud1.start_serv()
- main.RamCloud2.start_serv()
- main.RamCloud3.start_serv()
- main.RamCloud4.start_serv()
- main.ONOS1.start()
- time.sleep(10)
- main.ONOS2.start()
- main.ONOS3.start()
- main.ONOS4.start()
+ main.step("Start tcpdump on mn")
+ main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
+ main.step("Starting ONOS")
+ main.ONOS1.start_all()
+ main.ONOS2.start_all()
+ main.ONOS3.start_all()
+ main.ONOS4.start_all()
main.ONOS1.start_rest()
time.sleep(5)
test= main.ONOS1.rest_status()
@@ -59,12 +40,11 @@
main.ONOS1.start_rest()
main.ONOS1.get_version()
main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
- main.case("Checking if the startup was clean...")
main.step("Testing startup Zookeeper")
data = main.Zookeeper1.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.server_status()
+ data = main.RamCloud1.status_serv()
if data == main.FALSE:
main.RamCloud1.stop_coor()
main.RamCloud1.stop_serv()
@@ -78,25 +58,23 @@
main.RamCloud2.start_serv()
main.RamCloud3.start_serv()
main.RamCloud4.start_serv()
+ data = main.RamCloud1.status_serv()
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()
data = data and main.ONOS2.isup()
data = data and main.ONOS3.isup()
data = data and main.ONOS4.isup()
- if data == main.FALSE:
- main.log.report("Something is funny... restarting ONOS")
- main.ONOS1.stop()
- main.ONOS2.stop()
- main.ONOS3.stop()
- main.ONOS4.stop()
- time.sleep(5)
- main.ONOS1.start()
- time.sleep(10)
- main.ONOS2.start()
- main.ONOS3.start()
- main.ONOS4.start()
- data = main.ONOS1.isup()
+ for i in range(3):
+ if data == main.FALSE:
+ main.log.report("Something is funny... rechecking ONOS")
+ time.sleep(5)
+ data = main.ONOS1.isup()
+ data = data and main.ONOS2.isup()
+ data = data and main.ONOS3.isup()
+ data = data 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...")
def CASE2(self,main) :
@@ -106,6 +84,7 @@
Proves that there is actually a mininet that we are working with
'''
import time
+ import re
main.step("Checking if MN switches exist")
main.log.report("Check if MN switches exist")
#result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
@@ -119,28 +98,62 @@
#utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches and or links...")
main.step("assigning ONOS controllers to switches")
+ data = main.TRUE
for i in range(25):
if i < 3:
j=i+1
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+ controllers = main.Mininet1.get_sw_controller("s"+str(j))
+
+ if re.search("tcp:"+main.params['CTRL']['ip1'],controllers):
+ main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+ data = data and main.TRUE
+ else:
+ main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+ data = main.FALSE
time.sleep(1)
+
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+
elif i >= 3 and i < 5:
j=i+1
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+ controllers = main.Mininet1.get_sw_controller("s"+str(j))
+ if re.search("tcp:"+ main.params['CTRL']['ip2'],controllers):
+ main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+ data = data and main.TRUE
+ else:
+ main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+ data = main.FALSE
time.sleep(1)
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
elif i >= 5 and i < 15:
j=i+1
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+ controllers = main.Mininet1.get_sw_controller("s"+str(j))
+ if re.search("tcp:"+ main.params['CTRL']['ip3'],controllers):
+ main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+ data = data and main.TRUE
+ else:
+ main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+ data = main.FALSE
time.sleep(1)
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
else:
j=i+16
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+
+ controllers = main.Mininet1.get_sw_controller("s"+str(j))
+ if re.search("tcp:"+ main.params['CTRL']['ip4'],controllers):
+ main.log.report("SW" + str(j) + " Master Controller Set Correctly")
+ data = data and main.TRUE
+ else:
+ main.log.report("SW" + str(j) + " MASTER CONTROLLER SET INCORRECTLY!!")
+ data = main.FALSE
time.sleep(1)
main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
main.Mininet1.get_sw_controller("s1")
+ utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Mininet Controllers Set!",onfail="Mininet Controllers not correct!!!!!!!!!!!!!!!!!!!!")
time.sleep(5)
def CASE3(self,main) :
@@ -181,15 +194,16 @@
main.case("Taking care of these flows!")
main.step("Cleaning out any leftover flows...")
main.log.info("deleting...")
- main.ONOS1.rm_flow()
+ main.ONOS1.rm_intents()
# main.ONOS1.delete_flow("all")
main.log.info("adding...")
t1 = time.time()
- main.ONOS1.ad_flow()
+ main.ONOS1.add_intents()
# main.ONOS1.add_flow(main.params['FLOWDEF'])
main.log.info("Checking...")
for i in range(15):
- result = main.ONOS1.check_flow()
+ #result = main.ONOS1.check_flow()
+ result = main.TRUE
if result == main.TRUE:
t2 = time.time()
main.log.info( 'Adding flows took %0.3f s' % (t2-t1))
@@ -455,5 +469,6 @@
result = main.FALSE
count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+ main.Mininet1.stop_tcpdump()
diff --git a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
index 90d7465..b49d5dc 100644
--- a/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
+++ b/TestON/tests/RCOnosPerf4nodes/RCOnosPerf4nodes.topo
@@ -105,8 +105,8 @@
<connect_order>13</connect_order>
<COMPONENTS>
# Specify the Option for mininet
- <arg1> --custom ~/mininet/custom/topo-onos4node.py </arg1>
- <arg2> --topo mytopo </arg2>
+ <arg1> --custom ~/mininet/custom/topo-onos4nodeNEW.py </arg1>
+ <arg2> --topo mytopo --arp</arg2>
<controller> remote </controller>
</COMPONENTS>
</Mininet1>
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
index 819c584..725ac3d 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.params
@@ -1,5 +1,10 @@
<PARAMS>
<testcases>1,2,3,4,66</testcases>
+ <tcpdump>
+ <intf>eth0</intf>
+ <port>port 6633</port>
+ <filename>~/packet_captures/Scale.pcap</filename>
+ </tcpdump>
<Iterations>2</Iterations>
<WaitTime>50</WaitTime>
<TargetTime>50</TargetTime>
diff --git a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
index 9709454..4e3c5e1 100644
--- a/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
+++ b/TestON/tests/RCOnosScale4nodes/RCOnosScale4nodes.py
@@ -12,6 +12,8 @@
The test will only pass if ONOS is running properly, and has a full view of all topology elements.
'''
import time
+ main.case("Initial setup")
+ main.step("stopping ONOS")
main.ONOS1.stop()
main.ONOS2.stop()
main.ONOS3.stop()
@@ -21,6 +23,9 @@
main.RamCloud2.stop_serv()
main.RamCloud3.stop_serv()
main.RamCloud4.stop_serv()
+ main.step("Start tcpdump on mn")
+ main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
+ main.step("Starting ONOS")
main.Zookeeper1.start()
main.Zookeeper2.start()
main.Zookeeper3.start()
@@ -50,7 +55,6 @@
main.ONOS1.start_rest()
main.ONOS1.get_version()
main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
- main.case("Checking if the startup was clean...")
main.step("Testing startup Zookeeper")
data = main.Zookeeper1.isup()
utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
@@ -329,5 +333,6 @@
result = main.FALSE
count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+ main.Mininet1.stop_tcpdump()
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
index 6fd0e9a..6de3811 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.params
@@ -1,8 +1,13 @@
<PARAMS>
- <testcases>1,2,21,31,41,5,6,7,66</testcases>
- <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+ <testcases>1,2,21,31,6,7,4,5,6,7,41,5,6,7,4,6,7,5,41,6,7,66</testcases>
+ <tcpdump>
+ <intf>eth0</intf>
+ <port>port 6633</port>
+ <filename>~/packet_captures/RSanity.pcap</filename>
+ </tcpdump>
<CASE1>
<destination>h6</destination>
+ <target>h40</target>
</CASE1>
<PING>
<source1>h7</source1>
@@ -28,24 +33,25 @@
<sw1>s1</sw1>
</PLUG>
<CTRL>
- <ip1>10.128.100.21</ip1>
+ <ip1>10.128.4.151</ip1>
<port1>6633</port1>
- <ip2>10.128.100.22</ip2>
+ <ip2>10.128.4.152</ip2>
<port2>6633</port2>
- <ip3>10.128.100.23</ip3>
+ <ip3>10.128.4.153</ip3>
<port3>6633</port3>
- <ip4>10.128.100.24</ip4>
+ <ip4>10.128.4.154</ip4>
<port4>6633</port4>
</CTRL>
- <RestIP>10.128.100.21</RestIP>
+ <RestIP>10.128.4.151</RestIP>
+ <RestIP2>10.128.4.152</RestIP2>
+ <RestIP3>10.128.4.153</RestIP3>
+ <RestIP4>10.128.4.154</RestIP4>
<NR_Switches>25</NR_Switches>
<NR_Links>50</NR_Links>
<RESTCALL>
<restIP1>10.128.4.151</restIP1>
<restIP2>10.128.4.152</restIP2>
- <restIP3>10.128.4.153</restIP3>
- <restIP4>10.128.4.154</restIP4>
<restPort>8080</restPort>
- <restURL>/wm/onos/topology/devices</restURL>
+ <restURL>/wm/onos/topology/hosts</restURL>
</RESTCALL>
</PARAMS>
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
index 2ef3eb3..0d6bd0a 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py
@@ -9,6 +9,8 @@
#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.case("Initial Setup")
+ main.step("stop onos")
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")
@@ -16,7 +18,10 @@
main.ONOS1.stop_all()
main.ONOS2.stop_all()
main.ONOS3.stop_all()
- main.ONOS4.stop_all()
+ main.ONOS4.stop_all()
+ main.step("Start tcpdump on mn")
+ main.Mininet1.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
+ main.step("start ONOS")
main.Zookeeper1.start()
main.Zookeeper2.start()
main.Zookeeper3.start()
@@ -65,7 +70,6 @@
main.ONOS2.start_rest()
main.ONOS1.get_version()
main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
- main.case("Checking if the startup was clean...")
main.step("Testing startup Zookeeper")
data = main.Zookeeper1.isup()
utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
@@ -155,11 +159,11 @@
main.step("Cleaning out any leftover flows...")
#main.ONOS1.delete_flow("all")
strtTime = time.time()
- main.ONOS1.rm_flow()
+ main.ONOS1.rm_intents()
print("world")
- main.ONOS1.ad_flow()
+ main.ONOS1.add_intents()
time.sleep(2)
- main.ONOS1.ad_flow()
+ main.ONOS1.add_intents()
print("hello")
# main.ONOS1.add_flow(main.params['FLOWDEF']['testONip'],main.params['FLOWDEF']['user'],main.params['FLOWDEF']['password'],main.params['FLOWDEF']['flowDef'])
main.case("Checking flows")
@@ -390,9 +394,9 @@
for i in range(10):
if result == main.FALSE:
time.sleep(15)
- main.ONOS2.check_status_report(main.params['restIP2'],main.params['NR_Switches'],main.params['NR_Links'])
- main.ONOS3.check_status_report(main.params['restIP3'],main.params['NR_Switches'],main.params['NR_Links'])
- main.ONOS4.check_status_report(main.params['restIP4'],main.params['NR_Switches'],main.params['NR_Links'])
+ main.ONOS2.check_status_report(main.params['RestIP2'],main.params['NR_Switches'],main.params['NR_Links'])
+ main.ONOS3.check_status_report(main.params['RestIP3'],main.params['NR_Switches'],main.params['NR_Links'])
+ main.ONOS4.check_status_report(main.params['RestIP4'],main.params['NR_Switches'],main.params['NR_Links'])
result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
else:
break
@@ -610,5 +614,6 @@
result = main.FALSE
count = len(check1.splitlines()) + len(check2.splitlines()) + len(check3.splitlines()) + len(check4.splitlines())
utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No Exceptions found in the logs",onfail=str(count) + " Exceptions were found in the logs")
+ main.Mininet1.stop_tcpdump()
diff --git a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
index 7163d8a..1027e35 100644
--- a/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
+++ b/TestON/tests/RRCOnosSanity4nodesJ/RRCOnosSanity4nodesJ.py.backup
@@ -178,9 +178,9 @@
#main.ONOS1.delete_flow("all")
strtTime = time.time()
print("hello")
- main.ONOS1.rm_flow()
+ main.ONOS1.rm_intents()
print("world")
- main.ONOS1.ad_flow()
+ main.ONOS1.add_intents()
# main.ONOS1.add_flow(main.params['FLOWDEF']['testONip'],main.params['FLOWDEF']['user'],main.params['FLOWDEF']['password'],main.params['FLOWDEF']['flowDef'])
main.case("Checking flows")