From 8c67d25491f6fd22864f6412820f84abe2ad2d08 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 8 Jul 2017 23:55:59 +0200 Subject: [PATCH 01/22] non incremental proof generation --- .../unsatcores/drup/DRUPTrim.java | 716 ++++++++++++++++++ .../org/logicng/io/readers/DimacsReader.java | 112 +++ .../java/org/logicng/solvers/CleaneLing.java | 15 +- .../java/org/logicng/solvers/MiniSat.java | 49 +- .../java/org/logicng/solvers/SATSolver.java | 34 +- .../org/logicng/solvers/sat/GlucoseSyrup.java | 66 +- .../logicng/solvers/sat/MiniSatConfig.java | 22 + .../solvers/sat/MiniSatStyleSolver.java | 27 +- .../solvers/sat/ConfigurationsTest.java | 1 + 9 files changed, 1021 insertions(+), 21 deletions(-) create mode 100644 src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java create mode 100644 src/main/java/org/logicng/io/readers/DimacsReader.java diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java new file mode 100644 index 00000000..e3205fa7 --- /dev/null +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -0,0 +1,716 @@ +/////////////////////////////////////////////////////////////////////////// +// __ _ _ ________ // +// / / ____ ____ _(_)____/ | / / ____/ // +// / / / __ \/ __ `/ / ___/ |/ / / __ // +// / /___/ /_/ / /_/ / / /__/ /| / /_/ / // +// /_____/\____/\__, /_/\___/_/ |_/\____/ // +// /____/ // +// // +// The Next Generation Logic Library // +// // +/////////////////////////////////////////////////////////////////////////// +// // +// Copyright 2015 Christoph Zengler // +// // +// Licensed under the Apache License, Version 2.0 (the "License"); // +// you may not use this file except in compliance with the License. // +// You may obtain a copy of the License at // +// // +// http://www.apache.org/licenses/LICENSE-2.0 // +// // +// Unless required by applicable law or agreed to in writing, software // +// distributed under the License is distributed on an "AS IS" BASIS, // +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // +// implied. See the License for the specific language governing // +// permissions and limitations under the License. // +// // +/////////////////////////////////////////////////////////////////////////// + +/************************************************************************************************** + * Copyright (c) 2014-2015, Marijn Heule and Nathan Wetzler + * Last edit, March 4, 2015 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT + * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + **************************************************************************************************/ + +package org.logicng.explanations.unsatcores.drup; + +import org.logicng.collections.LNGIntVector; +import org.logicng.collections.LNGVector; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Implementation of the DRUP-trim tool to check satisfiability proofs and perform trimming. + * @version 1.2 + * @since 1.2 + */ +public final class DRUPTrim { + + private static int BIGINIT = 1000000; + private static int UNSAT = 0; + private static int SAT = 1; + private static int EXTRA = 2; + private static int MARK = 3; + private static int ERROR = -1; + + public LNGVector compute(final LNGVector originalProblem, final LNGVector proof) { + Solver s = new Solver(originalProblem, proof); + // s.setTraceFile(traceFile); + // s.setLemmaFile(lemmaFile); + boolean parseReturnValue = s.parse(); + if (!parseReturnValue) { + System.out.print("c trivial UNSAT\ns VERIFIED\n"); + return new LNGVector<>(); + } else { + System.out.print("s VERIFIED\n"); + return s.verify(); + } + } + + private static int getHash(int[] _marks, int mark, final LNGIntVector input) { + int sum = 0; + int xor = 0; + int prod = 1; + for (int i = 0; i < input.size(); i++) { + prod *= input.get(i); + sum += input.get(i); + xor ^= input.get(i); + _marks[index(input.get(i))] = mark; + } + return Math.abs((1023 * sum + prod ^ (31 * xor)) % BIGINIT); + } + + private static int index(int lit) { + return lit > 0 ? lit * 2 : (-lit * 2) ^ 1; + } + + private static class Solver { + + private LNGVector originalProblem; + private LNGVector proof; + private LNGVector core; + // private BufferedWriter lemmaFile; + // private BufferedWriter traceFile; + + LNGIntVector DB; // Alle Klauseln und Lemma immer mit führender Klausel ID (gerade) und endender 0 + int nVars; // Anzahl Variablen + int nClauses; // Anzahl Original Klauseln + + int[] falseStack; // Belegungen mit false + int[] reason; // Reasons für die Belegungen + int[] _false; // falsifizierte Literale + int forcedPtr; // pointer in falseStack + int processedPtr; // pointer in falseStack + int assignedPtr; // pointer in falseStack + + LNGIntVector adlist; + LNGIntVector[] _wlist; // Watchlists zu jedem Literal + + int mask; + boolean delete; + + int count; + int basePtr; + int[] delStack; + int delinfoPtr; + int adlemmas; + int lemmas; // wo beginnen die Lemmas ind er DB? + int arcs; + int time; + + private Solver(final LNGVector originalProblem, final LNGVector proof) { + this.originalProblem = originalProblem; + this.proof = proof; + this.core = new LNGVector<>(); + this.delete = true; + } + + // private void setTraceFile(final File traceFile) throws IOException { + // this.traceFile = new BufferedWriter(new FileWriter(traceFile)); + // } + // + // private void setLemmaFile(final File lemmaFile) throws IOException { + // this.lemmaFile = new BufferedWriter(new FileWriter(lemmaFile)); + // } + + private void assign(int a) { + // System.out.println("ASSIGN " + a); + this._false[index(-a)] = 1; + this.falseStack[this.assignedPtr++] = -a; + } + + private void addWatch(int cPtr, int index) { + int lit = this.DB.get(cPtr + index); + // System.out.println("addWatch=" + lit); + this._wlist[index(lit)].push((cPtr << 1) + this.mask); + } + + private void addWatchLit(int l, int m) { + // System.out.println("addWatchLiteral l=" + l + " m=" + m); + this._wlist[index(l)].push(m); + } + + private void removeWatch(int cPtr, int index) { + int lit = this.DB.get(cPtr + index); + // System.out.println("removeWatch=" + lit); + // System.out.println(" lit=" + lit); + final LNGIntVector watch = this._wlist[index(lit)]; + int watchPtr = 0; + while (true) { + int _cPtr = watch.get(watchPtr++) >> 1; + // System.out.println(" clause=" + this.DB.get(_cPtr)); + if (_cPtr == cPtr) { + watch.set(watchPtr - 1, this._wlist[index(lit)].back()); + this._wlist[index(lit)].pop(); + return; + } + } + } + + private void markWatch(int clausePtr, int index, int offset) { + // System.out.println("MARK WATCH clause=" + this.DB.get(clausePtr - 1) + " index=" + index + " offset=" + offset); + final LNGIntVector watch = this._wlist[index(this.DB.get(clausePtr + index))]; + // System.out.println(" markWatch=" + Arrays.toString(watch)); + int clause = this.DB.get(clausePtr - offset - 1); + int watchPtr = 0; + while (true) { + int _clause = (this.DB.get((watch.get(watchPtr++) >> 1) - 1)); + if (_clause == clause) { + watch.set(watchPtr - 1, watch.get(watchPtr - 1) | 1); + // System.out.println(" -> " + Arrays.toString(watch)); + return; + } + } + } + + private void markClause(int clausePtr, int index) { + // System.out.println("markClause clause=" + this.DB.get(clausePtr - 1) + " index=" + index); + this.arcs++; + // if (this.traceFile != null) + // this.traceFile.write((this.DB.get(clausePtr + index - 1) >> 1) + " "); + if ((this.DB.get(clausePtr + index - 1) & 1) == 0) { + this.DB.set(clausePtr + index - 1, this.DB.get(clausePtr + index - 1) | 1); + // if (this.lemmaFile != null) { + // this.delStack[this.delinfoPtr++] = this.time; + // this.delStack[this.delinfoPtr++] = clausePtr + index; + // } + if (this.DB.get(clausePtr + 1 + index) == 0) + return; + this.markWatch(clausePtr, index, -index); + this.markWatch(clausePtr, 1 + index, -index); + } + while (this.DB.get(clausePtr) != 0) + this._false[index(this.DB.get(clausePtr++))] = MARK; + } + + private void analyze(int clausePtr) { + // System.out.println("ANALYZE"); + this.markClause(clausePtr, 0); + // System.out.println(this.DB); + while (this.assignedPtr > 0) { + int lit = this.falseStack[--this.assignedPtr]; + // System.out.println(" analyse lit=" + lit); + if ((this._false[index(lit)] == MARK) && this.reason[Math.abs(lit)] != 0) + this.markClause(this.reason[Math.abs(lit)], -1); + this._false[index(lit)] = this.assignedPtr < this.forcedPtr ? 1 : 0; + } + // if (this.traceFile != null) + // this.traceFile.write("0\n"); + this.processedPtr = this.forcedPtr; + this.assignedPtr = this.forcedPtr; + } + + private int propagate() { + // System.out.println("PROPAGATE"); + int[] start = new int[2]; + int check = 0; + int i; + int lit; + int _lit = 0; + LNGIntVector watch; + int _watchPtr = 0; + start[0] = this.processedPtr; + start[1] = this.processedPtr; + boolean gotoFlipCheck = true; + while (gotoFlipCheck) { + gotoFlipCheck = false; + check ^= 1; + while (!gotoFlipCheck && start[check] < this.assignedPtr) { // While unprocessed false literals + lit = this.falseStack[start[check]++]; // Get first unprocessed literal + // System.out.println("lit=" + lit); + watch = this._wlist[index(lit)]; // Obtain the first watch pointer + int watchPtr = lit == _lit ? _watchPtr : 0; + + // System.out.print("watchers="); + // for (int l = watchPtr; l < this._used[index(lit)]; l++) + // System.out.print(watch[l] + " "); + // System.out.println(); + + while (watchPtr < watch.size()) { // While there are watched clauses (watched by lit) + // System.out.println(" iteration"); + if ((watch.get(watchPtr) & 1) != check) { + // System.out.println(" case 1"); + watchPtr++; + continue; + } + int clausePtr = watch.get(watchPtr) / 2; // Get the clause from DB + // System.out.println(" clause=" + this.DB.get(clausePtr - 1)); + if (this._false[index(-this.DB.get(clausePtr))] != 0 || this._false[index(-this.DB.get(clausePtr + 1))] != 0) { + // System.out.println(" case 2"); + watchPtr++; + continue; + } + if (this.DB.get(clausePtr) == lit) { + // System.out.println(" case 3"); + this.DB.set(clausePtr, this.DB.get(clausePtr + 1)); // Ensure that the other watched literal is in front + } + boolean gotoNextClause = false; + for (i = 2; this.DB.get(clausePtr + i) != 0; i++) { // Scan the non-watched literals + // System.out.println(" investigate lit=" + this.DB.get(clausePtr + i)); + if (this._false[index(this.DB.get(clausePtr + i))] == 0) { // When clause[j] is not false, it is either true or unset + // System.out.println(" case 4"); + this.DB.set(clausePtr + 1, this.DB.get(clausePtr + i)); + this.DB.set(clausePtr + i, lit); // Swap literals + this.addWatchLit(this.DB.get(clausePtr + 1), watch.get(watchPtr)); // Add the watch to the list of clause[1] + watch.set(watchPtr, this._wlist[index(lit)].back()); // Remove pointer + this._wlist[index(lit)].pop(); + gotoNextClause = true; + break; + } // Goto the next watched clause + } + if (!gotoNextClause) { + this.DB.set(clausePtr + 1, lit); + watchPtr++; // Set lit at clause[1] and set next watch + if (this._false[index(this.DB.get(clausePtr))] == 0) { // If the other watched literal is falsified, + // System.out.println(" case 5"); + this.assign(this.DB.get(clausePtr)); // A unit clause is found, and the reason is set + this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; + if (check == 0) { + // System.out.println(" case 6"); + start[0]--; + _lit = lit; + _watchPtr = watchPtr; + gotoFlipCheck = true; + break; + } + } else { + this.analyze(clausePtr); + return UNSAT; + } // Found a root level conflict -> UNSAT + } + } + } // Set position for next clause + if (check != 0) + gotoFlipCheck = true; + } + this.processedPtr = this.assignedPtr; + return SAT; + } + + int matchClause(final LNGIntVector clauselist, int[] _marks, int mark, final LNGIntVector input) { + int i; + int matchsize; + for (i = 0; i < clauselist.size(); i++) { + matchsize = 0; + boolean aborted = false; + for (int l = clauselist.get(i); this.DB.get(l) != 0; l++) { + if (_marks[index(this.DB.get(l))] != mark) { + aborted = true; + break; + } + matchsize++; + } + if (!aborted && input.size() == matchsize) { + int result = clauselist.get(i); + clauselist.set(i, clauselist.back()); + return result; + } + } + System.out.printf("c error: could not match deleted clause "); + for (i = 0; i < input.size(); ++i) + System.out.printf("%d ", input.get(i)); + System.out.printf("\ns MATCHING ERROR\n"); + return ERROR; + } + + /** + * Parses the input and returns {@code true} if further processing is required and {@code false} if the formula is + * trivially UNSAT. + * @return {@code true} if further processing is required and {@code false} if the formula is trivially UNSAT + */ + private boolean parse() { + this.nVars = 0; + for (LNGIntVector vector : this.originalProblem) + for (int i = 0; i < vector.size(); i++) + if (vector.get(i) > this.nVars) + this.nVars = vector.get(i); + this.nClauses = originalProblem.size(); + + boolean del = false; + int nZeros = this.nClauses; + LNGIntVector buffer = new LNGIntVector(); + + this.DB = new LNGIntVector(); + + this.count = 1; + this.falseStack = new int[this.nVars + 1]; + this.reason = new int[this.nVars + 1]; + this._false = new int[2 * this.nVars + 3]; + + this._wlist = new LNGIntVector[2 * this.nVars + 3]; + for (int i = 1; i <= this.nVars; ++i) { + this._wlist[index(i)] = new LNGIntVector(); + this._wlist[index(-i)] = new LNGIntVector(); + } + + this.adlist = new LNGIntVector(); + + int[] _marks = new int[2 * this.nVars + 3]; + int mark = 0; + + final Map hashTable = new HashMap<>(); + LNGVector currentVector = originalProblem; + boolean fileSwitchFlag; + int clauseNr = 0; + while (true) { + int lit = 0; + fileSwitchFlag = nZeros <= 0; + LNGIntVector clause = currentVector.get(clauseNr++); + final List toks = new ArrayList<>(clause.size() - 1); + if (fileSwitchFlag && clause.get(0) == -1) { + del = true; + } + for (int i = (fileSwitchFlag ? 1 : 0); i < clause.size(); i++) + toks.add(clause.get(i)); + for (Integer l : toks) + buffer.push(l); + if (clauseNr >= currentVector.size() && !fileSwitchFlag) { + fileSwitchFlag = true; + clauseNr = 0; + currentVector = proof; + } + if (clauseNr >= currentVector.size() && fileSwitchFlag) + break; + if (Math.abs(lit) > this.nVars) + throw new IllegalStateException(String.format("Illegal literal %d due to max var %d", lit, this.nVars)); + int hash = getHash(_marks, ++mark, buffer); + if (del) { + if (this.delete) { + int match = this.matchClause(hashTable.get(hash), _marks, mark, buffer); + hashTable.get(hash).pop(); + this.adlist.push((match << 1) + 1); + } + del = false; + buffer.clear(); + continue; + } + int clausePtr = this.DB.size() + 1; + this.DB.push(2 * this.count++); + for (int i = 0; i < buffer.size(); i++) + this.DB.push(buffer.get(i)); + this.DB.push(0); + + LNGIntVector vec = hashTable.get(hash); + if (vec == null) { + vec = new LNGIntVector(); + hashTable.put(hash, vec); + } + vec.push(clausePtr); + + this.adlist.push(clausePtr << 1); + + if (nZeros == this.nClauses) + this.basePtr = clausePtr; + if (nZeros == 0) { + this.lemmas = clausePtr; + this.adlemmas = this.adlist.size() - 1; + } + if (nZeros > 0) { + if (buffer.empty() || ((buffer.size() == 1) && this._false[index(this.DB.get(clausePtr))] != 0)) + return false; + else if (buffer.size() == 1) { + if (this._false[index(-this.DB.get(clausePtr))] == 0) { + this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; + this.assign(this.DB.get(clausePtr)); + } + } else { + this.addWatch(clausePtr, 0); + this.addWatch(clausePtr, 1); + } + } else if (buffer.empty()) + break; + buffer.clear(); + --nZeros; + } + return true; + } + + private LNGVector verify() { + int ad; + long d; + boolean flag = false; + int clausePtr = 0; + int lemmasPtr = this.lemmas; + int lastPtr = this.lemmas; + int endPtr = this.lemmas; + int checked = this.adlemmas; + final LNGIntVector buffer = new LNGIntVector(); + + this.time = this.DB.get(lemmasPtr - 1); + + // if (this.lemmaFile != null) { + // this.delStack = new int[this.count * 2]; + // this.delinfoPtr = 0; + // } + + // if (this.traceFile != null) + // this.traceFile.write(this.count + " 0 "); + + boolean gotoPostProcess = false; + if (this.processedPtr < this.assignedPtr) + if (this.propagate() == UNSAT) { + System.out.printf("c got UNSAT propagating in the input instance\n"); + gotoPostProcess = true; + } + this.forcedPtr = this.processedPtr; + + if (!gotoPostProcess) { + boolean gotoVerification = false; + while (!gotoVerification) { + // System.out.println("ITERATION"); + flag = false; + buffer.clear(); + this.time = this.DB.get(lemmasPtr - 1); + clausePtr = lemmasPtr; + do { + ad = this.adlist.get(checked++); + // System.out.println(" ad=" + ad); + d = ad & 1; + int cPtr = ad >> 1; + // System.out.println(" c[1]=" + this.DB.get(cPtr + 1)); + if (d != 0 && this.DB.get(cPtr + 1) != 0) { + if (this.reason[Math.abs(this.DB.get(cPtr))] - 1 == ad >> 1) + continue; + this.removeWatch(cPtr, 0); + this.removeWatch(cPtr, 1); + } + } while (d != 0); + + while (this.DB.get(lemmasPtr) != 0) { + int lit = this.DB.get(lemmasPtr++); + if (this._false[index(-lit)] != 0) + flag = true; + if (this._false[index(lit)] == 0) { + if (buffer.size() <= 1) { + this.DB.set(lemmasPtr - 1, this.DB.get(clausePtr + buffer.size())); + this.DB.set(clausePtr + buffer.size(), lit); + } + buffer.push(lit); + } + } + + if (this.DB.get(clausePtr + 1) != 0) { + this.addWatch(clausePtr, 0); + this.addWatch(clausePtr, 1); + } + + lemmasPtr += EXTRA; + + if (flag) + this.adlist.set(checked - 1, 0); + if (flag) + continue; // Clause is already satisfied + if (buffer.empty()) + throw new IllegalStateException("Conflict claimed, but not detected"); + + if (buffer.size() == 1) { + this.assign(buffer.get(0)); + this.reason[Math.abs(buffer.get(0))] = clausePtr + 1; + // System.out.println("reason " + Math.abs(buffer[0]) + " = " + (clausePtr + 1)); + this.forcedPtr = this.processedPtr; + if (this.propagate() == UNSAT) + gotoVerification = true; + } + + if (lemmasPtr >= this.DB.size()) + break; + } + if (!gotoVerification) + throw new IllegalStateException("No conflict"); + + System.out.printf("c parsed formula and detected empty clause; start verification\n"); + + this.forcedPtr = this.processedPtr; + lemmasPtr = clausePtr - EXTRA; + // System.out.println("lemmaPtr=" + this.DB.get(lemmasPtr)); + + while (true) { + // System.out.println("VERIFICATION ITERATION"); + buffer.clear(); + // System.out.println(this.DB); + clausePtr = lemmasPtr + EXTRA; + // System.out.println(" clausePtr=" + this.DB.get(clausePtr)); + + do { + ad = this.adlist.get(--checked); + // System.out.println(" ad=" + ad); + d = ad & 1; + int cPtr = ad >> 1; + if (d != 0 && this.DB.get(cPtr + 1) != 0) { + if (this.reason[Math.abs(this.DB.get(cPtr))] - 1 == ad >> 1) + continue; + this.addWatch(cPtr, 0); + this.addWatch(cPtr, 1); + } + } while (d != 0); + + this.time = this.DB.get(clausePtr - 1); + // System.out.println(" time=" + this.time); + + if (this.DB.get(clausePtr + 1) != 0) { + this.removeWatch(clausePtr, 0); + this.removeWatch(clausePtr, 1); + } + + boolean gotoNextLemma = false; + if (ad == 0) + gotoNextLemma = true; + + if (!gotoNextLemma) { + while (this.DB.get(clausePtr) != 0) { + int lit = this.DB.get(clausePtr++); + // System.out.println(" final analyze lit=" + lit); + if (this._false[index(-lit)] != 0) + flag = true; + if (this._false[index(lit)] == 0) + buffer.push(lit); + } + + if (flag && buffer.size() == 1) { + do { + this._false[index(this.falseStack[--this.forcedPtr])] = 0; + } while (this.falseStack[this.forcedPtr] != -buffer.get(0)); + this.processedPtr = this.forcedPtr; + this.assignedPtr = this.forcedPtr; + } + + if ((this.time & 1) != 0) { + int i; + // if (this.traceFile != null) { + // this.traceFile.write((this.time >> 1) + " "); + // for (i = 0; i < buffer.size(); i++) + // this.traceFile.write(buffer.get(i) + " "); + // this.traceFile.write("0 "); + // } + for (i = 0; i < buffer.size(); ++i) { + this.assign(-buffer.get(i)); + this.reason[Math.abs(buffer.get(i))] = 0; + } + if (this.propagate() == SAT) + throw new IllegalStateException("Formula is SAT"); + } + } + + if (lemmasPtr + EXTRA == lastPtr) + break; + while (this.DB.get(--lemmasPtr) != 0) ; + } + } + + int marked; + int count = 0; + lemmasPtr = 0; + while (lemmasPtr + EXTRA <= lastPtr) { + if ((this.DB.get(lemmasPtr++) & 1) != 0) + count++; + while (this.DB.get(lemmasPtr++) != 0) ; + } + System.out.printf("c %d of %d clauses in core\n", count, this.nClauses); + + lemmasPtr = 0; + + while (lemmasPtr + EXTRA <= lastPtr) { + final LNGIntVector coreVec = new LNGIntVector(); + marked = this.DB.get(lemmasPtr++) & 1; + while (this.DB.get(lemmasPtr) != 0) { + if (marked != 0) + coreVec.push(this.DB.get(lemmasPtr)); + lemmasPtr++; + } + if (marked != 0) + this.core.push(coreVec); + lemmasPtr++; + } + + // if (this.lemmaFile != null) + // this.delinfoPtr -= 2; + int lcount = 0; + count = 0; + while (lemmasPtr + EXTRA <= endPtr) { + lcount++; + this.time = this.DB.get(lemmasPtr); + marked = this.DB.get(lemmasPtr++) & 1; + if (marked != 0) + count++; + while (this.DB.get(lemmasPtr) != 0) { + // if (marked != 0 && this.lemmaFile != null) + // this.lemmaFile.write(this.DB.get(lemmasPtr) + " "); + lemmasPtr++; + } + lemmasPtr++; + + // if (this.lemmaFile == null) + // continue; + // if (marked != 0) + // this.lemmaFile.write("0\n"); + // while (this.delStack[this.delinfoPtr] == this.time) { + // clausePtr = this.delStack[this.delinfoPtr + 1]; + // this.lemmaFile.write("d "); + // while (this.DB.get(clausePtr) != 0) + // this.lemmaFile.write(this.DB.get(clausePtr++) + " "); + // this.lemmaFile.write("0\n"); + // this.delinfoPtr -= 2; + // } + } + System.out.printf("c %d of %d lemmas in core using %d resolution steps\n", count, lcount, this.arcs); + + // if (this.traceFile != null) { + // lemmasPtr = 0; + // while (lemmasPtr + EXTRA <= lastPtr) { + // marked = this.DB.get(lemmasPtr++) & 1; + // if (marked != 0) + // this.traceFile.write((this.DB.get(lemmasPtr - 1) >> 1) + " "); + // while (this.DB.get(lemmasPtr) != 0) { + // if (marked != 0) + // this.traceFile.write(this.DB.get(lemmasPtr) + " "); + // lemmasPtr++; + // } + // if (marked != 0) + // this.traceFile.write("0 0\n"); + // lemmasPtr++; + // } + // this.traceFile.close(); + // } + + return this.core; + } + } +} + diff --git a/src/main/java/org/logicng/io/readers/DimacsReader.java b/src/main/java/org/logicng/io/readers/DimacsReader.java new file mode 100644 index 00000000..dd2b6f1e --- /dev/null +++ b/src/main/java/org/logicng/io/readers/DimacsReader.java @@ -0,0 +1,112 @@ +/////////////////////////////////////////////////////////////////////////// +// __ _ _ ________ // +// / / ____ ____ _(_)____/ | / / ____/ // +// / / / __ \/ __ `/ / ___/ |/ / / __ // +// / /___/ /_/ / /_/ / / /__/ /| / /_/ / // +// /_____/\____/\__, /_/\___/_/ |_/\____/ // +// /____/ // +// // +// The Next Generation Logic Library // +// // +/////////////////////////////////////////////////////////////////////////// +// // +// Copyright 2015-2017 Christoph Zengler // +// // +// Licensed under the Apache License, Version 2.0 (the "License"); // +// you may not use this file except in compliance with the License. // +// You may obtain a copy of the License at // +// // +// http://www.apache.org/licenses/LICENSE-2.0 // +// // +// Unless required by applicable law or agreed to in writing, software // +// distributed under the License is distributed on an "AS IS" BASIS, // +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // +// implied. See the License for the specific language governing // +// permissions and limitations under the License. // +// // +/////////////////////////////////////////////////////////////////////////// + +package org.logicng.io.readers; + +import org.logicng.formulas.Formula; +import org.logicng.formulas.FormulaFactory; +import org.logicng.formulas.Literal; +import org.logicng.formulas.Variable; +import org.logicng.io.parsers.ParserException; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; + +/** + * A reader for DIMACS CNF files. + *

+ * This reader reads all the clauses and variables - independent of the numbers given in the prefix. Also it assumes + * that every clause is in its own line and ends with '0'. Comments are only allowed if the lines start with 'c'. No + * C style comments are supported (yes, we have actually seen these in DIMACS files). + * @version 1.2 + * @since 1.2 + */ +public final class DimacsReader { + + /** + * Private constructor. + */ + private DimacsReader() { + // Intentionally left empty. + } + + /** + * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. + * @param fileName the file name + * @param f the formula factory + * @return the list of formulas (clauses) + * @throws IOException if there was a problem reading the file + * @throws ParserException if there was a problem parsing the formula + */ + public static List readCNF(final String fileName, final FormulaFactory f) throws IOException, ParserException { + return readCNF(fileName, f, "v"); + } + + /** + * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. + * @param fileName the file name + * @param f the formula factory + * @param prefix the prefix for the variable names + * @return the list of formulas (clauses) + * @throws IOException if there was a problem reading the file + * @throws ParserException if there was a problem parsing the formula + */ + public static List readCNF(final String fileName, final FormulaFactory f, final String prefix) + throws IOException, ParserException { + List result = new ArrayList<>(); + try (final BufferedReader br = new BufferedReader(new FileReader(fileName))) { + while (br.ready()) { + final String line = br.readLine(); + if (!line.startsWith("c") && !line.startsWith("p")) { + String[] split = line.split("\\s+"); + if (!"0".equals(split[split.length - 1].trim())) + throw new IllegalArgumentException("Line " + line + " did not end with 0."); + LinkedHashSet vars = new LinkedHashSet<>(split.length - 1); + for (int i = 0; i < split.length - 1; i++) { + String lit = split[i].trim(); + if (!lit.isEmpty()) { + if (lit.startsWith("-")) + vars.add(f.literal(prefix + split[i].trim().substring(1), false)); + else + vars.add(f.variable(prefix + split[i].trim())); + } + } + result.add(f.or(vars)); + } + } + } + return result; + } + + +} diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index b9d3ca37..1d07ba99 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -34,6 +34,7 @@ import org.logicng.datastructures.Assignment; import org.logicng.datastructures.EncodingResult; import org.logicng.datastructures.Tristate; +import org.logicng.explanations.unsatcores.UNSATCore; import org.logicng.formulas.FType; import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; @@ -42,6 +43,7 @@ import org.logicng.formulas.Variable; import org.logicng.handlers.ModelEnumerationHandler; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; import org.logicng.solvers.sat.CleaneLingConfig; import org.logicng.solvers.sat.CleaneLingMinimalisticSolver; import org.logicng.solvers.sat.CleaneLingSolver; @@ -142,7 +144,7 @@ public static CleaneLing full(final FormulaFactory f, final CleaneLingConfig con } @Override - public void add(final Formula formula) { + public void add(final Formula formula, Proposition proposition) { if (formula.type() == FType.PBC) { final PBConstraint constraint = (PBConstraint) formula; this.result = UNDEF; @@ -150,9 +152,9 @@ public void add(final Formula formula) { final EncodingResult result = EncodingResult.resultForCleaneLing(this.f, this); ccEncoder.encode(constraint, result); } else - this.addClauseSet(formula.cnf()); + this.addClauseSet(formula.cnf(), proposition); } else - this.addClauseSet(formula.cnf()); + this.addClauseSet(formula.cnf(), proposition); } @Override @@ -173,7 +175,7 @@ public CCIncrementalData addIncrementalCC(PBConstraint cc) { } @Override - protected void addClause(final Formula formula) { + protected void addClause(final Formula formula, final Proposition proposition) { this.result = UNDEF; addClause(formula.literals()); } @@ -335,6 +337,11 @@ public String createNewVariableOnSolver(final String prefix) { return varName; } + @Override + public UNSATCore unsatCore() { + throw new UnsupportedOperationException("CleaneLing cannot compute unsat cores at the moment"); + } + @Override public SortedSet knownVariables() { final SortedSet result = new TreeSet<>(); diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 73a92e03..c0381438 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -32,9 +32,12 @@ import org.logicng.cardinalityconstraints.CCIncrementalData; import org.logicng.collections.LNGBooleanVector; import org.logicng.collections.LNGIntVector; +import org.logicng.collections.LNGVector; import org.logicng.datastructures.Assignment; import org.logicng.datastructures.EncodingResult; import org.logicng.datastructures.Tristate; +import org.logicng.explanations.unsatcores.UNSATCore; +import org.logicng.explanations.unsatcores.drup.DRUPTrim; import org.logicng.formulas.CType; import org.logicng.formulas.FType; import org.logicng.formulas.Formula; @@ -44,6 +47,8 @@ import org.logicng.formulas.Variable; import org.logicng.handlers.ModelEnumerationHandler; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; +import org.logicng.propositions.StandardProposition; import org.logicng.solvers.sat.GlucoseConfig; import org.logicng.solvers.sat.GlucoseSyrup; import org.logicng.solvers.sat.MiniCard; @@ -51,8 +56,10 @@ import org.logicng.solvers.sat.MiniSatConfig; import org.logicng.solvers.sat.MiniSatStyleSolver; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -61,6 +68,7 @@ import java.util.SortedSet; import java.util.TreeSet; +import static org.logicng.datastructures.Tristate.FALSE; import static org.logicng.datastructures.Tristate.TRUE; import static org.logicng.datastructures.Tristate.UNDEF; @@ -73,6 +81,7 @@ public final class MiniSat extends SATSolver { private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} + private final MiniSatConfig config; private final MiniSatStyleSolver solver; private final CCEncoder ccEncoder; private final SolverStyle style; @@ -80,6 +89,7 @@ private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} private boolean incremental; private boolean initialPhase; private int nextStateId; + private Map clause2proposition; /** * Constructs a new SAT solver instance. @@ -90,6 +100,7 @@ private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} private MiniSat(final FormulaFactory f, final SolverStyle solverStyle, final MiniSatConfig miniSatConfig, final GlucoseConfig glucoseConfig) { super(f); + this.config = miniSatConfig; this.style = solverStyle; this.initialPhase = miniSatConfig.initialPhase(); switch (solverStyle) { @@ -110,6 +121,7 @@ private MiniSat(final FormulaFactory f, final SolverStyle solverStyle, final Min this.validStates = new LNGIntVector(); this.nextStateId = 0; this.ccEncoder = new CCEncoder(f); + this.clause2proposition = new HashMap<>(); } /** @@ -172,7 +184,7 @@ public static MiniSat miniCard(final FormulaFactory f, final MiniSatConfig confi } @Override - public void add(final Formula formula) { + public void add(final Formula formula, Proposition proposition) { if (formula.type() == FType.PBC) { final PBConstraint constraint = (PBConstraint) formula; this.result = UNDEF; @@ -186,15 +198,15 @@ else if (constraint.comparator() == CType.EQ && constraint.rhs() == 1) { ((MiniCard) this.solver).addAtMost(generateClauseVector(Arrays.asList(constraint.operands())), constraint.rhs()); this.solver.addClause(generateClauseVector(Arrays.asList(constraint.operands()))); } else - this.addClauseSet(constraint.cnf()); + this.addClauseSet(constraint.cnf(), proposition); } else { final EncodingResult result = EncodingResult.resultForMiniSat(this.f, this); ccEncoder.encode(constraint, result); } } else - this.addClauseSet(constraint.cnf()); + this.addClauseSet(constraint.cnf(), proposition); } else - this.addClauseSet(formula.cnf()); + this.addClauseSet(formula.cnf(), proposition); } @Override @@ -219,9 +231,11 @@ public CCIncrementalData addIncrementalCC(PBConstraint cc) { } @Override - protected void addClause(final Formula formula) { + protected void addClause(final Formula formula, final Proposition proposition) { this.result = UNDEF; this.solver.addClause(generateClauseVector(formula.literals())); + if (this.config.proofGeneration() && proposition != null) + this.clause2proposition.put(formula, proposition); } @Override @@ -398,6 +412,31 @@ public boolean initialPhase() { return this.initialPhase; } + @Override + public UNSATCore unsatCore() { + if (!this.config.proofGeneration()) + throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); + if (this.result != FALSE) + throw new IllegalStateException("A unsat core can only be generated if the formula is solved and is UNSAT"); + DRUPTrim trimmer = new DRUPTrim(); + final LNGVector nativeCore = trimmer.compute(this.underlyingSolver().pgOriginalClauses(), this.underlyingSolver().pgProof()); + final LinkedHashSet propositions = new LinkedHashSet<>(); + for (LNGIntVector vector : nativeCore) { + List literals = new ArrayList<>(vector.size()); + for (int i = 0; i < vector.size(); i++) { + int lit = vector.get(i); + String varName = this.underlyingSolver().nameForIdx(Math.abs(lit) - 1); + literals.add(f.literal(varName, lit > 0)); + } + final Formula clause = f.or(literals); + Proposition proposition = this.clause2proposition.get(clause); + if (proposition == null) + proposition = new StandardProposition(clause); + propositions.add(proposition); + } + return new UNSATCore(new ArrayList<>(propositions), false); + } + @Override public SortedSet knownVariables() { final SortedSet result = new TreeSet<>(); diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 7c68a5d2..5f832f9c 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -32,6 +32,7 @@ import org.logicng.collections.ImmutableFormulaList; import org.logicng.datastructures.Assignment; import org.logicng.datastructures.Tristate; +import org.logicng.explanations.unsatcores.UNSATCore; import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; import org.logicng.formulas.Literal; @@ -68,7 +69,16 @@ protected SATSolver(final FormulaFactory f) { * Adds a formula to the solver. The formula is first converted to CNF. * @param formula the formula */ - public abstract void add(final Formula formula); + public void add(final Formula formula) { + add(formula, null); + } + + /** + * Adds a formula to the solver. The formula is first converted to CNF. + * @param formula the formula + * @param proposition the proposition of this formula + */ + public abstract void add(final Formula formula, Proposition proposition); /** * Adds a formula to the solver, but sets all variables to false which are not known to the solver. @@ -158,20 +168,21 @@ public void add(final Variable relaxationVar, final Collection knownVariables(); + + /** + * Returns an unsat core of the current problem. Only works if the SAT solver is configured to record the information + * required to generate a proof trace and an unsat core. Currently only works in the non-incremental mode of the + * solver or if no state saving/loading has taken place + * @return the unsat core + */ + public abstract UNSATCore unsatCore(); } diff --git a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java index da8e4333..e0099fa3 100644 --- a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java +++ b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java @@ -143,7 +143,7 @@ public final class GlucoseSyrup extends MiniSatStyleSolver { * Constructs a new Glucose 2 solver with the default values for solver configuration. By default, incremental mode * is activated. */ - public GlucoseSyrup() { + GlucoseSyrup() { this(new MiniSatConfig.Builder().build(), new GlucoseConfig.Builder().build()); } @@ -221,12 +221,30 @@ public int newVar(boolean sign, boolean dvar) { @Override public boolean addClause(final LNGIntVector ps) { assert decisionLevel() == 0; - if (!ok) - return false; - ps.sort(); int p; int i; int j; + if (this.config.proofGeneration) { + LNGIntVector vec = new LNGIntVector(ps.size()); + for (i = 0; i < ps.size(); i++) + vec.push((var(ps.get(i)) + 1) * (-2 * (sign(ps.get(i)) ? 1 : 0) + 1)); + this.pgOriginalClauses.push(vec); + } + if (!ok) + return false; + ps.sort(); + boolean flag = false; + + LNGIntVector oc = null; + if (this.config.proofGeneration) { + oc = new LNGIntVector(); + for (i = 0, p = LIT_UNDEF; i < ps.size(); i++) { + oc.push(ps.get(i)); + if (value(ps.get(i)) == Tristate.TRUE || ps.get(i) == not(p) || value(ps.get(i)) == Tristate.FALSE) + flag = true; + } + } + for (i = 0, j = 0, p = LIT_UNDEF; i < ps.size(); i++) if (value(ps.get(i)) == Tristate.TRUE || ps.get(i) == not(p)) return true; @@ -235,6 +253,21 @@ else if (value(ps.get(i)) != Tristate.FALSE && ps.get(i) != p) { ps.set(j++, p); } ps.removeElements(i - j); + + if (flag) { + LNGIntVector vec = new LNGIntVector(ps.size() + 1); + vec.push(1); + for (i = 0; i < ps.size(); i++) + vec.push((var(ps.get(i)) + 1) * (-2 * (sign(ps.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + + vec = new LNGIntVector(oc.size()); + vec.push(-1); + for (i = 0; i < oc.size(); i++) + vec.push((var(oc.get(i)) + 1) * (-2 * (sign(oc.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + if (ps.size() == 0) { ok = false; return false; @@ -252,6 +285,8 @@ else if (value(ps.get(i)) != Tristate.FALSE && ps.get(i) != p) { @Override public Tristate solve(final SATHandler handler) { + if (this.config.incremental && this.config.proofGeneration) + throw new IllegalStateException("Cannot use incremental and proof generation at the same time"); this.handler = handler; if (this.handler != null) this.handler.startedSolving(); @@ -265,6 +300,12 @@ public Tristate solve(final SATHandler handler) { Tristate status = Tristate.UNDEF; while (status == Tristate.UNDEF && !canceledByHandler) status = search(); + + if (this.config.proofGeneration) { + if (status == Tristate.FALSE) + this.pgProof.push(new LNGIntVector(1, 0)); + } + if (status == Tristate.TRUE) { model = new LNGBooleanVector(vars.size()); for (final MSVariable v : this.vars) @@ -341,6 +382,14 @@ protected void detachClause(final MSClause c) { @Override protected void removeClause(final MSClause c) { + if (this.config.proofGeneration) { + final LNGIntVector vec = new LNGIntVector(c.size()); + vec.push(-1); + for (int i = 0; i < c.size(); i++) + vec.push((var(c.get(i)) + 1) * (-2 * (sign(c.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + detachClause(c); if (locked(c)) v(c.get(0)).setReason(null); @@ -743,6 +792,15 @@ private Tristate search() { lbdQueue.push(analyzeLBD); sumLBD += analyzeLBD; cancelUntil(analyzeBtLevel); + + if (this.config.proofGeneration) { + final LNGIntVector vec = new LNGIntVector(learntClause.size()); + vec.push(1); + for (int i = 0; i < learntClause.size(); i++) + vec.push((var(learntClause.get(i)) + 1) * (-2 * (sign(learntClause.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + if (learntClause.size() == 1) { uncheckedEnqueue(learntClause.get(0), null); } else { diff --git a/src/main/java/org/logicng/solvers/sat/MiniSatConfig.java b/src/main/java/org/logicng/solvers/sat/MiniSatConfig.java index 702fc32e..0193db9a 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSatConfig.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSatConfig.java @@ -61,6 +61,7 @@ public enum ClauseMinimization { final double learntsizeInc; final boolean incremental; final boolean initialPhase; + final boolean proofGeneration; /** * Constructs a new MiniSAT configuration from a given builder. @@ -79,6 +80,7 @@ private MiniSatConfig(final Builder builder) { this.learntsizeInc = builder.learntsizeInc; this.incremental = builder.incremental; this.initialPhase = builder.initialPhase; + this.proofGeneration = builder.proofGeneration; } /** @@ -97,6 +99,14 @@ public boolean initialPhase() { return this.initialPhase; } + /** + * Returns whether proof generation should be performed or not. + * @return whether proof generation should be performed or not + */ + public boolean proofGeneration() { + return this.proofGeneration; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("MiniSatConfig{\n"); @@ -111,6 +121,7 @@ public String toString() { sb.append("learntsizeInc=").append(this.learntsizeInc).append("\n"); sb.append("incremental=").append(this.incremental).append("\n"); sb.append("initialPhase=").append(this.initialPhase).append("\n"); + sb.append("proofGeneration=").append(this.proofGeneration).append("\n"); sb.append("}\n"); return sb.toString(); } @@ -130,6 +141,7 @@ public static class Builder { private double learntsizeInc = 1.1; private boolean incremental = true; private boolean initialPhase = false; + private boolean proofGeneration = false; /** * Sets the variable activity decay factor to a given value. The default value is 0.95. @@ -245,6 +257,16 @@ public Builder initialPhase(boolean initialPhase) { return this; } + /** + * Sets whether the information for generating a proof with DRUP should be recorded or not. + * @param proofGeneration {@code true} if proof generating information should be recorded, {@code false} otherwise + * @return the builder + */ + public Builder proofGeneration(boolean proofGeneration) { + this.proofGeneration = proofGeneration; + return this; + } + /** * Builds the MiniSAT configuration. * @return the configuration diff --git a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java index 493cb7bd..941ee728 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java @@ -49,6 +49,7 @@ import org.logicng.collections.LNGVector; import org.logicng.datastructures.Tristate; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; import org.logicng.solvers.datastructures.LNGHeap; import org.logicng.solvers.datastructures.MSClause; import org.logicng.solvers.datastructures.MSVariable; @@ -115,6 +116,10 @@ public abstract class MiniSatStyleSolver { protected SATHandler handler; protected boolean canceledByHandler; + // Proof generating information + protected LNGVector pgOriginalClauses; + protected LNGVector pgProof; + /** * Constructs a new MiniSAT-style solver with a given configuration. * @param config the configuration @@ -212,6 +217,10 @@ protected void initialize() { this.name2idx = new TreeMap<>(); this.idx2name = new TreeMap<>(); this.canceledByHandler = false; + if (this.config.proofGeneration) { + this.pgOriginalClauses = new LNGVector<>(); + this.pgProof = new LNGVector<>(); + } } /** @@ -309,7 +318,7 @@ public boolean addClause(int lit) { /** * Adds a clause to the solver. - * @param ps the literals of the clause + * @param ps the literals of the clause * @return {@code true} if the clause was added successfully, {@code false} otherwise */ public abstract boolean addClause(final LNGIntVector ps); @@ -601,6 +610,22 @@ protected void claBumpActivity(final MSClause c) { */ protected abstract boolean simplify(); + /** + * Returns the original clauses for proof generation. + * @return the original clauses for proof generation + */ + public LNGVector pgOriginalClauses() { + return this.pgOriginalClauses; + } + + /** + * Returns the proof clauses for proof generation. + * @return the proof clauses for proof generation + */ + public LNGVector pgProof() { + return this.pgProof; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder(); diff --git a/src/test/java/org/logicng/solvers/sat/ConfigurationsTest.java b/src/test/java/org/logicng/solvers/sat/ConfigurationsTest.java index 86890c20..ff0bae78 100644 --- a/src/test/java/org/logicng/solvers/sat/ConfigurationsTest.java +++ b/src/test/java/org/logicng/solvers/sat/ConfigurationsTest.java @@ -68,6 +68,7 @@ public void testMiniSatConfigToString() { "learntsizeInc=1.5\n" + "incremental=false\n" + "initialPhase=true\n" + + "proofGeneration=false\n" + "}\n"; Assert.assertEquals(expected, config.toString()); } From 3e3bdd4a6d3ddab8b6802f403646dad8fe8eda51 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 00:44:32 +0200 Subject: [PATCH 02/22] proof generation for Glocose --- .../datastructures/EncodingResult.java | 4 +- .../explanations/unsatcores/UNSATCore.java | 17 ++ .../unsatcores/drup/DRUPTrim.java | 235 +++++++----------- .../java/org/logicng/solvers/CleaneLing.java | 2 +- .../java/org/logicng/solvers/MiniSat.java | 53 ++-- .../java/org/logicng/solvers/SATSolver.java | 15 +- .../solvers/maxsat/algorithms/IncWBO.java | 16 +- .../solvers/maxsat/algorithms/LinearSU.java | 4 +- .../solvers/maxsat/algorithms/LinearUS.java | 4 +- .../solvers/maxsat/algorithms/MSU3.java | 4 +- .../solvers/maxsat/algorithms/WBO.java | 10 +- .../solvers/maxsat/algorithms/WMSU3.java | 8 +- .../solvers/maxsat/encodings/Encoding.java | 8 +- .../maxsat/encodings/ModularTotalizer.java | 4 +- .../org/logicng/solvers/sat/GlucoseSyrup.java | 5 +- .../org/logicng/solvers/sat/MiniCard.java | 3 +- .../logicng/solvers/sat/MiniSat2Solver.java | 3 +- .../solvers/sat/MiniSatStyleSolver.java | 48 +++- .../transformations/UnitPropagation.java | 4 +- .../logicng/solvers/sat/GlucoseSyrupTest.java | 2 +- .../org/logicng/solvers/sat/MiniCardTest.java | 24 +- .../org/logicng/solvers/sat/MiniSatTest.java | 8 +- 22 files changed, 251 insertions(+), 230 deletions(-) diff --git a/src/main/java/org/logicng/datastructures/EncodingResult.java b/src/main/java/org/logicng/datastructures/EncodingResult.java index ec796e60..dda989e3 100644 --- a/src/main/java/org/logicng/datastructures/EncodingResult.java +++ b/src/main/java/org/logicng/datastructures/EncodingResult.java @@ -121,7 +121,7 @@ else if (this.miniSat != null) { litNum = lit.phase() ? index * 2 : (index * 2) ^ 1; clauseVec.push(litNum); } - this.miniSat.underlyingSolver().addClause(clauseVec); + this.miniSat.underlyingSolver().addClause(clauseVec, null); this.miniSat.setSolverToUndef(); } else { for (Literal lit : literals) { @@ -155,7 +155,7 @@ else if (this.miniSat != null) { litNum = lit.phase() ? index * 2 : (index * 2) ^ 1; clauseVec.push(litNum); } - this.miniSat.underlyingSolver().addClause(clauseVec); + this.miniSat.underlyingSolver().addClause(clauseVec, null); this.miniSat.setSolverToUndef(); } else { for (Literal lit : literals) { diff --git a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java index 86f7f866..5af93659 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java +++ b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java @@ -42,6 +42,7 @@ final public class UNSATCore { private final List propositions; private final boolean isMUS; + private String tracecheck; /** * Constructs a new unsatisfiable core. @@ -69,6 +70,22 @@ public boolean isMUS() { return this.isMUS; } + /** + * Returns the proof in tracecheck format. + * @return the proof in tracecheck format + */ + public String tracecheck() { + return this.tracecheck; + } + + /** + * Sets the proof in tracecheck format. + * @param tracecheck the proof in tracecheck format + */ + public void setTracecheck(String tracecheck) { + this.tracecheck = tracecheck; + } + @Override public int hashCode() { return Objects.hash(this.propositions, this.isMUS); diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index e3205fa7..147f2228 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -68,20 +68,22 @@ public final class DRUPTrim { private static int SAT = 1; private static int EXTRA = 2; private static int MARK = 3; - private static int ERROR = -1; - public LNGVector compute(final LNGVector originalProblem, final LNGVector proof) { - Solver s = new Solver(originalProblem, proof); - // s.setTraceFile(traceFile); - // s.setLemmaFile(lemmaFile); + public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof, + final boolean trace) { + final DRUPResult result = new DRUPResult(); + Solver s = new Solver(originalProblem, proof, trace); boolean parseReturnValue = s.parse(); if (!parseReturnValue) { - System.out.print("c trivial UNSAT\ns VERIFIED\n"); - return new LNGVector<>(); + result.trivialUnsat = true; + result.unsatCore = new LNGVector<>(); } else { - System.out.print("s VERIFIED\n"); - return s.verify(); + result.trivialUnsat = false; + result.unsatCore = s.verify(); } + if (trace) + result.tracecheck = s.traceFile.toString(); + return result; } private static int getHash(int[] _marks, int mark, final LNGIntVector input) { @@ -106,76 +108,61 @@ private static class Solver { private LNGVector originalProblem; private LNGVector proof; private LNGVector core; - // private BufferedWriter lemmaFile; - // private BufferedWriter traceFile; + private StringBuilder traceFile; - LNGIntVector DB; // Alle Klauseln und Lemma immer mit führender Klausel ID (gerade) und endender 0 - int nVars; // Anzahl Variablen - int nClauses; // Anzahl Original Klauseln + LNGIntVector DB; + int nVars; + int nClauses; - int[] falseStack; // Belegungen mit false - int[] reason; // Reasons für die Belegungen - int[] _false; // falsifizierte Literale - int forcedPtr; // pointer in falseStack - int processedPtr; // pointer in falseStack - int assignedPtr; // pointer in falseStack + int[] falseStack; + int[] reason; + int[] _false; + int forcedPtr; + int processedPtr; + int assignedPtr; LNGIntVector adlist; - LNGIntVector[] _wlist; // Watchlists zu jedem Literal + LNGIntVector[] _wlist; int mask; boolean delete; int count; int basePtr; - int[] delStack; - int delinfoPtr; int adlemmas; - int lemmas; // wo beginnen die Lemmas ind er DB? + int lemmas; int arcs; int time; - private Solver(final LNGVector originalProblem, final LNGVector proof) { + private Solver(final LNGVector originalProblem, final LNGVector proof, final boolean trace) { this.originalProblem = originalProblem; this.proof = proof; this.core = new LNGVector<>(); this.delete = true; + if (trace) + this.traceFile = new StringBuilder(); } - // private void setTraceFile(final File traceFile) throws IOException { - // this.traceFile = new BufferedWriter(new FileWriter(traceFile)); - // } - // - // private void setLemmaFile(final File lemmaFile) throws IOException { - // this.lemmaFile = new BufferedWriter(new FileWriter(lemmaFile)); - // } - private void assign(int a) { - // System.out.println("ASSIGN " + a); this._false[index(-a)] = 1; this.falseStack[this.assignedPtr++] = -a; } private void addWatch(int cPtr, int index) { int lit = this.DB.get(cPtr + index); - // System.out.println("addWatch=" + lit); this._wlist[index(lit)].push((cPtr << 1) + this.mask); } private void addWatchLit(int l, int m) { - // System.out.println("addWatchLiteral l=" + l + " m=" + m); this._wlist[index(l)].push(m); } private void removeWatch(int cPtr, int index) { int lit = this.DB.get(cPtr + index); - // System.out.println("removeWatch=" + lit); - // System.out.println(" lit=" + lit); final LNGIntVector watch = this._wlist[index(lit)]; int watchPtr = 0; while (true) { int _cPtr = watch.get(watchPtr++) >> 1; - // System.out.println(" clause=" + this.DB.get(_cPtr)); if (_cPtr == cPtr) { watch.set(watchPtr - 1, this._wlist[index(lit)].back()); this._wlist[index(lit)].pop(); @@ -185,32 +172,24 @@ private void removeWatch(int cPtr, int index) { } private void markWatch(int clausePtr, int index, int offset) { - // System.out.println("MARK WATCH clause=" + this.DB.get(clausePtr - 1) + " index=" + index + " offset=" + offset); final LNGIntVector watch = this._wlist[index(this.DB.get(clausePtr + index))]; - // System.out.println(" markWatch=" + Arrays.toString(watch)); int clause = this.DB.get(clausePtr - offset - 1); int watchPtr = 0; while (true) { int _clause = (this.DB.get((watch.get(watchPtr++) >> 1) - 1)); if (_clause == clause) { watch.set(watchPtr - 1, watch.get(watchPtr - 1) | 1); - // System.out.println(" -> " + Arrays.toString(watch)); return; } } } private void markClause(int clausePtr, int index) { - // System.out.println("markClause clause=" + this.DB.get(clausePtr - 1) + " index=" + index); this.arcs++; - // if (this.traceFile != null) - // this.traceFile.write((this.DB.get(clausePtr + index - 1) >> 1) + " "); + if (this.traceFile != null) + this.traceFile.append(this.DB.get(clausePtr + index - 1) >> 1).append(" "); if ((this.DB.get(clausePtr + index - 1) & 1) == 0) { this.DB.set(clausePtr + index - 1, this.DB.get(clausePtr + index - 1) | 1); - // if (this.lemmaFile != null) { - // this.delStack[this.delinfoPtr++] = this.time; - // this.delStack[this.delinfoPtr++] = clausePtr + index; - // } if (this.DB.get(clausePtr + 1 + index) == 0) return; this.markWatch(clausePtr, index, -index); @@ -221,24 +200,20 @@ private void markClause(int clausePtr, int index) { } private void analyze(int clausePtr) { - // System.out.println("ANALYZE"); this.markClause(clausePtr, 0); - // System.out.println(this.DB); while (this.assignedPtr > 0) { int lit = this.falseStack[--this.assignedPtr]; - // System.out.println(" analyse lit=" + lit); if ((this._false[index(lit)] == MARK) && this.reason[Math.abs(lit)] != 0) this.markClause(this.reason[Math.abs(lit)], -1); this._false[index(lit)] = this.assignedPtr < this.forcedPtr ? 1 : 0; } - // if (this.traceFile != null) - // this.traceFile.write("0\n"); + if (this.traceFile != null) + this.traceFile.append("0\n"); this.processedPtr = this.forcedPtr; this.assignedPtr = this.forcedPtr; } private int propagate() { - // System.out.println("PROPAGATE"); int[] start = new int[2]; int check = 0; int i; @@ -254,38 +229,24 @@ private int propagate() { check ^= 1; while (!gotoFlipCheck && start[check] < this.assignedPtr) { // While unprocessed false literals lit = this.falseStack[start[check]++]; // Get first unprocessed literal - // System.out.println("lit=" + lit); watch = this._wlist[index(lit)]; // Obtain the first watch pointer int watchPtr = lit == _lit ? _watchPtr : 0; - // System.out.print("watchers="); - // for (int l = watchPtr; l < this._used[index(lit)]; l++) - // System.out.print(watch[l] + " "); - // System.out.println(); - while (watchPtr < watch.size()) { // While there are watched clauses (watched by lit) - // System.out.println(" iteration"); if ((watch.get(watchPtr) & 1) != check) { - // System.out.println(" case 1"); watchPtr++; continue; } int clausePtr = watch.get(watchPtr) / 2; // Get the clause from DB - // System.out.println(" clause=" + this.DB.get(clausePtr - 1)); if (this._false[index(-this.DB.get(clausePtr))] != 0 || this._false[index(-this.DB.get(clausePtr + 1))] != 0) { - // System.out.println(" case 2"); watchPtr++; continue; } - if (this.DB.get(clausePtr) == lit) { - // System.out.println(" case 3"); + if (this.DB.get(clausePtr) == lit) this.DB.set(clausePtr, this.DB.get(clausePtr + 1)); // Ensure that the other watched literal is in front - } boolean gotoNextClause = false; for (i = 2; this.DB.get(clausePtr + i) != 0; i++) { // Scan the non-watched literals - // System.out.println(" investigate lit=" + this.DB.get(clausePtr + i)); if (this._false[index(this.DB.get(clausePtr + i))] == 0) { // When clause[j] is not false, it is either true or unset - // System.out.println(" case 4"); this.DB.set(clausePtr + 1, this.DB.get(clausePtr + i)); this.DB.set(clausePtr + i, lit); // Swap literals this.addWatchLit(this.DB.get(clausePtr + 1), watch.get(watchPtr)); // Add the watch to the list of clause[1] @@ -299,11 +260,9 @@ private int propagate() { this.DB.set(clausePtr + 1, lit); watchPtr++; // Set lit at clause[1] and set next watch if (this._false[index(this.DB.get(clausePtr))] == 0) { // If the other watched literal is falsified, - // System.out.println(" case 5"); this.assign(this.DB.get(clausePtr)); // A unit clause is found, and the reason is set this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; if (check == 0) { - // System.out.println(" case 6"); start[0]--; _lit = lit; _watchPtr = watchPtr; @@ -343,11 +302,7 @@ int matchClause(final LNGIntVector clauselist, int[] _marks, int mark, final LNG return result; } } - System.out.printf("c error: could not match deleted clause "); - for (i = 0; i < input.size(); ++i) - System.out.printf("%d ", input.get(i)); - System.out.printf("\ns MATCHING ERROR\n"); - return ERROR; + throw new IllegalStateException("Could not match deleted clause"); } /** @@ -475,36 +430,26 @@ private LNGVector verify() { this.time = this.DB.get(lemmasPtr - 1); - // if (this.lemmaFile != null) { - // this.delStack = new int[this.count * 2]; - // this.delinfoPtr = 0; - // } - - // if (this.traceFile != null) - // this.traceFile.write(this.count + " 0 "); + if (this.traceFile != null) + this.traceFile.append(this.count).append(" 0 "); boolean gotoPostProcess = false; if (this.processedPtr < this.assignedPtr) - if (this.propagate() == UNSAT) { - System.out.printf("c got UNSAT propagating in the input instance\n"); + if (this.propagate() == UNSAT) gotoPostProcess = true; - } this.forcedPtr = this.processedPtr; if (!gotoPostProcess) { boolean gotoVerification = false; while (!gotoVerification) { - // System.out.println("ITERATION"); flag = false; buffer.clear(); this.time = this.DB.get(lemmasPtr - 1); clausePtr = lemmasPtr; do { ad = this.adlist.get(checked++); - // System.out.println(" ad=" + ad); d = ad & 1; int cPtr = ad >> 1; - // System.out.println(" c[1]=" + this.DB.get(cPtr + 1)); if (d != 0 && this.DB.get(cPtr + 1) != 0) { if (this.reason[Math.abs(this.DB.get(cPtr))] - 1 == ad >> 1) continue; @@ -543,7 +488,6 @@ private LNGVector verify() { if (buffer.size() == 1) { this.assign(buffer.get(0)); this.reason[Math.abs(buffer.get(0))] = clausePtr + 1; - // System.out.println("reason " + Math.abs(buffer[0]) + " = " + (clausePtr + 1)); this.forcedPtr = this.processedPtr; if (this.propagate() == UNSAT) gotoVerification = true; @@ -555,22 +499,14 @@ private LNGVector verify() { if (!gotoVerification) throw new IllegalStateException("No conflict"); - System.out.printf("c parsed formula and detected empty clause; start verification\n"); - this.forcedPtr = this.processedPtr; lemmasPtr = clausePtr - EXTRA; - // System.out.println("lemmaPtr=" + this.DB.get(lemmasPtr)); while (true) { - // System.out.println("VERIFICATION ITERATION"); buffer.clear(); - // System.out.println(this.DB); clausePtr = lemmasPtr + EXTRA; - // System.out.println(" clausePtr=" + this.DB.get(clausePtr)); - do { ad = this.adlist.get(--checked); - // System.out.println(" ad=" + ad); d = ad & 1; int cPtr = ad >> 1; if (d != 0 && this.DB.get(cPtr + 1) != 0) { @@ -582,7 +518,6 @@ private LNGVector verify() { } while (d != 0); this.time = this.DB.get(clausePtr - 1); - // System.out.println(" time=" + this.time); if (this.DB.get(clausePtr + 1) != 0) { this.removeWatch(clausePtr, 0); @@ -596,7 +531,6 @@ private LNGVector verify() { if (!gotoNextLemma) { while (this.DB.get(clausePtr) != 0) { int lit = this.DB.get(clausePtr++); - // System.out.println(" final analyze lit=" + lit); if (this._false[index(-lit)] != 0) flag = true; if (this._false[index(lit)] == 0) @@ -613,12 +547,12 @@ private LNGVector verify() { if ((this.time & 1) != 0) { int i; - // if (this.traceFile != null) { - // this.traceFile.write((this.time >> 1) + " "); - // for (i = 0; i < buffer.size(); i++) - // this.traceFile.write(buffer.get(i) + " "); - // this.traceFile.write("0 "); - // } + if (this.traceFile != null) { + this.traceFile.append(this.time >> 1).append(" "); + for (i = 0; i < buffer.size(); i++) + this.traceFile.append(buffer.get(i)).append(" "); + this.traceFile.append("0 "); + } for (i = 0; i < buffer.size(); ++i) { this.assign(-buffer.get(i)); this.reason[Math.abs(buffer.get(i))] = 0; @@ -642,8 +576,6 @@ private LNGVector verify() { count++; while (this.DB.get(lemmasPtr++) != 0) ; } - System.out.printf("c %d of %d clauses in core\n", count, this.nClauses); - lemmasPtr = 0; while (lemmasPtr + EXTRA <= lastPtr) { @@ -659,8 +591,6 @@ private LNGVector verify() { lemmasPtr++; } - // if (this.lemmaFile != null) - // this.delinfoPtr -= 2; int lcount = 0; count = 0; while (lemmasPtr + EXTRA <= endPtr) { @@ -670,47 +600,62 @@ private LNGVector verify() { if (marked != 0) count++; while (this.DB.get(lemmasPtr) != 0) { - // if (marked != 0 && this.lemmaFile != null) - // this.lemmaFile.write(this.DB.get(lemmasPtr) + " "); lemmasPtr++; } lemmasPtr++; - - // if (this.lemmaFile == null) - // continue; - // if (marked != 0) - // this.lemmaFile.write("0\n"); - // while (this.delStack[this.delinfoPtr] == this.time) { - // clausePtr = this.delStack[this.delinfoPtr + 1]; - // this.lemmaFile.write("d "); - // while (this.DB.get(clausePtr) != 0) - // this.lemmaFile.write(this.DB.get(clausePtr++) + " "); - // this.lemmaFile.write("0\n"); - // this.delinfoPtr -= 2; - // } } - System.out.printf("c %d of %d lemmas in core using %d resolution steps\n", count, lcount, this.arcs); - - // if (this.traceFile != null) { - // lemmasPtr = 0; - // while (lemmasPtr + EXTRA <= lastPtr) { - // marked = this.DB.get(lemmasPtr++) & 1; - // if (marked != 0) - // this.traceFile.write((this.DB.get(lemmasPtr - 1) >> 1) + " "); - // while (this.DB.get(lemmasPtr) != 0) { - // if (marked != 0) - // this.traceFile.write(this.DB.get(lemmasPtr) + " "); - // lemmasPtr++; - // } - // if (marked != 0) - // this.traceFile.write("0 0\n"); - // lemmasPtr++; - // } - // this.traceFile.close(); - // } + if (this.traceFile != null) { + lemmasPtr = 0; + while (lemmasPtr + EXTRA <= lastPtr) { + marked = this.DB.get(lemmasPtr++) & 1; + if (marked != 0) + this.traceFile.append(this.DB.get(lemmasPtr - 1) >> 1).append(" "); + while (this.DB.get(lemmasPtr) != 0) { + if (marked != 0) + this.traceFile.append(this.DB.get(lemmasPtr)).append(" "); + lemmasPtr++; + } + if (marked != 0) + this.traceFile.append("0 0\n"); + lemmasPtr++; + } + } return this.core; } } + + /** + * The result of an DRUP execution. + */ + public static class DRUPResult { + private boolean trivialUnsat; + private LNGVector unsatCore; + private String tracecheck; + + /** + * Returns {@code true} if the formula was trivially unsatisfiable. + * @return {@code true} if the formula was trivially unsatisfiable + */ + public boolean trivialUnsat() { + return trivialUnsat; + } + + /** + * Returns the unsat core of the formula. + * @return the unsat core of the formula + */ + public LNGVector unsatCore() { + return unsatCore; + } + + /** + * Returns the proof of the unsatisfiability in the tracecheck format. + * @return the proof of the unsatisfiability in the tracecheck format + */ + public String tracecheck() { + return tracecheck; + } + } } diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index 1d07ba99..33e8c01d 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -338,7 +338,7 @@ public String createNewVariableOnSolver(final String prefix) { } @Override - public UNSATCore unsatCore() { + public UNSATCore unsatCore(final boolean trace) { throw new UnsupportedOperationException("CleaneLing cannot compute unsat cores at the moment"); } diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index c0381438..4c0d2116 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -89,7 +89,6 @@ private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} private boolean incremental; private boolean initialPhase; private int nextStateId; - private Map clause2proposition; /** * Constructs a new SAT solver instance. @@ -121,7 +120,6 @@ private MiniSat(final FormulaFactory f, final SolverStyle solverStyle, final Min this.validStates = new LNGIntVector(); this.nextStateId = 0; this.ccEncoder = new CCEncoder(f); - this.clause2proposition = new HashMap<>(); } /** @@ -196,7 +194,7 @@ else if (constraint.comparator() == CType.LT && constraint.rhs() > 3) ((MiniCard) this.solver).addAtMost(generateClauseVector(Arrays.asList(constraint.operands())), constraint.rhs() - 1); else if (constraint.comparator() == CType.EQ && constraint.rhs() == 1) { ((MiniCard) this.solver).addAtMost(generateClauseVector(Arrays.asList(constraint.operands())), constraint.rhs()); - this.solver.addClause(generateClauseVector(Arrays.asList(constraint.operands()))); + this.solver.addClause(generateClauseVector(Arrays.asList(constraint.operands())), proposition); } else this.addClauseSet(constraint.cnf(), proposition); } else { @@ -233,9 +231,7 @@ public CCIncrementalData addIncrementalCC(PBConstraint cc) { @Override protected void addClause(final Formula formula, final Proposition proposition) { this.result = UNDEF; - this.solver.addClause(generateClauseVector(formula.literals())); - if (this.config.proofGeneration() && proposition != null) - this.clause2proposition.put(formula, proposition); + this.solver.addClause(generateClauseVector(formula.literals()), proposition); } @Override @@ -243,7 +239,7 @@ protected void addClauseWithRelaxation(Variable relaxationVar, Formula formula) this.result = UNDEF; final SortedSet literals = new TreeSet<>(formula.literals()); literals.add(relaxationVar); - this.solver.addClause(generateClauseVector(literals)); + this.solver.addClause(generateClauseVector(literals), null); } @Override @@ -413,28 +409,43 @@ public boolean initialPhase() { } @Override - public UNSATCore unsatCore() { + public UNSATCore unsatCore(final boolean traceCheck) { if (!this.config.proofGeneration()) throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); if (this.result != FALSE) throw new IllegalStateException("A unsat core can only be generated if the formula is solved and is UNSAT"); DRUPTrim trimmer = new DRUPTrim(); - final LNGVector nativeCore = trimmer.compute(this.underlyingSolver().pgOriginalClauses(), this.underlyingSolver().pgProof()); - final LinkedHashSet propositions = new LinkedHashSet<>(); - for (LNGIntVector vector : nativeCore) { - List literals = new ArrayList<>(vector.size()); - for (int i = 0; i < vector.size(); i++) { - int lit = vector.get(i); - String varName = this.underlyingSolver().nameForIdx(Math.abs(lit) - 1); - literals.add(f.literal(varName, lit > 0)); - } - final Formula clause = f.or(literals); - Proposition proposition = this.clause2proposition.get(clause); + + Map clause2proposition = new HashMap<>(); + + final LNGVector clauses = new LNGVector<>(this.underlyingSolver().pgOriginalClauses().size()); + for (MiniSatStyleSolver.ProofInformation pi : this.underlyingSolver().pgOriginalClauses()) { + clauses.push(pi.clause()); + final Formula clause = getFormulaForVector(pi.clause()); + Proposition proposition = pi.proposition(); if (proposition == null) proposition = new StandardProposition(clause); - propositions.add(proposition); + clause2proposition.put(clause, proposition); + } + + final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof(), traceCheck); + final LinkedHashSet propositions = new LinkedHashSet<>(); + for (LNGIntVector vector : result.unsatCore()) + propositions.add(clause2proposition.get(getFormulaForVector(vector))); + final UNSATCore unsatCore = new UNSATCore(new ArrayList<>(propositions), false); + if (traceCheck) + unsatCore.setTracecheck(result.tracecheck()); + return unsatCore; + } + + private Formula getFormulaForVector(LNGIntVector vector) { + final List literals = new ArrayList<>(vector.size()); + for (int i = 0; i < vector.size(); i++) { + int lit = vector.get(i); + String varName = this.underlyingSolver().nameForIdx(Math.abs(lit) - 1); + literals.add(f.literal(varName, lit > 0)); } - return new UNSATCore(new ArrayList<>(propositions), false); + return f.or(literals); } @Override diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 5f832f9c..12ef70a8 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -409,9 +409,18 @@ public void setSolverToUndef() { /** * Returns an unsat core of the current problem. Only works if the SAT solver is configured to record the information - * required to generate a proof trace and an unsat core. Currently only works in the non-incremental mode of the - * solver or if no state saving/loading has taken place + * required to generate a proof trace and an unsat core. * @return the unsat core */ - public abstract UNSATCore unsatCore(); + public UNSATCore unsatCore() { + return unsatCore(false); + } + + /** + * Returns an unsat core of the current problem. Only works if the SAT solver is configured to record the information + * required to generate a proof trace and an unsat core. + * @param trace indicates if also a resolution proof in the tracecheck format should be produced + * @return the unsat core + */ + public abstract UNSATCore unsatCore(final boolean trace); } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java index 15ca45a2..034f876d 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java @@ -140,7 +140,7 @@ private void incrementalBuildWeightSolver(final WeightStrategy strategy) { for (int i = 0; i < nVars(); i++) newSATVariable(solver); for (int i = 0; i < nHard(); i++) - solver.addClause(hardClauses.get(i).clause()); + solver.addClause(hardClauses.get(i).clause(), null); if (symmetryStrategy) this.symmetryBreaking(); this.firstBuild = false; @@ -154,7 +154,7 @@ private void incrementalBuildWeightSolver(final WeightStrategy strategy) { for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); clause.push(softClauses.get(i).assumptionVar()); - solver.addClause(clause); + solver.addClause(clause, null); } } } @@ -182,10 +182,10 @@ private void relaxCore(final LNGIntVector conflict, int weightCore) { for (int j = 0; j < vars.size(); j++) clause.push(vars.get(j)); clause.push(l); - solver.addClause(clause); + solver.addClause(clause, null); clause.clear(); clause.push(softClauses.get(indexSoft).assumptionVar()); - solver.addClause(clause); + solver.addClause(clause, null); if (symmetryStrategy) { softMapping.push(new LNGIntVector(softMapping.get(indexSoft))); softMapping.get(indexSoft).clear(); @@ -214,7 +214,7 @@ private void relaxCore(final LNGIntVector conflict, int weightCore) { for (int j = 0; j < vars.size(); j++) clause.push(vars.get(j)); clause.push(l); - solver.addClause(clause); + solver.addClause(clause, null); clause.clear(); vars.clear(); clause = new LNGIntVector(softClauses.get(indexSoft).clause()); @@ -232,10 +232,10 @@ private void relaxCore(final LNGIntVector conflict, int weightCore) { for (int j = 0; j < vars.size(); j++) clause.push(vars.get(j)); clause.push(l); - solver.addClause(clause); + solver.addClause(clause, null); clause.clear(); clause.push(softClauses.get(indexSoft).assumptionVar()); - solver.addClause(clause); + solver.addClause(clause, null); if (symmetryStrategy) { softMapping.push(new LNGIntVector()); relaxationMapping.push(new LNGIntVector()); @@ -289,7 +289,7 @@ private void symmetryBreaking() { symClause = new Pair<>(var(coreIntersectionCurrent[coreList.get(k)].get(j)), var(coreIntersection[coreList.get(k)].get(m))); if (!duplicatedSymmetryClauses.contains(symClause)) { duplicatedSymmetryClauses.add(symClause); - solver.addClause(clause); + solver.addClause(clause, null); nbSymmetryClauses++; if (symmetryBreakingLimit == nbSymmetryClauses) break; diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java index bc6f1c71..5fdc6b96 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java @@ -247,14 +247,14 @@ private MiniSatStyleSolver rebuildSolver(int minWeight) { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); for (int i = 0; i < nSoft(); i++) { if (softClauses.get(i).weight() < minWeight) continue; final LNGIntVector clause = new LNGIntVector(softClauses.get(i).clause()); for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); - s.addClause(clause); + s.addClause(clause, null); } return s; } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java index c17c30c2..7d2ace5c 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java @@ -213,13 +213,13 @@ private MiniSatStyleSolver rebuildSolver() { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); LNGIntVector clause; for (int i = 0; i < nSoft(); i++) { clause = new LNGIntVector(softClauses.get(i).clause()); for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); - s.addClause(clause); + s.addClause(clause, null); } return s; } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java index 6a0cbf60..b4bd07a8 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java @@ -271,13 +271,13 @@ private MiniSatStyleSolver rebuildSolver() { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); LNGIntVector clause; for (int i = 0; i < nSoft(); i++) { clause = new LNGIntVector(softClauses.get(i).clause()); for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); - s.addClause(clause); + s.addClause(clause, null); } return s; } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java index 83f860b8..185e948c 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java @@ -142,7 +142,7 @@ private MiniSatStyleSolver rebuildWeightSolver(final WeightStrategy strategy) { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); if (this.symmetryStrategy) this.symmetryBreaking(); LNGIntVector clause = new LNGIntVector(); @@ -156,7 +156,7 @@ private MiniSatStyleSolver rebuildWeightSolver(final WeightStrategy strategy) { clause.push(softClauses.get(i).relaxationVars().get(j)); clause.push(softClauses.get(i).assumptionVar()); - s.addClause(clause); + s.addClause(clause, null); } } return s; @@ -168,7 +168,7 @@ protected MiniSatStyleSolver rebuildSolver() { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); if (this.symmetryStrategy) this.symmetryBreaking(); LNGIntVector clause; @@ -177,7 +177,7 @@ protected MiniSatStyleSolver rebuildSolver() { for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); clause.push(softClauses.get(i).assumptionVar()); - s.addClause(clause); + s.addClause(clause, null); } return s; } @@ -187,7 +187,7 @@ private MiniSatStyleSolver rebuildHardSolver() { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); return s; } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java index 8e3cf1fe..489497ec 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java @@ -383,11 +383,11 @@ else if (!foundUpperBound(ubCost, null)) bmoEncodings.push(e); firstEncoding.push(true); for (int i = 0; i < encodingAssumptions.size(); i++) - this.solver.addClause(encodingAssumptions.get(i)); + this.solver.addClause(encodingAssumptions.get(i), null); encodingAssumptions.clear(); for (int i = 0; i < nSoft(); i++) { if (!this.activeSoft.get(i) && previousWeight == softClauses.get(i).weight()) - this.solver.addClause(not(softClauses.get(i).assumptionVar())); + this.solver.addClause(not(softClauses.get(i).assumptionVar()), null); if (currentWeight == softClauses.get(i).weight()) this.assumptions.push(not(softClauses.get(i).assumptionVar())); if (this.activeSoft.get(i)) { @@ -461,13 +461,13 @@ private MiniSatStyleSolver rebuildSolver() { for (int i = 0; i < nVars(); i++) newSATVariable(s); for (int i = 0; i < nHard(); i++) - s.addClause(hardClauses.get(i).clause()); + s.addClause(hardClauses.get(i).clause(), null); LNGIntVector clause; for (int i = 0; i < nSoft(); i++) { clause = new LNGIntVector(softClauses.get(i).clause()); for (int j = 0; j < softClauses.get(i).relaxationVars().size(); j++) clause.push(softClauses.get(i).relaxationVars().get(j)); - s.addClause(clause); + s.addClause(clause, null); } return s; } diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java index 1f643083..e72c9c13 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java @@ -94,7 +94,7 @@ void addUnitClause(final MiniSatStyleSolver s, int a, int blocking) { this.clause.push(a); if (blocking != LIT_UNDEF) this.clause.push(blocking); - s.addClause(this.clause); + s.addClause(this.clause, null); this.clause.clear(); } @@ -123,7 +123,7 @@ void addBinaryClause(final MiniSatStyleSolver s, int a, int b, int blocking) { this.clause.push(b); if (blocking != LIT_UNDEF) this.clause.push(blocking); - s.addClause(this.clause); + s.addClause(this.clause, null); this.clause.clear(); } @@ -155,7 +155,7 @@ void addTernaryClause(final MiniSatStyleSolver s, int a, int b, int c, int block this.clause.push(c); if (blocking != LIT_UNDEF) this.clause.push(blocking); - s.addClause(this.clause); + s.addClause(this.clause, null); this.clause.clear(); } @@ -190,7 +190,7 @@ private void addQuaternaryClause(final MiniSatStyleSolver s, int a, int b, int c this.clause.push(d); if (blocking != LIT_UNDEF) this.clause.push(blocking); - s.addClause(this.clause); + s.addClause(this.clause, null); this.clause.clear(); } } diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java index 904082fa..7eab1673 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java @@ -315,7 +315,7 @@ private void adder(final MiniSatStyleSolver s, int mod, final LNGIntVector upper clause.push(not(b)); clause.push(c); if (clause.size() > 1) { - s.addClause(clause); + s.addClause(clause, null); } } LNGIntVector clause = new LNGIntVector(); @@ -327,7 +327,7 @@ private void adder(final MiniSatStyleSolver s, int mod, final LNGIntVector upper if (d != LIT_ERROR && d != LIT_UNDEF) clause.push(d); if (clause.size() > 1) { - s.addClause(clause); + s.addClause(clause, null); } } } diff --git a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java index e0099fa3..d7067bc7 100644 --- a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java +++ b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java @@ -82,6 +82,7 @@ import org.logicng.collections.LNGVector; import org.logicng.datastructures.Tristate; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; import org.logicng.solvers.datastructures.LNGBoundedIntQueue; import org.logicng.solvers.datastructures.LNGBoundedLongQueue; import org.logicng.solvers.datastructures.MSClause; @@ -219,7 +220,7 @@ public int newVar(boolean sign, boolean dvar) { } @Override - public boolean addClause(final LNGIntVector ps) { + public boolean addClause(final LNGIntVector ps, final Proposition proposition) { assert decisionLevel() == 0; int p; int i; @@ -228,7 +229,7 @@ public boolean addClause(final LNGIntVector ps) { LNGIntVector vec = new LNGIntVector(ps.size()); for (i = 0; i < ps.size(); i++) vec.push((var(ps.get(i)) + 1) * (-2 * (sign(ps.get(i)) ? 1 : 0) + 1)); - this.pgOriginalClauses.push(vec); + this.pgOriginalClauses.push(new ProofInformation(vec, proposition)); } if (!ok) return false; diff --git a/src/main/java/org/logicng/solvers/sat/MiniCard.java b/src/main/java/org/logicng/solvers/sat/MiniCard.java index a8bae286..162b155d 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniCard.java +++ b/src/main/java/org/logicng/solvers/sat/MiniCard.java @@ -55,6 +55,7 @@ import org.logicng.collections.LNGVector; import org.logicng.datastructures.Tristate; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; import org.logicng.solvers.datastructures.MSClause; import org.logicng.solvers.datastructures.MSVariable; import org.logicng.solvers.datastructures.MSWatcher; @@ -118,7 +119,7 @@ public int newVar(boolean sign, boolean dvar) { } @Override - public boolean addClause(final LNGIntVector ps) { + public boolean addClause(final LNGIntVector ps, final Proposition proposition) { assert decisionLevel() == 0; if (!ok) return false; diff --git a/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java b/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java index 2aac3dad..944e7c55 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java @@ -49,6 +49,7 @@ import org.logicng.collections.LNGVector; import org.logicng.datastructures.Tristate; import org.logicng.handlers.SATHandler; +import org.logicng.propositions.Proposition; import org.logicng.solvers.datastructures.MSClause; import org.logicng.solvers.datastructures.MSVariable; import org.logicng.solvers.datastructures.MSWatcher; @@ -116,7 +117,7 @@ public int newVar(boolean sign, boolean dvar) { } @Override - public boolean addClause(final LNGIntVector ps) { + public boolean addClause(final LNGIntVector ps, final Proposition proposition) { assert decisionLevel() == 0; if (!ok) return false; diff --git a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java index 941ee728..fe5dd6fd 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java @@ -117,7 +117,7 @@ public abstract class MiniSatStyleSolver { protected boolean canceledByHandler; // Proof generating information - protected LNGVector pgOriginalClauses; + protected LNGVector pgOriginalClauses; protected LNGVector pgProof; /** @@ -307,21 +307,23 @@ public void addName(final String name, int id) { /** * Adds a unit clause to the solver. - * @param lit the unit clause's literal + * @param lit the unit clause's literal + * @param proposition a proposition (if required for proof tracing) * @return {@code true} if the clause was added successfully, {@code false} otherwise */ - public boolean addClause(int lit) { + public boolean addClause(int lit, final Proposition proposition) { final LNGIntVector unit = new LNGIntVector(1); unit.push(lit); - return this.addClause(unit); + return this.addClause(unit, proposition); } /** * Adds a clause to the solver. * @param ps the literals of the clause + * @param proposition a proposition (if required for proof tracing) * @return {@code true} if the clause was added successfully, {@code false} otherwise */ - public abstract boolean addClause(final LNGIntVector ps); + public abstract boolean addClause(final LNGIntVector ps, final Proposition proposition); /** * Solves the formula currently stored in the solver. Returns {@link Tristate#TRUE} if the formula is satisfiable (SAT), @@ -614,7 +616,7 @@ protected void claBumpActivity(final MSClause c) { * Returns the original clauses for proof generation. * @return the original clauses for proof generation */ - public LNGVector pgOriginalClauses() { + public LNGVector pgOriginalClauses() { return this.pgOriginalClauses; } @@ -653,4 +655,38 @@ public String toString() { sb.append("#learnts lits ").append(learntsLiterals).append("\n"); return sb.toString(); } + + /** + * Class containing the information required for generating a proof. + */ + public static class ProofInformation { + private final LNGIntVector clause; + private final Proposition proposition; + + /** + * Constructor. + * @param clause the clause + * @param proposition the proposition + */ + public ProofInformation(LNGIntVector clause, Proposition proposition) { + this.clause = clause; + this.proposition = proposition; + } + + /** + * Returns the clause. + * @return the clause + */ + public LNGIntVector clause() { + return clause; + } + + /** + * Returns the proposition. + * @return the proposition + */ + public Proposition proposition() { + return proposition; + } + } } diff --git a/src/main/java/org/logicng/transformations/UnitPropagation.java b/src/main/java/org/logicng/transformations/UnitPropagation.java index cc8e02f9..b7f4fa76 100644 --- a/src/main/java/org/logicng/transformations/UnitPropagation.java +++ b/src/main/java/org/logicng/transformations/UnitPropagation.java @@ -85,11 +85,11 @@ public void add(final Formula formula) { case FALSE: case LITERAL: case OR: - this.addClause(generateClauseVector(cnf)); + this.addClause(generateClauseVector(cnf), null); break; case AND: for (Formula op : cnf) - this.addClause(generateClauseVector(op)); + this.addClause(generateClauseVector(op), null); break; } } diff --git a/src/test/java/org/logicng/solvers/sat/GlucoseSyrupTest.java b/src/test/java/org/logicng/solvers/sat/GlucoseSyrupTest.java index babca77a..44ceec81 100644 --- a/src/test/java/org/logicng/solvers/sat/GlucoseSyrupTest.java +++ b/src/test/java/org/logicng/solvers/sat/GlucoseSyrupTest.java @@ -20,7 +20,7 @@ public void prepare() { gs.newVar(true, true); gs.newVar(true, true); gs.newVar(true, true); - gs.addClause(clause(1, 2, 3)); + gs.addClause(clause(1, 2, 3), null); } @Test(expected = UnsupportedOperationException.class) diff --git a/src/test/java/org/logicng/solvers/sat/MiniCardTest.java b/src/test/java/org/logicng/solvers/sat/MiniCardTest.java index 64812778..9d55192e 100644 --- a/src/test/java/org/logicng/solvers/sat/MiniCardTest.java +++ b/src/test/java/org/logicng/solvers/sat/MiniCardTest.java @@ -49,10 +49,10 @@ public void testAnalyzeFinalWithClauses() { solver.newVar(true, true); solver.newVar(true, true); solver.newVar(true, true); - solver.addClause(clause(1, 2, 3)); - solver.addClause(clause(-1, -2)); - solver.addClause(clause(-1, -3)); - solver.addClause(clause(-2, -3)); + solver.addClause(clause(1, 2, 3), null); + solver.addClause(clause(-1, -2), null); + solver.addClause(clause(-1, -3), null); + solver.addClause(clause(-2, -3), null); Assert.assertEquals(TRUE, solver.solve(null)); Assert.assertEquals(FALSE, solver.solve(null, clause(1, 2))); } @@ -64,7 +64,7 @@ public void testAnalyzeFinalWithAtMost() { solver.newVar(true, true); solver.newVar(true, true); solver.newVar(true, true); - solver.addClause(clause(1, 2, 3)); + solver.addClause(clause(1, 2, 3), null); solver.addAtMost(clause(1, 2, 3), 2); Assert.assertEquals(TRUE, solver.solve(null)); Assert.assertEquals(TRUE, solver.solve(null, clause(1, 2))); @@ -90,23 +90,23 @@ public void testIncDecWithAtMost() { solver.newVar(true, true); solver.newVar(true, true); solver.newVar(true, true); - solver.addClause(clause(1, 2, 3)); + solver.addClause(clause(1, 2, 3), null); solver.addAtMost(clause(1, 2, 3), 2); Assert.assertEquals(TRUE, solver.solve(null)); final int[] original = solver.saveState(); - solver.addClause(clause(1)); + solver.addClause(clause(1), null); Assert.assertEquals(TRUE, solver.solve(null)); - solver.addClause(clause(2)); + solver.addClause(clause(2), null); Assert.assertEquals(TRUE, solver.solve(null)); - solver.addClause(clause(3)); + solver.addClause(clause(3), null); Assert.assertEquals(FALSE, solver.solve(null)); solver.loadState(original); Assert.assertEquals(TRUE, solver.solve(null)); solver.addAtMost(clause(1, 2, 3), 1); Assert.assertEquals(TRUE, solver.solve(null)); - solver.addClause(clause(2)); + solver.addClause(clause(2), null); Assert.assertEquals(TRUE, solver.solve(null)); - solver.addClause(clause(3)); + solver.addClause(clause(3), null); Assert.assertEquals(FALSE, solver.solve(null)); solver.loadState(original); Assert.assertEquals(TRUE, solver.solve(null)); @@ -119,7 +119,7 @@ public void testToString() { solver.newVar(true, true); solver.newVar(true, true); solver.newVar(true, true); - solver.addClause(clause(1, 2, 3)); + solver.addClause(clause(1, 2, 3), null); solver.addAtMost(clause(1, 2, 3), 2); String expected = "ok true\n" + diff --git a/src/test/java/org/logicng/solvers/sat/MiniSatTest.java b/src/test/java/org/logicng/solvers/sat/MiniSatTest.java index 4511ed6d..b107264d 100644 --- a/src/test/java/org/logicng/solvers/sat/MiniSatTest.java +++ b/src/test/java/org/logicng/solvers/sat/MiniSatTest.java @@ -51,10 +51,10 @@ public void testAnalyzeFinal() { solver.newVar(true, true); solver.newVar(true, true); solver.newVar(true, true); - solver.addClause(clause(1, 2, 3)); - solver.addClause(clause(-1, -2)); - solver.addClause(clause(-1, -3)); - solver.addClause(clause(-2, -3)); + solver.addClause(clause(1, 2, 3), null); + solver.addClause(clause(-1, -2), null); + solver.addClause(clause(-1, -3), null); + solver.addClause(clause(-2, -3), null); Assert.assertEquals(TRUE, solver.solve(null)); Assert.assertEquals(FALSE, solver.solve(null, clause(1, 2))); } From ad874b2b99b3dffb46720ba4cb2f7188e82a07f0 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 01:54:53 +0200 Subject: [PATCH 03/22] first version of MiniSat inc/dec proof generation (yet untested) --- .../org/logicng/solvers/sat/GlucoseSyrup.java | 2 +- .../logicng/solvers/sat/MiniSat2Solver.java | 89 ++++++++++++++++--- 2 files changed, 80 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java index d7067bc7..2751cbdf 100644 --- a/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java +++ b/src/main/java/org/logicng/solvers/sat/GlucoseSyrup.java @@ -234,8 +234,8 @@ public boolean addClause(final LNGIntVector ps, final Proposition proposition) { if (!ok) return false; ps.sort(); - boolean flag = false; + boolean flag = false; LNGIntVector oc = null; if (this.config.proofGeneration) { oc = new LNGIntVector(); diff --git a/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java b/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java index 944e7c55..35f825ff 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSat2Solver.java @@ -119,12 +119,30 @@ public int newVar(boolean sign, boolean dvar) { @Override public boolean addClause(final LNGIntVector ps, final Proposition proposition) { assert decisionLevel() == 0; - if (!ok) - return false; - ps.sort(); int p; int i; int j; + if (this.config.proofGeneration) { + LNGIntVector vec = new LNGIntVector(ps.size()); + for (i = 0; i < ps.size(); i++) + vec.push((var(ps.get(i)) + 1) * (-2 * (sign(ps.get(i)) ? 1 : 0) + 1)); + this.pgOriginalClauses.push(new ProofInformation(vec, proposition)); + } + if (!ok) + return false; + ps.sort(); + + boolean flag = false; + LNGIntVector oc = null; + if (this.config.proofGeneration) { + oc = new LNGIntVector(); + for (i = 0, p = LIT_UNDEF; i < ps.size(); i++) { + oc.push(ps.get(i)); + if (value(ps.get(i)) == Tristate.TRUE || ps.get(i) == not(p) || value(ps.get(i)) == Tristate.FALSE) + flag = true; + } + } + for (i = 0, j = 0, p = LIT_UNDEF; i < ps.size(); i++) if (value(ps.get(i)) == Tristate.TRUE || ps.get(i) == not(p)) return true; @@ -133,6 +151,21 @@ else if (value(ps.get(i)) != Tristate.FALSE && ps.get(i) != p) { ps.set(j++, p); } ps.removeElements(i - j); + + if (flag) { + LNGIntVector vec = new LNGIntVector(ps.size() + 1); + vec.push(1); + for (i = 0; i < ps.size(); i++) + vec.push((var(ps.get(i)) + 1) * (-2 * (sign(ps.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + + vec = new LNGIntVector(oc.size()); + vec.push(-1); + for (i = 0; i < oc.size(); i++) + vec.push((var(oc.get(i)) + 1) * (-2 * (sign(oc.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + if (ps.empty()) { ok = false; return false; @@ -169,6 +202,12 @@ public Tristate solve(final SATHandler handler) { status = search((int) (restBase * restartFirst)); currRestarts++; } + + if (this.config.proofGeneration) { + if (status == Tristate.FALSE) + this.pgProof.push(new LNGIntVector(1, 0)); + } + if (status == Tristate.TRUE) { model = new LNGBooleanVector(vars.size()); for (final MSVariable v : this.vars) @@ -193,7 +232,7 @@ public void reset() { * Saves and returns the solver state expressed as an integer array which stores the length of the internal data * structures. The array has length 5 and has the following layout: *

- * {@code | current solver state | #vars | #clauses | #learnt clauses | #unit clauses |} + * {@code | current solver state | #vars | #clauses | #learnt clauses | #unit clauses | #pg original | #pg proof} * @return the current solver state */ @Override @@ -201,12 +240,16 @@ public int[] saveState() { if (!incremental) throw new IllegalStateException("Cannot save a state when the incremental mode is deactivated"); int[] state; - state = new int[5]; + state = new int[7]; state[0] = ok ? 1 : 0; state[1] = vars.size(); state[2] = clauses.size(); state[3] = learnts.size(); state[4] = unitClauses.size(); + if (this.config.proofGeneration) { + state[5] = pgOriginalClauses.size(); + state[6] = pgProof.size(); + } return state; } @@ -235,6 +278,12 @@ public void loadState(int[] state) { uncheckedEnqueue(this.unitClauses.get(i), null); this.ok = propagate() == null; } + if (this.config.proofGeneration) { + int newPgOriginalSize = Math.min(state[5], this.pgOriginalClauses.size()); + this.pgOriginalClauses.shrinkTo(newPgOriginalSize); + int newPgProofSize = Math.min(state[6], this.pgProof.size()); + this.pgProof.shrinkTo(newPgProofSize); + } } @Override @@ -271,6 +320,14 @@ protected void detachClause(final MSClause c) { @Override protected void removeClause(final MSClause c) { + if (this.config.proofGeneration) { + final LNGIntVector vec = new LNGIntVector(c.size()); + vec.push(-1); + for (int i = 0; i < c.size(); i++) + vec.push((var(c.get(i)) + 1) * (-2 * (sign(c.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + detachClause(c); if (locked(c)) v(c.get(0)).setReason(null); @@ -431,11 +488,14 @@ protected void removeSatisfied(final LNGVector cs) { removeClause(cs.get(i)); else { assert value(c.get(0)) == Tristate.UNDEF && value(c.get(1)) == Tristate.UNDEF; - for (int k = 2; k < c.size(); k++) - if (value(c.get(k)) == Tristate.FALSE) { - c.set(k--, c.get(c.size() - 1)); - c.pop(); - } + if (!this.config.proofGeneration) { + // This simplification does not work with proof generation + for (int k = 2; k < c.size(); k++) + if (value(c.get(k)) == Tristate.FALSE) { + c.set(k--, c.get(c.size() - 1)); + c.pop(); + } + } cs.set(j++, cs.get(i)); } } @@ -491,6 +551,15 @@ private Tristate search(int nofConflicts) { LNGIntVector learntClause = new LNGIntVector(); analyze(confl, learntClause); cancelUntil(analyzeBtLevel); + + if (this.config.proofGeneration) { + final LNGIntVector vec = new LNGIntVector(learntClause.size()); + vec.push(1); + for (int i = 0; i < learntClause.size(); i++) + vec.push((var(learntClause.get(i)) + 1) * (-2 * (sign(learntClause.get(i)) ? 1 : 0) + 1)); + this.pgProof.push(vec); + } + if (learntClause.size() == 1) { uncheckedEnqueue(learntClause.get(0), null); this.unitClauses.push(learntClause.get(0)); From 7000497b9a23b0e3f720e88bad4f47389b3be424 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 12:13:59 +0200 Subject: [PATCH 04/22] Removed tracecheck, added first tests --- .../explanations/unsatcores/UNSATCore.java | 17 - .../unsatcores/drup/DRUPTrim.java | 113 +- .../java/org/logicng/solvers/CleaneLing.java | 2 +- .../java/org/logicng/solvers/MiniSat.java | 14 +- .../java/org/logicng/solvers/SATSolver.java | 12 +- .../logicng/explanations/drup/DRUPTest.java | 107 + tests/drup/avg_input.cnf | 17089 ++++++++++++++++ tests/drup/pg4_input.cnf | 46 + tests/drup/simple_input.cnf | 9 + 9 files changed, 17293 insertions(+), 116 deletions(-) create mode 100644 src/test/java/org/logicng/explanations/drup/DRUPTest.java create mode 100644 tests/drup/avg_input.cnf create mode 100644 tests/drup/pg4_input.cnf create mode 100644 tests/drup/simple_input.cnf diff --git a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java index 5af93659..86f7f866 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java +++ b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java @@ -42,7 +42,6 @@ final public class UNSATCore { private final List propositions; private final boolean isMUS; - private String tracecheck; /** * Constructs a new unsatisfiable core. @@ -70,22 +69,6 @@ public boolean isMUS() { return this.isMUS; } - /** - * Returns the proof in tracecheck format. - * @return the proof in tracecheck format - */ - public String tracecheck() { - return this.tracecheck; - } - - /** - * Sets the proof in tracecheck format. - * @param tracecheck the proof in tracecheck format - */ - public void setTracecheck(String tracecheck) { - this.tracecheck = tracecheck; - } - @Override public int hashCode() { return Objects.hash(this.propositions, this.isMUS); diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index 147f2228..aec793e2 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -69,10 +69,9 @@ public final class DRUPTrim { private static int EXTRA = 2; private static int MARK = 3; - public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof, - final boolean trace) { + public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof) { final DRUPResult result = new DRUPResult(); - Solver s = new Solver(originalProblem, proof, trace); + Solver s = new Solver(originalProblem, proof); boolean parseReturnValue = s.parse(); if (!parseReturnValue) { result.trivialUnsat = true; @@ -81,8 +80,6 @@ public DRUPResult compute(final LNGVector originalProblem, final L result.trivialUnsat = false; result.unsatCore = s.verify(); } - if (trace) - result.tracecheck = s.traceFile.toString(); return result; } @@ -108,7 +105,6 @@ private static class Solver { private LNGVector originalProblem; private LNGVector proof; private LNGVector core; - private StringBuilder traceFile; LNGIntVector DB; int nVars; @@ -116,13 +112,13 @@ private static class Solver { int[] falseStack; int[] reason; - int[] _false; + int[] internalFalse; int forcedPtr; int processedPtr; int assignedPtr; LNGIntVector adlist; - LNGIntVector[] _wlist; + LNGIntVector[] wlist; int mask; boolean delete; @@ -134,45 +130,43 @@ private static class Solver { int arcs; int time; - private Solver(final LNGVector originalProblem, final LNGVector proof, final boolean trace) { + private Solver(final LNGVector originalProblem, final LNGVector proof) { this.originalProblem = originalProblem; this.proof = proof; this.core = new LNGVector<>(); this.delete = true; - if (trace) - this.traceFile = new StringBuilder(); } private void assign(int a) { - this._false[index(-a)] = 1; + this.internalFalse[index(-a)] = 1; this.falseStack[this.assignedPtr++] = -a; } private void addWatch(int cPtr, int index) { int lit = this.DB.get(cPtr + index); - this._wlist[index(lit)].push((cPtr << 1) + this.mask); + this.wlist[index(lit)].push((cPtr << 1) + this.mask); } private void addWatchLit(int l, int m) { - this._wlist[index(l)].push(m); + this.wlist[index(l)].push(m); } private void removeWatch(int cPtr, int index) { int lit = this.DB.get(cPtr + index); - final LNGIntVector watch = this._wlist[index(lit)]; + final LNGIntVector watch = this.wlist[index(lit)]; int watchPtr = 0; while (true) { int _cPtr = watch.get(watchPtr++) >> 1; if (_cPtr == cPtr) { - watch.set(watchPtr - 1, this._wlist[index(lit)].back()); - this._wlist[index(lit)].pop(); + watch.set(watchPtr - 1, this.wlist[index(lit)].back()); + this.wlist[index(lit)].pop(); return; } } } private void markWatch(int clausePtr, int index, int offset) { - final LNGIntVector watch = this._wlist[index(this.DB.get(clausePtr + index))]; + final LNGIntVector watch = this.wlist[index(this.DB.get(clausePtr + index))]; int clause = this.DB.get(clausePtr - offset - 1); int watchPtr = 0; while (true) { @@ -186,8 +180,6 @@ private void markWatch(int clausePtr, int index, int offset) { private void markClause(int clausePtr, int index) { this.arcs++; - if (this.traceFile != null) - this.traceFile.append(this.DB.get(clausePtr + index - 1) >> 1).append(" "); if ((this.DB.get(clausePtr + index - 1) & 1) == 0) { this.DB.set(clausePtr + index - 1, this.DB.get(clausePtr + index - 1) | 1); if (this.DB.get(clausePtr + 1 + index) == 0) @@ -196,19 +188,17 @@ private void markClause(int clausePtr, int index) { this.markWatch(clausePtr, 1 + index, -index); } while (this.DB.get(clausePtr) != 0) - this._false[index(this.DB.get(clausePtr++))] = MARK; + this.internalFalse[index(this.DB.get(clausePtr++))] = MARK; } private void analyze(int clausePtr) { this.markClause(clausePtr, 0); while (this.assignedPtr > 0) { int lit = this.falseStack[--this.assignedPtr]; - if ((this._false[index(lit)] == MARK) && this.reason[Math.abs(lit)] != 0) + if ((this.internalFalse[index(lit)] == MARK) && this.reason[Math.abs(lit)] != 0) this.markClause(this.reason[Math.abs(lit)], -1); - this._false[index(lit)] = this.assignedPtr < this.forcedPtr ? 1 : 0; + this.internalFalse[index(lit)] = this.assignedPtr < this.forcedPtr ? 1 : 0; } - if (this.traceFile != null) - this.traceFile.append("0\n"); this.processedPtr = this.forcedPtr; this.assignedPtr = this.forcedPtr; } @@ -229,7 +219,7 @@ private int propagate() { check ^= 1; while (!gotoFlipCheck && start[check] < this.assignedPtr) { // While unprocessed false literals lit = this.falseStack[start[check]++]; // Get first unprocessed literal - watch = this._wlist[index(lit)]; // Obtain the first watch pointer + watch = this.wlist[index(lit)]; // Obtain the first watch pointer int watchPtr = lit == _lit ? _watchPtr : 0; while (watchPtr < watch.size()) { // While there are watched clauses (watched by lit) @@ -238,7 +228,7 @@ private int propagate() { continue; } int clausePtr = watch.get(watchPtr) / 2; // Get the clause from DB - if (this._false[index(-this.DB.get(clausePtr))] != 0 || this._false[index(-this.DB.get(clausePtr + 1))] != 0) { + if (this.internalFalse[index(-this.DB.get(clausePtr))] != 0 || this.internalFalse[index(-this.DB.get(clausePtr + 1))] != 0) { watchPtr++; continue; } @@ -246,12 +236,12 @@ private int propagate() { this.DB.set(clausePtr, this.DB.get(clausePtr + 1)); // Ensure that the other watched literal is in front boolean gotoNextClause = false; for (i = 2; this.DB.get(clausePtr + i) != 0; i++) { // Scan the non-watched literals - if (this._false[index(this.DB.get(clausePtr + i))] == 0) { // When clause[j] is not false, it is either true or unset + if (this.internalFalse[index(this.DB.get(clausePtr + i))] == 0) { // When clause[j] is not false, it is either true or unset this.DB.set(clausePtr + 1, this.DB.get(clausePtr + i)); this.DB.set(clausePtr + i, lit); // Swap literals this.addWatchLit(this.DB.get(clausePtr + 1), watch.get(watchPtr)); // Add the watch to the list of clause[1] - watch.set(watchPtr, this._wlist[index(lit)].back()); // Remove pointer - this._wlist[index(lit)].pop(); + watch.set(watchPtr, this.wlist[index(lit)].back()); // Remove pointer + this.wlist[index(lit)].pop(); gotoNextClause = true; break; } // Goto the next watched clause @@ -259,7 +249,7 @@ private int propagate() { if (!gotoNextClause) { this.DB.set(clausePtr + 1, lit); watchPtr++; // Set lit at clause[1] and set next watch - if (this._false[index(this.DB.get(clausePtr))] == 0) { // If the other watched literal is falsified, + if (this.internalFalse[index(this.DB.get(clausePtr))] == 0) { // If the other watched literal is falsified, this.assign(this.DB.get(clausePtr)); // A unit clause is found, and the reason is set this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; if (check == 0) { @@ -327,12 +317,12 @@ private boolean parse() { this.count = 1; this.falseStack = new int[this.nVars + 1]; this.reason = new int[this.nVars + 1]; - this._false = new int[2 * this.nVars + 3]; + this.internalFalse = new int[2 * this.nVars + 3]; - this._wlist = new LNGIntVector[2 * this.nVars + 3]; + this.wlist = new LNGIntVector[2 * this.nVars + 3]; for (int i = 1; i <= this.nVars; ++i) { - this._wlist[index(i)] = new LNGIntVector(); - this._wlist[index(-i)] = new LNGIntVector(); + this.wlist[index(i)] = new LNGIntVector(); + this.wlist[index(-i)] = new LNGIntVector(); } this.adlist = new LNGIntVector(); @@ -398,10 +388,10 @@ private boolean parse() { this.adlemmas = this.adlist.size() - 1; } if (nZeros > 0) { - if (buffer.empty() || ((buffer.size() == 1) && this._false[index(this.DB.get(clausePtr))] != 0)) + if (buffer.empty() || ((buffer.size() == 1) && this.internalFalse[index(this.DB.get(clausePtr))] != 0)) return false; else if (buffer.size() == 1) { - if (this._false[index(-this.DB.get(clausePtr))] == 0) { + if (this.internalFalse[index(-this.DB.get(clausePtr))] == 0) { this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; this.assign(this.DB.get(clausePtr)); } @@ -427,12 +417,8 @@ private LNGVector verify() { int endPtr = this.lemmas; int checked = this.adlemmas; final LNGIntVector buffer = new LNGIntVector(); - this.time = this.DB.get(lemmasPtr - 1); - if (this.traceFile != null) - this.traceFile.append(this.count).append(" 0 "); - boolean gotoPostProcess = false; if (this.processedPtr < this.assignedPtr) if (this.propagate() == UNSAT) @@ -460,9 +446,9 @@ private LNGVector verify() { while (this.DB.get(lemmasPtr) != 0) { int lit = this.DB.get(lemmasPtr++); - if (this._false[index(-lit)] != 0) + if (this.internalFalse[index(-lit)] != 0) flag = true; - if (this._false[index(lit)] == 0) { + if (this.internalFalse[index(lit)] == 0) { if (buffer.size() <= 1) { this.DB.set(lemmasPtr - 1, this.DB.get(clausePtr + buffer.size())); this.DB.set(clausePtr + buffer.size(), lit); @@ -531,15 +517,15 @@ private LNGVector verify() { if (!gotoNextLemma) { while (this.DB.get(clausePtr) != 0) { int lit = this.DB.get(clausePtr++); - if (this._false[index(-lit)] != 0) + if (this.internalFalse[index(-lit)] != 0) flag = true; - if (this._false[index(lit)] == 0) + if (this.internalFalse[index(lit)] == 0) buffer.push(lit); } if (flag && buffer.size() == 1) { do { - this._false[index(this.falseStack[--this.forcedPtr])] = 0; + this.internalFalse[index(this.falseStack[--this.forcedPtr])] = 0; } while (this.falseStack[this.forcedPtr] != -buffer.get(0)); this.processedPtr = this.forcedPtr; this.assignedPtr = this.forcedPtr; @@ -547,12 +533,6 @@ private LNGVector verify() { if ((this.time & 1) != 0) { int i; - if (this.traceFile != null) { - this.traceFile.append(this.time >> 1).append(" "); - for (i = 0; i < buffer.size(); i++) - this.traceFile.append(buffer.get(i)).append(" "); - this.traceFile.append("0 "); - } for (i = 0; i < buffer.size(); ++i) { this.assign(-buffer.get(i)); this.reason[Math.abs(buffer.get(i))] = 0; @@ -569,7 +549,6 @@ private LNGVector verify() { } int marked; - int count = 0; lemmasPtr = 0; while (lemmasPtr + EXTRA <= lastPtr) { if ((this.DB.get(lemmasPtr++) & 1) != 0) @@ -591,10 +570,8 @@ private LNGVector verify() { lemmasPtr++; } - int lcount = 0; count = 0; while (lemmasPtr + EXTRA <= endPtr) { - lcount++; this.time = this.DB.get(lemmasPtr); marked = this.DB.get(lemmasPtr++) & 1; if (marked != 0) @@ -604,23 +581,6 @@ private LNGVector verify() { } lemmasPtr++; } - - if (this.traceFile != null) { - lemmasPtr = 0; - while (lemmasPtr + EXTRA <= lastPtr) { - marked = this.DB.get(lemmasPtr++) & 1; - if (marked != 0) - this.traceFile.append(this.DB.get(lemmasPtr - 1) >> 1).append(" "); - while (this.DB.get(lemmasPtr) != 0) { - if (marked != 0) - this.traceFile.append(this.DB.get(lemmasPtr)).append(" "); - lemmasPtr++; - } - if (marked != 0) - this.traceFile.append("0 0\n"); - lemmasPtr++; - } - } return this.core; } } @@ -631,7 +591,6 @@ private LNGVector verify() { public static class DRUPResult { private boolean trivialUnsat; private LNGVector unsatCore; - private String tracecheck; /** * Returns {@code true} if the formula was trivially unsatisfiable. @@ -648,14 +607,6 @@ public boolean trivialUnsat() { public LNGVector unsatCore() { return unsatCore; } - - /** - * Returns the proof of the unsatisfiability in the tracecheck format. - * @return the proof of the unsatisfiability in the tracecheck format - */ - public String tracecheck() { - return tracecheck; - } } } diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index 33e8c01d..1d07ba99 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -338,7 +338,7 @@ public String createNewVariableOnSolver(final String prefix) { } @Override - public UNSATCore unsatCore(final boolean trace) { + public UNSATCore unsatCore() { throw new UnsupportedOperationException("CleaneLing cannot compute unsat cores at the moment"); } diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 4c0d2116..1056ef2b 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -409,11 +409,16 @@ public boolean initialPhase() { } @Override - public UNSATCore unsatCore(final boolean traceCheck) { + public UNSATCore unsatCore() { if (!this.config.proofGeneration()) throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); if (this.result != FALSE) throw new IllegalStateException("A unsat core can only be generated if the formula is solved and is UNSAT"); + if (this.underlyingSolver() instanceof MiniCard) + throw new IllegalStateException("Cannot compute an unsat core with MiniCard."); + if (this.underlyingSolver() instanceof GlucoseSyrup && this.config.incremental()) + throw new IllegalStateException("Cannot compute an unsat core with Glucose in incremental mode."); + DRUPTrim trimmer = new DRUPTrim(); Map clause2proposition = new HashMap<>(); @@ -428,14 +433,11 @@ public UNSATCore unsatCore(final boolean traceCheck) { clause2proposition.put(clause, proposition); } - final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof(), traceCheck); + final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof()); final LinkedHashSet propositions = new LinkedHashSet<>(); for (LNGIntVector vector : result.unsatCore()) propositions.add(clause2proposition.get(getFormulaForVector(vector))); - final UNSATCore unsatCore = new UNSATCore(new ArrayList<>(propositions), false); - if (traceCheck) - unsatCore.setTracecheck(result.tracecheck()); - return unsatCore; + return new UNSATCore(new ArrayList<>(propositions), false); } private Formula getFormulaForVector(LNGIntVector vector) { diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 12ef70a8..572c5c33 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -412,15 +412,5 @@ public void setSolverToUndef() { * required to generate a proof trace and an unsat core. * @return the unsat core */ - public UNSATCore unsatCore() { - return unsatCore(false); - } - - /** - * Returns an unsat core of the current problem. Only works if the SAT solver is configured to record the information - * required to generate a proof trace and an unsat core. - * @param trace indicates if also a resolution proof in the tracecheck format should be produced - * @return the unsat core - */ - public abstract UNSATCore unsatCore(final boolean trace); + public abstract UNSATCore unsatCore(); } diff --git a/src/test/java/org/logicng/explanations/drup/DRUPTest.java b/src/test/java/org/logicng/explanations/drup/DRUPTest.java new file mode 100644 index 00000000..ed9e33e4 --- /dev/null +++ b/src/test/java/org/logicng/explanations/drup/DRUPTest.java @@ -0,0 +1,107 @@ +/////////////////////////////////////////////////////////////////////////// +// __ _ _ ________ // +// / / ____ ____ _(_)____/ | / / ____/ // +// / / / __ \/ __ `/ / ___/ |/ / / __ // +// / /___/ /_/ / /_/ / / /__/ /| / /_/ / // +// /_____/\____/\__, /_/\___/_/ |_/\____/ // +// /____/ // +// // +// The Next Generation Logic Library // +// // +/////////////////////////////////////////////////////////////////////////// +// // +// Copyright 2015 Christoph Zengler // +// // +// Licensed under the Apache License, Version 2.0 (the "License"); // +// you may not use this file except in compliance with the License. // +// You may obtain a copy of the License at // +// // +// http://www.apache.org/licenses/LICENSE-2.0 // +// // +// Unless required by applicable law or agreed to in writing, software // +// distributed under the License is distributed on an "AS IS" BASIS, // +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // +// implied. See the License for the specific language governing // +// permissions and limitations under the License. // +// // +/////////////////////////////////////////////////////////////////////////// + +package org.logicng.explanations.drup; + +import org.assertj.core.api.SoftAssertions; +import org.junit.Test; +import org.logicng.datastructures.Tristate; +import org.logicng.explanations.unsatcores.UNSATCore; +import org.logicng.explanations.unsatcores.drup.DRUPTrim; +import org.logicng.formulas.Formula; +import org.logicng.formulas.FormulaFactory; +import org.logicng.io.parsers.ParserException; +import org.logicng.io.readers.DimacsReader; +import org.logicng.propositions.Proposition; +import org.logicng.solvers.MiniSat; +import org.logicng.solvers.SATSolver; +import org.logicng.solvers.sat.GlucoseConfig; +import org.logicng.solvers.sat.MiniSatConfig; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Unit tests for {@link DRUPTrim}. + * @version 1.2 + * @since 1.2 + */ +public class DRUPTest { + + final FormulaFactory f = new FormulaFactory(); + + private final SATSolver[] solvers; + + public DRUPTest() { + this.solvers = new SATSolver[3]; + this.solvers[0] = MiniSat.miniSat(f, new MiniSatConfig.Builder().proofGeneration(true).incremental(true).build()); + this.solvers[1] = MiniSat.miniSat(f, new MiniSatConfig.Builder().proofGeneration(true).incremental(false).build()); + this.solvers[2] = MiniSat.glucose(f, new MiniSatConfig.Builder().proofGeneration(true).incremental(false).build(), + new GlucoseConfig.Builder().build()); + } + + @Test + public void testUnsatCoresFromDimacs() throws IOException, ParserException { + final List> cnfs = new ArrayList<>(3); + cnfs.add(DimacsReader.readCNF("tests/drup/simple_input.cnf", f)); + cnfs.add(DimacsReader.readCNF("tests/drup/pg4_input.cnf", f)); + cnfs.add(DimacsReader.readCNF("tests/drup/avg_input.cnf", f)); + + for (SATSolver solver : this.solvers) { + for (List cnf : cnfs) { + solver.add(cnf); + assertThat(solver.sat()).isEqualTo(Tristate.FALSE); + final UNSATCore unsatCore = solver.unsatCore(); + verifyCore(unsatCore, cnf); + solver.reset(); + } + } + } + + /** + * Checks that each formula of the core is part of the original problem and that the core is really unsat. + * @param originalCore the original core + * @param cnf the original problem + */ + private void verifyCore(final UNSATCore originalCore, final List cnf) { + final List core = new ArrayList<>(originalCore.propositions().size()); + for (Proposition prop : originalCore.propositions()) + core.add(prop.formula(f)); + final SoftAssertions softly = new SoftAssertions(); + softly.assertThat(cnf).as("Core contains only original clauses").containsAll(core); + MiniSat solver = MiniSat.glucose(f, + new MiniSatConfig.Builder().proofGeneration(true).incremental(false).build(), + new GlucoseConfig.Builder().build()); + solver.add(core); + softly.assertThat(solver.sat()).as("Core is unsatisfiable").isEqualTo(Tristate.FALSE); + softly.assertAll(); + } +} diff --git a/tests/drup/avg_input.cnf b/tests/drup/avg_input.cnf new file mode 100644 index 00000000..c3e9a563 --- /dev/null +++ b/tests/drup/avg_input.cnf @@ -0,0 +1,17089 @@ +c A permuted SAT Competition 2002 formula with seed=683899196 +p cnf 648 17087 +-175 105 -422 -349 0 +629 176 -190 -536 0 +-499 -576 -216 -632 0 +407 -617 208 277 0 +-392 -87 -395 231 0 +-264 233 599 -353 0 +562 -252 28 -567 0 +-196 -636 32 243 0 +236 43 -48 -462 0 +551 -136 628 101 0 +-87 492 -395 237 0 +195 -222 -353 -571 0 +6 0 +283 161 256 -240 0 +10 466 -565 0 +-295 58 -568 431 0 +428 -443 -122 144 0 +8 -484 -175 646 0 +164 -384 -225 -140 0 +5 -184 -75 608 0 +-366 10 0 +-622 -626 -141 305 0 +391 514 150 -559 0 +-328 453 491 -597 0 +-631 606 -163 -320 0 +-470 555 315 80 0 +-433 246 -257 -527 0 +-366 453 0 +28 -413 -567 0 +142 -384 535 232 0 +340 -240 592 406 0 +365 -521 -111 245 0 +-226 490 -612 519 0 +385 -542 -501 466 0 +-264 -251 -353 -482 0 +574 -287 24 464 0 +-473 -170 519 603 0 +294 213 -320 312 0 +-92 -509 560 -400 0 +577 11 0 +-395 -52 392 0 +449 557 -384 -194 0 +-603 -374 -320 -383 0 +19 -413 279 628 0 +390 -318 -52 502 0 +284 -181 0 +-251 -264 -482 -278 0 +8 -643 0 +-647 -353 -571 -30 0 +-483 -216 408 -92 0 +-547 577 -187 367 0 +-248 -257 641 -157 0 +-115 121 602 -637 0 +112 -605 0 +326 245 -310 -330 0 +202 -240 -473 0 +155 -467 -117 -510 0 +566 -41 441 -568 0 +343 36 -597 -362 0 +566 -443 -122 441 0 +431 306 259 152 0 +-36 -166 -395 0 +245 445 0 +-336 -216 -531 -535 0 +-45 243 242 -636 0 +565 -125 -366 318 0 +439 -189 569 -567 0 +2 522 456 448 0 +-192 -215 -209 -522 0 +-543 205 551 0 +-486 496 18 -196 0 +214 410 0 +118 443 368 568 430 -390 -306 506 587 0 +100 37 453 40 0 +-379 234 -125 -523 0 +-614 -336 531 381 0 +-125 -579 -156 0 +-322 32 -348 -196 0 +-465 -461 600 407 0 +-120 -264 614 560 0 +28 205 0 +-589 -263 -87 -149 0 +188 -289 -87 -616 0 +108 140 -359 164 0 +466 268 10 -293 0 +-319 -163 0 +-372 386 0 +-216 -384 232 535 0 +455 -478 382 91 0 +242 -513 -547 0 +-225 -140 641 11 0 +-33 335 198 474 0 +-524 -510 153 288 0 +-537 22 -216 -576 0 +629 103 203 544 0 +-576 11 -63 0 +-86 -430 -231 -125 0 +-433 32 246 290 0 +-191 200 449 0 +439 634 423 -106 0 +-527 288 511 350 0 +-216 -92 -582 0 +-218 -583 0 +112 78 -524 153 0 +-536 331 560 0 +-352 301 480 -71 0 +32 378 112 0 +629 60 -92 -585 0 +208 407 -69 -514 0 +-547 108 0 +-89 397 -241 -65 0 +-336 16 0 +151 -409 608 -429 0 +451 -562 -553 -223 0 +629 599 -536 233 0 +-405 171 437 508 0 +396 632 -418 -194 0 +641 -22 11 -513 0 +21 508 150 -365 0 +132 49 -41 -258 0 +397 -627 25 410 0 +290 450 35 -384 0 +-285 -73 0 +-446 -399 -520 0 +-615 -473 -143 519 0 +214 -550 178 0 +-354 -421 -46 410 0 +-310 326 407 208 0 +-643 -597 0 +60 -417 -585 103 0 +154 323 -582 212 0 +-71 -201 0 +-419 97 0 +-355 -76 -462 1 0 +541 -317 150 -309 0 +-177 -240 0 +508 337 -360 0 +-287 214 0 +-209 -394 6 -204 0 +-298 -35 -384 363 0 +-376 310 -360 -330 0 +352 235 0 +628 106 279 0 +-128 406 163 0 +242 112 -348 0 +-144 245 -122 130 0 +-124 230 452 34 0 +-587 -430 0 +-292 431 172 598 0 +-128 -486 -45 496 0 +50 189 -553 261 0 +334 610 0 +-39 -110 -583 532 0 +-48 -584 -471 -257 0 +-72 -237 -436 -597 0 +33 -372 -564 515 0 +-473 -429 0 +-353 99 -96 -264 0 +392 10 -239 -395 0 +94 -148 407 -600 0 +113 126 -336 121 0 +-632 -499 -110 -39 0 +528 -138 288 -478 0 +17 -270 -573 54 0 +-216 -38 0 +608 -223 0 +-278 -417 0 +335 555 373 0 +-253 335 198 398 0 +358 241 -634 80 0 +254 243 626 0 +10 466 542 324 0 +-125 411 0 +641 9 476 610 0 +-37 235 214 -550 0 +-470 335 -564 0 +-647 -30 -336 381 0 +-440 498 184 -393 0 +-109 10 0 +121 95 647 -4 0 +-630 -336 0 +426 -613 575 -39 0 +-506 -125 0 +258 172 -111 0 +-593 -34 -188 -263 0 +-631 -603 88 -383 0 +258 -111 -70 -443 0 +-481 -42 -529 519 0 +-111 -295 58 -443 0 +-109 523 -129 -395 0 +78 603 -578 -170 0 +519 -283 256 -174 0 +483 476 0 +-461 -54 333 -270 0 +55 361 -194 377 0 +211 -311 625 2 0 +109 -129 -167 40 0 +586 -128 0 +198 548 136 0 +548 217 -398 -604 0 +-369 -485 620 -25 0 +-287 423 0 +-588 371 -52 -587 0 +535 363 232 577 0 +253 -160 -564 386 0 +284 -273 -630 -364 0 +-309 -388 -500 -506 0 +629 -92 -594 185 0 +-297 -19 555 -412 0 +-511 290 563 108 0 +-129 -65 0 +-113 -182 381 95 0 +-368 -559 66 162 0 +-76 406 -592 -590 0 +-268 40 452 540 0 +18 -631 0 +-576 274 613 308 0 +-422 -65 -72 -349 0 +-20 -581 4 0 +170 -640 288 -59 0 +-69 -82 -514 172 0 +5 -42 0 +-84 172 -61 -183 0 +101 -136 410 198 0 +-42 519 -590 -592 0 +-330 -617 277 172 0 +-646 452 -395 -565 0 +492 466 -193 237 0 +-438 477 217 548 0 +431 -568 -512 0 +-73 233 599 629 0 +555 -345 294 0 +-559 259 152 -368 0 +112 -467 -76 -117 0 +557 332 449 11 0 +457 -579 0 +306 -162 501 -52 0 +-278 20 99 -96 0 +-451 227 386 -53 0 +-257 -359 -478 140 0 +-34 -188 466 452 0 +-365 21 2 448 0 +-368 -430 0 +269 -92 381 190 0 +390 -468 -125 0 +-576 224 526 435 0 +531 16 629 -614 0 +-82 211 -132 -437 0 +503 438 40 358 0 +-430 -502 -497 -41 0 +-336 -110 533 0 +-38 -460 103 62 0 +509 -278 -180 -197 0 +361 641 -257 55 0 +-490 359 112 -51 0 +323 -181 212 -582 0 +-444 -429 -297 -135 0 +-364 -38 16 -273 0 +63 -596 -527 -236 0 +17 -148 54 407 0 +40 -25 620 358 0 +-573 416 -186 -401 0 +-372 -240 -444 -135 0 +-193 -443 0 +-503 -550 8 221 0 +-25 620 -46 -175 0 +-216 -571 -442 -507 0 +352 358 -550 556 0 +94 -405 2 -600 0 +324 542 10 -395 0 +290 -563 377 432 0 +-64 69 -204 -405 0 +625 172 -270 -311 0 +-510 -226 -626 490 0 +206 -128 -473 173 0 +343 -57 -289 -491 0 +323 -190 638 176 0 +-278 -212 -286 554 0 +150 -61 0 +-317 -258 0 +-436 -289 105 -237 0 +-51 242 0 +105 -538 228 24 0 +-612 -467 0 +-587 -61 -291 648 0 +-621 601 -38 103 0 +-375 -76 256 505 0 +-289 380 -87 0 +-232 290 -47 -39 0 +-100 452 0 +386 227 -135 -444 0 +-177 146 -578 -7 0 +-122 306 -162 0 +300 -76 112 -43 0 +-511 563 32 -547 0 +57 -443 411 280 0 +283 -320 161 -374 0 +-115 99 0 +-163 5 -374 606 0 +306 -193 231 0 +-477 -373 -567 28 0 +-270 -130 -81 -68 0 +-428 457 306 -419 0 +112 -348 -322 32 0 +-166 156 466 165 0 +-309 502 -587 0 +590 -76 -612 -254 0 +-244 577 517 -216 0 +455 -378 -478 355 0 +7 -553 -261 498 0 +-401 600 -573 0 +-373 -223 -477 -71 0 +-299 -297 198 -74 0 +-645 -461 -270 -427 0 +345 551 294 179 0 +431 -506 86 317 0 +-635 -72 -556 -67 0 +-534 198 0 +151 -372 -177 -409 0 +511 -51 112 350 0 +450 -547 35 377 0 +158 294 198 325 0 +554 -417 222 -389 0 +595 -540 -635 358 0 +-578 339 0 +62 284 332 0 +-25 -550 214 620 0 +294 -320 -345 -525 0 +-473 18 -174 -283 0 +-553 -325 50 0 +-163 256 5 606 0 +161 -177 256 283 0 +-133 -517 -384 -200 0 +-193 -289 491 0 +466 -501 -542 -193 0 +-257 -563 641 432 0 +24 105 -607 -90 0 +-353 633 -518 -92 0 +-74 294 -564 -299 0 +-81 -617 277 -330 0 +-46 -604 -398 548 0 +-159 -204 14 -376 0 +-7 146 -473 498 0 +-209 399 0 +453 -119 -307 -635 0 +-38 377 -298 -35 0 +358 487 -549 335 0 +-443 -61 0 +-485 -79 -241 -89 0 +-632 -499 377 -38 0 +-175 -72 -139 -464 0 +-400 -509 154 121 0 +377 35 308 450 0 +636 -527 -257 -450 0 +-553 451 -562 50 0 +-253 198 398 80 0 +294 -325 498 -493 0 +359 32 -490 112 0 +-66 -347 208 -41 0 +407 448 341 -541 0 +154 121 113 126 0 +342 43 -626 236 0 +-408 -92 281 560 0 +-192 6 -394 -148 0 +-45 350 511 108 0 +-37 235 358 24 0 +332 334 0 +471 290 377 27 0 +434 105 -580 -597 0 +378 -596 191 342 0 +234 8 -646 -565 0 +-473 -320 0 +530 342 155 0 +-267 -527 -147 155 0 +-617 277 211 -82 0 +-573 -330 54 17 0 +214 301 -352 628 0 +604 40 167 -485 0 +363 9 476 577 0 +-175 415 -561 -46 0 +-582 -336 212 121 0 +272 -534 -302 -137 0 +-309 306 0 +167 -46 604 -175 0 +-190 176 20 -417 0 +-181 113 323 126 0 +486 -612 316 -51 0 +52 618 231 0 +-372 516 -564 -639 0 +44 308 377 433 0 +112 170 -59 78 0 +217 -262 -229 40 0 +-263 -593 307 -459 0 +335 398 -253 -564 0 +288 -527 528 0 +234 -125 -362 36 0 +-158 410 555 354 0 +-45 -141 0 +-648 -193 -368 97 0 +-115 176 381 -190 0 +55 -194 -576 361 0 +423 439 -425 0 +-263 -87 107 220 0 +105 -90 -607 -65 0 +-110 577 225 442 0 +11 242 0 +-476 30 575 -571 0 +168 -48 -196 141 0 +106 15 -297 555 0 +-175 -72 -607 -90 0 +-473 519 199 622 0 +234 -72 -107 67 0 +-501 -542 466 -87 0 +-235 402 -567 -479 0 +-179 551 -619 80 0 +256 642 -76 226 0 +-71 50 -252 562 0 +-459 -72 -597 307 0 +644 342 11 248 0 +620 214 -25 -369 0 +2 -401 0 +202 -473 -153 519 0 +-81 21 -365 -330 0 +463 343 618 -289 0 +49 407 625 -311 0 +224 -185 238 16 0 +-587 -152 -87 362 0 +-264 -182 0 +493 -202 -374 498 0 +-221 10 -558 589 0 +-148 -573 0 +-646 -597 -565 453 0 +-330 -341 338 -376 0 +575 -269 344 -571 0 +-13 50 345 179 0 +502 -125 -318 390 0 +-509 -285 0 +-192 -209 -600 94 0 +362 -152 306 343 0 +11 -605 513 322 0 +-370 275 -393 -76 0 +358 415 0 +-576 -133 -517 308 0 +-319 -374 -320 409 0 +439 386 -562 451 0 +-41 -391 -368 424 0 +114 479 80 279 0 +-530 -486 0 +603 -640 -393 -170 0 +272 -13 -53 -451 0 +-429 302 -393 615 0 +105 -100 -579 -36 0 +-349 40 8 -422 0 +-631 406 0 +-403 18 375 288 0 +218 -110 -126 154 0 +-553 -75 272 -184 0 +262 -72 -324 24 0 +625 -311 49 -330 0 +-39 -432 -218 142 0 +-118 280 -87 57 0 +-430 -41 -472 0 +-265 539 -277 -401 0 +-532 11 641 -63 0 +-148 -64 69 -82 0 +-285 195 -222 -630 0 +237 -193 -289 492 0 +40 561 8 239 0 +455 -243 481 -640 0 +582 -435 103 -38 0 +284 -238 377 -44 0 +332 -499 -632 224 0 +-497 445 -502 -506 0 +332 11 -526 313 0 +-336 460 420 121 0 +546 -353 -73 -203 0 +-287 438 -65 503 0 +290 242 -584 -471 0 +-194 -157 -248 377 0 +-415 410 -569 397 0 +112 -226 78 490 0 +40 -90 0 +-578 202 -240 0 +512 427 245 -111 0 +361 55 641 11 0 +-125 501 -162 390 0 +-157 641 -248 11 0 +-137 -320 -302 294 0 +-320 339 615 302 0 +178 470 214 -567 0 +-143 -578 -615 -128 0 +-309 441 -368 566 0 +-111 -326 -81 -259 0 +-564 -425 -356 -71 0 +465 -309 211 -31 0 +-450 -433 0 +49 598 -309 -292 0 +-240 207 -552 -553 0 +554 -417 602 -637 0 +-122 152 259 390 0 +-436 -237 -395 8 0 +256 199 622 304 0 +582 -435 -630 284 0 +600 448 -204 -465 0 +-213 439 -553 -114 0 +290 -316 -367 32 0 +-572 88 294 412 0 +-576 364 157 224 0 +524 -478 -644 -196 0 +460 420 323 154 0 +332 -38 0 +363 544 -181 0 +396 -200 0 +-574 -567 -485 619 0 +476 9 -216 -576 0 +608 189 198 0 +-175 8 100 37 0 +-61 292 -77 -568 0 +-493 -325 -553 227 0 +-200 332 0 +306 431 428 144 0 +-619 279 548 -179 0 +334 -194 0 +-76 406 -529 -481 0 +-289 105 -463 349 0 +-270 -209 0 +-177 -372 -340 639 0 +273 482 -181 -353 0 +-289 538 105 -296 0 +407 -321 -148 469 0 +-215 -148 -192 -522 0 +-287 -175 604 167 0 +-295 58 -587 -41 0 +455 143 -128 147 0 +-175 10 0 +-290 274 -513 0 +-597 453 -36 -100 0 +-383 -603 -374 88 0 +-72 523 -109 -366 0 +202 -153 406 304 0 +-510 -143 -374 -615 0 +627 93 28 543 0 +256 -283 18 -174 0 +528 -138 242 -612 0 +-360 310 -148 -82 0 +-336 -460 62 -216 0 +255 410 -287 413 0 +-110 377 483 187 0 +431 49 -259 -326 0 +-490 -612 -48 0 +377 290 -191 -488 0 +322 -478 513 11 0 +273 103 482 -278 0 +311 -192 -520 -376 0 +-128 -612 -489 -528 0 +217 145 -567 -201 0 +-177 -372 7 -261 0 +-166 343 0 +-612 -43 300 -128 0 +-319 409 256 -177 0 +211 172 0 +183 -219 -41 306 0 +-125 -430 -149 0 +-71 217 413 255 0 +-369 646 452 0 +-161 494 -429 205 0 +-535 284 -531 -630 0 +207 -534 -552 227 0 +-74 -372 -299 -564 0 +32 141 168 112 0 +-309 -118 -58 0 +-257 108 0 +-115 -353 0 +431 -568 428 144 0 +138 133 242 -200 0 +-111 -118 0 +-632 -499 -384 -110 0 +-180 560 0 +-148 -330 134 -611 0 +584 -138 0 +-352 -287 301 335 0 +-635 260 89 453 0 +114 479 28 -567 0 +612 467 -348 0 +-527 644 248 -257 0 +-578 -429 0 +577 -44 -238 363 0 +-87 -118 -97 0 +617 291 49 -41 0 +294 498 -261 7 0 +423 315 -470 50 0 +591 -125 -23 390 0 +-129 -124 646 -484 0 +448 -183 -84 -309 0 +-520 -209 407 311 0 +112 -128 -524 153 0 +206 519 0 +-257 613 377 274 0 +-409 205 5 151 0 +131 326 0 +-616 390 343 0 +217 574 -550 464 0 +608 439 0 +-640 -226 490 -196 0 +-98 -263 607 8 0 +288 -524 153 305 0 +24 -643 -503 221 0 +217 -398 -604 335 0 +-417 103 273 482 0 +-573 -94 0 +237 411 -579 492 0 +-570 242 247 -547 0 +-41 172 -326 -259 0 +-605 -462 0 +377 449 -257 557 0 +-175 -72 -556 -67 0 +339 -429 53 -127 0 +247 -478 -570 -194 0 +-92 -278 -400 -509 0 +284 298 641 0 +211 497 -346 445 0 +-644 32 0 +-496 78 -447 -473 0 +452 -296 466 538 0 +-573 64 0 +-557 -39 -83 -110 0 +-643 24 -119 -307 0 +269 560 -181 190 0 +62 142 -460 -336 0 +226 256 304 642 0 +250 0 +-230 397 549 -65 0 +-175 -129 0 +531 -614 -181 323 0 +-612 -128 -141 -622 0 +424 -391 -368 445 0 +254 -196 -246 342 0 +-111 -81 -84 -183 0 +150 465 445 -31 0 +467 242 -462 0 +103 583 -195 284 0 +105 -175 580 -620 0 +-410 -303 -619 0 +179 345 50 386 0 +-71 -474 -595 214 0 +140 242 -359 164 0 +172 85 0 +533 -602 -278 -630 0 +439 -136 423 101 0 +554 -389 222 -278 0 +145 -287 335 -201 0 +-516 279 80 -303 0 +-320 -202 -374 493 0 +-430 259 152 85 0 +363 -384 -583 532 0 +78 -196 0 +458 284 499 -544 0 +-107 452 -395 0 +-468 -368 385 -492 0 +647 -4 95 381 0 +-369 214 119 -178 0 +-437 448 -132 -204 0 +49 541 -192 0 +346 150 508 271 0 +-570 -48 290 247 0 +498 53 -127 -393 0 +-534 -562 451 439 0 +11 -576 -9 -247 0 +273 121 -336 482 0 +-555 179 516 0 +-485 402 0 +-523 -379 -289 343 0 +554 -60 -417 -329 0 +385 -125 0 +480 620 -635 -25 0 +-485 93 -354 -421 0 +448 347 2 321 0 +577 -216 187 483 0 +-75 198 -297 0 +232 535 284 332 0 +-370 275 256 -76 0 +364 377 284 157 0 +525 529 -578 227 0 +-393 -496 -447 -510 0 +-64 -204 69 -376 0 +-516 439 -303 628 0 +452 -366 0 +-143 -615 -374 304 0 +105 -454 -260 -597 0 +227 -374 0 +448 541 445 -317 0 +-285 458 269 190 0 +164 -384 -526 313 0 +-92 -533 -426 -216 0 +217 -369 -169 0 +-256 202 -615 0 +-376 -330 134 -611 0 +312 213 294 5 0 +-178 119 -287 -65 0 +-243 481 -45 -128 0 +325 137 0 +498 -357 383 294 0 +-71 -569 214 -415 0 +-420 638 381 -250 0 +-39 632 -418 290 0 +242 29 164 0 +327 -515 386 -240 0 +544 203 103 -353 0 +-465 600 -192 -461 0 +-369 -609 328 10 0 +-403 375 -510 288 0 +298 -123 -216 -571 0 +-166 234 0 +-39 308 532 0 +-605 -612 0 +-245 -172 -150 -208 -49 81 461 -448 -211 0 +-65 -287 167 604 0 +385 -587 0 +-330 -520 311 539 0 +294 345 -564 179 0 +-320 88 0 +16 123 -233 -353 0 +496 78 -45 -486 0 +647 -4 629 -73 0 +-22 613 0 +-462 486 242 316 0 +470 -485 -567 178 0 +386 498 -357 383 0 +-82 347 321 208 0 +-87 -318 0 +-340 639 -534 -177 0 +206 173 -631 305 0 +105 8 0 +-251 -482 20 -285 0 +445 -144 130 448 0 +-568 -70 258 -122 0 +386 50 -137 0 +140 -359 164 -51 0 +-535 284 -92 0 +577 432 -200 -563 0 +-301 93 -485 0 +322 342 -596 513 0 +407 -132 -437 -461 0 +24 167 -287 604 0 +423 50 562 -252 0 +24 328 -643 -609 0 +584 -527 0 +-59 170 519 -462 0 +304 -462 43 0 +-46 40 0 +131 448 -82 -416 0 +475 -359 48 0 +154 -614 531 381 0 +-271 -209 -446 508 0 +32 155 0 +342 308 -247 0 +235 -37 -287 -65 0 +-309 -568 26 -280 0 +335 229 -287 0 +-420 -353 -264 -250 0 +-510 -473 0 +-479 301 0 +235 -79 -37 402 0 +-221 -579 -643 589 0 +396 575 -344 488 0 +455 348 -586 -640 0 +569 93 -189 439 0 +-76 202 -393 0 +-523 -379 -579 343 0 +-170 603 18 256 0 +-529 -481 -393 -76 0 +211 -330 0 +447 -393 444 -240 0 +438 503 358 -635 0 +-536 -251 -482 381 0 +-39 -547 -63 -532 0 +-257 -282 -274 342 0 +-166 -162 -506 501 0 +294 88 312 213 0 +-626 -147 -267 -605 0 +114 335 479 551 0 +-506 -23 385 591 0 +-468 -492 -52 390 0 +172 -111 617 291 0 +334 -248 290 -157 0 +256 88 0 +324 542 -263 -593 0 +-243 -76 481 -612 0 +227 -202 406 493 0 +277 -401 -617 -461 0 +54 17 -405 508 0 +439 -299 -74 -553 0 +407 -68 208 -130 0 +-550 -72 0 +-426 284 -533 458 0 +21 82 -54 0 +-624 -553 -240 299 0 +371 -125 -588 -430 0 +-477 -564 628 -373 0 +-4 647 638 560 0 +-202 -393 493 -429 0 +-104 303 -71 358 0 +-17 -209 0 +303 -104 214 -71 0 +133 32 308 138 0 +-369 -593 260 89 0 +242 63 -236 164 0 +-547 577 -418 632 0 +-46 548 -634 241 0 +496 -486 -510 -626 0 +-547 -9 -247 377 0 +525 529 -177 256 0 +28 -303 -516 423 0 +-169 548 425 480 0 +-13 -534 0 +531 560 -181 -614 0 +-534 28 451 -562 0 +608 -564 135 373 0 +-61 306 -291 648 0 +-87 -618 70 -118 0 +-536 -637 602 629 0 +331 -56 629 20 0 +-262 -229 -369 480 0 +18 -196 -254 590 0 +-298 -216 -384 -35 0 +-478 -196 254 -246 0 +551 -373 0 +-64 -192 69 -209 0 +-48 29 -194 -361 0 +-223 50 0 +-263 -459 -129 307 0 +546 99 0 +-393 173 206 -510 0 +-609 328 -72 -635 0 +332 -517 0 +-92 -582 381 212 0 +-569 -46 -415 335 0 +-315 -553 -207 50 0 +455 304 348 -586 0 +-267 -147 108 -612 0 +343 306 -380 -472 0 +-329 20 -353 -60 0 +543 410 627 555 0 +540 -268 -635 105 0 +-444 -429 608 -135 0 +-550 34 105 230 0 +295 -625 -81 -111 0 +-38 488 -576 -344 0 +136 -494 198 294 0 +37 100 -635 8 0 +199 -473 18 622 0 +103 458 0 +24 545 -46 422 0 +-372 412 -240 -572 0 +-492 -52 -587 -468 0 +358 402 0 +482 273 -285 103 0 +531 121 -181 -614 0 +294 444 88 0 +-345 205 -525 -429 0 +634 279 335 -106 0 +105 491 -328 -597 0 +-578 -202 493 227 0 +577 575 0 +-278 -647 0 +185 -594 121 -571 0 +377 308 -133 -517 0 +-642 227 116 -578 0 +608 279 106 15 0 +577 344 -110 0 +397 -145 609 -175 0 +-364 -336 -273 363 0 +10 221 -79 -503 0 +-547 -384 -563 432 0 +638 121 99 -96 0 +-240 386 552 0 +-440 184 406 5 0 +427 -81 85 512 0 +12 -401 68 266 0 +-193 234 0 +164 322 108 513 0 +-564 253 294 -160 0 +-138 528 288 342 0 +332 610 476 9 0 +-92 96 629 621 0 +471 -384 -200 27 0 +-45 -530 -128 314 0 +-562 294 198 0 +228 -72 -175 -538 0 +-289 324 -129 542 0 +-200 -418 108 0 +-371 31 -506 -559 0 +3 468 306 -111 0 +-286 323 -212 638 0 +-161 -534 272 494 0 +137 -223 -13 276 0 +294 53 5 0 +154 30 142 -476 0 +333 211 2 -54 0 +-633 103 83 284 0 +306 457 502 -318 0 +-541 -401 341 -461 0 +-417 458 -582 212 0 +-196 382 -48 91 0 +-196 -527 -29 403 0 +-476 30 -92 -216 0 +-602 103 -278 533 0 +304 147 -196 143 0 +615 -202 0 +291 -144 0 +-587 -559 0 +-297 -213 198 -114 0 +-643 34 24 0 +-382 288 -206 305 0 +164 -48 0 +-521 -111 -81 365 0 +119 217 -635 0 +342 -257 -449 -91 0 +487 -627 0 +341 448 -204 -541 0 +-270 514 172 0 +214 90 -124 421 0 +93 -549 402 487 0 +214 -438 -71 477 0 +208 245 0 +-320 -325 -297 -493 0 +594 629 20 210 0 +-109 -395 523 8 0 +315 -106 0 +108 -322 112 -348 0 +-257 332 -513 -22 0 +-177 256 302 0 +150 -465 -204 600 0 +-596 378 -527 191 0 +472 -118 -559 -512 0 +-240 529 -473 525 0 +232 -216 -39 535 0 +-491 457 -57 234 0 +-527 -596 140 -359 0 +641 -55 -601 284 0 +-380 457 0 +-182 -113 638 323 0 +-328 -643 491 234 0 +-346 49 -122 497 0 +-482 -353 20 -251 0 +-76 -370 275 -578 0 +554 623 -285 518 0 +-195 -110 -92 583 0 +-567 -634 402 241 0 +421 24 397 90 0 +229 -567 252 214 0 +-287 -46 0 +-289 -395 0 +-66 431 -347 211 0 +308 -478 513 322 0 +227 -42 525 529 0 +-132 208 -437 -82 0 +345 439 -553 179 0 +-626 -475 -527 102 0 +-558 452 589 -221 0 +-367 164 -316 108 0 +121 -73 -212 0 +332 471 -596 0 +18 155 0 +-178 358 -175 119 0 +-585 381 154 0 +-157 -248 -384 290 0 +233 -264 629 599 0 +-246 254 -478 288 0 +-192 -461 -617 277 0 +-96 -353 99 -73 0 +438 -550 503 217 0 +-586 348 519 -462 0 +290 242 -433 246 0 +-299 -74 555 -297 0 +539 68 -401 266 0 +-567 -201 145 -485 0 +-181 -533 0 +-534 5 0 +589 -558 -221 -593 0 +-513 -22 -39 -547 0 +-244 377 575 517 0 +10 523 -395 0 +121 531 154 -614 0 +-506 -58 379 -193 0 +323 -115 210 594 0 +-81 427 -61 512 0 +-609 24 -72 328 0 +-474 628 -595 214 0 +331 560 -73 -56 0 +217 301 628 -352 0 +-496 -447 519 -473 0 +-366 411 492 0 +-354 -421 402 93 0 +549 480 -230 -635 0 +569 93 -189 28 0 +134 -611 -148 -192 0 +-129 -454 -263 -260 0 +-240 -473 495 -312 0 +-417 -264 0 +279 -303 335 -516 0 +83 -633 -630 610 0 +-46 397 0 +-568 -152 457 362 0 +249 611 407 -461 0 +-429 -345 -525 608 0 +-126 -181 218 -38 0 +380 454 -263 -166 0 +-450 636 290 108 0 +498 386 412 -572 0 +-240 -13 -75 -184 0 +-347 -309 150 -66 0 +-59 -528 0 +10 453 0 +112 490 -226 -128 0 +-515 -553 28 0 +-320 639 205 -340 0 +224 -244 0 +-39 -238 -44 575 0 +214 -104 303 628 0 +147 18 143 -612 0 +47 11 -605 475 0 +390 306 0 +-368 501 -162 385 0 +-180 -353 0 +-473 489 440 519 0 +74 548 -564 -301 0 +140 -359 -51 -200 0 +465 245 -270 0 +-589 -149 -52 -597 0 +455 108 0 +-71 214 -549 487 0 +-175 -349 -422 -72 0 +208 347 321 -192 0 +-632 -499 -576 -38 0 +-459 -579 307 453 0 +16 -400 -278 -509 0 +-473 53 272 -127 0 +-374 305 -615 -143 0 +-490 359 -478 155 0 +-593 452 0 +397 -235 -479 335 0 +-559 441 566 -368 0 +-461 84 -192 159 0 +530 -48 570 455 0 +-36 -72 -100 -579 0 +603 -76 256 -170 0 +-333 -26 -41 448 0 +619 410 0 +-90 -607 10 -79 0 +-243 481 112 -128 0 +-631 -615 -143 305 0 +-536 -251 629 -482 0 +-45 78 590 -254 0 +-46 487 -549 548 0 +121 -181 602 0 +433 377 44 -194 0 +453 40 -139 -464 0 +621 -571 96 560 0 +-521 -122 365 172 0 +-7 272 -473 146 0 +-309 -500 -388 -587 0 +-232 -39 -47 308 0 +406 272 0 +155 519 0 +-485 -634 -71 241 0 +459 -414 234 343 0 +256 -429 0 +453 -597 -109 523 0 +-477 50 423 -373 0 +542 8 -263 324 0 +-354 -46 80 -421 0 +-366 411 -392 231 0 +-34 234 105 -188 0 +-559 -347 150 -66 0 +-647 -92 -30 629 0 +43 236 -462 32 0 +396 224 -601 -55 0 +347 407 321 208 0 +-209 -376 0 +-352 -567 402 301 0 +560 638 210 594 0 +322 513 -200 108 0 +-587 -588 -193 371 0 +409 5 256 -319 0 +286 -264 560 0 +-55 -601 575 396 0 +174 -350 -612 -128 0 +-524 -128 455 153 0 +279 357 -351 608 0 +-321 399 407 469 0 +620 480 40 -25 0 +466 -260 10 -454 0 +-528 155 0 +288 153 18 -524 0 +621 96 -285 -630 0 +288 147 143 18 0 +623 518 -278 554 0 +545 402 422 -79 0 +-435 363 582 -181 0 +-270 2 0 +-181 123 -233 121 0 +398 -71 -253 50 0 +139 -289 -156 453 0 +358 -550 464 574 0 +5 -553 0 +-181 -353 -647 -30 0 +-230 549 -46 -65 0 +390 -587 0 +-61 -292 598 -81 0 +-494 608 0 +641 224 476 9 0 +358 80 229 252 0 +-579 -260 -454 -72 0 +-240 227 0 +-368 -61 0 +-36 -100 -593 -558 0 +-484 646 -593 -124 0 +582 154 363 -435 0 +-430 85 -70 258 0 +610 332 -44 0 +-451 -53 -177 -13 0 +-461 -559 0 +-541 -401 341 245 0 +-522 -215 -192 539 0 +-478 -605 0 +-553 50 -494 136 0 +-643 67 -366 -107 0 +-185 154 142 238 0 +-148 311 -520 -82 0 +-68 -130 448 -82 0 +480 -479 -71 -235 0 +86 -587 431 317 0 +468 -309 3 -587 0 +-376 539 0 +-348 -48 -196 -322 0 +-263 8 -293 268 0 +-190 176 -264 -353 0 +-369 8 228 -538 0 +-519 1 -206 0 +599 210 0 +-335 71 -548 -628 -80 567 -410 -93 -423 0 +-38 377 426 -613 0 +-506 411 0 +610 458 123 0 +305 288 314 0 +-257 361 55 396 0 +-299 50 608 -74 0 +85 -368 0 +439 136 -553 -494 0 +-192 -69 -573 0 +32 -612 -147 0 +231 -392 -263 385 0 +-597 -589 -193 -149 0 +151 -240 -13 -409 0 +386 -451 -53 5 0 +416 -186 -204 -376 0 +316 486 -196 -527 0 +-536 222 -353 -389 0 +617 245 291 85 0 +-257 246 -433 -48 0 +-553 -564 -114 -213 0 +112 316 486 242 0 +-39 -9 -547 -247 0 +-296 -72 -366 538 0 +-7 161 -5 0 +498 -137 -302 386 0 +-148 407 134 -611 0 +224 -557 641 -83 0 +519 -76 0 +-263 -434 -87 588 0 +28 -74 -534 -299 0 +290 133 -51 138 0 +441 -559 211 0 +-505 -177 572 -473 0 +418 -200 -168 242 0 +220 107 -597 -193 0 +295 -41 -461 -625 0 +-196 242 0 +555 439 0 +411 -588 0 +-384 290 632 -418 0 +-43 -128 300 -45 0 +-180 599 0 +-567 -487 351 -223 0 +306 431 258 0 +-47 11 -232 -576 0 +549 -25 0 +-207 -315 608 50 0 +-196 -489 -528 -76 0 +-289 10 523 0 +508 150 -598 394 0 +420 16 460 -278 0 +205 551 253 -160 0 +-111 -259 -326 172 0 +-393 409 -240 -319 0 +8 -188 -395 -34 0 +390 385 0 +332 -133 308 0 +-569 423 -415 214 0 +457 57 280 -568 0 +-216 363 0 +126 103 113 -353 0 +358 -169 335 425 0 +431 172 465 -31 0 +458 610 -195 583 0 +-58 -430 -52 379 0 +-140 290 -225 -39 0 +458 -278 195 -222 0 +-309 521 -118 -591 0 +-405 -330 0 +16 273 482 -353 0 +-196 -254 -510 590 0 +-640 -153 406 202 0 +-442 -571 575 -507 0 +-168 418 -257 -605 0 +628 402 0 +-598 448 2 394 0 +-218 -432 396 610 0 +-168 418 -478 -257 0 +-580 10 466 434 0 +-215 -401 -522 539 0 +211 427 -309 512 0 +541 208 -317 431 0 +-229 -65 -262 397 0 +160 498 386 -606 0 +-212 -536 -353 -286 0 +503 -65 105 0 +-559 -443 0 +455 -45 0 +584 -462 -51 59 0 +339 -173 5 624 0 +-175 -89 8 0 +-223 423 627 543 0 +-374 256 0 +-640 155 -275 -102 0 +314 640 496 0 +385 -368 -379 0 +-564 516 -639 294 0 +103 381 0 +11 -605 -367 -316 0 +-82 -416 172 131 0 +-353 -286 -212 20 0 +-330 69 -64 12 0 +-443 -231 -86 -125 0 +332 575 -537 22 0 +28 80 0 +333 -461 -54 407 0 +-48 155 0 +354 335 -564 -158 0 +-379 466 -193 -523 0 +-393 -640 174 0 +-180 -417 623 518 0 +-51 -45 355 0 +-66 -292 0 +480 464 -635 574 0 +453 -79 0 +280 57 -368 385 0 +-368 162 66 -41 0 +-336 344 363 0 +458 -278 -614 531 0 +288 18 -490 0 +-558 -501 -542 -87 0 +-562 451 -564 386 0 +595 -540 40 217 0 +339 304 -495 -1 0 +-527 282 155 467 0 +-72 -597 523 -109 0 +-547 308 0 +349 453 0 +-576 -140 -257 -225 0 +206 173 18 406 0 +-208 -333 365 0 +-635 167 604 358 0 +-51 164 29 0 +-547 47 475 32 0 +-76 -153 0 +14 -330 -159 539 0 +-257 -576 -418 632 0 +-180 -56 -285 331 0 +-605 513 322 -596 0 +-309 49 365 -521 0 +306 -23 591 343 0 +242 -644 524 455 0 +445 388 211 -456 0 +-71 252 -485 229 0 +-640 199 406 622 0 +-204 399 404 -21 0 +497 -122 -461 -346 0 +-567 253 28 0 +-424 -368 -166 616 0 +-48 359 0 +236 32 -612 43 0 +624 -173 256 227 0 +411 616 0 +373 279 608 135 0 +532 308 377 0 +339 272 0 +-509 -571 -400 121 0 +-536 -190 176 -278 0 +-550 -175 0 +-637 602 -73 -353 0 +-490 155 -605 359 0 +335 -595 -474 -287 0 +625 -461 -311 407 0 +610 488 332 -344 0 +-550 387 104 214 0 +625 448 0 +600 -465 49 407 0 +324 -579 -72 542 0 +445 144 -118 0 +-630 233 -278 0 +-416 208 131 -192 0 +256 18 -146 -300 0 +202 -640 -374 -153 0 +358 -228 -255 -550 0 +-593 453 0 +306 -295 58 431 0 +-643 -366 -98 607 0 +378 -478 191 -257 0 +350 511 242 -462 0 +279 -564 0 +-192 -209 171 0 +290 -584 -471 -48 0 +117 -393 163 -510 0 +291 -461 617 -41 0 +385 -193 0 +234 -98 607 -643 0 +585 -533 0 +198 -516 548 -303 0 +-392 343 231 -366 0 +562 -564 -567 -252 0 +-601 363 0 +335 358 -421 -354 0 +511 350 288 -48 0 +-192 346 271 208 0 +-473 -586 -76 0 +-278 -92 113 126 0 +276 439 137 386 0 +11 313 -576 -526 0 +-468 -87 -492 -118 0 +-111 -66 -81 -347 0 +-405 407 0 +88 -42 0 +566 441 -430 -122 0 +406 18 -495 -1 0 +323 599 233 638 0 +-612 18 -141 -622 0 +164 -576 0 +-432 334 142 -218 0 +548 397 0 +-185 -571 -110 238 0 +-107 67 -129 -289 0 +169 604 0 +224 16 -633 83 0 +8 -550 109 -167 0 +-420 -73 -353 -250 0 +-193 -289 -542 -501 0 +396 449 557 -257 0 +-365 211 21 2 0 +117 -42 78 163 0 +-54 333 -204 448 0 +17 -204 337 54 0 +226 642 305 -374 0 +301 80 -287 -352 0 +-494 -372 136 -564 0 +35 577 290 450 0 +-330 -54 333 172 0 +-536 -180 0 +-328 105 -366 491 0 +-525 -345 227 -13 0 +224 -613 -576 426 0 +-355 -626 305 1 0 +-175 397 235 -37 0 +410 -223 0 +-368 -165 219 -87 0 +364 157 -38 396 0 +159 -82 84 448 0 +-378 32 -612 355 0 +20 581 0 +34 230 40 10 0 +354 -567 480 0 +-353 103 647 0 +-374 -473 0 +-122 295 -625 49 0 +-559 -368 -497 0 +318 87 -379 0 +411 -289 0 +-561 415 -550 214 0 +312 213 -534 272 0 +-313 -51 267 -200 0 +11 -527 63 -236 0 +480 -65 0 +-177 294 0 +-475 102 -527 -196 0 +174 300 -304 0 +-261 -13 227 7 0 +-524 -612 18 153 0 +332 290 0 +-292 -122 0 +139 -156 234 -72 0 +-520 12 -270 311 0 +77 149 385 -118 0 +32 524 455 0 +-347 -66 208 -309 0 +-223 -372 33 515 0 +641 -9 11 -247 0 +-182 -113 -73 -353 0 +-341 -405 -82 338 0 +-73 647 -4 381 0 +-360 -186 405 0 +-372 299 -624 5 0 +-454 -260 466 -129 0 +-521 49 365 -41 0 +147 -640 143 288 0 +608 -19 -412 551 0 +-118 -424 -166 616 0 +447 -631 444 88 0 +141 342 288 168 0 +11 -63 332 -532 0 +32 636 -200 -450 0 +648 -291 -111 390 0 +-45 -403 0 +259 152 -430 -61 0 +-118 -587 0 +-38 -110 0 +155 153 -524 -640 0 +-572 412 -320 608 0 +-393 88 0 +600 508 -465 448 0 +548 -425 551 -356 0 +-156 139 452 -263 0 +241 214 628 0 +432 -194 -563 377 0 +556 -369 214 352 0 +-330 337 0 +-63 -532 290 334 0 +381 123 -233 154 0 +-181 601 -216 -621 0 +-65 262 -72 -324 0 +-624 -320 205 299 0 +262 -79 -324 10 0 +-430 -309 0 +458 195 629 0 +210 -278 594 -536 0 +-13 -312 -240 0 +-419 -125 -430 -428 0 +388 -111 -456 245 0 +11 140 -478 -359 0 +103 126 575 0 +427 -461 512 85 0 +608 198 -74 -299 0 +-383 -240 -393 -603 0 +397 169 -175 484 0 +21 448 407 -365 0 +419 411 296 -579 0 +-573 -271 -446 -401 0 +434 452 -580 466 0 +-558 -87 -57 -491 0 +340 406 592 227 0 +88 -116 -15 205 0 +-92 -278 482 273 0 +-22 308 -513 396 0 +-478 644 11 248 0 +11 308 0 +-296 538 466 -129 0 +-600 69 0 +471 -576 27 -257 0 +290 -526 334 313 0 +-135 -444 205 -429 0 +-374 304 -146 0 +544 16 203 -353 0 +-607 453 -90 24 0 +-417 121 0 +73 251 286 0 +-307 -119 -643 -65 0 +224 458 -633 83 0 +-188 453 -34 -395 0 +-177 -319 409 -578 0 +97 -506 -193 -648 0 +-384 284 0 +-352 214 423 0 +522 -192 172 456 0 +245 -66 -111 -347 0 +397 217 0 +500 414 343 -430 0 +-587 457 -566 -220 0 +548 -158 354 198 0 +78 348 -586 -45 0 +608 551 -315 -207 0 +-228 -287 -255 -65 0 +-489 -528 304 -462 0 +-223 -253 -71 398 0 +-417 614 -120 -180 0 +-30 323 -647 -336 0 +480 470 178 548 0 +-579 -643 607 -98 0 +-96 629 20 99 0 +-536 -115 0 +-246 155 -527 254 0 +-275 -612 -102 78 0 +19 423 -223 -413 0 +-481 305 0 +-175 -255 -228 217 0 +161 256 283 227 0 +-235 -479 -567 214 0 +-409 -606 0 +-73 -4 -353 647 0 +-59 -128 -612 170 0 +112 78 -117 -467 0 +-77 -368 292 445 0 +519 -578 -615 -143 0 +453 -221 -597 589 0 +-3 -249 49 -61 0 +570 -612 108 530 0 +-347 172 -66 -61 0 +-45 -51 524 -644 0 +560 281 -336 -408 0 +539 407 -21 404 0 +88 608 0 +107 234 220 411 0 +17 -405 -82 0 +-620 580 452 -124 0 +-470 28 315 423 0 +-597 466 0 +80 474 198 -33 0 +161 406 283 -240 0 +-505 -429 572 339 0 +459 -414 -125 234 0 +-46 549 -230 -635 0 +-553 276 137 -564 0 +-587 -61 -86 0 +-516 93 -303 28 0 +-240 624 256 -173 0 +632 641 11 -418 0 +-39 -110 -62 -27 0 +-635 105 -262 0 +-538 228 105 -635 0 +-510 -300 -631 -146 0 +381 -92 -518 633 0 +335 373 198 0 +321 347 -270 245 0 +-559 -219 -368 183 0 +-430 -193 0 +40 -620 580 453 0 +279 315 548 -470 0 +74 -301 628 50 0 +407 -192 0 +-296 453 538 234 0 +-177 -624 0 +-422 -175 -643 -349 0 +-177 272 0 +-547 274 577 613 0 +-553 327 227 -515 0 +237 -193 -263 492 0 +-515 -13 28 0 +-92 537 585 284 0 +-111 130 -461 -144 0 +-567 410 0 +-58 379 -193 -587 0 +455 -622 -141 -128 0 +452 40 -307 -119 0 +27 577 290 471 0 +-444 -135 88 205 0 +112 348 519 -586 0 +-238 -39 -44 -216 0 +459 -414 -395 -193 0 +342 -471 -596 -584 0 +203 -92 544 -278 0 +8 -296 -289 538 0 +-71 628 0 +-587 26 -309 0 +334 -200 -133 -517 0 +365 -521 -461 -122 0 +219 457 -165 -568 0 +250 197 -554 0 +-553 -184 -75 227 0 +-253 50 398 628 0 +-200 -39 35 450 0 +-235 -46 628 -479 0 +-84 208 -309 -183 0 +466 -149 -87 -589 0 +333 49 -54 -330 0 +-117 -640 455 -467 0 +582 -630 224 -435 0 +119 -79 -178 -485 0 +565 -125 -579 318 0 +539 -330 -265 -277 0 +20 -203 -285 546 0 +-58 379 343 -568 0 +150 508 -68 0 +-433 -596 0 +319 586 519 -42 0 +241 480 -634 -71 0 +560 -420 -73 -250 0 +18 -529 -481 -374 0 +-418 -257 396 632 0 +88 -297 -53 -451 0 +-15 498 -372 0 +-252 -223 -567 562 0 +-71 -169 358 425 0 +-542 411 -579 -501 0 +-461 -26 -41 -333 0 +18 455 -355 1 0 +34 72 580 0 +476 9 575 332 0 +-109 466 -593 523 0 +638 331 560 -56 0 +-132 -437 -270 -461 0 +32 418 -168 308 0 +155 147 -510 143 0 +272 493 -202 -578 0 +-567 -413 -564 19 0 +224 -630 344 -269 0 +-571 113 -353 126 0 +420 460 16 -353 0 +294 -302 -137 498 0 +-369 -79 0 +-201 93 402 145 0 +217 -175 415 -561 0 +-72 -65 436 0 +574 -550 -46 464 0 +343 -125 0 +-257 -527 -570 0 +-319 -374 5 409 0 +-430 -122 -388 -500 0 +-534 386 0 +108 164 -282 -274 0 +303 480 -104 628 0 +-157 -248 332 -596 0 +-521 172 365 -61 0 +633 16 -353 -518 0 +-640 -283 -174 -631 0 +-620 580 -635 8 0 +490 -196 -76 -226 0 +308 577 0 +-467 -462 -117 519 0 +-141 -622 112 -128 0 +112 108 -246 254 0 +93 74 -301 28 0 +610 -83 641 -557 0 +624 -173 -631 -320 0 +407 6 -394 -209 0 +-312 495 272 -473 0 +-46 -574 -65 0 +-111 245 -346 497 0 +-97 -597 293 457 0 +-481 -473 18 -529 0 +205 -15 -320 -116 0 +323 -30 154 -647 0 +-451 -53 498 -372 0 +408 16 -483 575 0 +-510 -626 528 0 +562 -252 50 -567 0 +-233 -278 16 123 0 +24 464 574 -46 0 +-430 411 97 -648 0 +-193 -428 -506 -419 0 +-345 -525 -553 227 0 +-456 -559 211 388 0 +-110 -384 187 483 0 +-594 185 16 -353 0 +396 157 224 364 0 +-435 582 284 16 0 +-372 325 0 +-462 530 -478 570 0 +141 -48 -612 168 0 +439 -253 0 +-550 -635 0 +-225 -140 577 -200 0 +252 217 548 229 0 +207 -13 -177 -552 0 +-52 -472 306 -380 0 +358 484 169 -175 0 +-564 -412 -19 608 0 +134 0 +343 379 -58 306 0 +-147 462 524 0 +-47 -232 -39 -200 0 +-160 253 608 198 0 +-76 -578 319 586 0 +-271 -573 -192 -446 0 +466 100 10 0 +-204 337 277 0 +-200 -449 0 +-128 288 0 +538 -597 -129 -296 0 +-42 -240 0 +546 -203 121 -73 0 +-122 424 -568 -391 0 +-42 -447 -496 -128 0 +-501 -193 -263 -542 0 +-485 358 0 +214 423 619 -574 0 +-162 343 390 0 +514 -309 391 150 0 +-148 -82 -446 -271 0 +-257 267 -313 -478 0 +466 -52 0 +-430 -231 343 -86 0 +544 -181 203 560 0 +592 529 0 +603 18 -170 406 0 +-644 -478 524 155 0 +-182 -389 0 +-168 308 418 342 0 +107 36 0 +16 284 -30 0 +457 -395 23 0 +95 176 0 +-613 -39 426 -38 0 +102 18 -612 0 +-120 629 554 614 0 +-170 603 304 406 0 +-52 -443 0 +-277 12 -401 -265 0 +433 641 -257 0 +78 642 226 -578 0 +30 -476 610 -630 0 +225 442 332 224 0 +260 -369 89 10 0 +-188 -593 -558 -34 0 +-461 514 391 -122 0 +-253 398 28 423 0 +168 -48 455 141 0 +-387 -175 453 436 0 +-505 498 572 -473 0 +469 -401 -321 -573 0 +411 -558 0 +609 -46 -145 24 0 +-373 -71 -477 50 0 +-278 -637 602 -264 0 +452 -369 -464 -139 0 +44 433 -547 577 0 +-232 -200 577 -47 0 +-82 -405 469 -321 0 +208 -41 -84 -183 0 +502 385 -506 -318 0 +201 -223 93 -276 0 +-478 -194 475 0 +-376 310 -360 -204 0 +-640 -393 226 642 0 +-395 -392 -193 231 0 +-336 544 203 121 0 +103 -518 633 -278 0 +8 -635 221 -503 0 +608 -606 5 160 0 +242 -367 -316 -200 0 +370 -578 552 227 0 +-183 211 445 -84 0 +422 480 40 545 0 +-289 454 0 +-96 99 -180 -285 0 +-443 -419 -428 411 0 +235 -550 358 -37 0 +555 -564 0 +-461 456 522 -330 0 +610 -92 0 +608 -429 299 -624 0 +560 518 95 0 +608 137 279 276 0 +-289 -52 -542 -501 0 +-240 -13 207 -552 0 +-632 -216 -499 -39 0 +-529 -481 304 -393 0 +-600 94 -376 -192 0 +-529 -481 -640 339 0 +-368 66 431 162 0 +-393 283 0 +-81 -401 -598 394 0 +-614 -630 531 -417 0 +-41 -309 0 +-615 78 -143 -42 0 +-76 -528 -489 -612 0 +497 -81 85 -346 0 +-62 -27 -384 -110 0 +502 -587 -318 -166 0 +-38 583 -195 -571 0 +-463 -395 10 349 0 +342 455 467 282 0 +-212 20 -417 -286 0 +601 -92 -110 -621 0 +615 5 302 -393 0 +627 279 543 548 0 +-179 -619 50 548 0 +-128 -42 -622 0 +109 -10 646 0 +112 236 43 108 0 +-341 338 539 -401 0 +581 -281 629 554 0 +431 428 -587 144 0 +-571 -110 -435 0 +85 -81 -249 0 +-72 -237 234 -436 0 +351 93 -487 439 0 +-567 543 50 627 0 +-274 -547 32 -282 0 +-181 -531 -535 363 0 +93 439 -301 74 0 +-92 -269 -216 344 0 +-186 -209 416 407 0 +157 -38 364 -384 0 +23 -52 -579 98 0 +-359 290 140 242 0 +34 -129 -369 230 0 +306 -52 -588 371 0 +-353 -182 20 -113 0 +399 68 266 -82 0 +448 -437 2 -132 0 +-461 295 -625 85 0 +-597 139 105 -156 0 +295 -81 -61 -625 0 +-428 -52 -419 -587 0 +351 543 0 +40 260 89 -129 0 +-264 -73 0 +-635 40 0 +-578 505 -128 -375 0 +103 -417 -518 633 0 +363 435 334 526 0 +-634 -485 -567 241 0 +614 331 353 0 +522 508 456 208 0 +-462 242 584 59 0 +-42 339 0 +114 80 198 479 0 +-488 -194 377 -191 0 +615 256 0 +358 619 -574 628 0 +-254 -128 590 -45 0 +-146 -374 -640 -300 0 +-73 20 0 +172 -598 394 -82 0 +-642 116 -473 272 0 +163 -42 227 0 +-435 -630 610 582 0 +574 397 0 +585 537 575 103 0 +151 -177 -409 -534 0 +-48 -547 -47 0 +-393 -327 -199 -320 0 +380 454 -597 343 0 +583 -216 -181 -195 0 +636 246 605 0 +-293 8 -597 268 0 +290 -584 108 -471 0 +-167 -369 0 +236 242 -462 43 0 +455 -102 0 +383 227 -553 -357 0 +121 281 154 -408 0 +466 36 0 +-182 638 381 -113 0 +-330 159 12 0 +-161 5 0 +123 630 185 0 +-168 418 -194 32 0 +-372 551 0 +-215 -522 12 -270 0 +402 -604 -398 423 0 +-587 85 0 +-216 157 -576 0 +242 29 -547 -361 0 +155 143 305 147 0 +-196 -527 530 570 0 +-643 139 0 +191 378 290 32 0 +548 -276 551 201 0 +407 172 326 -310 0 +234 36 -362 411 0 +-620 580 -65 105 0 +434 105 -580 -366 0 +428 144 85 -430 0 +-104 214 93 303 0 +385 156 165 -263 0 +-98 -366 607 -72 0 +358 80 145 -201 0 +80 425 397 -169 0 +-412 -19 279 294 0 +-387 -550 453 436 0 +304 490 -226 155 0 +551 548 114 479 0 +-585 323 60 154 0 +-369 609 -145 402 0 +164 -384 -563 432 0 +539 -600 94 -192 0 +448 388 -559 -456 0 +-54 150 2 333 0 +-605 248 -257 644 0 +-297 253 -160 198 0 +50 33 -372 515 0 +548 279 -425 -356 0 +99 -536 -353 -96 0 +-195 583 -216 -92 0 +27 -384 290 471 0 +480 548 303 -104 0 +358 484 24 169 0 +-102 -275 519 -612 0 +142 154 633 0 +-92 185 -594 381 0 +541 -81 -111 -317 0 +88 -297 -15 -116 0 +-114 -213 205 279 0 +358 -65 0 +363 -483 -336 408 0 +-550 -540 -46 595 0 +-232 11 396 -47 0 +-124 480 415 -561 0 +27 -194 471 -576 0 +-368 -52 0 +-79 620 -25 214 0 +-550 8 328 -609 0 +306 -166 0 +546 -203 -264 629 0 +279 33 515 608 0 +445 172 0 +308 -51 0 +584 59 342 -196 0 +77 390 -122 0 +-330 -520 311 12 0 +-534 -606 272 160 0 +112 -128 467 0 +169 397 484 -65 0 +-38 396 -62 -27 0 +608 -525 -320 -345 0 +-550 -46 620 -25 0 +342 308 -91 -449 0 +-559 132 -258 448 0 +-476 -336 -110 30 0 +326 -330 -310 172 0 +-193 -523 -289 -379 0 +411 419 296 234 0 +-309 -568 -70 258 0 +540 -643 24 -268 0 +95 331 -56 381 0 +304 375 155 -403 0 +-366 -109 523 105 0 +-45 375 519 0 +242 -527 0 +206 304 173 256 0 +-278 531 16 -614 0 +90 24 421 -46 0 +237 492 234 -52 0 +425 -46 628 -169 0 +-421 -567 402 -354 0 +-408 -353 281 16 0 +-393 -510 -495 -1 0 +317 86 -41 -368 0 +-621 601 458 224 0 +132 -192 -461 0 +385 -289 0 +-96 638 -353 99 0 +280 57 457 -430 0 +-191 -488 641 -596 0 +-100 105 -597 -36 0 +254 242 112 -246 0 +-592 -590 304 -393 0 +-510 -143 -393 -615 0 +-345 -553 -525 498 0 +638 -251 381 -482 0 +-238 -44 284 -576 0 +-129 90 -369 0 +-537 -110 0 +-43 300 -510 -626 0 +474 555 335 -33 0 +306 -122 468 3 0 +105 324 0 +12 171 -330 437 0 +32 91 455 382 0 +24 -268 453 540 0 +210 -73 -353 594 0 +-92 400 244 -38 0 +-69 172 -330 -514 0 +396 442 225 610 0 +498 227 0 +-269 344 103 610 0 +500 -41 -587 0 +-309 -500 -118 -388 0 +452 -239 -558 392 0 +-82 -68 49 -130 0 +-416 -401 131 245 0 +-553 -534 0 +227 -13 -357 383 0 +-194 -450 -478 636 0 +95 -264 0 +457 -162 501 -368 0 +-128 440 489 -473 0 +-328 -129 0 +-259 -326 -61 -461 0 +-192 17 -376 54 0 +-596 449 557 332 0 +439 101 -71 -136 0 +449 557 -576 -547 0 +-609 328 -369 452 0 +-635 397 0 +-62 224 0 +-314 -496 0 +313 -257 -526 396 0 +231 -558 -392 -87 0 +411 -166 0 +358 628 -474 -595 0 +133 242 164 138 0 +-289 -558 0 +-274 32 308 -282 0 +-278 103 123 -233 0 +11 -39 0 +16 -185 284 238 0 +445 -66 208 -347 0 +-576 284 -601 -55 0 +358 24 -228 -255 0 +-192 -341 0 +-495 -640 -1 -374 0 +538 8 -263 -296 0 +227 386 -572 412 0 +359 108 -45 -490 0 +-576 -38 583 0 +415 -369 402 -561 0 +-545 397 -101 335 0 +105 -366 -188 -34 0 +-86 -61 -568 0 +-61 208 427 512 0 +352 -550 480 556 0 +246 242 -433 -194 0 +-197 509 560 638 0 +410 -352 301 -46 0 +364 142 157 -384 0 +-81 159 -192 84 0 +163 -374 117 305 0 +407 -311 448 0 +392 -463 597 0 +-535 458 -531 610 0 +213 608 312 -240 0 +455 -527 0 +-41 317 172 0 +-153 -42 202 519 0 +445 -61 0 +40 480 438 503 0 +-622 519 -42 0 +556 -287 -65 352 0 +-310 -416 -508 0 +304 -42 0 +-464 -79 -593 -139 0 +176 -190 20 -285 0 +390 162 66 85 0 +-281 638 581 -353 0 +399 -186 416 2 0 +-180 -285 -482 -251 0 +521 445 208 0 +-249 -3 431 448 0 +-627 -485 25 423 0 +-579 165 156 343 0 +-63 164 -532 334 0 +487 548 -549 480 0 +-368 -309 183 -219 0 +-15 608 -429 -116 0 +342 316 0 +-562 198 608 451 0 +498 -374 495 -312 0 +-497 -502 -443 -111 0 +599 233 -73 560 0 +150 -192 0 +-605 -361 11 29 0 +222 323 -389 -115 0 +-567 -189 569 50 0 +133 11 0 +538 -263 -296 452 0 +-618 70 -166 -506 0 +511 350 342 455 0 +88 -199 339 -327 0 +-573 -192 14 -159 0 +-318 502 -506 -166 0 +519 -510 0 +-52 296 419 -289 0 +-110 334 532 -583 0 +133 -48 308 138 0 +-287 503 -635 438 0 +-375 622 0 +-534 -299 -74 439 0 +429 184 -383 0 +187 483 -110 -39 0 +-559 -333 -26 211 0 +343 -566 -443 -220 0 +-263 -166 237 492 0 +-182 -113 20 -278 0 +-571 531 -614 629 0 +-41 -122 0 +-169 217 425 335 0 +20 -203 -278 546 0 +457 107 220 -597 0 +-486 112 78 496 0 +-559 -70 258 -506 0 +406 227 444 447 0 +-395 -87 -362 36 0 +305 275 -631 -370 0 +-106 93 28 634 0 +525 -88 340 0 +-424 616 -87 -568 0 +-507 -442 -336 363 0 +-22 -513 11 396 0 +-39 -488 -547 -191 0 +445 162 66 -118 0 +-244 517 377 -38 0 +-223 -301 -71 0 +-46 413 255 335 0 +-61 598 -292 172 0 +614 -264 -278 -120 0 +602 -637 -180 -285 0 +-124 10 230 34 0 +-124 -175 0 +-553 299 -624 498 0 +-281 581 638 121 0 +-225 -232 0 +5 -15 294 -116 0 +-380 -472 -430 -125 0 +80 303 -104 -287 0 +-87 500 -506 414 0 +-216 -55 -601 -384 0 +-533 224 -426 103 0 +333 211 -204 -54 0 +-444 608 -240 -135 0 +466 -434 -87 588 0 +572 -42 227 0 +-65 -574 -287 0 +-92 123 381 -233 0 +-194 274 -576 613 0 +-177 327 -515 -553 0 +-111 -443 -591 521 0 +150 -416 -204 131 0 +-223 474 -567 -33 0 +-347 245 -122 0 +49 -416 131 -192 0 +-478 467 455 282 0 +339 -128 0 +406 552 -320 0 +-558 -166 23 98 0 +-369 -229 402 -262 0 +385 -118 -152 362 0 +-403 375 -626 -640 0 +173 -495 578 0 +458 -442 575 -507 0 +-547 242 636 -450 0 +106 15 294 551 0 +-129 -188 -289 -34 0 +-351 -13 439 357 0 +476 9 142 -39 0 +-588 -506 371 385 0 +-46 -255 -228 -65 0 +-587 -220 -193 -566 0 +624 -173 339 -429 0 +-274 -596 -282 342 0 +-330 -365 245 21 0 +-250 629 -420 20 0 +-128 -578 -300 -146 0 +480 24 0 +-631 5 0 +272 409 -319 -42 0 +93 303 -104 -485 0 +-117 128 -586 0 +594 95 560 210 0 +-71 50 114 479 0 +351 -487 410 555 0 +-97 -118 -166 0 +388 -456 208 -61 0 +171 437 -204 -376 0 +-124 -129 436 -387 0 +-475 359 0 +-510 -578 0 +555 386 0 +-461 347 0 +-265 -270 -277 -148 0 +319 227 256 0 +-350 -196 0 +136 548 551 0 +551 548 351 -487 0 +93 477 -438 -485 0 +342 -257 -450 636 0 +-534 -412 0 +-620 580 -550 -129 0 +-336 482 323 273 0 +-292 -81 85 598 0 +439 -553 373 135 0 +-365 49 21 -204 0 +-87 -366 0 +121 -389 222 -73 0 +260 -65 105 89 0 +402 217 0 +-593 589 -221 -263 0 +453 -395 -296 538 0 +397 24 -540 595 0 +355 -378 -196 -48 0 +-29 403 455 32 0 +80 -71 0 +-135 -444 -177 -553 0 +-122 -280 26 306 0 +-215 -522 -330 12 0 +-626 348 -586 -640 0 +397 358 0 +-576 27 308 471 0 +-141 -622 -196 -510 0 +211 -82 347 321 0 +-461 -61 -84 -183 0 +452 324 -395 542 0 +304 155 -254 590 0 +-557 -83 -38 377 0 +-499 610 -632 641 0 +628 201 480 0 +-58 379 -430 411 0 +304 18 0 +-52 -558 0 +-568 97 -648 -87 0 +165 234 -52 156 0 +-52 -263 0 +507 -331 323 -181 0 +-223 -158 354 93 0 +-287 -595 410 -474 0 +-374 603 -429 0 +32 -433 246 -547 0 +-289 -166 0 +-278 -630 621 96 0 +-604 480 -567 0 +-9 -247 -547 -576 0 +242 -490 112 359 0 +349 452 -558 -463 0 +-277 -401 -265 -573 0 +505 -631 -375 -510 0 +-515 327 -320 294 0 +-631 -240 0 +86 317 -309 -368 0 +-51 108 0 +225 442 -576 575 0 +-579 -597 0 +11 433 641 0 +-344 332 488 575 0 +377 367 -187 308 0 +554 95 0 +40 352 217 556 0 +-45 -128 -226 490 0 +60 -630 -585 -278 0 +-229 438 0 +424 -391 -41 -587 0 +-82 -68 -130 172 0 +-203 121 154 0 +-590 -76 -473 -592 0 +-534 -240 0 +-161 494 -320 386 0 +342 -29 403 155 0 +-129 -597 -100 -36 0 +90 -65 -287 421 0 +415 -369 -561 480 0 +345 50 179 608 0 +-596 641 -418 632 0 +406 440 489 18 0 +230 24 0 +-82 68 -405 266 0 +247 -527 -570 308 0 +632 -418 377 308 0 +253 356 -439 0 +49 -192 84 159 0 +-169 -485 -567 0 +-589 -149 -289 -52 0 +-378 32 -196 355 0 +275 -370 -374 304 0 +8 40 580 -620 0 +239 561 -129 -124 0 +445 211 -66 -347 0 +105 -484 646 -635 0 +-107 67 -72 -597 0 +256 -473 0 +363 -336 582 -435 0 +-25 -550 358 620 0 +-364 575 16 -273 0 +-383 256 -603 498 0 +455 -59 170 -76 0 +423 -549 487 -485 0 +-536 -197 560 509 0 +62 -110 -460 -336 0 +554 581 -417 -281 0 +-39 -194 232 0 +-559 -249 -3 211 0 +-251 629 -264 -482 0 +-79 -124 0 +-510 18 0 +-263 -221 589 452 0 +-429 -202 493 -631 0 +-7 227 146 -473 0 +628 214 -425 0 +-418 632 332 308 0 +406 498 161 283 0 +-38 575 0 +-461 625 -311 -270 0 +245 -401 -69 -514 0 +-79 402 438 503 0 +-384 -257 0 +-192 -617 208 277 0 +-473 272 529 525 0 +370 272 -473 552 0 +-33 28 0 +-322 282 0 +-462 18 102 0 +-45 -51 570 530 0 +560 -329 -264 -60 0 +-61 58 -295 -430 0 +311 -520 539 -401 0 +-38 458 0 +32 -361 29 -200 0 +601 142 -621 -336 0 +335 413 397 255 0 +423 628 0 +-473 -440 272 184 0 +109 -65 -72 -167 0 +-139 -464 -635 -129 0 +142 400 244 -181 0 +-223 -562 -13 451 0 +445 26 -280 -506 0 +-13 135 373 439 0 +-379 -263 -193 0 +334 632 0 +-65 -643 -167 109 0 +-586 455 348 18 0 +-204 -461 0 +-486 496 -128 -612 0 +407 310 -360 -209 0 +94 -82 -405 -600 0 +261 189 555 -297 0 +195 103 -285 -222 0 +174 288 305 -350 0 +157 377 -38 364 0 +-363 601 499 0 +575 426 -613 396 0 +59 584 112 108 0 +-183 -122 -84 172 0 +85 -258 132 -461 0 +191 -194 378 -478 0 +453 262 40 -324 0 +-92 62 -38 -460 0 +121 -482 -251 638 0 +306 385 0 +-199 -327 406 -240 0 +184 -177 -440 256 0 +592 340 -374 -320 0 +438 397 24 503 0 +-115 560 0 +-483 408 -630 224 0 +-71 410 0 +342 570 0 +-366 -263 0 +-428 118 -648 0 +256 525 227 529 0 +-550 -46 -228 -255 0 +-430 -388 -500 -61 0 +59 528 -155 0 +549 40 -230 358 0 +-81 -310 -270 326 0 +-430 -52 -472 -380 0 +367 -384 -194 -187 0 +93 28 -373 -477 0 +-612 -45 0 +-52 156 165 -289 0 +-635 104 -46 387 0 +486 316 -462 -48 0 +-285 614 -120 -264 0 +381 -647 -92 -30 0 +-567 303 480 -104 0 +-540 -287 595 -175 0 +-201 358 145 628 0 +638 95 0 +-13 227 -312 0 +-71 -485 -595 -474 0 +-54 333 -401 245 0 +-376 311 -330 -520 0 +334 363 -613 426 0 +154 -336 0 +286 0 +294 -261 -429 7 0 +-473 -143 -615 78 0 +-111 -568 0 +457 362 -587 -152 0 +410 -477 -46 0 +-60 -285 -329 -180 0 +-393 -383 -603 -320 0 +93 -627 214 25 0 +-52 -588 371 -430 0 +400 458 0 +-351 50 357 -13 0 +28 555 0 +-648 -87 97 -368 0 +-76 -128 0 +492 -558 -87 237 0 +205 312 213 -320 0 +-303 423 -223 -516 0 +381 95 -482 -251 0 +584 59 -48 -462 0 +-571 -353 -212 0 +540 105 -268 -65 0 +305 -530 314 -626 0 +85 -81 -258 132 0 +591 -506 -23 -166 0 +399 -159 407 14 0 +-122 390 -502 -497 0 +2 -148 0 +-241 -175 -46 -89 0 +445 424 -587 -391 0 +-26 -333 172 -61 0 +-181 -30 -647 323 0 +-376 -446 -82 -271 0 +-194 27 396 471 0 +-133 -547 -39 -517 0 +-598 150 2 394 0 +-75 608 -429 0 +-65 561 -643 239 0 +142 154 -364 -273 0 +-125 457 0 +172 271 407 346 0 +407 2 0 +-232 -47 164 -384 0 +-122 -441 -131 -461 0 +-247 334 -9 -200 0 +574 217 40 464 0 +49 -82 -514 -69 0 +-556 8 -175 -67 0 +519 406 0 +246 -596 -527 0 +-472 306 -193 -380 0 +-194 108 0 +-148 -330 54 17 0 +224 232 535 641 0 +377 284 -62 -27 0 +-622 455 -141 18 0 +-87 419 -395 296 0 +-65 260 89 -643 0 +502 -193 306 -318 0 +-110 -185 -92 238 0 +411 -366 -379 -523 0 +20 599 233 -278 0 +410 -604 -398 -287 0 +-478 -313 267 11 0 +-378 288 -48 355 0 +155 -527 530 570 0 +555 15 294 106 0 +146 283 0 +24 90 358 421 0 +-326 448 -259 -309 0 +-430 292 -61 0 +266 68 508 -405 0 +-367 -257 0 +18 153 -462 0 +409 -319 272 -578 0 +-370 275 -578 78 0 +49 508 0 +-443 162 85 66 0 +-506 -430 0 +-258 431 49 132 0 +-145 -635 609 -46 0 +-576 -557 224 -83 0 +-550 358 422 0 +-86 -231 -430 457 0 +-289 419 296 -193 0 +638 554 0 +-434 588 -597 -193 0 +-194 313 -526 396 0 +-181 -435 -38 582 0 +-247 -194 -9 377 0 +-550 217 167 604 0 +-61 431 0 +-637 -285 20 602 0 +63 563 0 +-322 -478 -348 288 0 +-314 -631 127 -510 0 +-181 -442 -216 -507 0 +407 12 0 +28 315 93 -470 0 +548 198 -253 398 0 +-646 -565 8 -289 0 +448 -465 600 2 0 +448 -292 -559 598 0 +414 500 -368 385 0 +-446 539 -192 -271 0 +-233 -336 381 123 0 +617 172 291 -122 0 +-77 -41 292 -368 0 +-205 -75 -357 0 +544 -92 629 203 0 +514 391 245 -122 0 +-223 357 -372 -351 0 +12 6 -394 -401 0 +-356 93 -425 -223 0 +-636 -527 243 288 0 +-550 -129 -503 221 0 +-81 522 456 -330 0 +-534 439 345 179 0 +-447 519 -578 -496 0 +410 627 551 543 0 +62 -630 610 -460 0 +191 -257 378 342 0 +381 -181 185 -594 0 +-435 582 -110 154 0 +214 609 -145 -550 0 +281 154 381 -408 0 +498 592 340 -473 0 +459 -166 -395 -414 0 +-344 224 396 488 0 +397 80 470 178 0 +402 335 0 +68 -148 407 266 0 +218 -216 -571 -126 0 +80 398 -253 551 0 +-626 153 -524 -510 0 +-594 -571 -353 185 0 +5 299 -624 608 0 +641 284 9 0 +-395 156 165 -166 0 +480 -369 -37 235 0 +-79 -593 100 37 0 +-212 629 -286 -264 0 +-223 74 0 +-292 -111 -81 598 0 +463 618 234 343 0 +-336 244 -110 400 0 +-177 -202 -42 493 0 +-313 342 267 11 0 +-478 -196 403 -29 0 +-147 155 342 -267 0 +-640 590 -626 0 +641 -596 -225 -140 0 +168 242 141 112 0 +381 281 -408 -336 0 +242 112 -138 528 0 +463 618 -125 -579 0 +557 449 377 -547 0 +457 414 0 +-182 95 560 -113 0 +363 -38 0 +15 -207 0 +-181 -630 0 +377 -257 -47 0 +-125 188 -366 -616 0 +555 158 205 325 0 +460 103 420 -353 0 +-401 -376 0 +-502 -430 -61 -497 0 +-611 -401 0 +28 439 0 +103 -594 -278 185 0 +227 406 184 -440 0 +-194 -247 -9 -384 0 +168 141 -462 242 0 +-73 -389 222 -353 0 +-122 -559 0 +10 -263 -107 67 0 +-38 396 -244 517 0 +227 294 0 +159 -192 84 208 0 +224 154 0 +107 457 220 234 0 +256 117 304 163 0 +505 -393 -375 -640 0 +-51 359 -490 -612 0 +431 130 -144 49 0 +-199 256 -177 -327 0 +12 -330 266 68 0 +-473 304 0 +-27 -384 -62 -38 0 +-30 -630 -278 0 +-218 284 332 -432 0 +-126 -630 284 218 0 +-276 335 201 279 0 +268 -643 234 -293 0 +638 -417 0 +-92 460 -278 420 0 +-568 -231 -193 -86 0 +10 -349 -422 -124 0 +-564 205 0 +332 224 488 -344 0 +302 339 615 88 0 +-384 367 -187 290 0 +-631 163 305 117 0 +377 364 157 575 0 +211 277 508 -617 0 +-262 402 -124 -229 0 +-597 -523 -193 -379 0 +-46 80 425 -169 0 +-297 -151 198 356 0 +-612 242 236 43 0 +517 142 334 -244 0 +-437 341 192 0 +204 192 82 -2 -407 330 -508 401 270 0 +-437 -132 -81 -401 0 +-92 499 -38 -544 0 +-369 217 464 574 0 +555 627 543 335 0 +-52 306 -419 -428 0 +629 581 -281 -73 0 +-478 -257 -282 -274 0 +-37 235 -46 24 0 +-329 -278 -264 -60 0 +445 -506 -388 -500 0 +-51 -527 0 +498 -7 608 0 +-263 293 -97 457 0 +512 -41 0 +-631 -320 370 552 0 +-61 468 3 -430 0 +226 -393 304 642 0 +-517 -133 -257 641 0 +-131 508 150 0 +-369 -349 -422 10 0 +-605 342 0 +-244 517 575 -39 0 +-177 88 0 +521 390 -591 -122 0 +-469 -6 0 +-287 627 410 0 +433 -576 44 -257 0 +80 214 0 +-54 333 -270 172 0 +465 -31 49 -61 0 +533 -110 154 0 +70 -618 -87 -368 0 +-478 -168 308 418 0 +218 -126 -336 363 0 +-593 -109 -558 523 0 +350 196 43 0 +349 -289 8 -463 0 +-52 385 0 +279 410 0 +-416 -405 2 0 +339 173 206 -640 0 +-75 -184 386 -240 0 +-46 548 301 -352 0 +-351 357 28 -13 0 +-413 80 19 198 0 +-494 136 551 294 0 +610 -507 -442 103 0 +493 -374 -202 88 0 +-192 -148 -600 94 0 +55 361 308 -576 0 +-92 -336 0 +154 -185 238 363 0 +495 -320 -312 -393 0 +49 150 0 +383 -357 -177 -372 0 +453 -129 0 +339 586 319 -640 0 +413 93 0 +-204 -416 131 49 0 +18 -530 -462 314 0 +458 344 284 -269 0 +406 -240 -615 0 +638 -637 0 +-596 -526 313 396 0 +-232 396 308 -47 0 +363 577 -62 -27 0 +-46 548 -354 -421 0 +-60 -329 95 323 0 +528 -612 108 -138 0 +537 110 -426 0 +-251 554 -482 -278 0 +94 539 -330 -600 0 +608 -302 -137 -320 0 +458 -110 0 +288 -612 0 +548 315 -470 198 0 +-514 172 407 -69 0 +-595 -474 480 628 0 +155 -510 -486 496 0 +284 187 -576 0 +-181 363 583 -195 0 +621 16 96 -285 0 +-270 456 522 -81 0 +-590 256 -592 304 0 +284 499 -544 -630 0 +-52 500 414 -430 0 +-96 121 95 99 0 +399 2 -360 310 0 +-192 208 326 -310 0 +-496 -447 256 18 0 +-48 322 -547 513 0 +164 -488 -191 334 0 +-280 -430 85 26 0 +-167 -635 -72 109 0 +262 -503 0 +284 641 232 535 0 +548 -46 -169 425 0 +-482 -560 -212 0 +-177 -451 -553 -53 0 +-160 -223 -534 253 0 +-192 -465 600 172 0 +-42 -505 0 +40 453 -607 0 +402 -175 0 +88 606 339 -163 0 +208 -54 -204 0 +269 -92 190 560 0 +-194 613 274 377 0 +163 -393 117 18 0 +548 -474 -595 -287 0 +306 292 431 -77 0 +155 91 342 382 0 +55 632 0 +-478 -51 0 +-207 50 -315 -372 0 +-604 80 397 -398 0 +629 176 -190 554 0 +-587 -497 -61 -502 0 +-202 406 493 498 0 +-228 217 -369 -255 0 +-117 -640 288 -467 0 +217 -235 -567 -479 0 +-527 -511 -196 0 +-240 -552 608 207 0 +164 -22 -513 334 0 +-446 -271 -330 -376 0 +-579 -260 -454 105 0 +49 208 0 +224 517 396 0 +-563 -596 396 432 0 +-558 -129 0 +455 524 -644 -48 0 +-378 355 -462 242 0 +-42 272 525 529 0 +-525 -372 498 -345 0 +-369 436 -129 -387 0 +242 -378 -45 355 0 +-579 -328 -72 491 0 +-175 561 -643 239 0 +577 -55 -601 -110 0 +-180 331 -417 -56 0 +-596 -247 641 -9 0 +484 169 -124 402 0 +-194 378 191 242 0 +-578 340 227 592 0 +-287 241 -634 410 0 +-534 -184 -75 227 0 +-193 501 -587 -162 0 +-87 466 296 419 0 +63 108 -236 164 0 +-393 78 0 +648 -443 -291 85 0 +-194 -359 242 0 +80 -235 -287 -479 0 +359 108 -490 -612 0 +245 85 -258 132 0 +245 -82 0 +-193 -368 -424 616 0 +399 12 0 +-29 -605 288 403 0 +-416 172 407 131 0 +-567 628 0 +284 -537 22 641 0 +411 502 -443 -318 0 +-368 457 -618 70 0 +424 -430 -391 -122 0 +253 -13 -223 -160 0 +-120 20 614 -417 0 +21 2 150 -365 0 +106 15 28 -553 0 +105 234 -98 607 0 +-181 -476 -38 30 0 +140 -527 -359 -257 0 +-564 -158 354 548 0 +-76 -510 0 +467 242 455 0 +608 -564 -562 451 0 +-382 -206 -626 305 0 +-405 -446 -271 508 0 +-223 -567 253 0 +-382 -640 -206 -626 0 +266 68 -573 -270 0 +396 -194 432 -563 0 +-550 415 -46 -561 0 +138 11 342 0 +-271 -209 -82 -446 0 +8 -65 0 +217 -230 549 -550 0 +-605 -316 288 0 +-393 -510 440 0 +-76 -447 -496 406 0 +639 -340 -429 608 0 +628 19 -413 50 0 +-568 85 0 +-353 -182 638 -113 0 +548 423 0 +-485 548 0 +385 -558 98 23 0 +161 498 -393 0 +225 142 442 -384 0 +198 -223 0 +-567 -46 0 +386 294 0 +150 445 -183 -84 0 +211 -333 431 0 +7 -372 498 -261 0 +-614 531 103 629 0 +-473 206 173 -76 0 +-556 -643 -67 24 0 +381 594 210 -115 0 +279 -299 205 -74 0 +-218 577 -432 363 0 +364 224 332 157 0 +322 -605 -257 513 0 +-240 592 340 -393 0 +444 -393 447 -429 0 +308 -433 32 246 0 +-257 -596 0 +211 -559 -258 132 0 +-376 -277 -265 407 0 +-366 -646 -72 -565 0 +444 -473 498 447 0 +-76 -590 -578 -592 0 +361 -257 332 55 0 +428 144 -587 -309 0 +399 6 -394 407 0 +452 -503 221 40 0 +-285 458 -585 60 0 +-429 -163 -393 606 0 +217 -421 -354 548 0 +-354 -421 -287 410 0 +-427 -645 208 -192 0 +-401 -617 277 245 0 +-270 333 245 -54 0 +-181 -38 601 -621 0 +-194 -384 632 -418 0 +326 211 0 +-353 20 56 0 +-114 -372 -564 -213 0 +-303 279 -516 628 0 +208 2 0 +339 -510 -1 -495 0 +-263 -597 0 +-462 590 -76 -254 0 +419 296 -52 -597 0 +-603 -383 -320 406 0 +-263 -558 0 +-87 -125 0 +-13 -429 0 +335 -564 -516 -303 0 +5 -137 205 -302 0 +222 -389 -73 381 0 +639 498 386 -340 0 +233 -264 560 599 0 +628 477 -438 214 0 +121 154 269 0 +441 566 85 390 0 +378 191 -547 -478 0 +577 -576 0 +453 230 34 40 0 +-601 -55 332 575 0 +610 537 458 585 0 +103 224 -633 83 0 +-645 -427 448 2 0 +-326 431 -259 172 0 +105 -293 268 -597 0 +-39 9 476 575 0 +466 349 -463 10 0 +-287 255 413 80 0 +-485 -71 145 0 +499 -110 334 0 +163 227 -578 0 +-278 518 20 623 0 +-379 -597 -523 343 0 +50 548 562 -252 0 +49 -330 522 0 +403 108 -612 0 +-124 214 -255 -228 0 +-204 -645 448 -427 0 +-330 -68 -130 -461 0 +163 519 -42 117 0 +418 -168 -547 242 0 +164 367 -187 334 0 +-522 -405 -215 508 0 +259 152 390 -61 0 +439 -372 -207 -315 0 +575 -110 0 +465 49 -309 -31 0 +-233 -278 458 123 0 +-129 589 -221 -289 0 +8 452 0 +-415 214 -567 -569 0 +-284 -476 -483 0 +335 -545 217 -101 0 +-325 -493 227 -13 0 +198 386 0 +1 155 -355 -640 0 +-553 207 -177 -552 0 +254 -612 -51 -246 0 +-568 648 -291 -61 0 +133 138 -194 242 0 +-61 295 172 -625 0 +439 -33 474 -567 0 +448 -130 407 -68 0 +104 -550 -46 387 0 +342 -626 -378 355 0 +-438 214 93 477 0 +-553 -223 -19 -412 0 +248 11 644 -527 0 +271 2 448 0 +577 526 -110 435 0 +-401 600 -461 -465 0 +448 431 598 -292 0 +-565 -646 -579 -72 0 +551 -33 474 548 0 +-89 -287 -241 -635 0 +-146 -300 -578 519 0 +-648 97 -430 -52 0 +-181 602 323 0 +-474 -567 217 -595 0 +-13 -320 0 +119 -175 217 0 +-149 -589 -87 -289 0 +513 -51 -200 322 0 +284 83 -633 16 0 +214 -421 40 0 +162 -568 66 -41 0 +575 488 -576 -344 0 +444 406 447 498 0 +40 -550 0 +613 274 -39 -194 0 +-374 117 -640 163 0 +548 -545 480 0 +-77 292 445 -506 0 +260 -643 -175 89 0 +-392 231 -193 -263 0 +60 16 -585 -285 0 +293 -87 -263 -97 0 +-372 498 299 -624 0 +-643 -129 0 +439 160 -534 0 +-552 207 272 -13 0 +-244 -110 517 -39 0 +-563 164 432 577 0 +-42 -177 444 447 0 +-527 290 0 +-82 211 456 522 0 +-175 -72 89 260 0 +-393 606 498 -163 0 +-384 396 0 +77 -506 149 385 0 +-612 530 -48 570 0 +-534 551 0 +-82 277 172 -617 0 +445 -506 -591 521 0 +629 458 507 -331 0 +546 -285 -264 -203 0 +363 -460 62 -336 0 +-564 207 -372 0 +47 108 290 475 0 +211 2 522 456 0 +-213 -114 -534 439 0 +-65 556 -46 352 0 +-291 445 150 0 +-79 -129 0 +449 396 308 557 0 +563 32 -511 290 0 +382 -51 -462 0 +302 5 615 339 0 +-430 -122 428 144 0 +-61 465 208 -31 0 +-166 -558 156 165 0 +-430 -618 70 411 0 +-48 -367 -547 -316 0 +-564 -71 -179 -619 0 +-374 440 304 489 0 +-550 -65 0 +-550 620 217 -25 0 +367 -187 377 -194 0 +58 -295 -568 -61 0 +-212 -286 -264 -285 0 +-145 -485 609 -124 0 +-444 -135 -13 227 0 +-419 -368 -428 -87 0 +32 -570 247 -200 0 +284 -576 -499 -632 0 +266 0 +345 551 179 205 0 +286 -536 560 0 +-525 -345 294 498 0 +367 -187 377 -547 0 +28 423 -179 -619 0 +634 -106 410 551 0 +-590 256 -76 -592 0 +-242 322 -282 0 +-611 134 399 407 0 +625 245 -311 -401 0 +371 -588 -587 -87 0 +-589 -579 -149 -125 0 +139 -156 -129 -263 0 +556 40 352 358 0 +205 -553 0 +-648 343 -568 97 0 +18 127 -393 -314 0 +-126 458 218 284 0 +-283 406 304 0 +-446 539 -401 -271 0 +-465 -204 600 49 0 +316 -45 242 486 0 +-216 400 244 -181 0 +-593 -65 0 +-597 618 -193 0 +313 164 334 -526 0 +-483 103 575 0 +-544 -571 -38 499 0 +386 28 0 +-4 638 647 -353 0 +-92 -442 -110 0 +-631 53 -127 -429 0 +141 168 -626 -527 0 +99 -96 -417 20 0 +-572 -177 412 -13 0 +335 -425 555 -356 0 +-567 402 -101 -545 0 +136 608 -564 0 +-624 -372 -240 299 0 +444 256 447 227 0 +304 -174 0 +-116 -15 272 -553 0 +411 371 306 0 +-181 96 621 560 0 +585 -216 -571 537 0 +354 -158 628 551 0 +-81 -645 -427 -192 0 +442 225 641 224 0 +296 -125 -579 419 0 +-499 610 332 -632 0 +-573 -321 469 -192 0 +242 -200 47 475 0 +22 284 -537 377 0 +300 -510 155 -43 0 +480 619 -574 548 0 +-177 -302 -137 -13 0 +434 -263 8 -580 0 +303 402 -104 93 0 +611 249 448 -82 0 +-81 -559 0 +-178 -485 40 119 0 +-232 -47 -576 -547 0 +495 -429 -312 -374 0 +-342 -316 -570 0 +-61 -249 172 -3 0 +126 -181 113 560 0 +-230 40 217 549 0 +-124 -485 -241 -89 0 +603 305 -631 -170 0 +227 7 -534 -261 0 +284 641 -218 -432 0 +381 460 420 -92 0 +33 515 205 198 0 +431 448 -259 -326 0 +-48 -547 -570 247 0 +-585 -571 -110 0 +-547 -257 0 +305 256 0 +313 -576 -526 -257 0 +-175 105 561 239 0 +-76 -283 -174 -578 0 +531 -614 -571 560 0 +-301 335 74 198 0 +98 466 23 -87 0 +-366 -72 491 -328 0 +-264 581 -285 -281 0 +-558 -597 0 +-62 -27 334 142 0 +-370 275 304 339 0 +-128 -146 -300 256 0 +-587 -468 -492 -87 0 +-194 -361 29 -478 0 +616 -424 -368 457 0 +-511 563 164 242 0 +509 95 -197 323 0 +222 -389 -417 20 0 +84 150 159 2 0 +239 -124 10 561 0 +-432 -39 -216 -218 0 +-401 -437 -132 -461 0 +172 407 333 -54 0 +377 55 308 361 0 +572 -505 406 498 0 +97 457 -648 -568 0 +279 -297 0 +104 -175 387 217 0 +-543 386 75 50 0 +448 2 -69 -514 0 +-514 -204 -69 448 0 +-65 -124 0 +-591 -61 521 390 0 +577 433 -200 44 0 +-39 332 0 +-42 -300 -146 519 0 +-429 205 -15 -116 0 +411 -395 0 +-647 281 0 +-580 434 -129 -289 0 +-289 588 -193 -434 0 +-596 -384 0 +364 610 157 641 0 +-92 575 -535 0 +11 -282 -274 -478 0 +24 -643 -607 -90 0 +-340 -429 294 639 0 +487 -549 -567 -485 0 +-612 -462 0 +415 -369 217 -561 0 +16 -113 -278 0 +414 -125 -443 500 0 +-384 488 -38 -344 0 +103 610 -126 218 0 +-53 5 608 -451 0 +392 -239 10 -263 0 +-460 62 363 -181 0 +40 230 -129 34 0 +155 -243 304 481 0 +-181 -621 601 -110 0 +-503 -65 221 -72 0 +608 137 276 -564 0 +390 -309 0 +-129 540 -124 -268 0 +480 -71 -474 -595 0 +-609 24 328 105 0 +634 -223 -567 -106 0 +-596 -450 0 +629 621 -571 96 0 +-515 -372 327 5 0 +-129 466 -565 -646 0 +-128 375 -45 0 +-579 -436 -72 -237 0 +-510 -254 590 288 0 +-483 142 408 -571 0 +431 -219 306 183 0 +555 114 479 410 0 +420 -630 -417 460 0 +-520 311 -573 -192 0 +313 -526 -384 -194 0 +-600 94 -204 337 0 +623 -536 560 518 0 +-236 342 -194 63 0 +55 361 -547 -39 0 +373 135 205 279 0 +-352 93 402 301 0 +-520 -401 -573 311 0 +-76 -141 -462 -622 0 +275 519 -578 -370 0 +-320 -163 606 -374 0 +508 -461 0 +-185 -123 0 +-636 -246 0 +339 227 0 +-538 -72 -635 228 0 +628 -479 214 -235 0 +-391 -61 -81 0 +-576 -194 -563 0 +-463 349 234 8 0 +8 40 228 -538 0 +145 335 -201 358 0 +-92 212 -582 -278 0 +-405 -341 338 -204 0 +350 511 -527 155 0 +-160 -151 0 +488 396 -344 610 0 +142 517 -244 577 0 +-467 455 -76 -117 0 +-61 295 -625 208 0 +396 -596 -47 -232 0 +-330 -186 -376 416 0 +332 308 -9 -247 0 +447 444 -393 498 0 +290 -200 0 +20 -251 629 -482 0 +-353 -329 -73 -60 0 +308 -605 0 +291 211 445 617 0 +-87 -568 -414 0 +561 -175 239 8 0 +-474 -595 217 -71 0 +454 385 -558 380 0 +88 294 383 -357 0 +150 -346 -309 0 +-419 -430 411 -428 0 +629 -536 -4 647 0 +-257 513 322 -527 0 +304 256 -496 -447 0 +28 335 0 +463 -87 618 -263 0 +227 -473 -440 184 0 +480 402 0 +-425 423 -223 -356 0 +227 -409 0 +-518 -285 16 633 0 +629 -264 -190 176 0 +-310 326 -82 49 0 +-56 331 95 560 0 +-72 -558 0 +-84 -183 445 208 0 +404 -21 -405 -204 0 +-254 -626 0 +452 260 89 -124 0 +-181 -38 344 -269 0 +316 486 -612 108 0 +-361 -257 -527 29 0 +-401 625 -81 -311 0 +-240 -515 327 -372 0 +247 -570 32 308 0 +288 102 -48 0 +-525 -553 -240 -345 0 +-170 -510 0 +488 -576 -344 -216 0 +77 149 457 -568 0 +-41 -568 468 3 0 +268 -293 -289 8 0 +20 -115 0 +-309 150 -456 388 0 +164 450 -384 35 0 +-97 293 466 -193 0 +545 -485 -124 422 0 +-278 269 190 -92 0 +-495 -640 -1 339 0 +-384 -38 -218 -432 0 +322 513 -547 32 0 +-428 -368 -193 -419 0 +-391 85 -430 424 0 +-192 245 0 +-159 -148 -330 14 0 +-39 396 0 +408 -571 -483 -110 0 +-589 234 0 +563 32 -511 -200 0 +343 616 -424 306 0 +155 -475 102 -527 0 +10 -72 0 +-38 103 -544 499 0 +-259 -122 -326 -81 0 +-360 12 310 -401 0 +406 -375 18 505 0 +560 123 -233 -181 0 +-578 78 -283 -174 0 +-612 590 -128 -254 0 +78 112 -254 590 0 +243 -51 -636 -612 0 +396 22 -38 -537 0 +-92 -110 400 244 0 +-42 53 -127 227 0 +-124 402 -228 0 +-73 95 0 +-429 272 0 +411 306 -468 -492 0 +-380 -587 -472 -87 0 +-41 -368 441 566 0 +572 -505 498 -393 0 +-257 -63 -532 641 0 +-188 -593 -34 466 0 +-338 -148 0 +560 -614 -336 531 0 +-382 18 -206 -196 0 +415 -46 -561 -65 0 +-400 -278 103 -509 0 +-593 -349 -422 -124 0 +-384 -601 142 -55 0 +-534 88 0 +439 -564 0 +-430 -61 144 428 0 +-289 -643 0 +608 -297 0 +-235 80 -479 -46 0 +306 -193 501 -162 0 +-585 560 60 -92 0 +-71 -485 479 0 +35 44 0 +49 277 407 -617 0 +-596 367 342 0 +494 -161 -240 -13 0 +-443 -500 85 -388 0 +563 -527 -511 -596 0 +301 548 358 -352 0 +-120 95 614 323 0 +457 23 -263 98 0 +-328 -593 466 491 0 +-357 386 5 383 0 +452 -369 -349 -422 0 +-646 -558 -565 452 0 +629 -115 0 +452 -156 -395 139 0 +-219 -506 183 -559 0 +292 -587 -77 -309 0 +-568 431 648 -291 0 +-578 -640 0 +85 431 0 +-404 -17 0 +455 155 0 +11 -91 342 -449 0 +-571 244 575 400 0 +-630 244 400 610 0 +-51 141 168 112 0 +439 -534 -543 75 0 +-297 -223 0 +-630 126 113 -417 0 +96 621 -285 103 0 +-505 -320 572 406 0 +88 -525 0 +-122 -84 -461 -183 0 +455 242 243 -636 0 +381 113 126 154 0 +123 103 629 -233 0 +-320 383 -357 386 0 +121 -60 638 0 +280 57 -368 -166 0 +598 -559 -292 150 0 +-27 610 641 -62 0 +628 -201 -46 145 0 +31 -371 -430 85 0 +-118 -166 280 57 0 +-277 -330 -376 -265 0 +-483 458 575 408 0 +339 519 0 +-531 -535 458 284 0 +32 -200 -91 0 +-103 -30 -408 0 +-264 -113 560 0 +85 -61 0 +-353 544 203 -92 0 +-345 -372 -177 -525 0 +290 133 108 138 0 +-643 -296 234 538 0 +-376 -600 -82 94 0 +-384 232 -110 535 0 +74 -301 555 80 0 +343 36 -366 -362 0 +190 269 323 154 0 +-462 -254 590 18 0 +306 -391 -41 424 0 +342 455 -378 355 0 +-384 187 -38 483 0 +284 396 -583 532 0 +-76 481 -196 -243 0 +509 323 -115 -197 0 +-550 -268 540 105 0 +78 163 -578 117 0 +-45 170 78 -59 0 +274 -194 -384 0 +-578 272 184 -440 0 +279 -639 516 -372 0 +83 -633 224 -630 0 +575 -185 -571 238 0 +-301 548 74 279 0 +-39 641 0 +399 -341 338 -82 0 +-116 -15 294 -429 0 +-518 633 560 -92 0 +480 604 -124 167 0 +551 548 19 -413 0 +-576 -244 517 575 0 +337 508 -21 404 0 +358 628 569 0 +211 -192 0 +256 -319 498 409 0 +-627 -46 25 548 0 +357 551 -351 608 0 +439 -179 628 -619 0 +402 -169 -567 0 +91 342 -626 382 0 +-597 23 98 343 0 +-192 -573 310 -360 0 +-72 646 -635 -484 0 +-82 404 -148 0 +-301 -71 74 -564 0 +208 -130 -68 -82 0 +-353 16 60 -585 0 +-647 154 -30 121 0 +385 -568 0 +-102 -612 -275 -128 0 +191 -257 378 -605 0 +371 -506 -87 -588 0 +97 -648 -368 457 0 +-593 67 -558 -107 0 +-612 -196 0 +-92 629 126 0 +335 358 -352 301 0 +-484 646 -124 452 0 +-200 342 0 +267 -478 -462 0 +30 -476 16 575 0 +5 -374 -642 116 0 +-617 277 -82 448 0 +-286 -264 -353 -212 0 +334 396 0 +242 -246 -45 254 0 +-625 208 295 445 0 +-531 -535 154 142 0 +445 -368 -497 0 +308 -584 -471 -478 0 +77 457 -368 149 0 +-371 -587 -41 31 0 +-325 -13 50 0 +-160 386 253 50 0 +-230 549 -175 358 0 +-353 103 273 482 0 +645 504 -330 12 0 +-285 185 103 -594 0 +-165 -492 0 +290 140 -359 32 0 +-193 -87 0 +-472 457 -587 0 +-434 -579 0 +491 10 -558 -328 0 +-635 -241 480 -89 0 +-320 -578 0 +-571 -353 -233 123 0 +385 411 0 +352 -485 0 +397 301 -352 410 0 +-175 -72 109 -167 0 +551 80 -252 0 +-244 517 -216 -576 0 +-167 8 -635 109 0 +471 27 377 -547 0 +-593 466 349 -463 0 +325 158 -297 555 0 +344 -269 458 610 0 +-35 575 396 -298 0 +-61 211 0 +-111 -559 0 +-240 406 -383 -603 0 +93 -569 -415 214 0 +207 294 -552 -429 0 +-373 423 -477 439 0 +-569 93 402 -415 0 +-309 291 448 617 0 +423 398 214 0 +-102 112 519 -275 0 +-48 322 513 308 0 +-30 121 -181 -647 0 +217 -567 -438 477 0 +245 512 427 85 0 +100 -369 -593 37 0 +377 483 187 -216 0 +142 -38 0 +358 80 -235 -479 0 +-191 -488 290 334 0 +-257 361 55 -576 0 +407 399 54 17 0 +538 453 -579 -296 0 +-293 -72 234 268 0 +343 -443 70 -618 0 +315 279 80 -470 0 +-216 -269 344 -571 0 +-165 219 -166 -506 0 +-292 245 85 598 0 +-309 -291 -368 648 0 +-450 636 -194 242 0 +208 211 0 +479 114 555 335 0 +-223 479 93 0 +-422 -129 40 -349 0 +164 -200 0 +497 -346 -111 -81 0 +594 -536 210 629 0 +-23 -87 591 -506 0 +-559 -118 86 317 0 +390 -87 0 +164 418 0 +-92 575 83 -633 0 +414 -125 500 -430 0 +493 -202 -177 -578 0 +381 154 -203 0 +-76 -350 112 174 0 +-462 -475 102 242 0 +-33 423 474 439 0 +-580 434 466 -593 0 +-123 298 -38 -181 0 +517 -332 -27 0 +-200 -532 -63 -39 0 +-135 498 386 -444 0 +284 -216 0 +198 -372 0 +-231 -86 -430 411 0 +-39 -384 0 +-568 -468 -492 343 0 +516 -639 294 279 0 +-235 -479 214 93 0 +644 248 290 108 0 +-353 -73 -482 0 +577 -200 -133 -517 0 +448 130 -559 0 +-51 -547 138 133 0 +24 -228 -255 397 0 +32 -433 -200 246 0 +-578 272 592 340 0 +217 -635 -415 0 +27 164 577 471 0 +-265 407 -277 -148 0 +-204 -148 0 +40 -129 -503 221 0 +-552 -320 608 207 0 +453 -609 -635 328 0 +5 88 0 +-615 -578 -76 0 +-584 -471 -194 342 0 +15 106 -553 -223 0 +386 356 -564 -151 0 +147 -196 143 -640 0 +-330 68 539 266 0 +-276 -158 0 +-461 456 522 -192 0 +-194 -63 -478 0 +121 -571 60 -585 0 +-547 432 -563 -39 0 +-376 -64 69 -82 0 +-369 -268 540 10 0 +-13 -223 -543 75 0 +67 452 0 +-370 18 -374 0 +-269 -181 363 344 0 +363 332 0 +-71 -564 634 0 +-640 -206 -382 -196 0 +272 -603 -383 -42 0 +412 205 5 -572 0 +392 10 466 -239 0 +457 -368 280 57 0 +-238 334 142 -44 0 +498 -240 0 +-443 -566 -125 -220 0 +532 -432 576 0 +-319 -631 409 -320 0 +-39 -140 308 -225 0 +-128 455 -226 0 +-365 407 49 21 0 +-395 -221 -129 589 0 +112 519 496 -486 0 +-196 155 0 +-631 622 -640 199 0 +448 -31 465 -41 0 +419 -597 296 -193 0 +304 288 350 0 +-45 153 -128 -524 0 +108 254 -45 -246 0 +-303 -516 335 198 0 +-370 -42 78 275 0 +337 -360 310 -204 0 +171 407 399 437 0 +-289 -193 380 0 +-174 406 -283 -640 0 +224 396 -35 -298 0 +450 -200 35 577 0 +-619 -179 -71 439 0 +-239 -129 392 -395 0 +259 152 85 390 0 +-254 -196 -76 590 0 +-312 495 256 498 0 +-364 -110 -273 -181 0 +-297 5 0 +-506 152 0 +390 -152 -52 362 0 +-573 337 0 +288 -48 -138 528 0 +-289 -589 -193 -149 0 +18 -196 -490 0 +145 548 -287 -201 0 +-79 -550 0 +385 -506 220 0 +281 -408 -571 121 0 +234 -593 0 +451 -553 -564 -562 0 +261 189 -534 28 0 +608 -184 498 -75 0 +574 358 464 -635 0 +402 90 421 -79 0 +-414 -568 -193 0 +5 207 205 -552 0 +-124 -229 -262 480 0 +8 -268 -369 540 0 +-462 288 0 +-605 -257 -91 -449 0 +363 16 0 +256 339 0 +277 -461 -330 -617 0 +486 316 -51 -45 0 +455 403 -29 242 0 +-605 -490 -626 359 0 +434 453 234 -580 0 +-353 638 -203 546 0 +477 -287 80 -438 0 +254 -246 -51 -462 0 +-216 -633 16 83 0 +5 227 0 +205 -13 0 +392 453 234 0 +-370 275 78 -473 0 +-92 -435 575 582 0 +90 -369 402 421 0 +-596 -488 -191 332 0 +-285 -115 0 +521 -591 85 390 0 +-565 105 234 -646 0 +400 244 284 103 0 +-509 -400 323 -336 0 +-461 -61 512 427 0 +-605 -168 -596 418 0 +24 -550 0 +-287 548 425 -169 0 +-285 103 -614 531 0 +-194 -488 -191 -576 0 +332 308 -232 -47 0 +-510 -382 155 -206 0 +521 26 -431 0 +-640 199 622 339 0 +-186 416 -573 -270 0 +32 138 133 290 0 +205 75 0 +-119 24 -307 -72 0 +-115 -212 121 -286 0 +362 -368 -87 -152 0 +-571 560 -518 633 0 +-587 -58 -87 0 +335 358 -627 25 0 +160 -606 294 5 0 +339 -510 -283 -174 0 +498 -552 0 +308 563 0 +554 -120 -278 614 0 +419 -366 296 411 0 +-589 -125 -149 -366 0 +407 -465 172 600 0 +-52 -587 -380 -472 0 +178 402 423 470 0 +-281 -264 581 -353 0 +570 32 -462 530 0 +-193 -492 -468 -506 0 +267 308 -313 -527 0 +-165 219 343 -430 0 +-494 -372 136 -223 0 +8 -395 328 0 +339 206 304 173 0 +16 284 -535 -531 0 +603 440 -339 0 +-274 32 -200 -282 0 +634 335 -106 198 0 +23 98 -52 -597 0 +-462 -128 174 -350 0 +-405 504 645 508 0 +-361 32 29 290 0 +-46 -635 -178 119 0 +164 -384 -513 0 +-146 -300 519 256 0 +-535 -110 154 -531 0 +217 628 25 -627 0 +551 386 -494 136 0 +208 -514 -69 -192 0 +136 -13 -494 -223 0 +-61 -111 0 +-252 562 -567 439 0 +-216 334 0 +-38 -39 -499 -632 0 +-468 -492 343 306 0 +-81 85 -317 541 0 +155 108 0 +394 -270 245 -598 0 +172 208 0 +610 -601 396 -55 0 +232 -39 142 535 0 +-626 282 -605 467 0 +208 611 407 249 0 +323 95 -286 -212 0 +608 -525 5 -345 0 +-559 -500 -388 -368 0 +-478 -547 644 0 +-229 -46 0 +569 28 423 -189 0 +-597 -414 343 459 0 +-183 -3 0 +-297 -357 -320 383 0 +100 -175 37 453 0 +404 407 -21 399 0 +-432 332 308 0 +-374 -429 -642 116 0 +138 133 242 -547 0 +423 480 -352 0 +-579 -293 -72 268 0 +36 -52 -362 -395 0 +-181 610 0 +-605 -257 -274 -282 0 +20 -329 -285 -60 0 +496 -128 -486 112 0 +256 -240 -199 -327 0 +311 -82 -520 -376 0 +294 279 373 0 +406 5 -327 -199 0 +-379 -125 -366 -523 0 +187 -38 377 483 0 +-597 -36 -100 -72 0 +439 -487 351 423 0 +-368 -468 -87 -492 0 +516 -534 -639 28 0 +-372 555 0 +16 575 -269 344 0 +335 -253 398 555 0 +-376 399 0 +-166 -57 466 -491 0 +-216 -384 9 476 0 +501 -162 457 306 0 +-429 -393 340 592 0 +43 -626 236 -605 0 +540 -635 8 -268 0 +-553 198 0 +241 480 628 0 +-510 319 586 339 0 +-216 -35 -298 -39 0 +-571 142 -507 -442 0 +-478 511 0 +-473 -240 116 -642 0 +5 444 -374 0 +647 -4 -264 629 0 +-110 -476 -92 30 0 +595 -369 -540 214 0 +399 -82 -394 6 0 +-81 -270 625 -311 0 +-462 305 0 +75 357 0 +-568 -231 -86 343 0 +-478 636 308 -450 0 +94 -401 539 -600 0 +-126 284 218 -92 0 +-547 -313 0 +-642 116 -320 339 0 +-634 241 548 358 0 +-158 354 279 80 0 +40 -485 556 0 +390 468 3 -122 0 +-157 -200 577 -248 0 +319 586 -631 -640 0 +-568 3 468 431 0 +600 -330 -465 49 0 +-196 254 -246 -527 0 +337 -270 0 +-129 40 436 -387 0 +103 -602 533 -417 0 +208 445 -131 0 +-72 228 24 -538 0 +229 252 -71 214 0 +-401 -204 0 +-382 -76 -196 -206 0 +93 -287 0 +487 628 -46 -549 0 +-181 363 -123 298 0 +10 -289 -221 589 0 +427 512 445 150 0 +-559 26 -280 -368 0 +-321 399 -204 469 0 +-65 37 100 105 0 +-510 -196 59 0 +509 -197 638 323 0 +641 332 0 +-68 407 -130 172 0 +445 448 512 427 0 +-429 213 608 312 0 +-263 -193 188 -616 0 +-187 -200 367 -39 0 +-326 49 -259 -41 0 +-52 -152 362 306 0 +40 -593 0 +491 -72 -328 -597 0 +20 -417 -250 -420 0 +74 410 -301 555 0 +-185 238 575 -92 0 +-136 423 50 101 0 +480 604 167 -635 0 +304 -496 406 -447 0 +-194 63 -236 -48 0 +5 406 302 615 0 +402 -545 93 -101 0 +-383 5 -393 -603 0 +-175 556 352 397 0 +237 466 492 385 0 +-46 438 0 +10 538 -296 -289 0 +201 -276 28 -567 0 +-175 221 8 0 +377 -583 -110 532 0 +-355 -196 -510 1 0 +305 155 170 0 +363 -123 298 154 0 +335 487 217 -549 0 +244 -110 400 154 0 +-389 20 -353 222 0 +-100 -263 10 -36 0 +432 11 -563 332 0 +-542 -501 -395 -166 0 +-203 638 546 381 0 +383 -534 272 -357 0 +452 349 -463 466 0 +89 -119 0 +-566 445 -118 0 +205 551 158 325 0 +-471 -547 -478 -584 0 +-38 -185 238 16 0 +211 600 -465 508 0 +-76 -496 -393 -447 0 +-464 10 -139 -550 0 +-146 -374 -300 305 0 +-278 -264 222 0 +-291 648 -61 390 0 +-618 70 -368 -166 0 +306 343 280 57 0 +10 139 -263 -156 0 +208 427 -41 0 +632 -194 377 -418 0 +437 -192 0 +-42 319 78 586 0 +312 213 -297 88 0 +224 -621 601 -630 0 +-573 539 0 +-110 -298 -384 -35 0 +114 74 0 +300 -196 -510 0 +-48 342 0 +284 585 537 -630 0 +-177 -642 -473 116 0 +235 -37 -175 -287 0 +421 -635 -287 90 0 +-640 304 0 +-568 566 441 431 0 +214 -71 -545 -101 0 +499 284 -544 103 0 +1 18 288 -355 0 +-45 108 -636 243 0 +159 407 84 49 0 +-22 377 308 -513 0 +-166 -587 219 -165 0 +-87 -443 0 +208 521 -309 0 +-429 608 -325 -493 0 +397 -65 -25 620 0 +-83 -557 332 610 0 +-443 -588 343 371 0 +445 86 317 -118 0 +577 426 -613 363 0 +-117 -626 305 -467 0 +-393 -429 603 0 +154 -417 0 +335 -562 279 0 +-447 -76 -496 256 0 +218 -126 610 458 0 +628 474 -564 -33 0 +5 -505 572 256 0 +-73 323 0 +522 -204 -376 0 +533 -602 629 458 0 +-36 105 -100 234 0 +-289 343 -392 231 0 +-430 468 -41 3 0 +322 -527 513 -596 0 +-567 -71 0 +-92 -364 -38 -273 0 +-540 -287 595 24 0 +-309 144 428 -506 0 +205 5 -135 -444 0 +29 -200 -361 -51 0 +172 -461 0 +282 288 467 -527 0 +507 -571 -331 121 0 +455 -355 1 304 0 +-369 453 0 +-192 21 208 0 +-571 -353 621 96 0 +-400 -417 -509 -630 0 +74 410 551 -301 0 +-124 -387 10 436 0 +-232 -47 334 164 0 +214 -549 487 628 0 +308 -526 313 -576 0 +448 445 -295 0 +-478 -48 0 +-484 -167 0 +-45 -350 174 78 0 +-81 -130 -192 -68 0 +613 274 396 -257 0 +-111 -309 0 +-48 -570 288 0 +452 221 -79 -503 0 +455 -524 18 153 0 +-369 -89 -241 -485 0 +453 -579 -107 67 0 +-151 279 356 608 0 +459 -414 234 -52 0 +-76 1 -355 -196 0 +-333 -461 -111 -26 0 +453 268 -293 -289 0 +-127 227 53 256 0 +404 -376 -21 407 0 +439 423 -189 569 0 +-201 145 335 217 0 +-573 -265 -330 -277 0 +267 -313 -605 11 0 +-125 -597 0 +-81 -401 277 -617 0 +445 -292 598 448 0 +356 -564 608 -151 0 +394 245 -598 -401 0 +-595 -474 -485 423 0 +-552 207 227 -372 0 +498 -320 0 +179 608 345 -564 0 +-237 453 -436 -579 0 +-357 198 294 0 +-231 -506 -166 -86 0 +638 602 560 0 +208 508 -132 -437 0 +-550 -287 0 +-536 -60 -329 560 0 +351 548 50 -487 0 +327 498 -515 -553 0 +143 305 -626 147 0 +-204 49 -645 0 +-83 396 224 -557 0 +243 -462 -636 -48 0 +205 -534 0 +211 -514 -69 -82 0 +-261 7 205 -320 0 +155 -348 -322 342 0 +-185 238 284 103 0 +-393 -312 495 498 0 +-289 318 565 343 0 +22 332 610 -537 0 +388 208 431 -456 0 +32 -626 0 +-114 -213 294 -564 0 +-152 362 -193 306 0 +-462 170 -59 18 0 +241 -485 -634 93 0 +235 -37 217 -635 0 +-374 -163 -429 606 0 +288 153 -524 304 0 +234 457 -97 293 0 +-597 -188 -34 -129 0 +507 -630 -331 -278 0 +544 381 -336 203 0 +519 355 -612 0 +608 -114 -213 50 0 +-634 214 241 -71 0 +-372 -562 279 451 0 +386 7 -261 498 0 +-441 172 -131 431 0 +103 -185 575 238 0 +-570 247 108 -200 0 +-124 358 0 +47 475 -257 -478 0 +-297 276 137 555 0 +482 458 273 -417 0 +155 382 91 -605 0 +-287 -635 620 0 +-626 -322 -348 -527 0 +-571 -216 -533 -426 0 +-491 466 385 -57 0 +402 -79 556 352 0 +-271 -192 -209 -446 0 +-637 -278 602 20 0 +-578 -177 447 444 0 +-196 59 584 -478 0 +381 20 0 +-365 333 0 +-391 424 -506 431 0 +575 -35 377 -298 0 +-309 -122 0 +272 -473 409 0 +-527 -433 308 246 0 +301 80 -352 397 0 +50 -301 74 -567 0 +323 -115 -212 -286 0 +-240 386 494 -161 0 +80 480 0 +-461 -310 407 326 0 +-473 -177 525 529 0 +75 294 -564 -543 0 +-263 419 296 -193 0 +47 11 -527 475 0 +60 154 -585 121 0 +-111 -461 465 0 +-115 554 0 +-415 -569 335 217 0 +238 -38 -181 -185 0 +-428 -87 -419 -587 0 +397 -354 -421 410 0 +551 75 -543 -297 0 +-506 385 -380 -472 0 +-369 260 89 -129 0 +372 -137 -325 0 +-461 -192 394 0 +139 -395 -156 8 0 +7 -261 -240 -553 0 +218 -126 -336 -110 0 +455 511 -48 350 0 +386 551 137 276 0 +234 -558 0 +-626 530 -605 570 0 +-488 290 -191 -39 0 +-643 -366 -188 -34 0 +-313 -605 -257 267 0 +-443 77 -122 0 +205 373 198 135 0 +25 548 -627 480 0 +-133 -517 -384 164 0 +-579 -166 0 +-41 448 598 -292 0 +-92 -630 0 +592 -578 340 -177 0 +382 -527 -196 91 0 +352 -46 556 24 0 +337 -520 311 2 0 +-289 343 -434 588 0 +505 -375 -640 406 0 +134 -270 -611 539 0 +389 -536 629 0 +55 11 361 332 0 +277 -617 208 508 0 +275 -128 -370 -473 0 +-349 452 40 -422 0 +-98 -366 105 607 0 +-597 -362 411 36 0 +638 -482 -251 -353 0 +-582 -216 16 0 +-393 -76 -375 505 0 +139 -597 -129 -156 0 +-223 -553 135 373 0 +-373 562 0 +137 205 276 198 0 +281 -408 323 -336 0 +-314 127 256 519 0 +-126 363 218 -181 0 +580 -620 -369 -129 0 +273 -336 482 381 0 +-482 -251 -180 -278 0 +-196 -48 -636 243 0 +-248 11 -157 -576 0 +575 -435 -39 0 +95 323 -420 -250 0 +539 -192 321 0 +606 -393 -163 -240 0 +11 -194 0 +498 -340 639 608 0 +628 25 -627 480 0 +-269 344 16 -216 0 +577 157 364 -110 0 +172 -270 -310 326 0 +-297 -444 88 -135 0 +-587 -122 0 +-438 -287 -175 0 +134 539 -401 0 +-584 155 -478 0 +288 -147 -605 -267 0 +453 -580 434 -289 0 +590 -254 304 -196 0 +103 629 -594 185 0 +-346 431 497 208 0 +298 16 -123 224 0 +284 -537 332 22 0 +465 172 -111 0 +-76 -462 -489 -528 0 +-463 349 10 -558 0 +91 455 342 382 0 +-485 -175 0 +-309 292 -506 -77 0 +259 -443 152 85 0 +-53 -451 205 -429 0 +-209 68 -204 266 0 +377 9 -110 476 0 +-223 423 -487 351 0 +-619 -179 335 279 0 +-76 -393 -495 -1 0 +-50 158 276 0 +-556 24 105 -67 0 +-491 -57 -289 -52 0 +103 121 0 +-378 342 355 155 0 +-553 -572 412 227 0 +-200 242 274 0 +-216 -483 408 -571 0 +-389 222 -536 560 0 +159 -204 150 84 0 +-424 -506 -166 616 0 +16 -417 0 +279 28 0 +272 -572 0 +-593 -260 -454 -558 0 +-330 245 522 456 0 +-401 508 0 +210 594 -285 20 0 +-462 32 91 382 0 +-37 -79 -485 0 +117 18 163 -374 0 +-597 -107 453 67 0 +211 2 -132 -437 0 +-57 23 193 0 +427 512 431 211 0 +248 -478 -257 644 0 +39 -396 -377 -332 576 -334 -577 -641 384 0 +-77 292 431 -368 0 +-609 -65 328 -72 0 +-107 -579 -643 67 0 +425 -169 358 80 0 +97 -648 -587 -193 0 +-289 -188 453 -34 0 +198 -470 80 315 0 +308 -471 -584 342 0 +390 414 500 -125 0 +16 -531 -535 -216 0 +10 392 -239 -289 0 +40 453 436 -387 0 +-535 -216 -531 -181 0 +-79 -90 -607 -593 0 +234 231 343 -392 0 +3 468 -309 -118 0 +439 -252 93 562 0 +-593 -459 -558 307 0 +425 548 -169 358 0 +12 -270 -21 404 0 +-553 -315 -223 -207 0 +-612 -403 375 519 0 +577 377 0 +-559 49 0 +407 448 -456 0 +-557 -83 -39 575 0 +-204 -416 131 208 0 +608 498 -409 151 0 +577 290 -248 -157 0 +-26 172 -122 -333 0 +-462 -490 359 32 0 +-191 396 -488 11 0 +-264 -197 -278 509 0 +-604 335 397 -398 0 +350 511 108 112 0 +255 93 214 0 +-96 -203 -323 0 +539 -277 -265 -192 0 +-378 355 -605 155 0 +9 476 224 332 0 +-615 -374 -143 18 0 +-175 484 -46 169 0 +-173 624 -473 227 0 +492 -366 343 0 +274 334 613 164 0 +-530 -510 -626 314 0 +-507 575 16 -442 0 +543 439 627 93 0 +18 -141 -196 -622 0 +-425 80 555 -356 0 +281 -285 -408 458 0 +313 -526 -596 332 0 +127 406 -320 0 +-192 -330 0 +40 -609 0 +-556 -67 -635 105 0 +339 -603 0 +-263 -36 -593 -100 0 +-249 -122 49 -3 0 +205 325 158 279 0 +24 10 0 +-462 -640 0 +-336 381 -585 0 +343 57 280 390 0 +433 396 44 308 0 +448 -347 -66 431 0 +35 450 164 334 0 +-637 -73 560 602 0 +154 121 -331 507 0 +636 164 108 -450 0 +20 -212 629 -286 0 +-79 580 -620 10 0 +-39 22 575 -537 0 +-597 -237 453 -436 0 +-647 -30 458 -285 0 +-536 -329 -278 -60 0 +47 -547 475 242 0 +105 -597 589 0 +210 638 594 381 0 +-270 12 171 437 0 +451 -562 28 -13 0 +600 -82 -465 172 0 +-395 -87 -434 588 0 +489 440 519 -42 0 +340 256 592 227 0 +407 508 0 +-352 -287 548 301 0 +-82 448 -541 341 0 +294 -302 5 -137 0 +-616 -166 466 188 0 +321 49 347 -204 0 +-597 453 -459 307 0 +-568 -506 0 +323 233 -115 599 0 +141 342 -196 168 0 +134 -573 -401 0 +-635 -129 -484 646 0 +-510 -374 226 642 0 +249 2 611 448 0 +-175 397 415 -561 0 +95 -353 0 +187 483 -384 363 0 +32 511 -612 350 0 +-352 335 397 301 0 +32 138 -547 133 0 +-584 -471 32 308 0 +-309 245 0 +-161 294 -429 494 0 +10 -579 0 +276 -553 -223 137 0 +107 466 0 +288 -605 254 0 +-248 334 -157 164 0 +-430 66 -111 0 +-193 -506 280 0 +-443 -506 0 +-115 -417 0 +30 408 0 +-395 307 -459 453 0 +633 -518 560 16 0 +-151 356 -13 28 0 +-175 545 422 217 0 +629 103 212 -582 0 +272 -493 -13 -325 0 +-436 -643 0 +107 -579 -52 220 0 +-287 548 -487 0 +159 -270 84 -461 0 +-283 -174 -473 78 0 +-400 -285 16 0 +-13 498 0 +586 319 18 -374 0 +-576 308 -418 632 0 +155 138 -605 0 +-122 208 0 +305 155 -226 490 0 +20 -285 233 599 0 +-41 -461 -456 0 +229 252 397 80 0 +149 77 306 457 0 +563 -511 242 290 0 +-207 198 -297 -315 0 +304 -578 0 +406 -510 0 +162 -77 0 +137 -534 276 -223 0 +-497 -430 -111 -502 0 +-597 -193 -616 188 0 +-615 -143 -473 -128 0 +381 638 599 233 0 +242 -471 -584 -547 0 +381 -408 -181 281 0 +308 27 396 471 0 +-547 35 450 -39 0 +480 241 -634 -567 0 +-370 519 275 256 0 +396 613 274 11 0 +-309 66 -118 162 0 +234 -379 -523 457 0 +94 -204 -405 -600 0 +-564 158 -372 0 +-596 577 0 +647 -417 -4 554 0 +-13 -137 -302 227 0 +-35 -596 332 0 +-257 342 267 -313 0 +-241 -635 -46 -89 0 +560 -647 -30 -92 0 +301 358 -352 -71 0 +-327 -199 -473 -240 0 +-510 -393 642 226 0 +288 170 -59 18 0 +140 47 0 +-196 -322 -348 -527 0 +-611 -376 -204 134 0 +305 339 -174 -283 0 +10 40 100 37 0 +-247 -9 164 -384 0 +59 242 584 112 0 +-405 134 -611 2 0 +-501 -542 -125 -366 0 +511 112 242 350 0 +-145 -124 402 609 0 +28 294 0 +90 -175 -46 421 0 +-648 97 306 -52 0 +224 -535 103 -531 0 +457 293 -395 -97 0 +10 40 262 -324 0 +-462 -226 -128 490 0 +-593 -463 -263 349 0 +377 -576 0 +-640 300 -43 -626 0 +-263 411 0 +-510 117 -631 163 0 +-320 -606 294 160 0 +269 190 -278 16 0 +-181 -460 -110 62 0 +588 343 -434 -597 0 +-130 -68 448 -204 0 +453 260 -175 89 0 +281 560 -181 -408 0 +-125 -366 -97 293 0 +49 541 -317 -41 0 +548 198 -477 -373 0 +537 458 284 585 0 +-573 171 437 -270 0 +377 -248 -157 308 0 +-92 -531 0 +503 -369 480 438 0 +-44 -238 -216 577 0 +242 -267 455 -147 0 +-127 -393 53 -429 0 +-166 -566 -368 0 +538 -129 -296 -289 0 +-39 308 -22 -513 0 +516 551 -297 0 +585 -216 537 -336 0 +-430 -23 411 591 0 +108 403 112 0 +-257 -48 -449 -91 0 +-333 49 -61 -26 0 +-125 -579 -616 0 +-55 396 -38 -601 0 +466 -125 0 +-514 -401 -69 -461 0 +-635 464 574 217 0 +40 -228 214 -255 0 +-600 12 94 -401 0 +-534 555 0 +-204 -215 337 -522 0 +352 556 214 -79 0 +-524 -462 0 +644 11 248 -605 0 +133 164 108 138 0 +-374 339 0 +-351 -13 -223 357 0 +306 -61 472 -512 0 +11 108 0 +-48 -449 -91 -547 0 +-444 -240 -135 -553 0 +-278 621 96 103 0 +-462 -29 -51 403 0 +-573 -192 338 0 +290 11 0 +155 375 305 -403 0 +455 530 570 -478 0 +308 -596 0 +-643 -324 -175 0 +-461 427 407 0 +-484 646 -79 452 0 +191 -194 378 32 0 +69 -82 -64 399 0 +-46 628 -604 -398 0 +272 -13 -15 -116 0 +-301 555 74 335 0 +-550 -643 0 +280 306 431 0 +-597 -454 457 0 +-541 49 -82 341 0 +614 -278 -120 -180 0 +-73 638 0 +-144 130 -122 172 0 +342 -236 63 -257 0 +-42 78 -590 -592 0 +141 -51 168 -462 0 +239 24 561 105 0 +49 291 431 617 0 +227 -297 0 +-506 472 445 -512 0 +531 -614 323 -336 0 +211 -249 -3 431 0 +-63 -532 577 -547 0 +-1 -473 -495 -76 0 +504 -270 645 -573 0 +565 343 -366 318 0 +-13 373 50 135 0 +397 214 0 +-510 -196 -530 314 0 +-236 242 -200 63 0 +383 -357 -534 227 0 +-196 -626 0 +522 456 -461 -270 0 +-26 -521 0 +423 619 -485 -574 0 +627 439 543 -567 0 +198 335 627 0 +24 217 0 +-146 5 256 0 +-72 234 -109 523 0 +-576 -547 55 361 0 +332 27 0 +54 -376 17 -204 0 +-264 121 0 +445 -506 424 -391 0 +-263 492 237 385 0 +-532 377 -547 -63 0 +-419 411 -428 390 0 +-553 -177 -137 -302 0 +-366 -328 -643 491 0 +49 431 295 -625 0 +334 -218 -110 -432 0 +-25 -287 0 +471 -200 -39 27 0 +-309 211 -333 -26 0 +131 448 2 -416 0 +560 -181 195 -222 0 +-441 445 0 +305 455 0 +-41 -568 -77 292 0 +411 466 0 +-41 208 -625 295 0 +-405 2 -64 69 0 +332 -547 0 +487 -71 480 -549 0 +-380 -443 -125 -472 0 +-384 -133 -547 -517 0 +406 304 622 199 0 +539 -469 0 +58 85 -430 -295 0 +21 -365 -330 -461 0 +18 -374 603 -170 0 +354 410 -158 198 0 +523 -109 466 452 0 +-489 -528 -76 455 0 +480 178 -550 0 +50 -373 -477 628 0 +-191 -51 -547 0 +-624 272 -534 299 0 +-309 85 0 +633 -353 103 -518 0 +-531 -535 -181 -110 0 +173 206 -128 256 0 +-92 -435 582 -38 0 +-573 -376 0 +-81 245 0 +386 312 5 213 0 +-567 -421 -485 -354 0 +-309 -347 49 -66 0 +474 -71 -33 279 0 +-81 131 -192 -416 0 +455 -489 -640 -528 0 +-427 508 208 -645 0 +-344 142 0 +560 -60 -329 -73 0 +-287 252 229 80 0 +236 342 288 43 0 +191 -449 0 +406 -640 -592 -590 0 +101 410 555 -136 0 +-413 335 19 555 0 +-259 -441 0 +288 18 496 0 +610 526 435 332 0 +-589 -149 385 466 0 +8 239 -597 0 +-579 419 296 343 0 +-451 -177 -372 -53 0 +368 -58 502 0 +246 -433 -547 -51 0 +-71 634 -106 -223 0 +323 381 0 +243 155 305 0 +-39 -537 22 -38 0 +150 -514 2 -69 0 +40 -139 -464 8 0 +-344 -384 488 363 0 +-534 -223 299 0 +141 342 455 168 0 +-181 -571 0 +-450 308 -527 636 0 +205 5 -261 0 +-600 508 94 337 0 +5 592 -393 340 0 +-336 610 0 +17 -82 399 0 +10 -263 -580 434 0 +-483 408 -571 575 0 +375 155 -403 -640 0 +305 288 147 143 0 +-486 496 -76 -462 0 +16 -353 -602 533 0 +164 -22 -513 577 0 +-643 -296 538 -366 0 +-426 610 -533 458 0 +-151 386 356 50 0 +102 -612 32 -475 0 +-476 -92 30 575 0 +380 454 -558 -87 0 +431 -391 424 -587 0 +-401 -132 245 -437 0 +256 163 519 117 0 +-369 -643 0 +466 463 -193 618 0 +-38 400 244 16 0 +-393 304 275 -370 0 +560 -264 581 -281 0 +431 -625 295 172 0 +227 386 552 0 +244 363 -181 400 0 +594 -285 210 554 0 +-209 21 508 0 +327 -515 -320 608 0 +620 -25 217 -369 0 +246 -596 342 0 +33 -372 439 515 0 +138 -48 -194 133 0 +-118 -87 362 -152 0 +-387 24 436 105 0 +608 325 158 551 0 +-203 546 -285 -180 0 +288 155 0 +-593 538 0 +-65 -46 169 484 0 +339 -505 572 88 0 +-478 243 -462 -636 0 +-82 -461 0 +-573 -522 -401 -215 0 +-82 600 -465 208 0 +105 40 0 +214 -65 0 +127 -76 -473 -314 0 +109 -175 453 -167 0 +294 179 279 345 0 +11 -488 -191 641 0 +389 0 +570 242 530 -612 0 +-612 -486 496 78 0 +-194 322 -48 513 0 +-395 542 324 -129 0 +-298 -576 -38 -35 0 +499 -544 -92 284 0 +8 -36 -100 -597 0 +-346 -461 497 -41 0 +367 11 342 0 +-135 -13 272 -444 0 +-553 272 -340 639 0 +-240 160 -606 608 0 +431 -118 0 +544 203 -571 381 0 +391 514 448 445 0 +-39 488 -200 0 +105 -289 589 0 +57 280 -506 385 0 +-136 101 -71 -564 0 +-263 10 -463 349 0 +-175 -620 580 453 0 +198 -213 -114 294 0 +-200 636 -450 108 0 +80 555 201 -276 0 +638 -546 323 0 +621 96 458 -285 0 +458 -420 629 0 +448 407 -416 131 0 +-19 -412 -297 551 0 +406 489 -128 440 0 +406 163 -640 117 0 +261 189 -372 -223 0 +-181 323 420 460 0 +-31 -122 -461 465 0 +-374 -642 116 88 0 +247 -570 -48 308 0 +-571 -110 -507 -442 0 +551 106 15 -297 0 +-567 569 -223 -189 0 +-92 -216 62 -460 0 +-416 2 131 150 0 +32 141 168 -196 0 +-491 -57 -366 411 0 +628 480 477 -438 0 +528 -51 -612 -138 0 +-115 638 0 +-157 -248 396 -257 0 +-576 -194 557 449 0 +508 68 -209 266 0 +-107 -36 -466 0 +-594 154 185 381 0 +288 -378 355 342 0 +-51 -462 -348 -322 0 +-106 -564 0 +479 279 114 335 0 +-127 498 -473 53 0 +-148 -277 -330 -265 0 +452 -395 434 -580 0 +332 -532 -63 -596 0 +647 121 638 -4 0 +-204 131 -416 448 0 +-317 150 445 541 0 +-177 227 0 +-619 -179 628 551 0 +-378 288 -605 355 0 +-463 453 -289 0 +412 -429 608 -572 0 +-558 -149 -166 -589 0 +-127 256 53 -240 0 +-129 -395 -565 -646 0 +334 -257 0 +-568 -500 0 +226 304 642 -374 0 +411 306 -152 362 0 +565 318 457 234 0 +219 -165 -587 -52 0 +294 -564 137 276 0 +641 -47 -596 -232 0 +-102 -275 78 112 0 +229 480 252 423 0 +-329 -264 -60 629 0 +-567 627 -223 543 0 +-489 -528 112 -76 0 +32 -51 0 +37 40 8 100 0 +-487 -567 351 28 0 +337 -204 134 -611 0 +77 149 -52 -568 0 +142 9 -384 476 0 +-132 407 448 -437 0 +-547 -450 32 636 0 +647 -4 -285 554 0 +439 -553 -315 -207 0 +-45 59 -51 584 0 +-394 -82 -148 6 0 +363 610 0 +-496 -447 -128 406 0 +577 -488 0 +638 -4 647 381 0 +394 208 -598 -82 0 +554 323 0 +-240 370 552 -473 0 +143 18 256 0 +-118 -193 0 +-158 548 354 279 0 +480 421 0 +-320 151 205 -409 0 +-286 -212 20 -278 0 +314 -128 -462 -530 0 +234 -542 0 +-48 418 -547 -168 0 +-320 572 -505 -374 0 +-38 -269 344 -571 0 +78 -117 -473 0 +-177 -13 151 -409 0 +214 -175 0 +-223 -301 -567 0 +-216 400 244 -336 0 +-297 88 383 -357 0 +32 -462 -475 102 0 +386 160 -606 -240 0 +-82 -360 -209 310 0 +-330 172 456 522 0 +-186 2 416 337 0 +-270 -148 94 0 +-594 -181 185 121 0 +49 -347 -66 -41 0 +436 -369 452 -387 0 +-175 109 -167 105 0 +381 518 -115 623 0 +-468 390 343 -492 0 +214 -124 464 574 0 +500 -193 -368 414 0 +-369 328 -609 8 0 +-612 -48 -267 -147 0 +-372 -161 498 494 0 +139 -558 -156 452 0 +-223 -372 213 0 +-72 -643 0 +-118 385 -618 70 0 +105 -262 -550 0 +-369 -169 480 0 +224 460 103 0 +-289 -193 463 618 0 +399 266 68 508 0 +-115 -60 323 -329 0 +-510 -153 -374 202 0 +296 -52 -579 419 0 +337 2 310 -360 0 +412 205 -429 -572 0 +-161 272 494 -553 0 +-291 -506 648 445 0 +-640 288 153 -524 0 +-61 -280 306 26 0 +457 -430 -23 591 0 +227 494 -161 -534 0 +184 5 339 0 +-635 -46 503 0 +10 -349 -79 -422 0 +346 271 -461 -330 0 +112 519 -243 481 0 +555 -223 0 +472 -368 431 -512 0 +-200 577 367 -187 0 +-550 402 0 +-319 88 409 -631 0 +-561 -65 415 397 0 +88 -7 -374 146 0 +-46 -228 24 -255 0 +-152 457 362 -368 0 +-238 -298 0 +-424 -118 616 -87 0 +-626 342 59 584 0 +-330 -204 0 +-46 -545 -101 410 0 +288 -76 0 +-330 539 504 645 0 +69 -64 -192 -376 0 +205 279 33 515 0 +-246 254 -48 -196 0 +519 -42 -447 -496 0 +-109 -289 453 523 0 +-258 448 431 132 0 +-429 383 0 +531 103 -353 0 +155 486 -605 316 0 +217 -71 -104 303 0 +-618 390 70 411 0 +450 -547 577 35 0 +356 -151 608 198 0 +-485 40 620 -25 0 +319 586 18 256 0 +173 206 304 -374 0 +262 8 -635 -324 0 +291 617 431 208 0 +556 -175 -287 352 0 +569 358 -71 0 +-330 -148 -215 -522 0 +396 313 308 -526 0 +227 -372 160 0 +498 207 294 0 +-13 227 494 -161 0 +-485 -124 169 484 0 +-509 560 -400 -181 0 +228 -538 453 40 0 +498 146 -7 256 0 +176 -190 638 -353 0 +170 -45 519 -59 0 +560 -250 95 -420 0 +343 234 318 565 0 +-289 139 105 -156 0 +194 257 -308 547 -290 -164 -11 200 596 0 +-38 344 -92 -269 0 +407 -461 394 0 +174 -626 305 -350 0 +482 629 103 273 0 +290 -605 0 +40 217 -228 -255 0 +241 -634 -46 335 0 +211 508 347 321 0 +-631 -383 -320 -603 0 +-38 9 476 -576 0 +105 -79 0 +-87 -162 501 -368 0 +-244 517 -39 -216 0 +217 335 -438 0 +448 333 508 -54 0 +-503 -635 221 -72 0 +-38 -432 -218 -39 0 +288 78 0 +-591 -61 -568 521 0 +512 427 -81 -111 0 +-518 633 -571 629 0 +445 -368 -500 -388 0 +641 577 0 +-393 529 525 498 0 +-438 397 -175 0 +-550 453 230 34 0 +95 -180 0 +-495 -510 -1 -374 0 +375 -403 519 112 0 +364 -216 0 +-369 -485 556 0 +-557 -83 -110 334 0 +225 -216 -39 442 0 +-200 334 -513 -22 0 +119 -178 -175 -287 0 +-579 324 542 453 0 +440 -631 -640 489 0 +-361 418 0 +-568 -118 0 +172 -192 -54 333 0 +-124 397 0 +288 -530 0 +-353 560 0 +349 -558 -463 -593 0 +574 -485 464 -124 0 +142 537 154 585 0 +-430 362 -152 -125 0 +-476 -110 30 154 0 +249 -82 611 49 0 +-122 306 317 0 +27 471 377 -257 0 +545 422 -550 480 0 +-30 -647 458 629 0 +498 -473 493 -202 0 +161 283 -473 -177 0 +-115 -420 381 -250 0 +233 -353 638 599 0 +-586 348 288 18 0 +480 301 -352 628 0 +-330 -541 341 -81 0 +-41 -587 521 0 +280 -430 -52 57 0 +49 497 -61 -346 0 +106 -223 15 -372 0 +-257 -576 557 449 0 +-270 208 0 +-643 -293 268 -366 0 +-82 12 0 +608 -639 -564 516 0 +-278 599 233 554 0 +-201 -46 145 335 0 +272 -75 -184 -534 0 +-578 272 53 -127 0 +-236 290 63 242 0 +-185 -181 142 238 0 +-384 -200 -63 -532 0 +406 -170 603 -76 0 +-473 -146 -128 -300 0 +452 89 40 260 0 +641 -200 0 +-372 412 -572 -177 0 +-526 313 334 -200 0 +565 466 318 -193 0 +100 8 -369 37 0 +383 -553 272 -357 0 +-248 332 -257 -157 0 +-534 -19 439 0 +390 428 144 -111 0 +-572 327 0 +-621 610 601 103 0 +-574 619 335 -46 0 +279 398 628 -253 0 +227 -534 151 0 +70 -618 343 -430 0 +-193 -165 219 -587 0 +-624 299 -320 -297 0 +532 -583 -216 577 0 +-169 425 335 397 0 +-320 -393 -505 572 0 +-194 -39 -248 0 +-601 -576 -55 224 0 +154 -123 298 142 0 +66 306 431 162 0 +-158 439 354 -567 0 +-166 371 -587 -588 0 +-194 138 32 133 0 +292 -559 -77 -118 0 +484 -124 169 480 0 +491 234 -328 -72 0 +337 399 0 +-619 439 -179 93 0 +-84 448 -183 -41 0 +367 -194 396 0 +-506 -472 -193 -380 0 +-630 583 224 -195 0 +-59 -640 170 455 0 +-380 414 0 +-368 -500 -388 431 0 +241 80 -46 -634 0 +18 -355 -196 1 0 +218 224 -630 -126 0 +288 -267 -147 -478 0 +-77 -111 292 390 0 +290 -613 334 0 +-312 495 -240 406 0 +-403 -626 305 375 0 +5 -345 -525 205 0 +-181 -460 62 142 0 +-197 -264 509 629 0 +292 66 122 0 +-287 425 80 -169 0 +31 -309 -587 -371 0 +-71 -485 25 -627 0 +-196 -640 300 0 +-393 302 498 615 0 +86 -118 -309 317 0 +453 105 0 +272 -261 7 -553 0 +261 189 205 198 0 +142 -432 -218 577 0 +448 365 -521 -559 0 +448 -122 0 +-621 103 601 284 0 +-240 -393 184 -440 0 +-568 -152 362 -52 0 +-162 -122 -568 0 +294 -624 299 -320 0 +396 377 0 +-39 290 27 471 0 +-129 -107 67 -263 0 +-415 628 -569 214 0 +-564 627 543 628 0 +172 -309 0 +535 -216 577 232 0 +-330 -321 0 +399 -215 -522 -204 0 +290 334 433 44 0 +525 498 529 -473 0 +577 363 532 -583 0 +-579 -193 0 +627 423 50 543 0 +411 231 -597 0 +-195 583 458 224 0 +-27 -62 -39 142 0 +-395 -296 538 8 0 +-92 -195 284 583 0 +-166 -428 -587 -419 0 +-418 632 -576 -194 0 +-532 -194 377 -63 0 +-405 17 -204 54 0 +452 -558 -580 434 0 +-574 423 402 619 0 +342 403 -196 -29 0 +304 -496 -447 339 0 +198 -357 608 0 +2 134 -611 399 0 +88 7 294 -261 0 +-263 -193 156 165 0 +-270 -405 0 +-64 69 337 2 0 +292 -368 -77 -309 0 +359 -527 -490 -196 0 +-605 524 -626 -644 0 +-299 -13 0 +-87 -368 -588 371 0 +-270 416 -186 -148 0 +610 458 -273 -364 0 +448 -317 541 -41 0 +-616 188 234 457 0 +-553 516 50 -639 0 +-393 173 -76 206 0 +262 -124 -324 452 0 +-165 -87 219 -587 0 +361 -418 -164 0 +114 628 479 50 0 +-87 -506 -86 -231 0 +18 642 -473 0 +521 -430 -41 -591 0 +-571 -364 575 0 +-125 97 -443 -648 0 +-73 -637 121 602 0 +145 217 40 0 +-578 78 489 440 0 +-61 70 -430 0 +452 -119 -79 -307 0 +-571 -233 123 629 0 +95 121 -182 -113 0 +-96 638 99 381 0 +-487 351 93 -223 0 +628 -604 -398 217 0 +-106 634 555 335 0 +641 535 610 232 0 +248 -313 0 +-250 121 638 -420 0 +439 551 0 +93 -627 -485 25 0 +-204 2 0 +-401 -82 0 +479 114 335 198 0 +-125 -428 -419 390 0 +547 313 -248 0 +-479 -235 628 217 0 +-124 260 89 -593 0 +407 54 17 539 0 +-309 259 152 -587 0 +555 80 -543 0 +628 -201 217 145 0 +610 396 426 -613 0 +598 245 -292 -111 0 +108 308 0 +-281 381 -73 581 0 +-369 -72 0 +103 -92 0 +514 -461 -270 0 +400 244 -38 -181 0 +-440 339 0 +361 334 -200 0 +492 237 -558 385 0 +-287 549 0 +332 435 526 284 0 +78 -76 0 +468 -443 0 +248 -48 -194 644 0 +106 -223 15 -13 0 +-597 8 -580 434 0 +-82 448 -132 -437 0 +439 628 -413 19 0 +-156 139 453 -395 0 +318 -579 343 565 0 +-442 -507 154 142 0 +-204 -446 -405 0 +40 453 646 -484 0 +310 -209 -360 -192 0 +147 -128 143 112 0 +-309 -280 26 -506 0 +154 -285 0 +-229 -369 -262 -485 0 +575 -432 -39 0 +-102 -626 305 -275 0 +396 575 -476 0 +-41 152 259 -430 0 +403 -29 -605 155 0 +460 121 -181 420 0 +227 -606 0 +575 -273 -364 103 0 +279 494 294 0 +-133 332 -257 0 +-317 49 -309 541 0 +10 -538 -550 228 0 +548 -223 0 +575 -499 -632 -39 0 +477 -438 402 -567 0 +307 -579 -459 105 0 +85 -3 0 +-353 -92 96 621 0 +-576 284 218 0 +-547 27 471 -39 0 +-571 560 -602 533 0 +-375 505 -374 18 0 +-13 494 -177 -161 0 +385 -579 0 +-461 -330 333 -54 0 +-196 91 382 342 0 +-424 616 385 -506 0 +63 -236 -48 -257 0 +234 -36 8 -100 0 +438 214 503 -124 0 +95 560 546 -203 0 +380 -568 -52 0 +-87 411 0 +-378 -462 -48 355 0 +634 50 -71 -106 0 +-576 9 476 575 0 +383 -177 -534 -357 0 +-320 -553 0 +-352 80 301 -46 0 +-209 134 508 -611 0 +-635 119 -178 -287 0 +300 78 -612 -43 0 +458 224 -544 499 0 +-366 -597 0 +-426 -533 284 16 0 +-483 396 224 0 +-571 -630 0 +622 78 0 +112 282 108 467 0 +647 -4 560 95 0 +-257 -511 563 -48 0 +-278 -73 0 +589 -129 -597 -221 0 +-612 -640 0 +-558 188 385 -616 0 +390 -497 -502 -61 0 +-285 -281 103 0 +514 -309 391 208 0 +-534 -320 0 +-316 308 -367 -478 0 +-477 -564 -567 -373 0 +-267 -48 288 -147 0 +-430 -512 -61 472 0 +-370 -640 -631 275 0 +434 10 -558 -580 0 +-274 -527 -282 308 0 +143 -462 519 0 +377 575 -27 -62 0 +198 551 0 +-636 243 112 -51 0 +-611 134 -209 -192 0 +-587 77 -193 149 0 +-596 -527 267 -313 0 +477 -287 410 -438 0 +-52 -379 -523 -597 0 +-23 591 -430 -52 0 +565 318 -597 -52 0 +85 390 219 0 +-564 114 479 335 0 +339 -1 305 -495 0 +480 -229 -262 -550 0 +-604 -71 -398 358 0 +453 452 0 +142 -384 187 483 0 +423 470 -485 178 0 +275 -370 -374 305 0 +337 -266 0 +-597 411 -589 -149 0 +-122 390 472 -512 0 +205 -451 -53 88 0 +12 -446 -271 -330 0 +256 498 -370 0 +-60 -536 -329 -353 0 +648 -291 -368 -41 0 +332 -83 224 -557 0 +-612 43 -48 236 0 +622 406 199 -76 0 +335 551 -33 474 0 +-626 -527 91 382 0 +-559 -118 162 66 0 +410 93 0 +352 217 556 -550 0 +-494 205 136 551 0 +-40 609 90 0 +16 -278 212 -582 0 +-573 399 0 +-29 -462 403 -478 0 +103 408 0 +132 -258 150 445 0 +592 498 340 -393 0 +-570 -257 -605 0 +94 -600 -204 399 0 +-405 -209 0 +-564 -276 201 335 0 +142 -336 -544 499 0 +-196 -76 375 -403 0 +-527 108 0 +490 519 112 -226 0 +224 -632 641 -499 0 +-534 -302 -137 227 0 +-430 306 0 +-76 -226 -462 490 0 +452 466 -565 -646 0 +-395 165 -52 156 0 +-612 141 78 0 +-634 -71 241 358 0 +-564 423 0 +-490 359 155 -527 0 +-430 183 -219 -61 0 +515 33 551 -297 0 +455 -243 18 481 0 +-540 40 358 595 0 +-564 198 0 +28 19 0 +-291 648 -587 431 0 +-331 -614 0 +-268 -72 540 -65 0 +174 -612 -76 -350 0 +-223 33 93 0 +-82 266 68 -376 0 +-367 -200 -316 108 0 +28 -553 -543 75 0 +-204 249 611 150 0 +-587 3 468 -61 0 +-612 174 18 -350 0 +-428 -419 306 411 0 +172 346 271 -192 0 +-625 49 295 -41 0 +-320 386 412 -572 0 +515 551 33 608 0 +-483 103 -38 0 +-578 406 0 +647 -115 -4 323 0 +453 -609 -550 328 0 +195 103 -353 -222 0 +620 -369 402 -25 0 +-33 551 474 80 0 +-110 641 0 +-173 498 624 256 0 +66 162 -587 445 0 +-282 -478 308 -274 0 +629 546 554 -203 0 +628 25 214 -627 0 +-370 256 275 -128 0 +19 50 -413 -567 0 +561 -422 0 +-207 294 -315 555 0 +304 -530 314 155 0 +533 -417 -602 -630 0 +439 -639 516 -534 0 +-194 -63 -532 -39 0 +-588 371 -368 457 0 +-77 -41 -587 292 0 +85 -326 -259 -461 0 +-559 390 0 +-607 452 -90 -79 0 +-72 -349 -597 0 +423 -169 425 -485 0 +629 509 554 0 +-192 68 -573 266 0 +-30 -336 121 -647 0 +-477 -373 548 50 0 +-76 -275 -102 -196 0 +294 498 312 213 0 +179 345 -553 -564 0 +16 -30 -647 -353 0 +337 -341 508 338 0 +-72 620 -65 0 +557 396 -194 449 0 +-576 -38 187 483 0 +210 -264 560 594 0 +480 40 595 -540 0 +466 -593 -156 139 0 +411 -472 -380 306 0 +37 -129 100 -369 0 +-553 608 0 +629 20 614 -120 0 +466 542 -593 324 0 +-39 449 557 -547 0 +-526 308 332 313 0 +636 -450 -547 -51 0 +399 508 17 54 0 +-204 94 -600 -376 0 +-76 -481 -529 256 0 +-627 25 217 548 0 +557 -384 449 164 0 +407 -341 539 338 0 +595 -255 0 +-216 610 0 +608 -543 75 50 0 +151 -409 -297 -320 0 +205 -207 555 -315 0 +-527 267 11 -313 0 +-61 -521 -461 365 0 +155 -59 0 +-392 231 -579 -125 0 +-381 -60 602 0 +267 164 -313 -51 0 +588 -289 -87 -434 0 +288 -640 490 -226 0 +205 -137 -302 -429 0 +584 342 59 455 0 +-51 -348 -322 -45 0 +-38 -571 400 244 0 +154 -476 30 363 0 +-578 -592 -590 -128 0 +-384 -140 -225 -547 0 +428 144 -111 306 0 +-39 -44 -238 -38 0 +448 -309 598 -292 0 +-81 407 0 +29 342 -194 -361 0 +-278 458 -420 0 +-39 -55 -601 -110 0 +211 -346 -309 0 +33 386 515 50 0 +99 -96 121 -73 0 +431 -506 468 3 0 +227 -534 -345 -525 0 +-325 88 -493 205 0 +2 -541 341 150 0 +-52 -220 -566 -430 0 +-265 -192 -573 -277 0 +-15 -553 227 -116 0 +448 -69 407 -514 0 +155 305 1 -355 0 +184 5 -393 -440 0 +-82 69 -405 -64 0 +328 10 40 0 +629 -571 190 269 0 +-510 319 -631 586 0 +290 32 475 47 0 +-62 284 -27 641 0 +333 -192 49 -54 0 +153 519 -524 112 0 +227 495 -312 406 0 +455 18 590 -254 0 +-1 -128 -495 -473 0 +8 -463 349 -263 0 +8 -459 -597 0 +-200 -596 0 +-384 -200 432 -563 0 +530 -45 570 108 0 +-647 -417 -30 458 0 +598 -292 208 -61 0 +178 80 470 -46 0 +344 -181 -216 -269 0 +214 487 93 -549 0 +-614 531 154 323 0 +105 -579 -463 349 0 +458 -507 -442 224 0 +-352 -71 217 301 0 +-193 390 0 +-330 539 -271 -446 0 +112 -59 170 -76 0 +-200 -282 108 -274 0 +641 142 0 +439 80 0 +438 40 503 -485 0 +395 491 -98 0 +26 -280 390 -111 0 +-499 575 -576 -632 0 +290 44 433 577 0 +-252 279 562 628 0 +-336 323 126 113 0 +600 -465 -82 448 0 +606 88 -631 -163 0 +234 -324 453 0 +-207 279 608 -315 0 +-161 7 0 +18 -42 0 +139 -156 -289 10 0 +332 577 0 +290 164 0 +304 519 0 +-68 -401 245 -130 0 +-87 98 -263 23 0 +-125 -58 -443 379 0 +-192 -64 -148 69 0 +50 -425 628 -356 0 +-553 276 28 137 0 +-384 -38 -35 -298 0 +628 -619 50 -179 0 +342 -45 0 +406 447 444 -240 0 +295 -625 -81 -122 0 +-101 -545 335 -46 0 +187 363 577 483 0 +448 291 617 -41 0 +354 71 201 0 +437 -405 -82 171 0 +477 480 -438 -567 0 +387 -287 104 -635 0 +-237 234 -436 453 0 +-35 577 -298 142 0 +-81 394 -270 -598 0 +431 -443 0 +-353 281 -408 -571 0 +-291 445 648 -368 0 +-41 26 208 0 +161 -473 498 283 0 +152 -61 306 259 0 +100 8 37 -550 0 +494 -372 -161 -177 0 +-146 339 304 0 +-110 224 0 +308 -433 246 -48 0 +217 -262 -229 -550 0 +245 514 391 85 0 +608 373 135 198 0 +-166 380 -558 454 0 +-204 -465 600 208 0 +-495 305 -631 -1 0 +438 -369 217 503 0 +381 273 482 -181 0 +-91 242 164 -449 0 +268 538 0 +358 24 556 352 0 +-573 6 -270 -394 0 +439 198 0 +150 -347 445 -66 0 +-526 313 577 -200 0 +627 543 551 548 0 +406 -128 -174 -283 0 +-569 217 -567 -415 0 +-107 -558 -166 0 +-376 -504 0 +131 245 -416 -330 0 +275 -578 -128 -370 0 +-393 305 0 +-408 -181 281 121 0 +466 23 -166 98 0 +342 -313 267 -194 0 +-540 -46 -65 595 0 +284 396 22 -537 0 +-517 577 -133 290 0 +453 466 0 +-442 142 -507 -336 0 +-202 493 -429 -374 0 +-619 198 548 -179 0 +-523 -579 411 -379 0 +155 254 -246 342 0 +-607 -65 -643 -90 0 +-76 -586 348 -462 0 +-567 -287 0 +-367 247 0 +-201 145 423 402 0 +334 -344 363 488 0 +211 445 365 -521 0 +608 345 179 198 0 +-468 -568 -492 -52 0 +-618 70 -87 -587 0 +85 130 245 -144 0 +-567 25 -627 214 0 +-55 363 577 0 +198 608 -639 516 0 +518 -353 638 623 0 +-196 -403 304 375 0 +397 235 -37 24 0 +390 -568 0 +-302 -320 -297 -137 0 +-384 610 0 +66 162 -309 -568 0 +-125 -366 419 296 0 +629 60 -585 -571 0 +530 155 570 -605 0 +-270 -617 245 277 0 +150 -437 2 -132 0 +224 -531 458 -535 0 +-403 375 -462 -76 0 +260 -550 -129 0 +-278 233 -264 599 0 +307 8 0 +-65 503 438 397 0 +-462 -43 300 -76 0 +-461 497 -346 85 0 +-107 -579 67 -72 0 +227 552 256 370 0 +304 -622 288 -141 0 +427 -111 512 -461 0 +164 396 0 +377 -110 364 157 0 +-263 457 -459 0 +-238 224 -44 332 0 +-124 561 239 -593 0 +78 -578 -300 -146 0 +396 363 0 +-364 -273 458 224 0 +-146 -300 -42 78 0 +-221 -395 453 589 0 +-59 -76 170 -196 0 +23 -587 -87 0 +-129 100 466 0 +149 77 -443 411 0 +-593 -175 0 +-82 211 611 249 0 +-478 -359 455 0 +515 294 -564 33 0 +-209 -159 14 -82 0 +8 -237 234 -436 0 +508 208 321 347 0 +629 -647 -30 -571 0 +-271 311 0 +-534 28 106 15 0 +-42 227 -7 146 0 +20 -281 -353 0 +-48 -462 254 -246 0 +154 -353 0 +457 -166 0 +205 -240 0 +-22 -39 -513 -200 0 +396 27 471 -596 0 +284 526 435 -576 0 +294 451 0 +-486 496 -462 519 0 +284 535 232 396 0 +40 10 -268 540 0 +608 -75 -240 -184 0 +-166 280 57 -506 0 +-473 227 53 -127 0 +-430 85 566 441 0 +590 112 519 -254 0 +339 525 5 529 0 +198 205 -19 -412 0 +189 50 548 0 +-92 363 0 +-287 -634 241 80 0 +406 302 -320 615 0 +-527 308 513 322 0 +-478 382 288 91 0 +569 -189 551 80 0 +-510 -45 0 +22 -537 363 577 0 +333 49 -54 -204 0 +-61 -587 472 -512 0 +455 147 -640 143 0 +-425 628 279 -356 0 +217 -369 -145 609 0 +1 78 -45 -355 0 +243 455 -636 342 0 +-525 -320 -345 386 0 +4 -536 -278 0 +-86 -166 -368 -231 0 +113 -181 126 381 0 +455 -403 375 -128 0 +-174 -283 519 -42 0 +-471 164 -584 108 0 +-494 386 136 439 0 +150 431 0 +205 551 261 189 0 +-613 -576 -38 426 0 +-280 26 -111 -430 0 +12 -330 -186 416 0 +11 44 332 433 0 +228 -538 -65 -72 0 +131 -81 -270 -416 0 +-626 18 0 +-196 -236 32 0 +-389 381 -115 222 0 +466 589 -221 -593 0 +548 -567 0 +-48 -527 0 +220 107 -52 234 0 +390 97 -648 -125 0 +-568 -309 648 -291 0 +121 560 0 +410 555 -373 -477 0 +-163 -240 -578 606 0 +441 -506 -309 0 +-336 -110 -123 298 0 +164 -51 449 0 +-550 549 214 -230 0 +-270 539 -186 416 0 +290 342 0 +442 535 0 +-38 -384 225 0 +-393 -529 -640 -481 0 +-592 519 -590 -578 0 +-564 80 0 +560 273 -92 0 +-527 -367 -316 -596 0 +414 500 -87 -118 0 +-181 -647 381 -30 0 +-605 -636 0 +-589 -149 -395 -193 0 +40 10 484 0 +356 -151 -297 555 0 +445 -506 258 -70 0 +-527 467 282 -626 0 +-36 234 -72 -100 0 +-194 27 -384 471 0 +399 407 -341 338 0 +-419 390 -428 343 0 +-636 243 455 -478 0 +-71 217 487 -549 0 +-316 -51 -367 164 0 +-550 10 -422 -349 0 +-92 482 273 629 0 +-544 154 0 +-578 -153 202 -128 0 +-166 -366 0 +32 322 513 -200 0 +16 298 284 -123 0 +474 439 -33 -71 0 +561 -79 239 10 0 +-485 415 -124 -561 0 +-424 371 -390 0 +377 -238 575 -44 0 +-38 187 -39 483 0 +-591 -118 445 521 0 +577 363 435 526 0 +-38 535 0 +-255 -228 480 -124 0 +-42 447 444 227 0 +-635 -175 0 +-302 -137 608 498 0 +-344 -110 -384 488 0 +628 279 74 -301 0 +-275 -102 -510 -196 0 +-556 -67 -643 -65 0 +-462 32 59 584 0 +321 347 150 -204 0 +-573 2 0 +-76 -174 256 -283 0 +-384 -194 44 433 0 +-581 554 -278 0 +-372 -451 -240 -53 0 +32 11 0 +560 203 -92 544 0 +438 503 -124 480 0 +445 -443 0 +-401 404 12 -21 0 +269 103 -417 190 0 +-473 -529 519 -481 0 +-147 -51 -45 -267 0 +-550 8 -90 -607 0 +-393 -170 304 603 0 +-553 498 -302 -137 0 +306 -193 -588 371 0 +139 -156 -263 -593 0 +-68 208 -204 -130 0 +-204 6 -394 -376 0 +-340 -553 -177 639 0 +91 -378 0 +68 -192 266 -376 0 +167 -635 -287 604 0 +514 -122 49 391 0 +-111 -443 259 152 0 +560 629 0 +-647 560 -30 -571 0 +211 -270 0 +172 -81 0 +-384 224 0 +-62 577 142 -27 0 +-118 -309 566 441 0 +66 162 -41 -587 0 +-33 474 198 410 0 +-547 450 -576 35 0 +406 -429 0 +-568 -424 343 616 0 +-92 154 0 +-68 -192 -130 49 0 +308 396 -191 -488 0 +-129 262 -324 -124 0 +633 -278 16 -518 0 +235 -37 -65 -46 0 +-568 362 -87 -152 0 +-197 -250 0 +-175 480 0 +-333 -26 -309 49 0 +-571 269 -353 190 0 +628 627 439 543 0 +383 294 -357 5 0 +525 227 529 406 0 +641 575 0 +-240 383 -357 -553 0 +-595 548 -474 480 0 +5 327 386 -515 0 +-619 -71 50 -179 0 +-278 623 518 -180 0 +-166 -193 0 +279 356 -151 -372 0 +406 -590 -128 -592 0 +-223 325 -534 158 0 +-346 497 -111 -461 0 +-489 -528 18 455 0 +-489 78 112 -528 0 +103 575 -507 -442 0 +306 219 -165 457 0 +326 208 -310 -82 0 +154 142 -435 582 0 +-253 398 555 410 0 +-29 112 403 242 0 +-115 -180 0 +-478 -200 0 +50 627 628 543 0 +258 -368 -70 -309 0 +-553 -151 0 +290 641 0 +381 -264 0 +-168 418 -200 32 0 +-374 206 -640 173 0 +-60 -329 -536 629 0 +-530 314 78 -612 0 +-111 -66 172 -347 0 +224 396 -432 -218 0 +308 -511 32 0 +358 609 -145 -175 0 +-447 374 127 0 +-263 -616 -166 188 0 +407 208 -541 341 0 +610 526 435 641 0 +70 -52 -568 0 +248 290 644 -48 0 +375 18 -403 455 0 +140 -359 32 308 0 +-186 0 +399 54 -204 17 0 +103 -110 0 +-461 -330 -427 -645 0 +619 -574 217 -567 0 +610 157 364 396 0 +154 142 400 244 0 +-616 188 343 -366 0 +36 234 -362 457 0 +551 356 205 -151 0 +341 -541 -81 -401 0 +539 399 0 +-553 -564 515 33 0 +85 -443 -502 -497 0 +294 383 -320 -357 0 +-336 518 323 0 +29 -257 -48 -361 0 +-52 -618 0 +-534 -297 0 +85 -430 66 0 +-175 453 422 0 +-512 472 431 -587 0 +-467 455 -117 18 0 +-39 22 290 0 +608 -357 383 498 0 +407 -600 94 399 0 +-389 222 323 638 0 +256 340 592 -177 0 +255 548 413 -46 0 +112 584 32 59 0 +-330 -209 0 +-374 603 304 -170 0 +119 -175 -178 397 0 +477 410 397 -438 0 +381 96 621 -336 0 +-241 -89 -369 214 0 +-422 -349 8 -550 0 +78 304 0 +-151 -223 -372 356 0 +-500 -388 306 -111 0 +-564 543 627 -71 0 +-285 554 -96 99 0 +-127 53 227 -578 0 +423 354 480 0 +629 -92 -509 -400 0 +522 -81 456 -192 0 +-590 305 0 +8 268 -293 234 0 +-393 272 0 +-369 214 545 422 0 +629 -73 -482 0 +-478 -257 -563 0 +-79 -287 0 +-434 234 588 343 0 +-89 -65 -46 -241 0 +-612 -586 519 0 +-111 -506 0 +-420 -417 -180 -250 0 +410 179 551 0 +36 -558 -87 -362 0 +-393 -631 0 +-461 321 -401 0 +526 -384 435 142 0 +342 350 511 -626 0 +245 365 85 -521 0 +-104 217 -567 303 0 +326 -310 -192 -81 0 +259 -445 441 0 +629 182 554 0 +-220 -566 -87 -568 0 +-124 -72 0 +-222 195 -630 -278 0 +-320 525 -297 0 +628 480 -169 425 0 +272 615 -42 302 0 +15 439 -553 106 0 +-122 -295 306 58 0 +-367 -316 -596 -605 0 +-128 -170 603 -473 0 +-374 -631 0 +-506 -419 -428 -166 0 +-501 -166 466 -542 0 +-277 2 0 +-307 -119 -129 -635 0 +-81 132 -258 -111 0 +639 5 608 -340 0 +-635 -287 -37 235 0 +455 32 316 486 0 +411 -597 -188 0 +480 -635 595 -540 0 +581 -73 560 -281 0 +74 551 -301 80 0 +-89 -241 40 480 0 +480 628 -415 -569 0 +-376 69 -64 407 0 +-643 -579 -237 0 +439 19 -567 -413 0 +453 -239 0 +349 -463 -72 234 0 +-118 -165 219 -87 0 +214 235 -37 -369 0 +154 -110 -364 -273 0 +539 337 0 +-52 390 -566 -220 0 +-564 357 294 -351 0 +228 452 -538 40 0 +-550 217 -228 -255 0 +235 358 40 -37 0 +-48 -612 528 -138 0 +108 -200 378 0 +-161 227 -553 494 0 +402 252 -567 229 0 +-148 -270 17 54 0 +285 -420 509 0 +-617 150 0 +-46 -124 0 +161 283 272 -42 0 +255 628 413 -46 0 +-48 644 -257 248 0 +-170 -640 406 603 0 +449 334 557 164 0 +-61 3 468 390 0 +127 -314 256 18 0 +-316 -547 -478 -367 0 +396 44 11 433 0 +288 -489 -528 305 0 +537 -38 585 -92 0 +-485 415 -561 -369 0 +-169 -71 425 480 0 +-110 396 0 +80 358 255 413 0 +-487 -564 335 351 0 +-260 8 0 +307 -129 -459 466 0 +-603 -240 -383 -578 0 +420 560 460 -571 0 +-71 50 543 627 0 +-72 -422 24 -349 0 +339 305 -489 0 +60 103 -585 -353 0 +-316 308 -367 32 0 +5 386 116 0 +125 492 165 0 +-48 -196 -236 0 +397 -65 352 556 0 +254 32 455 -246 0 +-178 119 358 24 0 +-361 -257 29 -478 0 +542 -597 343 0 +121 190 0 +299 -429 -624 -297 0 +413 335 255 217 0 +241 397 -634 80 0 +-128 170 -59 112 0 +577 55 -200 361 0 +619 480 -574 628 0 +-368 -309 162 66 0 +442 225 396 575 0 +78 -481 -578 -529 0 +-476 30 -336 -216 0 +-91 -449 -547 32 0 +628 255 413 480 0 +267 -313 290 108 0 +-430 70 -618 457 0 +-329 638 0 +-52 457 0 +-111 172 365 -521 0 +-71 217 -470 0 +288 -48 59 584 0 +554 -417 -599 0 +222 560 16 0 +-175 -72 561 239 0 +214 -369 415 -561 0 +460 -278 103 420 0 +-478 -29 403 288 0 +-365 208 0 +-460 62 142 -571 0 +-376 215 0 +-55 -38 -601 -576 0 +154 121 273 482 0 +104 -369 387 480 0 +290 63 -236 -48 0 +-571 323 0 +201 -276 28 93 0 +183 -85 3 0 +-473 -240 -603 -383 0 +-102 -275 304 155 0 +-417 621 458 96 0 +252 548 229 480 0 +-113 -353 -264 0 +293 343 -97 -597 0 +342 -612 0 +16 629 507 -331 0 +339 88 552 370 0 +242 -48 0 +508 12 0 +486 342 455 0 +414 -193 -587 500 0 +318 -579 411 565 0 +-353 -251 -536 -482 0 +-630 -110 0 +-615 -143 519 -42 0 +438 -550 503 358 0 +-384 -488 -191 -547 0 +-76 1 -578 0 +108 467 -45 282 0 +-534 357 -351 28 0 +-533 154 -426 142 0 +358 93 0 +509 20 -197 629 0 +-461 448 0 +-372 608 0 +392 -52 -289 0 +-345 -13 -525 272 0 +208 -132 -204 -437 0 +316 486 -478 -462 0 +413 80 -46 255 0 +5 340 592 339 0 +224 483 332 187 0 +217 -175 574 464 0 +-125 -618 390 70 0 +-44 -35 -641 0 +-188 411 234 0 +108 59 -612 584 0 +-52 237 -597 492 0 +-627 -46 25 628 0 +-45 350 511 -51 0 +-175 453 -139 -464 0 +2 171 399 437 0 +-502 58 0 +548 50 627 543 0 +-568 -428 -87 -419 0 +-376 6 -330 0 +-461 -311 625 -192 0 +479 -567 114 439 0 +533 -602 -353 -571 0 +618 463 466 -166 0 +276 551 608 137 0 +-252 198 410 562 0 +402 -79 609 -145 0 +88 339 -202 493 0 +246 11 342 -433 0 +-226 -462 519 490 0 +-39 613 274 -547 0 +-59 170 -626 -640 0 +-194 191 378 -48 0 +261 386 551 189 0 +-202 339 493 5 0 +-440 -177 184 -578 0 +377 290 -140 0 +-274 -547 -282 -478 0 +-371 390 0 +-535 -110 377 0 +-547 133 138 -478 0 +519 496 -486 -45 0 +398 -223 423 -253 0 +-523 -379 -289 -52 0 +-576 -384 0 +-578 -127 -177 53 0 +-557 -83 -216 -384 0 +8 -328 -597 491 0 +174 519 -462 -350 0 +-558 156 165 -87 0 +238 284 -92 -185 0 +-587 -443 0 +-630 458 0 +-329 560 95 -60 0 +-204 12 0 +-309 -559 0 +325 28 -534 158 0 +-3 172 -249 -41 0 +-61 -625 -461 295 0 +-506 390 0 +126 121 113 -571 0 +-52 -587 502 -318 0 +644 -462 -51 0 +-263 -166 296 419 0 +347 321 -82 49 0 +-243 -196 -640 481 0 +306 26 -41 -280 0 +296 -597 419 343 0 +-568 -193 -165 219 0 +-206 305 -382 155 0 +616 306 -193 -424 0 +224 -571 0 +468 306 3 431 0 +-430 441 -111 566 0 +468 3 -368 -309 0 +232 -377 225 0 +24 453 -119 -307 0 +295 -559 211 -625 0 +-276 201 80 198 0 +-81 -183 -84 -122 0 +-204 49 -346 0 +159 208 -82 84 0 +-493 -534 -177 -325 0 +-430 -125 -318 502 0 +-51 -367 -316 290 0 +339 406 0 +-443 -162 343 0 +294 -553 0 +539 -520 311 -192 0 +142 -435 -571 0 +-614 103 531 -278 0 +-240 -297 0 +577 610 0 +-567 -470 50 315 0 +-58 379 -193 306 0 +345 50 179 -372 0 +-636 32 -612 243 0 +-430 457 -419 -428 0 +487 -549 628 358 0 +610 332 -432 -218 0 +-180 -251 -417 -482 0 +167 40 217 604 0 +284 332 -298 -35 0 +-170 -578 -76 603 0 +-374 -7 -429 146 0 +-204 -405 6 -394 0 +381 -197 638 509 0 +453 -293 268 -395 0 +-330 -541 -461 341 0 +168 288 -605 141 0 +609 -145 -635 358 0 +172 611 407 249 0 +-46 24 169 484 0 +-257 -48 -450 636 0 +-42 -177 529 525 0 +603 -170 -473 -76 0 +608 -564 33 515 0 +-534 608 0 +343 390 -472 -380 0 +-179 -619 -564 628 0 +5 -312 -374 495 0 +-122 183 -568 -219 0 +-237 -436 -129 -263 0 +50 -33 474 -567 0 +-303 548 551 -516 0 +-201 145 548 358 0 +205 -412 555 -19 0 +-181 575 0 +-270 271 -461 346 0 +627 -71 543 -223 0 +472 -122 -430 -512 0 +-566 506 -152 0 +28 423 -74 0 +116 339 -429 -642 0 +377 11 0 +455 -48 236 43 0 +-204 159 84 49 0 +-372 276 -223 0 +-635 480 -415 0 +638 121 -389 222 0 +-597 -193 454 380 0 +466 -579 0 +-90 10 -607 -550 0 +-395 -97 293 -166 0 +-568 -220 -566 457 0 +480 214 0 +-478 243 -636 155 0 +-443 165 343 0 +-71 -487 -564 351 0 +-478 108 0 +-571 142 -621 601 0 +-510 481 -631 0 +-515 88 327 294 0 +-223 -564 0 +363 -110 0 +-578 -76 -447 -496 0 +-72 -230 -175 0 +-69 49 -330 -514 0 +243 -636 -196 -527 0 +105 -72 0 +-209 -204 94 -600 0 +-593 -324 262 -124 0 +-66 -347 -81 -61 0 +-200 -39 -418 632 0 +-101 -545 93 -485 0 +438 40 503 217 0 +-364 -273 -92 575 0 +290 32 -248 0 +455 403 342 -29 0 +10 452 0 +616 -424 -52 -587 0 +-71 -106 439 634 0 +266 -401 68 -573 0 +560 -571 126 113 0 +373 -534 135 439 0 +342 403 -29 288 0 +-76 -612 -117 0 +-125 588 390 0 +-285 -518 633 -630 0 +410 397 241 -634 0 +577 -110 535 232 0 +588 -263 -434 457 0 +179 -13 345 439 0 +-485 545 40 422 0 +230 -129 34 -635 0 +-72 466 0 +475 32 47 -200 0 +-331 -336 507 381 0 +-330 -573 -611 134 0 +-81 208 0 +-564 50 0 +172 448 0 +-627 80 0 +256 -127 498 53 0 +-110 -571 -535 -531 0 +-558 452 -36 0 +-61 448 0 +-474 548 217 -595 0 +96 -92 381 621 0 +-192 399 0 +546 -353 20 -203 0 +-276 201 -223 -567 0 +308 -527 -236 0 +467 -48 -462 282 0 +-7 -578 272 146 0 +-630 269 190 -278 0 +468 3 -430 -122 0 +-204 21 -365 150 0 +-485 -421 40 0 +245 -258 -122 132 0 +28 373 135 -13 0 +-39 557 290 449 0 +-240 -493 0 +275 519 -370 -473 0 +-254 590 455 -76 0 +-534 7 -177 -261 0 +104 217 387 -550 0 +-473 572 -240 -505 0 +21 -270 -365 -81 0 +628 335 0 +335 -356 -425 279 0 +259 152 -587 -61 0 +339 -320 -447 0 +208 456 522 -82 0 +-639 516 -13 439 0 +-586 288 348 -510 0 +291 617 208 -309 0 +528 -138 108 112 0 +422 -65 545 -287 0 +214 90 421 -79 0 +103 507 -417 -331 0 +-540 595 -369 -485 0 +-287 -65 -230 0 +211 -309 -317 541 0 +-626 455 0 +481 -612 -243 18 0 +-443 317 -111 86 0 +-550 580 -620 10 0 +-39 -418 632 308 0 +-186 -192 -209 416 0 +-635 -129 -556 -67 0 +458 142 0 +560 638 -190 176 0 +-196 -29 32 403 0 +-470 315 198 335 0 +508 -81 0 +33 50 515 608 0 +402 470 178 -567 0 +18 -495 -374 -1 0 +334 575 0 +-596 -576 0 +142 224 0 +-558 385 -392 231 0 +-87 -501 -542 -289 0 +-584 -471 -596 -605 0 +-473 -177 -202 493 0 +468 431 -368 3 0 +308 -527 -361 29 0 +-477 -373 439 93 0 +-76 524 -612 0 +-25 620 217 -175 0 +-216 -336 -426 -533 0 +149 -166 -506 77 0 +19 80 -413 279 0 +16 -408 -278 0 +-597 105 -349 0 +470 -287 178 335 0 +-372 -340 5 639 0 +-270 -461 321 0 +377 -83 -216 -557 0 +-89 40 358 -241 0 +377 284 -601 -55 0 +-42 272 -173 624 0 +357 205 0 +-607 452 -395 0 +427 512 445 211 0 +-86 385 -506 -231 0 +186 360 0 +470 480 178 423 0 +335 -567 0 +386 50 516 -639 0 +-118 -566 -220 385 0 +123 -233 -571 381 0 +458 284 -408 0 +-401 404 -21 -573 0 +-196 -206 304 -382 0 +-42 -640 0 +213 608 -320 312 0 +-464 -550 -139 105 0 +-350 -76 455 174 0 +396 -596 -191 -488 0 +214 -228 -550 -255 0 +618 -597 457 0 +381 638 623 518 0 +-498 552 116 0 +343 -430 -23 591 0 +406 -173 624 5 0 +-41 49 -333 -26 0 +234 457 618 463 0 +222 638 -389 -353 0 +548 410 0 +397 609 24 -145 0 +-321 -209 469 -192 0 +31 -371 431 -587 0 +498 -135 -372 -444 0 +114 479 -564 628 0 +243 242 -636 112 0 +-393 586 319 -76 0 +-553 -177 494 -161 0 +281 -408 629 458 0 +-175 -503 0 +-98 607 -289 8 0 +-128 143 -612 147 0 +256 -640 0 +98 234 -52 23 0 +507 -331 -285 458 0 +5 608 -409 151 0 +-13 -606 -177 160 0 +9 577 142 476 0 +-409 151 -240 608 0 +480 90 -635 0 +457 -542 -501 -395 0 +-400 460 -458 0 +406 -240 116 0 +548 217 255 413 0 +-352 301 480 -567 0 +70 -587 -52 0 +-240 386 -261 7 0 +242 254 -462 -246 0 +162 -61 306 66 0 +288 342 382 91 0 +-511 342 563 -194 0 +-494 136 -372 439 0 +-393 256 0 +-193 343 0 +-270 404 -21 -573 0 +-393 146 0 +224 238 -185 103 0 +206 406 -128 173 0 +445 428 144 -587 0 +305 -640 0 +-180 -278 222 -389 0 +295 497 0 +-491 -57 457 -597 0 +-57 -166 -491 -263 0 +324 466 542 -129 0 +307 -260 0 +-270 -401 0 +284 332 9 0 +198 74 548 -301 0 +471 396 27 -257 0 +-489 -528 78 -45 0 +357 -534 -351 -223 0 +-350 18 455 174 0 +59 288 -605 584 0 +-320 -75 -184 294 0 +342 11 -511 563 0 +539 -64 -192 69 0 +-477 -564 -373 548 0 +-330 -159 14 -376 0 +489 -170 0 +-630 284 -408 0 +-428 -568 343 -419 0 +-553 213 -223 0 +77 -368 149 -193 0 +-596 242 0 +560 95 -389 222 0 +96 203 0 +457 36 -597 -362 0 +-454 -263 8 0 +-76 -226 112 490 0 +-193 -568 -588 371 0 +-125 379 -430 -58 0 +-166 390 0 +-77 -430 0 +-48 141 288 168 0 +217 -65 0 +411 98 -579 23 0 +121 -180 0 +575 298 -123 103 0 +-263 105 0 +-39 -613 -110 0 +594 -353 -264 210 0 +308 367 396 0 +-497 -41 -502 306 0 +464 574 -550 214 0 +-593 -369 -422 -349 0 +-133 -517 -39 -194 0 +431 512 172 427 0 +-522 -148 -215 -82 0 +307 -395 10 -459 0 +-619 423 50 -179 0 +190 458 -417 269 0 +450 -605 11 0 +-589 -366 411 -149 0 +217 480 0 +-196 304 153 -524 0 +53 -127 -240 406 0 +308 513 32 322 0 +-41 58 -568 -295 0 +274 613 -200 -39 0 +202 -393 304 -153 0 +-321 -204 469 -209 0 +608 5 -357 383 0 +-115 -623 121 0 +-222 -353 -92 195 0 +-277 -265 -148 -82 0 +539 -186 407 416 0 +172 -68 -192 -130 0 +-645 -401 -461 -427 0 +451 -562 -13 50 0 +495 -312 339 88 0 +-444 498 608 -135 0 +-61 162 66 -587 0 +308 290 0 +378 242 112 0 +548 279 -276 201 0 +448 -310 326 -82 0 +-250 -420 323 638 0 +-492 306 -468 -52 0 +-597 8 67 -107 0 +-38 -571 -460 62 0 +363 -218 334 -432 0 +-557 -83 363 334 0 +234 318 -52 565 0 +49 445 0 +-330 172 611 249 0 +364 -110 157 334 0 +-46 -485 0 +496 -486 -128 455 0 +508 150 -514 -69 0 +30 -476 -571 142 0 +529 -393 -240 525 0 +583 224 16 0 +-51 -596 0 +-300 -146 18 406 0 +-54 -401 333 -81 0 +156 -87 165 -263 0 +-216 -571 -185 238 0 +457 -542 -501 -263 0 +-521 365 -41 448 0 +-430 -70 258 -41 0 +361 290 334 0 +-418 -194 632 -39 0 +-558 453 0 +212 381 154 -582 0 +397 -262 -229 24 0 +480 -145 0 +-416 172 -270 131 0 +-331 -285 507 103 0 +623 -73 518 560 0 +399 338 -341 -204 0 +-320 606 339 -163 0 +629 507 -331 -571 0 +-600 94 -148 -330 0 +629 -571 -400 -509 0 +342 155 -584 0 +-615 406 304 -143 0 +254 -246 -478 155 0 +472 -512 -443 85 0 +47 32 308 475 0 +628 619 -574 217 0 +-462 -254 590 304 0 +528 108 -45 -138 0 +-384 532 -38 -583 0 +424 -371 0 +-76 202 406 0 +164 -187 367 577 0 +290 138 242 133 0 +454 -395 380 -166 0 +523 8 -109 -597 0 +-330 -461 326 -310 0 +112 300 78 -43 0 +28 198 0 +167 -175 358 604 0 +24 453 422 0 +455 519 0 +641 363 0 +-122 -591 521 306 0 +155 -45 0 +526 -547 -576 0 +-598 394 211 2 0 +-375 -631 505 305 0 +-219 183 431 -568 0 +-243 155 481 -510 0 +628 -287 0 +387 464 65 0 +94 -82 -148 -600 0 +143 78 -45 147 0 +-515 5 327 608 0 +203 -336 560 544 0 +154 -216 0 +142 -426 -336 -533 0 +-369 119 8 0 +190 -278 458 269 0 +157 142 364 577 0 +363 142 0 +-604 217 -567 0 +-494 136 -223 -534 0 +-181 -435 142 582 0 +-148 14 -159 407 0 +-87 280 -506 57 0 +629 195 103 0 +-320 213 312 -297 0 +539 -611 134 407 0 +-71 -564 398 -253 0 +20 210 -353 594 0 +-510 -196 -243 481 0 +-212 -536 -286 381 0 +-269 -38 103 344 0 +-361 308 342 29 0 +390 -122 648 -291 0 +-478 -449 -194 -91 0 +406 -312 5 495 0 +417 594 233 0 +332 232 535 224 0 +-401 338 -341 -573 0 +554 99 -278 -96 0 +242 -91 -200 0 +-576 363 0 +144 428 -506 445 0 +-336 381 -594 185 0 +-583 610 532 641 0 +629 331 -56 -264 0 +358 413 255 628 0 +-192 -405 0 +-630 381 0 +566 -506 0 +627 439 423 543 0 +341 -204 -541 150 0 +-76 -612 -141 -622 0 +-430 521 -591 85 0 +-341 -376 407 338 0 +101 628 279 0 +647 -536 -4 560 0 +288 382 91 -605 0 +-81 -41 0 +-579 -558 0 +58 -41 306 -295 0 +-461 -259 -326 -111 0 +519 147 112 143 0 +-383 256 -177 -603 0 +93 -569 -415 -485 0 +288 -490 -527 359 0 +-117 -612 18 0 +435 526 396 284 0 +126 113 381 -92 0 +-576 442 225 284 0 +363 154 -273 -364 0 +-71 -354 0 +-579 -156 105 139 0 +-370 -393 275 -640 0 +-115 -197 509 381 0 +224 641 532 -583 0 +363 -195 583 -336 0 +-615 -143 -510 339 0 +-52 165 156 -597 0 +343 -362 36 234 0 +-405 -204 -277 -265 0 +608 498 -515 327 0 +-506 -559 259 0 +-178 -46 119 -175 0 +-201 214 145 423 0 +224 -507 16 -442 0 +-393 -76 199 622 0 +302 498 615 -374 0 +179 28 -534 345 0 +409 -240 256 -319 0 +214 303 -567 -104 0 +-320 312 386 213 0 +158 325 -564 608 0 +343 -587 0 +-512 -587 472 445 0 +426 -110 0 +386 -135 -320 0 +18 127 -314 -473 0 +351 628 279 -487 0 +-596 63 -605 -236 0 +352 556 -46 -550 0 +-605 108 0 +154 -269 344 -110 0 +16 -92 0 +555 551 0 +50 -567 -106 634 0 +641 -418 -257 632 0 +-460 -216 -181 62 0 +140 -605 -257 -359 0 +453 -36 -100 -395 0 +-48 403 -29 288 0 +-395 -36 10 -100 0 +-600 -270 0 +569 628 -189 551 0 +-254 455 304 590 0 +-187 396 0 +262 -635 453 -324 0 +-35 -39 -298 -38 0 +40 -643 0 +486 32 -462 316 0 +-72 -260 -597 -454 0 +-82 -192 0 +-596 377 0 +421 -124 402 90 0 +208 445 427 512 0 +528 -138 -45 242 0 +-383 272 -578 -603 0 +377 575 488 -344 0 +-564 474 548 -33 0 +-559 3 -506 468 0 +-220 -566 -368 457 0 +-364 610 -273 103 0 +-118 445 58 -295 0 +-197 509 -264 -353 0 +490 288 -226 -510 0 +435 364 0 +-635 8 228 -538 0 +-360 310 -330 12 0 +-128 642 226 -578 0 +293 -597 -52 -97 0 +201 -276 198 335 0 +-289 -125 0 +-527 -612 0 +305 603 -374 -170 0 +-400 -509 -336 560 0 +-61 -66 49 -347 0 +217 -545 548 0 +-230 549 -369 402 0 +-287 -369 0 +25 -627 -71 480 0 +32 247 -570 -194 0 +27 471 164 -384 0 +47 -257 -527 475 0 +165 -193 -597 156 0 +574 -369 -485 464 0 +-312 -240 256 495 0 +-76 -473 -283 -174 0 +416 -376 -186 -82 0 +388 -456 -122 -461 0 +509 121 95 -197 0 +580 -369 -620 -593 0 +-567 -595 -474 -485 0 +458 -123 284 298 0 +214 335 0 +-129 -268 540 -635 0 +-353 176 20 -190 0 +154 284 0 +107 220 457 -289 0 +315 -470 -567 439 0 +-165 -506 385 219 0 +-643 -454 -260 -579 0 +-98 466 -193 0 +645 -401 12 504 0 +11 -359 -605 140 0 +-25 620 480 -369 0 +523 -109 -579 453 0 +-374 304 586 319 0 +-534 299 227 -624 0 +-500 -430 -388 -111 0 +-357 -240 383 -13 0 +507 -38 103 0 +25 548 358 -627 0 +-544 -92 499 575 0 +-633 -336 0 +420 -92 629 460 0 +-374 -529 88 0 +211 -130 -68 508 0 +-129 -550 609 0 +631 -256 -406 393 473 -339 374 42 578 0 +-395 -263 0 +-573 404 -330 -21 0 +136 189 -279 0 +386 158 279 325 0 +-46 217 0 +-443 457 0 +-587 -428 -419 -193 0 +575 332 532 0 +-118 149 -166 77 0 +-372 494 -161 -240 0 +-21 -148 404 407 0 +-23 591 457 -568 0 +-92 458 0 +396 557 449 -596 0 +-587 457 -86 -231 0 +386 -114 -564 -213 0 +-463 -579 349 -72 0 +227 -116 -372 -15 0 +551 294 -315 -207 0 +358 470 548 178 0 +335 -303 555 0 +-216 30 -476 -181 0 +-97 -52 -579 293 0 +-395 10 -607 0 +590 -254 155 -510 0 +537 575 585 16 0 +-635 -129 262 -324 0 +-271 -204 0 +423 402 -634 241 0 +551 294 -19 -412 0 +-447 -640 406 0 +-391 -309 424 -118 0 +569 335 -564 -189 0 +-37 235 -550 480 0 +154 400 244 363 0 +-76 -254 112 590 0 +-417 381 0 +409 -240 -319 406 0 +-485 335 0 +508 522 456 211 0 +-593 -124 100 0 +-330 68 -148 266 0 +198 -13 0 +445 -3 448 -249 0 +-590 -481 0 +-258 150 132 -309 0 +18 -45 0 +-374 -510 496 0 +-630 284 238 0 +628 410 0 +-25 -124 -485 620 0 +585 537 575 -92 0 +305 642 226 -631 0 +43 -605 288 236 0 +-46 548 -479 -235 0 +-52 -395 -434 588 0 +552 370 -429 -631 0 +480 548 413 255 0 +-243 481 455 -76 0 +49 394 -192 -598 0 +343 306 -648 97 0 +-177 -7 146 -42 0 +-69 448 508 -514 0 +-611 -192 134 -573 0 +-166 -506 -472 -380 0 +-72 100 37 24 0 +-631 -375 -640 505 0 +234 105 -580 434 0 +18 -43 300 288 0 +154 363 218 -126 0 +448 341 2 -541 0 +-260 10 -454 -395 0 +-594 -417 0 +539 -148 0 +-220 362 0 +-587 457 371 -588 0 +-635 -540 595 -287 0 +-45 382 519 0 +234 453 307 -459 0 +-174 -374 -283 18 0 +-311 -330 625 -81 0 +508 341 -541 211 0 +555 279 0 +32 -605 0 +613 -576 -257 274 0 +554 210 -278 594 0 +-595 -474 -46 628 0 +-558 293 0 +20 594 210 -278 0 +-531 575 -535 458 0 +-518 629 16 633 0 +-124 -230 402 549 0 +217 -369 -230 549 0 +-240 88 0 +498 340 592 256 0 +610 103 123 0 +-589 -193 -263 -149 0 +-398 -485 -71 -604 0 +-175 -607 -90 8 0 +-646 -565 -558 -593 0 +466 452 268 -293 0 +554 -197 0 +-456 -81 -111 388 0 +554 -190 176 -278 0 +-524 -45 153 78 0 +-144 -309 49 130 0 +258 -122 -430 -70 0 +-536 -4 647 -353 0 +431 -391 -368 424 0 +467 -128 -45 0 +472 390 -512 -61 0 +385 -366 0 +577 -55 -216 -601 0 +-401 -148 0 +337 469 -204 -321 0 +221 453 -503 24 0 +-360 -573 -330 310 0 +378 -547 191 242 0 +117 163 339 304 0 +-275 -45 519 -102 0 +211 291 617 -309 0 +624 -374 498 -173 0 +-571 121 633 0 +-46 -71 0 +80 279 -252 562 0 +-175 -72 -387 436 0 +93 214 -574 619 0 +390 414 500 -52 0 +-417 212 -582 -630 0 +40 -65 0 +-416 -82 131 208 0 +346 -401 -461 271 0 +426 -613 284 -576 0 +78 -612 490 -226 0 +-527 -45 0 +-316 -547 -367 242 0 +234 -34 -643 -188 0 +577 432 -563 290 0 +28 -207 -553 -315 0 +323 269 -181 190 0 +358 620 -175 -25 0 +-67 -556 10 -550 0 +339 -510 642 226 0 +431 445 0 +2 522 456 150 0 +3 468 -61 -568 0 +476 363 9 334 0 +-238 396 -44 224 0 +-235 -124 214 0 +172 317 431 0 +326 -461 -192 -310 0 +-576 313 -526 -194 0 +-237 -129 -436 -395 0 +224 284 0 +-384 274 -547 0 +528 342 -138 -626 0 +377 526 575 435 0 +91 382 -478 -462 0 +227 493 -473 -202 0 +-518 121 0 +-299 386 -74 439 0 +107 -366 220 -125 0 +457 -87 0 +-592 -128 -590 256 0 +-113 -182 323 -115 0 +-369 422 545 -485 0 +26 -280 -122 390 0 +-61 -502 -568 -497 0 +-200 -359 140 242 0 +-126 -181 218 142 0 +-82 49 -333 0 +80 551 -351 0 +-133 -517 396 -257 0 +28 423 -106 634 0 +629 20 599 233 0 +-517 308 396 -133 0 +-92 -647 -30 -353 0 +288 -478 -636 243 0 +306 85 0 +445 130 208 -144 0 +447 227 -578 444 0 +-238 -384 363 -44 0 +-13 -223 516 -639 0 +211 445 -333 -26 0 +508 -341 -405 338 0 +142 575 0 +-275 -102 -626 -640 0 +-516 -303 -71 -223 0 +457 -152 -430 362 0 +-200 334 433 44 0 +-194 -478 -433 246 0 +343 -430 -318 502 0 +382 -612 91 108 0 +-181 -426 -216 0 +464 40 -485 574 0 +-240 -116 608 -15 0 +-461 85 292 0 +452 24 0 +-596 -91 342 -449 0 +20 -197 509 -417 0 +-587 445 31 -371 0 +337 -204 404 -21 0 +112 -45 0 +-186 399 407 416 0 +224 298 -123 458 0 +138 -596 133 342 0 +-139 -369 10 -464 0 +-618 -87 -568 70 0 +539 310 -360 -330 0 +619 -574 -567 214 0 +-37 235 397 -65 0 +31 -41 306 -371 0 +267 -313 -257 -527 0 +362 -125 -152 -443 0 +-264 -353 647 -4 0 +560 602 -536 -637 0 +24 397 -178 119 0 +560 -92 -602 533 0 +334 11 0 +-384 432 -563 290 0 +-384 157 364 363 0 +-257 377 -157 -248 0 +-51 359 -45 -490 0 +-188 -289 8 -34 0 +305 -524 155 153 0 +-369 561 8 239 0 +-364 216 -435 0 +-193 -395 318 565 0 +-530 314 -128 -612 0 +150 2 -645 -427 0 +-226 -612 -76 490 0 +49 -144 130 -41 0 +-564 515 33 386 0 +-163 5 406 606 0 +-356 555 -425 410 0 +386 -53 -451 -240 0 +-194 164 0 +-87 466 293 -97 0 +-429 340 -631 0 +513 -194 322 342 0 +-483 408 -110 -92 0 +-194 -39 432 -563 0 +91 -478 -196 382 0 +-177 -42 572 0 +32 -48 0 +-627 -71 214 25 0 +555 410 -413 19 0 +-177 -631 0 +406 592 340 498 0 +396 -513 -22 -596 0 +-320 -409 151 386 0 +-565 -643 -366 -646 0 +116 256 227 -642 0 +22 290 377 0 +487 548 358 -549 0 +117 -640 163 339 0 +24 -643 -538 228 0 +-440 -320 184 406 0 +-612 243 108 -636 0 +435 284 526 641 0 +-133 -527 -596 0 +363 103 0 +-340 -525 0 +-387 10 436 -79 0 +294 -493 -320 -325 0 +20 560 0 +256 -440 -240 184 0 +159 -82 84 211 0 +112 108 -475 102 0 +491 452 -328 -558 0 +585 610 537 103 0 +-240 -578 624 0 +-626 108 0 +328 -79 -609 -593 0 +-567 -619 -179 28 0 +189 -223 261 -13 0 +448 394 -598 -204 0 +-643 -124 0 +112 141 78 0 +-509 629 -400 103 0 +-278 323 0 +-137 -302 -13 272 0 +551 410 569 -189 0 +343 -366 588 -434 0 +-213 -13 0 +225 332 284 442 0 +-247 -9 290 334 0 +208 -192 -311 625 0 +5 -327 -199 339 0 +205 272 0 +-61 428 390 144 0 +76 640 510 -305 -78 -18 128 -304 -519 0 +-564 28 0 +-510 206 -631 173 0 +-124 452 109 -167 0 +498 294 53 0 +-418 632 577 -200 0 +-177 299 -553 0 +259 -111 306 152 0 +-178 -241 0 +-95 -623 -176 0 +-263 565 0 +279 -534 0 +-182 323 -113 95 0 +514 -61 391 49 0 +-328 -593 -263 491 0 +610 -39 0 +30 -571 -38 -476 0 +-175 -538 228 8 0 +327 -515 -320 205 0 +195 -336 560 -222 0 +-587 -500 -61 -388 0 +-534 -137 -177 -302 0 +-46 -178 119 24 0 +-395 -97 -52 293 0 +-196 -528 -489 18 0 +457 379 306 -58 0 +548 19 279 -413 0 +363 577 517 -244 0 +423 480 303 -104 0 +135 279 373 386 0 +396 -248 -596 -157 0 +306 144 -122 428 0 +-647 -30 -571 381 0 +-48 -45 0 +-441 -309 -131 49 0 +-285 103 -585 60 0 +142 396 0 +-536 560 210 594 0 +2 -520 -405 311 0 +-175 37 100 -72 0 +292 -77 -368 -559 0 +-68 -330 -130 172 0 +-193 -566 -368 -220 0 +78 -206 -45 -382 0 +386 33 515 551 0 +-424 -368 -87 616 0 +-587 566 441 -41 0 +-41 3 468 -587 0 +-159 14 -192 -148 0 +-65 -241 -287 -89 0 +290 361 55 377 0 +-289 8 542 324 0 +-603 -383 -240 256 0 +-240 406 146 -7 0 +-200 577 -22 -513 0 +-179 -223 93 -619 0 +321 407 347 49 0 +-216 332 0 +227 -631 0 +-47 164 -232 577 0 +231 457 306 0 +-82 -148 416 -186 0 +351 -487 548 -564 0 +574 -369 464 480 0 +-309 521 -568 -591 0 +198 137 608 276 0 +-395 589 10 -221 0 +397 -549 80 0 +-206 78 -382 -612 0 +-287 241 335 -634 0 +-145 609 -175 217 0 +16 507 -38 0 +-237 8 -263 -436 0 +638 -120 614 381 0 +-264 554 0 +-355 1 -612 78 0 +496 -486 -612 519 0 +304 603 256 -170 0 +-67 10 -79 -556 0 +-578 -590 -592 78 0 +337 -341 338 2 0 +-550 -124 0 +-122 258 -70 -443 0 +621 -336 323 0 +548 -564 -470 0 +588 385 -434 -558 0 +-84 49 -183 -309 0 +-148 311 -520 407 0 +205 608 0 +480 -550 -540 595 0 +608 -299 -74 279 0 +150 -31 -559 465 0 +-42 -177 283 161 0 +-118 -512 472 445 0 +248 -547 0 +-640 339 202 -153 0 +-289 457 -97 293 0 +598 445 -292 150 0 +-48 248 308 644 0 +205 5 -383 0 +-231 -86 -443 411 0 +539 -360 -401 310 0 +-166 -380 -368 -472 0 +577 -194 0 +-384 157 -547 0 +-481 -529 406 18 0 +498 -631 0 +214 -627 423 25 0 +-204 -573 0 +-309 521 -506 -591 0 +310 539 407 -360 0 +-369 540 -268 452 0 +-124 452 -119 -307 0 +-330 416 539 -186 0 +625 -311 -330 245 0 +-599 20 -417 0 +-645 150 -204 -427 0 +383 386 -357 227 0 +220 -579 411 107 0 +-637 -417 20 602 0 +123 121 -233 154 0 +208 333 0 +634 335 217 0 +232 -576 575 535 0 +-506 468 -309 3 0 +228 -124 -129 -538 0 +306 -568 0 +-58 -87 -568 0 +-473 624 498 -173 0 +208 -31 -309 465 0 +272 88 0 +-587 -388 -500 431 0 +234 105 538 -296 0 +-372 213 227 312 0 +-619 335 551 -179 0 +40 620 214 -25 0 +-237 -129 466 -436 0 +334 -38 0 +-38 -181 83 -633 0 +221 -550 10 -503 0 +9 476 -216 -39 0 +313 -526 377 308 0 +-592 -590 406 18 0 +256 153 519 0 +99 -96 -73 560 0 +11 -576 -225 -140 0 +-200 -247 -9 577 0 +402 595 0 +239 40 -129 561 0 +-82 407 0 +-274 -194 -478 -282 0 +-325 608 -493 -320 0 +306 -61 -77 292 0 +398 198 -253 410 0 +-51 -316 -200 -367 0 +-553 -564 253 0 +-64 69 -401 539 0 +-326 -259 245 -111 0 +-359 290 140 108 0 +-430 -165 411 219 0 +560 -190 -336 0 +-395 296 -193 419 0 +-186 -401 539 416 0 +452 239 40 561 0 +456 522 -204 150 0 +-491 457 -263 -57 0 +10 561 -550 239 0 +-321 469 -148 -192 0 +93 -136 -223 101 0 +-393 -319 498 409 0 +335 101 -136 198 0 +-261 7 -429 -297 0 +484 -635 480 169 0 +386 -340 639 -240 0 +-45 -467 78 -117 0 +-152 362 411 390 0 +10 -263 -459 307 0 +70 -193 -618 -587 0 +130 85 -144 -81 0 +1 -128 -355 -45 0 +-369 -65 0 +-107 452 -263 0 +-111 3 -443 0 +520 446 0 +-393 525 -320 529 0 +-195 -110 583 -336 0 +-369 -90 -607 10 0 +244 458 284 0 +551 -71 0 +44 -547 -39 433 0 +-374 370 5 552 0 +191 378 11 -527 0 +-395 459 -52 -414 0 +205 -320 -161 494 0 +377 308 -47 0 +-382 -206 -510 288 0 +552 -429 -393 370 0 +543 627 335 -564 0 +290 -236 108 63 0 +411 -472 -430 -380 0 +-194 313 377 -526 0 +385 98 23 -263 0 +503 480 438 -635 0 +-110 -83 377 -557 0 +-265 -277 -405 -82 0 +-48 486 -612 316 0 +-257 -478 246 -433 0 +262 -324 40 452 0 +305 -196 0 +419 296 343 234 0 +-645 172 -270 -427 0 +-500 -559 -388 -506 0 +28 -13 106 15 0 +-310 150 2 326 0 +-489 170 510 0 +-204 -416 211 0 +-91 378 51 0 +138 -478 11 0 +-63 -532 -596 396 0 +-44 -38 -238 -576 0 +628 -595 217 -474 0 +-584 242 -194 -471 0 +-216 -344 488 377 0 +342 308 322 513 0 +339 -76 0 +-604 -485 -369 0 +448 -401 0 +213 205 -429 312 0 +-110 -55 -384 -601 0 +-549 24 358 0 +-309 -219 183 -587 0 +-553 -351 357 439 0 +-579 -589 -149 411 0 +-579 565 318 -52 0 +-592 -393 -590 -640 0 +406 615 302 227 0 +-309 514 211 391 0 +-81 -131 85 -441 0 +-511 308 -48 0 +227 88 0 +-39 377 0 +621 96 -571 381 0 +-327 -320 -199 406 0 +318 -193 -368 0 +-278 -286 -264 -212 0 +-526 -39 0 +256 -314 -128 127 0 +-145 -79 214 609 0 +-52 23 -395 0 +208 -144 130 -309 0 +217 301 -352 548 0 +-175 228 -643 -538 0 +-127 -578 -240 53 0 +-414 -457 380 0 +-550 -607 -90 105 0 +183 -309 -568 -219 0 +-558 -125 0 +-558 23 -87 98 0 +394 -598 407 448 0 +523 234 -109 105 0 +514 391 -309 448 0 +10 -124 -67 0 +152 566 0 +-52 390 -648 97 0 +-263 10 542 324 0 +453 234 -107 67 0 +-587 -166 77 149 0 +388 85 245 -456 0 +455 78 0 +-430 521 -61 -591 0 +-15 -564 294 0 +-464 10 40 -139 0 +406 -603 -383 498 0 +-446 -271 539 407 0 +-630 -285 -647 -30 0 +-462 108 0 +-317 541 -461 -111 0 +428 144 390 85 0 +490 -226 519 -45 0 +407 -446 -271 -376 0 +628 201 -276 551 0 +-168 -48 308 418 0 +-240 -505 -393 572 0 +390 457 0 +284 -632 641 -499 0 +-177 299 -372 0 +299 386 227 -624 0 +-422 452 -349 -124 0 +211 -427 -645 2 0 +138 32 -200 133 0 +-559 472 -368 -512 0 +-192 172 625 -311 0 +439 -534 -494 136 0 +-374 88 -312 495 0 +78 -578 505 0 +-372 439 345 179 0 +-630 273 482 -278 0 +34 230 452 -369 0 +294 5 -261 0 +-293 466 385 0 +-129 -98 -289 0 +-246 455 342 254 0 +-48 -168 418 -257 0 +-619 628 -179 279 0 +577 142 225 442 0 +-596 334 0 +610 -38 0 +-380 -193 -472 -368 0 +-287 -545 -635 0 +-38 -384 -55 -601 0 +-204 600 211 -465 0 +245 -26 -111 -333 0 +-182 -278 554 -113 0 +452 -597 0 +54 539 -270 17 0 +645 508 337 504 0 +108 -29 0 +-330 -82 0 +-579 491 -328 -643 0 +457 565 318 -289 0 +242 -547 267 0 +471 27 -576 -547 0 +-270 159 12 0 +590 -510 -626 0 +-527 -570 247 -596 0 +213 -177 -534 0 +-646 234 -565 453 0 +221 -643 234 0 +629 176 -190 -73 0 +29 -547 -361 -51 0 +-330 150 0 +529 525 -429 -374 0 +273 -278 16 482 0 +24 167 604 397 0 +-640 174 -350 288 0 +-543 -553 75 50 0 +-52 306 -220 -566 0 +217 628 477 -438 0 +343 385 0 +623 -536 518 -353 0 +342 -511 -196 0 +-285 -203 546 554 0 +-82 -81 0 +-425 439 93 0 +-225 308 -140 396 0 +5 529 525 256 0 +-571 533 381 0 +-61 49 -292 598 0 +-124 -119 10 -307 0 +385 -118 -318 502 0 +220 466 -87 0 +-265 407 -209 -277 0 +75 -13 439 -543 0 +301 217 -567 -352 0 +24 -484 646 -72 0 +623 629 518 -536 0 +-589 -87 -149 -395 0 +322 -257 -48 513 0 +616 -118 385 -424 0 +-340 639 294 498 0 +60 -353 -92 -585 0 +358 40 422 0 +86 306 0 +358 24 -561 0 +-368 318 457 0 +-478 -196 359 -490 0 +480 628 252 229 0 +-369 -175 0 +142 517 -39 -244 0 +-328 607 0 +-542 -501 -52 -597 0 +334 -39 0 +343 -263 0 +466 -156 452 139 0 +18 -382 -462 -206 0 +-79 -262 -485 -229 0 +486 316 -478 -196 0 +-178 119 397 -65 0 +-278 20 -329 -60 0 +7 -261 -429 205 0 +-285 269 190 16 0 +-270 625 -311 245 0 +-553 312 213 227 0 +-157 -384 -200 -248 0 +-199 339 -327 -429 0 +5 -325 608 -493 0 +-216 16 -442 -507 0 +142 517 -384 -244 0 +-153 202 305 -374 0 +410 80 0 +-490 -626 -527 359 0 +402 423 -421 -354 0 +-173 -374 88 624 0 +-232 396 -257 -47 0 +-475 -45 102 -51 0 +-353 -336 0 +508 -365 21 448 0 +-330 -341 338 -573 0 +-82 150 0 +-122 306 -497 -502 0 +43 455 242 236 0 +-180 176 -278 -190 0 +195 -353 -181 -222 0 +242 -490 359 -612 0 +-175 -167 109 -643 0 +293 -597 -97 -193 0 +575 244 458 0 +-571 -38 -123 298 0 +-52 -430 219 -165 0 +-15 207 -386 0 +25 -627 -567 402 0 +308 -48 -282 -274 0 +-52 380 454 -395 0 +342 308 138 133 0 +-639 386 516 -564 0 +171 -270 437 539 0 +290 471 27 334 0 +-229 -262 -550 214 0 +-384 -532 164 -63 0 +528 342 -196 -138 0 +88 -440 -374 184 0 +-162 501 -587 -166 0 +406 606 498 -163 0 +-13 555 0 +-513 377 -257 -22 0 +-461 445 0 +-417 -336 0 +-430 -122 -371 31 0 +-478 -91 -449 -257 0 +-630 -278 -518 633 0 +290 242 191 378 0 +188 -579 0 +454 466 -166 380 0 +-72 607 -98 -597 0 +-549 410 487 -46 0 +-42 642 226 -128 0 +-71 -485 -574 619 0 +-562 205 451 279 0 +97 390 343 -648 0 +545 -550 422 -46 0 +201 -276 423 439 0 +-285 -630 533 -602 0 +381 233 -536 599 0 +212 -353 -92 -582 0 +-584 32 -547 -471 0 +-341 338 12 -270 0 +363 -62 -384 -27 0 +188 -87 -616 -263 0 +-92 381 281 -408 0 +-374 -199 -429 -327 0 +-606 205 160 -320 0 +579 434 -188 0 +385 -616 188 -263 0 +647 -4 560 -264 0 +-248 -157 396 308 0 +-630 126 -278 113 0 +439 106 -13 15 0 +639 88 294 0 +-241 -175 -287 -89 0 +258 -70 -309 -506 0 +524 -644 288 342 0 +85 -347 -66 -81 0 +-118 -506 0 +435 377 -38 526 0 +-587 -87 616 -424 0 +577 35 164 450 0 +517 -576 224 0 +206 256 173 -76 0 +-372 -184 -240 -75 0 +339 304 -590 -592 0 +117 -128 0 +95 629 0 +386 213 227 312 0 +-580 434 -643 -366 0 +334 -384 0 +-329 629 20 -60 0 +-474 -46 80 -595 0 +-71 439 398 0 +-571 499 142 -544 0 +-63 -532 332 -257 0 +-42 -510 0 +-240 116 -393 -642 0 +-419 457 -568 -428 0 +452 436 40 -387 0 +227 386 -161 494 0 +314 -530 78 -45 0 +423 -235 402 0 +-61 -309 0 +211 -437 508 -132 0 +173 406 -640 206 0 +229 397 335 0 +12 337 0 +-15 -553 -177 -116 0 +-488 -547 -191 377 0 +-279 -198 223 -551 564 -50 -28 -555 -439 0 +463 -166 618 -395 0 +337 14 -159 -204 0 +-534 272 -15 -116 0 +556 352 -369 217 0 +464 -643 -175 0 +242 -636 -462 243 0 +-372 207 -177 -552 0 +586 305 319 -631 0 +-175 262 0 +622 305 199 -631 0 +-567 -158 -564 354 0 +-478 455 -644 524 0 +106 386 439 0 +-372 -160 279 253 0 +396 11 -27 0 +150 -309 427 512 0 +-287 548 -398 -604 0 +-200 313 -384 -526 0 +108 164 248 644 0 +302 272 615 -578 0 +8 -175 -387 436 0 +-512 -430 472 -111 0 +256 227 -603 -383 0 +-568 -162 501 -52 0 +335 -136 -564 101 0 +-81 -317 -122 541 0 +-166 -220 0 +-263 -36 -129 -100 0 +78 -462 0 +-405 -204 -159 14 0 +150 -461 0 +-129 -109 523 466 0 +-216 16 -123 298 0 +164 577 -191 0 +-643 230 -65 34 0 +-353 629 0 +617 291 -81 -61 0 +32 467 282 455 0 +-424 -125 616 -443 0 +114 479 628 551 0 +-21 -82 0 +-46 255 413 410 0 +-443 -166 0 +392 -395 452 -239 0 +24 -241 -89 358 0 +-311 508 208 625 0 +-196 -640 375 -403 0 +-544 499 -336 -110 0 +-187 -576 367 11 0 +-364 -273 103 224 0 +-359 140 -478 308 0 +-496 -447 -128 -473 0 +-317 -309 208 541 0 +548 -287 -415 0 +-42 -393 0 +141 -605 155 168 0 +459 454 0 +-232 377 0 +151 88 205 -409 0 +-384 -547 367 -187 0 +-543 -351 -198 0 +-181 -285 0 +390 183 -61 -219 0 +315 -470 551 335 0 +458 575 537 585 0 +227 -515 327 386 0 +-430 -219 183 -41 0 +-368 431 -219 183 0 +205 -606 -429 160 0 +396 290 0 +358 423 0 +239 105 -65 561 0 +-92 629 212 -582 0 +-173 -473 -240 624 0 +198 -297 15 106 0 +-72 -260 234 -454 0 +112 530 108 570 0 +207 -564 -553 0 +145 -46 410 -201 0 +-478 254 455 -246 0 +457 -428 -419 -587 0 +645 504 539 -270 0 +-384 35 -194 450 0 +11 641 517 0 +-587 648 -41 -291 0 +-587 -309 258 -70 0 +-238 -576 224 -44 0 +343 149 0 +-605 -194 0 +-384 363 -426 0 +40 104 -485 387 0 +-597 324 -129 542 0 +356 -564 -567 0 +-616 -289 343 188 0 +521 -591 306 -111 0 +-533 16 -426 575 0 +230 34 -369 8 0 +548 555 0 +159 84 -82 49 0 +-362 220 166 0 +231 -125 -392 -366 0 +-642 116 -578 -240 0 +599 560 233 638 0 +16 -630 0 +505 -375 -578 519 0 +-429 -7 -393 0 +-39 -200 432 -563 0 +69 -204 -64 337 0 +102 -475 242 -45 0 +-192 -617 277 172 0 +449 557 -576 308 0 +-596 290 0 +288 -640 -355 1 0 +255 413 217 -567 0 +-475 -48 0 +-219 -368 -41 183 0 +-395 234 0 +437 171 -376 -330 0 +-83 -39 -557 -38 0 +386 -639 516 551 0 +93 555 0 +458 344 -269 575 0 +533 381 -92 0 +173 206 406 -76 0 +158 325 439 -13 0 +382 91 -478 155 0 +-382 -355 0 +80 -46 -104 303 0 +-188 -34 8 -263 0 +-556 -67 -79 -593 0 +617 211 431 291 0 +259 152 -559 -118 0 +-506 445 -295 58 0 +470 -634 0 +-343 -149 -501 0 +-398 -604 423 480 0 +-65 422 -46 545 0 +-72 -67 -65 -556 0 +142 -83 0 +339 -314 304 127 0 +-518 633 -92 -278 0 +-73 -56 629 331 0 +-400 -509 -181 121 0 +227 256 302 0 +-264 518 560 623 0 +439 386 -19 -412 0 +-369 -124 0 +21 -192 -365 -461 0 +-299 551 -74 205 0 +10 -550 -387 436 0 +-369 -228 480 -255 0 +408 -181 363 -483 0 +-280 -61 26 390 0 +299 -624 294 498 0 +-497 -568 -41 -502 0 +-572 412 -372 5 0 +-571 103 0 +-538 452 228 -369 0 +-502 -497 306 -61 0 +370 -642 0 +335 -106 634 551 0 +-597 8 607 -98 0 +390 57 411 280 0 +205 -135 551 0 +508 -330 0 +-63 -563 -308 0 +93 -549 487 -485 0 +-612 112 0 +-240 256 606 -163 0 +526 577 435 142 0 +-478 455 -29 403 0 +-384 449 -547 557 0 +183 -219 -587 431 0 +169 484 24 397 0 +-438 -71 477 358 0 +-564 548 -179 -619 0 +-26 -461 -333 85 0 +-473 -495 -177 0 +439 -114 423 0 +628 354 50 0 +-344 -384 488 -216 0 +176 623 0 +227 406 319 0 +-38 -571 -426 -533 0 +-297 88 207 -552 0 +-83 -384 -38 -557 0 +-405 -446 -271 -82 0 +548 -46 -252 0 +606 406 -163 -240 0 +-110 334 232 535 0 +-416 131 -330 -461 0 +-540 595 358 24 0 +89 -635 -129 260 0 +-392 -87 231 -289 0 +266 68 539 -192 0 +-429 592 340 339 0 +332 142 0 +43 236 108 -612 0 +-315 551 386 0 +-81 326 -401 -310 0 +284 16 -442 -507 0 +-223 562 -252 93 0 +-440 184 272 -42 0 +-109 -395 452 523 0 +488 641 224 -344 0 +294 -372 0 +453 -550 -307 0 +-162 -506 385 501 0 +-605 -626 141 168 0 +307 -459 -597 105 0 +-353 -536 -197 509 0 +323 -536 0 +562 -252 -564 -71 0 +228 -550 105 -538 0 +621 96 -181 121 0 +-393 174 -510 0 +400 244 103 610 0 +-417 -4 647 -180 0 +-129 452 0 +164 -532 -63 577 0 +121 381 0 +-576 290 0 +-216 377 -298 -35 0 +132 448 -41 -258 0 +-336 -190 381 0 +534 412 -515 0 +449 557 11 396 0 +-289 -263 0 +-110 298 -123 -92 0 +-430 -566 -220 457 0 +5 339 53 -127 0 +-603 -374 -383 5 0 +-568 -468 -193 -492 0 +328 -79 -609 452 0 +500 306 457 0 +-568 -165 219 343 0 +-123 -110 298 -571 0 +189 -534 261 439 0 +-124 -119 -307 -593 0 +493 -393 -320 -202 0 +-170 -42 603 -128 0 +-73 121 614 -120 0 +-368 306 0 +-476 103 610 0 +-83 396 -557 284 0 +5 552 256 370 0 +404 508 -21 399 0 +294 555 261 189 0 +24 100 37 453 0 +336 633 269 0 +441 431 566 -368 0 +-481 -529 256 -128 0 +339 498 0 +-637 -180 602 -417 0 +585 537 103 284 0 +-462 355 519 0 +459 385 -263 -414 0 +19 551 -413 628 0 +-110 610 0 +150 -270 0 +-125 618 463 234 0 +-462 490 304 -226 0 +288 -640 -622 -141 0 +233 -285 554 599 0 +-454 -260 -366 105 0 +531 458 -614 -417 0 +-451 -320 -297 0 +448 514 -41 391 0 +380 454 -263 -193 0 +-140 -596 396 -225 0 +114 -567 479 50 0 +-478 102 -475 -196 0 +-87 -395 380 454 0 +-278 507 -331 103 0 +-175 -643 -307 -119 0 +-321 -394 0 +-593 10 0 +105 -422 -65 -349 0 +85 86 317 390 0 +-207 -372 -223 -315 0 +-318 343 306 502 0 +470 -567 480 178 0 +-221 -643 589 -366 0 +-268 452 -558 0 +155 590 -640 -254 0 +-522 399 -215 2 0 +191 308 342 378 0 +155 304 -486 496 0 +431 -461 0 +-573 645 504 -192 0 +-110 -123 298 154 0 +-319 -473 0 +-553 28 -351 357 0 +-63 -576 -257 0 +-301 198 410 74 0 +5 494 386 0 +-244 377 517 284 0 +198 351 0 +-128 440 489 256 0 +224 218 -576 0 +519 -174 -283 -578 0 +-617 277 -204 448 0 +49 172 0 +225 224 442 -576 0 +-621 16 601 575 0 +165 234 457 156 0 +-485 -287 0 +-166 -152 -118 0 +-568 -368 0 +-328 105 -579 491 0 +-543 -372 -564 75 0 +16 610 0 +86 -559 317 -368 0 +-87 459 -414 466 0 +-41 -456 172 0 +-181 -92 0 +396 22 -537 224 0 +397 -235 80 -479 0 +-325 498 -493 386 0 +-578 498 0 +-124 10 167 0 +-330 94 -600 -376 0 +362 -52 -587 -152 0 +551 158 294 325 0 +623 518 -417 20 0 +43 -45 236 242 0 +387 104 358 -550 0 +50 -106 548 634 0 +-185 16 575 238 0 +549 217 -230 -635 0 +-166 -558 237 492 0 +-582 629 212 16 0 +-626 -490 342 359 0 +-427 -204 208 -645 0 +-433 32 -194 246 0 +-169 425 -287 335 0 +645 504 399 -204 0 +-76 -206 112 0 +627 335 279 543 0 +-330 399 0 +-443 97 343 -648 0 +-450 308 32 636 0 +-527 -196 141 168 0 +-277 508 -405 -265 0 +541 208 -317 -41 0 +-143 -128 -615 -42 0 +254 -612 108 -246 0 +-83 332 -557 575 0 +291 617 -122 245 0 +248 242 290 644 0 +-192 -376 -21 404 0 +-635 -124 0 +638 -120 121 614 0 +-216 -613 426 -39 0 +-593 -369 646 0 +-153 -473 78 202 0 +218 -126 -630 610 0 +-553 88 0 +214 169 0 +-530 304 -196 314 0 +-38 -336 0 +-564 -553 158 325 0 +-517 -133 334 164 0 +435 363 -384 526 0 +-472 306 -41 0 +-593 -328 -558 491 0 +342 108 0 +508 277 337 0 +-196 112 0 +-517 -133 -596 641 0 +-605 133 138 -596 0 +288 -478 359 -490 0 +-597 239 -129 0 +-536 560 -250 -420 0 +312 -624 0 +-368 -587 0 +448 431 541 -317 0 +-67 -129 -124 0 +-194 -511 563 -48 0 +-430 -111 648 -291 0 +-182 -113 -285 -180 0 +234 -129 0 +-567 -438 -485 477 0 +435 526 610 396 0 +89 10 40 260 0 +273 482 -92 -353 0 +5 -624 294 299 0 +456 -204 522 208 0 +-340 88 0 +-309 31 -506 -371 0 +62 -181 -460 -38 0 +-478 -527 0 +-536 -417 0 +457 -193 0 +-351 608 50 357 0 +455 242 141 168 0 +-14 -134 0 +77 149 -118 -87 0 +-403 375 -462 -128 0 +577 557 0 +101 -136 28 423 0 +10 -369 580 -620 0 +-140 -257 641 -225 0 +641 -384 0 +-325 386 5 -493 0 +24 -369 0 +-429 -624 205 299 0 +-394 -148 -270 6 0 +-111 144 -443 428 0 +-264 -420 629 -250 0 +-330 611 -461 249 0 +205 -572 88 412 0 +-357 -240 383 -372 0 +-39 313 290 0 +-129 -436 -597 -237 0 +57 -118 280 385 0 +-261 -320 -297 7 0 +342 467 282 155 0 +-464 -635 -139 453 0 +-129 -124 -167 109 0 +504 645 -148 -330 0 +43 -478 288 0 +-223 294 0 +306 -500 -388 431 0 +440 489 304 256 0 +-521 365 -122 245 0 +-429 493 339 -202 0 +-48 -547 644 0 +453 -607 -90 -635 0 +40 230 8 34 0 +323 -115 -637 602 0 +390 431 0 +-331 507 -285 -630 0 +-71 214 -479 -235 0 +-451 -53 -553 272 0 +18 206 173 -374 0 +-635 358 -255 -228 0 +302 -177 -578 615 0 +-631 495 -429 -312 0 +-394 -192 -209 6 0 +-297 498 0 +452 -643 0 +-635 609 -287 -145 0 +496 305 -626 -486 0 +176 -536 381 -190 0 +-487 279 351 548 0 +-320 639 -340 386 0 +339 -631 0 +-612 -48 243 -636 0 +523 -643 -109 -366 0 +551 -299 -74 -297 0 +-369 -145 609 -485 0 +348 -510 -626 -586 0 +423 413 255 214 0 +390 445 0 +11 -257 0 +-330 -401 0 +-180 554 0 +-128 -528 455 -489 0 +-146 5 406 0 +-366 -221 589 -72 0 +-297 551 -135 0 +-513 -22 -576 -194 0 +310 -192 539 -360 0 +479 -301 -423 0 +-193 -23 0 +453 328 24 -609 0 +-82 -277 -209 -265 0 +-547 450 -384 35 0 +96 560 621 -336 0 +575 -571 499 -544 0 +-568 362 -193 -152 0 +24 221 -503 -72 0 +306 500 414 411 0 +288 18 590 -254 0 +306 -559 0 +-461 -111 291 617 0 +-395 452 -237 -436 0 +-84 431 -183 172 0 +420 323 -336 460 0 +645 -522 0 +2 -81 0 +407 -54 -209 0 +-209 -54 -192 0 +-46 -635 167 604 0 +288 -490 342 359 0 +-297 555 451 -562 0 +-540 595 -175 358 0 +-97 293 -52 -289 0 +-315 279 -207 205 0 +390 85 -291 648 0 +-460 154 62 -110 0 +-7 -429 146 339 0 +377 -216 -535 0 +103 323 0 +498 409 -553 0 +-62 -244 0 +-216 537 585 16 0 +-567 145 -201 214 0 +-285 -630 233 0 +-412 279 -19 608 0 +-589 -52 -579 -149 0 +-127 -240 -393 53 0 +-273 -364 363 -181 0 +575 526 435 -576 0 +245 431 0 +-572 -372 412 227 0 +32 570 530 112 0 +400 103 575 244 0 +203 -417 544 -630 0 +142 334 157 364 0 +-355 -626 1 -640 0 +-336 408 -483 142 0 +-586 305 348 155 0 +99 -285 20 -96 0 +-470 -71 279 315 0 +140 242 -547 -359 0 +610 -537 396 22 0 +272 -534 -340 639 0 +-128 -462 -489 -528 0 +639 294 -340 5 0 +172 271 -330 346 0 +-430 -118 0 +136 -223 -553 -494 0 +-235 217 -479 548 0 +163 117 -631 -640 0 +243 342 -636 288 0 +545 402 422 -369 0 +305 -45 0 +-181 458 0 +-240 383 -357 608 0 +49 -41 598 -292 0 +648 -118 0 +-430 -566 411 -220 0 +85 365 -461 -521 0 +448 84 407 159 0 +306 -587 0 +-598 394 211 -82 0 +-330 -446 -271 -148 0 +-558 607 -593 -98 0 +480 423 477 -438 0 +-550 503 214 438 0 +455 511 350 32 0 +-243 -254 0 +416 -186 -376 -192 0 +-118 -388 -559 -500 0 +610 -298 0 +18 256 -375 505 0 +-196 -226 490 -510 0 +-39 577 0 +-626 -76 0 +629 -181 0 +-353 420 460 -92 0 +335 80 0 +22 396 -537 575 0 +-158 354 28 -567 0 +159 508 84 150 0 +-124 8 0 +-443 -118 0 +-443 390 0 +256 340 592 -240 0 +411 500 390 414 0 +339 -510 163 117 0 +561 239 -79 452 0 +-239 392 -129 -263 0 +386 608 0 +-260 -366 -72 -454 0 +-568 -309 468 3 0 +453 -579 34 0 +-38 -384 -244 517 0 +32 -471 -194 -584 0 +-216 400 -92 244 0 +-559 150 -441 -131 0 +-110 -27 -62 377 0 +603 -170 -128 -578 0 +393 -283 -146 0 +242 -322 0 +-13 -15 -116 227 0 +608 -606 498 160 0 +-141 -403 0 +327 -297 -515 -320 0 +610 -460 62 103 0 +-522 399 -82 -215 0 +-295 -61 58 390 0 +-79 230 34 452 0 +294 50 0 +172 130 -144 -111 0 +31 111 -391 0 +548 80 0 +624 -429 -631 -173 0 +-79 556 452 0 +563 -511 -48 -547 0 +-578 -42 0 +11 -282 -527 -274 0 +-285 -585 -630 60 0 +-228 -255 -175 -46 0 +24 -72 -67 -556 0 +-190 95 323 0 +-405 266 2 0 +-123 298 -92 -216 0 +-593 -124 580 -620 0 +-134 12 0 +-65 453 0 +445 31 -118 -371 0 +-499 -632 -384 -38 0 +458 560 0 +552 370 -177 -42 0 +341 407 -148 0 +6 -270 12 -394 0 +535 363 -384 232 0 +358 -71 25 -627 0 +-48 282 467 288 0 +402 -369 556 352 0 +-443 343 500 414 0 +-192 -270 0 +-79 415 -561 402 0 +-91 -257 -449 -527 0 +-237 -436 8 -597 0 +-285 176 -190 -264 0 +-72 -98 607 -579 0 +225 -576 -194 0 +-579 -129 0 +-216 -571 -460 62 0 +78 127 -42 -314 0 +-536 -286 -278 -212 0 +155 -640 -489 0 +-51 316 -462 486 0 +598 -330 -81 0 +-593 -540 -369 0 +423 50 -356 -425 0 +-599 0 +220 107 -87 -558 0 +3 445 -506 468 0 +335 -595 -474 217 0 +-528 -489 -612 519 0 +629 -222 0 +-438 477 628 358 0 +-478 -471 -584 -257 0 +-373 -567 -477 439 0 +-473 -578 0 +-612 455 0 +-71 474 50 -33 0 +28 93 -158 354 0 +298 -216 -181 -123 0 +420 -285 0 +498 444 447 256 0 +-527 -626 316 486 0 +-640 -275 455 0 +-129 268 466 -293 0 +288 342 59 584 0 +-297 -372 0 +294 160 498 -606 0 +423 397 0 +402 25 93 -627 0 +-270 14 539 -159 0 +-568 219 -52 -165 0 +431 -368 259 152 0 +-576 610 0 +-512 -111 390 472 0 +-127 -374 0 +34 230 -635 8 0 +-194 342 -91 -449 0 +32 288 0 +-607 8 40 0 +213 13 299 0 +-461 -122 541 -317 0 +-550 8 262 -324 0 +-87 385 0 +-372 -553 0 +410 241 -634 -46 0 +458 298 -123 575 0 +436 8 -635 -387 0 +614 560 -92 0 +-631 256 0 +480 -561 40 415 0 +617 208 291 445 0 +-263 -589 385 -149 0 +-111 -443 371 0 +-189 50 -71 569 0 +-556 -67 -369 8 0 +2 211 -514 -69 0 +-185 238 -110 -181 0 +496 -486 304 455 0 +-635 -349 -129 0 +-216 -630 0 +390 -52 219 -165 0 +85 291 -461 617 0 +-590 -592 -473 78 0 +-177 -325 -553 -493 0 +-525 -345 -320 205 0 +323 16 0 +60 560 -585 -571 0 +647 629 554 -4 0 +-89 217 -369 0 +439 351 628 -487 0 +439 189 386 261 0 +105 -565 -646 -366 0 +-450 242 636 164 0 +27 -517 0 +-240 -173 624 -393 0 +470 -287 548 178 0 +-369 119 -178 402 0 +-51 -462 43 236 0 +157 332 610 364 0 +-117 -467 -626 -510 0 +448 407 600 -465 0 +18 519 0 +5 -578 0 +414 500 306 343 0 +-593 561 239 -369 0 +-62 284 396 -27 0 +-270 311 -520 539 0 +555 628 0 +-56 331 -278 -180 0 +358 40 -262 -229 0 +-81 512 427 -122 0 +-255 -175 358 -228 0 +112 -626 0 +-177 572 -505 256 0 +-240 -325 608 0 +-471 11 0 +-495 -42 -128 -1 0 +-550 -307 105 0 +474 -567 402 0 +198 80 -252 562 0 +410 25 -46 -627 0 +-527 355 -626 -378 0 +-405 -310 -82 0 +453 -324 24 262 0 +-456 388 -309 448 0 +-642 227 116 -42 0 +-81 -258 -122 132 0 +-263 542 452 324 0 +543 -567 28 627 0 +611 401 159 0 +-240 -515 327 608 0 +511 155 -605 350 0 +284 526 377 435 0 +-262 24 -287 -229 0 +391 -31 0 +155 -527 43 236 0 +-317 -559 541 448 0 +49 456 0 +439 -372 106 15 0 +-51 267 -313 290 0 +35 -39 308 450 0 +183 -219 -41 -568 0 +-563 432 334 -200 0 +269 190 16 629 0 +-502 390 -497 -111 0 +354 80 -158 551 0 +50 19 548 -413 0 +337 -271 -446 2 0 +-424 616 -587 -193 0 +556 352 -635 217 0 +-563 332 432 -257 0 +397 80 -101 -545 0 +-61 66 -461 0 +407 645 0 +-602 533 560 -336 0 +-393 18 -375 505 0 +-635 -422 0 +-263 452 307 -459 0 +50 -567 -136 101 0 +26 -280 -122 -568 0 +49 245 0 +608 -624 299 -320 0 +398 548 50 -253 0 +-534 498 0 +356 -151 555 205 0 +407 68 266 539 0 +-626 300 305 -43 0 +396 -44 -38 -238 0 +396 -418 632 11 0 +-478 112 0 +16 -269 344 284 0 +644 242 248 -194 0 +-110 377 -613 0 +-104 423 303 214 0 +224 16 460 0 +276 555 294 137 0 +313 -526 -257 641 0 +233 381 95 599 0 +548 398 -253 279 0 +-153 202 -42 -128 0 +618 306 343 0 +-23 591 -443 -125 0 +-199 -327 498 -473 0 +628 303 -104 217 0 +-13 272 639 -340 0 +-79 104 214 387 0 +-133 -517 -194 396 0 +380 -52 -579 454 0 +234 -392 457 231 0 +294 -261 7 -320 0 +-336 -195 583 142 0 +-547 55 361 -384 0 +-91 -596 -605 -449 0 +8 436 -550 -387 0 +8 230 34 -550 0 +-347 49 -66 431 0 +-216 -476 30 16 0 +205 -15 5 -116 0 +26 -568 -280 -61 0 +-303 -516 439 423 0 +187 9 -396 0 +-326 -259 172 -122 0 +-84 -559 -183 211 0 +-285 123 -233 103 0 +334 22 -110 0 +-366 589 343 0 +40 -262 -229 -485 0 +448 365 445 -521 0 +442 -38 0 +559 -291 144 0 +261 -553 189 -564 0 +-48 -196 528 -138 0 +-430 -280 -122 26 0 +140 -200 -359 108 0 +10 -328 491 -289 0 +560 594 -73 210 0 +212 -336 -582 381 0 +-301 -564 335 74 0 +-309 -118 26 -280 0 +552 370 272 -578 0 +-194 -517 -384 -133 0 +-223 -372 135 373 0 +367 -194 -187 -576 0 +585 16 284 537 0 +227 -642 -473 116 0 +-500 -122 -388 306 0 +-430 616 -424 457 0 +-559 -66 448 -347 0 +-361 29 -51 290 0 +-72 -65 561 239 0 +306 -291 431 648 0 +-167 109 453 40 0 +363 575 0 +-643 -36 -366 -100 0 +444 272 447 -42 0 +-605 -584 -257 -471 0 +412 -572 294 -429 0 +-122 -441 172 -131 0 +-122 -443 3 0 +214 574 464 -369 0 +-596 -313 267 -605 0 +-111 -502 -497 306 0 +-48 382 288 91 0 +-101 -71 -545 217 0 +308 -316 -367 -48 0 +399 -148 0 +150 -456 388 445 0 +205 227 0 +167 -124 -485 604 0 +-630 281 -408 -285 0 +418 -596 -168 -527 0 +457 -566 -220 306 0 +-613 426 224 332 0 +516 608 -639 551 0 +562 628 50 -252 0 +62 332 575 0 +281 629 -408 16 0 +-614 531 121 -336 0 +480 423 -101 -545 0 +-237 -129 -289 -436 0 +10 -307 -289 0 +337 54 17 2 0 +466 459 -193 -414 0 +59 584 288 -478 0 +-420 -250 -278 -264 0 +-48 -194 -471 -584 0 +404 2 -21 399 0 +-627 480 25 -567 0 +-309 -388 49 0 +-129 -188 -395 -34 0 +36 -362 -579 343 0 +-350 -640 -626 174 0 +-42 78 -495 -1 0 +-297 -572 412 -320 0 +-569 -101 0 +210 638 594 121 0 +383 -357 -372 5 0 +-527 513 322 11 0 +40 217 484 169 0 +-568 -125 0 +236 32 43 455 0 +-550 -593 0 +-464 8 -635 -139 0 +440 -393 489 -76 0 +-128 -631 0 +116 406 227 0 +-81 -3 -122 -249 0 +-124 453 0 +-593 -263 607 -98 0 +359 -490 -51 -462 0 +-414 -597 -193 459 0 +-348 455 -128 0 +95 323 -251 -482 0 +277 -461 -617 -270 0 +24 260 89 453 0 +492 237 234 411 0 +-51 290 563 -511 0 +-393 622 199 -510 0 +-478 -348 -322 455 0 +-192 -617 -81 277 0 +-633 -571 83 575 0 +214 -485 0 +217 252 229 -71 0 +50 -543 75 -13 0 +458 -353 0 +411 565 318 -366 0 +-620 -79 580 -593 0 +-478 -462 350 0 +-612 78 153 -524 0 +-137 386 227 -302 0 +-122 -506 0 +349 -263 452 -463 0 +-192 -159 539 14 0 +210 95 594 121 0 +492 -263 -87 237 0 +505 -473 -375 -128 0 +342 455 -359 0 +-72 -366 -188 0 +-165 -587 219 457 0 +539 -277 -270 -265 0 +339 -319 409 -320 0 +-536 -203 546 560 0 +232 224 535 396 0 +-237 -558 -436 -593 0 +507 121 -336 -331 0 +379 -587 -58 -52 0 +-503 221 -129 -635 0 +505 -375 304 -374 0 +-216 -39 -601 -55 0 +-177 498 0 +-361 -257 -605 29 0 +-110 483 187 577 0 +431 -388 49 0 +453 -597 434 -580 0 +431 -249 -3 172 0 +-193 149 77 -506 0 +2 645 399 504 0 +406 -128 -481 -529 0 +386 151 498 -409 0 +-124 -503 452 221 0 +24 -139 -464 453 0 +63 -200 32 -236 0 +629 -180 0 +-124 105 0 +-576 -418 632 11 0 +-393 615 302 -320 0 +-73 -389 222 560 0 +214 40 422 545 0 +413 -287 335 255 0 +-126 -92 -110 218 0 +-550 -556 -129 -67 0 +349 -129 -463 -263 0 +-395 -87 618 463 0 +-53 -240 -451 608 0 +-81 431 0 +390 -118 0 +142 269 -181 0 +363 83 577 0 +548 -438 358 477 0 +-287 410 425 -169 0 +-57 -87 -491 466 0 +-315 -534 -207 439 0 +224 -123 103 298 0 +107 -579 220 343 0 +162 -559 -506 66 0 +-524 305 153 -626 0 +-527 288 355 -378 0 +238 16 -216 -185 0 +609 -145 214 -369 0 +-319 409 5 -393 0 +442 225 641 610 0 +469 -209 508 -321 0 +523 453 -109 234 0 +-517 290 377 -133 0 +622 519 199 256 0 +548 217 -104 303 0 +343 492 -579 237 0 +-630 -269 284 344 0 +458 -633 284 83 0 +233 121 599 -115 0 +-21 508 -405 404 0 +411 220 107 -366 0 +370 256 552 -240 0 +508 341 -541 208 0 +-216 -384 -27 -62 0 +-327 227 -534 0 +-76 -355 1 -612 0 +-371 -506 31 431 0 +-486 305 496 155 0 +377 164 0 +91 -612 382 32 0 +-59 -612 170 -76 0 +418 -478 11 -168 0 +-529 631 -592 0 +290 418 -168 32 0 +18 -393 440 489 0 +-417 -113 -180 -182 0 +381 629 0 +-260 -643 -454 -366 0 +-438 480 -71 477 0 +390 411 97 -648 0 +138 -48 -257 133 0 +-567 279 0 +-635 328 8 -609 0 +419 -166 -558 0 +-552 -429 -297 207 0 +-229 -485 -124 -262 0 +533 16 -602 629 0 +-48 -267 -147 455 0 +377 332 0 +-576 224 -344 488 0 +121 -571 203 544 0 +214 -567 -101 -545 0 +40 549 214 -230 0 +-637 -536 602 -278 0 +106 -534 439 15 0 +-223 451 -562 -372 0 +165 156 343 -597 0 +5 -505 339 572 0 +-374 302 88 615 0 +8 -369 221 -503 0 +402 423 25 -627 0 +-579 -296 538 -72 0 +-175 -25 620 397 0 +-179 -516 0 +-507 284 -630 -442 0 +-401 150 0 +304 -300 0 +-637 602 -278 554 0 +611 249 -82 208 0 +-152 385 362 -368 0 +641 557 -596 449 0 +-612 382 -51 0 +-643 538 -296 -579 0 +290 -274 0 +-180 -278 -581 0 +-114 386 439 -213 0 +-502 -497 -559 -118 0 +57 -87 280 -368 0 +-353 16 96 621 0 +-45 108 316 486 0 +-553 75 -223 -543 0 +-144 431 130 448 0 +103 344 -269 575 0 +-603 5 -383 256 0 +-39 313 -200 0 +481 519 -243 -612 0 +-529 -481 519 -578 0 +-567 -619 -223 -179 0 +-447 18 -496 -393 0 +234 -454 457 0 +-157 -384 -248 -194 0 +160 553 151 0 +-473 495 -312 227 0 +306 362 -152 457 0 +-223 93 -303 -516 0 +-259 -461 -326 -41 0 +338 -82 -209 -341 0 +563 -200 242 -511 0 +35 450 -576 -257 0 +337 -148 0 +-151 279 205 356 0 +21 -330 -365 172 0 +-38 408 -483 -181 0 +-45 481 -243 519 0 +532 284 332 -583 0 +-271 -401 -446 12 0 +-125 -366 -414 459 0 +-612 -489 78 -528 0 +218 -126 458 224 0 +480 548 201 0 +-36 -100 8 -263 0 +-403 -196 18 375 0 +337 2 134 -611 0 +-74 -564 -299 -553 0 +155 78 0 +11 361 396 55 0 +-278 -571 0 +260 89 -72 24 0 +217 252 628 229 0 +-204 321 347 208 0 +80 555 114 479 0 +-369 8 262 -324 0 +434 234 -580 -643 0 +-287 169 484 -175 0 +452 466 307 -459 0 +-394 337 -204 6 0 +220 385 107 -558 0 +77 390 149 -52 0 +-443 -122 -295 58 0 +-609 328 -175 105 0 +538 -395 452 -296 0 +608 -74 551 -299 0 +104 387 -175 -287 0 +-553 135 50 373 0 +-640 155 143 147 0 +455 -586 -76 348 0 +-435 582 224 103 0 +-160 555 253 294 0 +-586 348 -640 155 0 +-107 105 234 67 0 +-478 155 467 282 0 +-367 -51 -547 -316 0 +-110 -181 -483 408 0 +365 -82 211 0 +172 394 -598 -192 0 +-473 642 78 226 0 +-625 -448 -346 0 +-131 -61 -441 -81 0 +-594 185 -336 121 0 +-635 436 453 -387 0 +284 -238 396 -44 0 +171 437 407 -209 0 +-513 -22 -576 308 0 +423 -479 0 +416 -186 399 -204 0 +599 233 381 -115 0 +381 16 0 +-637 20 -353 602 0 +-206 -128 -382 -462 0 +154 -621 0 +-524 -196 -640 153 0 +-313 342 308 267 0 +-298 -35 -110 377 0 +158 -71 439 0 +-550 609 -145 -46 0 +-417 -518 633 -630 0 +279 33 515 294 0 +-395 67 10 -107 0 +-435 458 284 582 0 +-147 -605 155 -267 0 +-429 294 -302 -137 0 +502 -443 -318 -125 0 +-128 406 -275 0 +-312 -393 -429 495 0 +140 -359 11 342 0 +448 -111 0 +-568 468 3 -122 0 +75 -543 608 -564 0 +628 551 543 627 0 +224 -476 103 0 +279 -299 386 -74 0 +-196 528 -138 -478 0 +-430 591 -23 -125 0 +439 548 0 +378 -605 11 191 0 +-85 122 309 -431 111 41 559 61 -445 0 +-631 -473 0 +-366 156 0 +5 525 -393 529 0 +-46 470 410 178 0 +344 -269 -92 284 0 +-194 -367 -316 -478 0 +167 24 358 604 0 +11 563 -527 -511 0 +288 -275 -102 304 0 +-559 211 -317 541 0 +-141 -622 155 305 0 +557 449 308 332 0 +-82 -405 -159 14 0 +-46 -635 235 -37 0 +239 105 -550 561 0 +345 608 179 551 0 +208 -132 407 -437 0 +-97 234 -125 293 0 +-65 -540 -287 595 0 +-367 -316 242 -194 0 +290 -168 242 418 0 +18 -524 153 -196 0 +-192 208 541 0 +375 -403 288 304 0 +-409 151 5 -372 0 +211 346 271 2 0 +-227 606 409 0 +390 144 -122 428 0 +78 305 0 +526 -576 -38 435 0 +9 -257 -576 0 +242 -570 -200 247 0 +-297 294 0 +479 114 548 -564 0 +-181 -535 142 -531 0 +-251 95 -482 121 0 +623 554 518 629 0 +-109 452 -558 523 0 +-330 -446 -573 -271 0 +-128 -275 -462 -102 0 +-586 -473 18 0 +-285 121 0 +420 -92 460 560 0 +410 -287 -569 -415 0 +-643 -167 109 24 0 +-107 8 67 -263 0 +-118 -70 -309 258 0 +203 629 544 458 0 +288 242 0 +-196 455 0 +49 541 431 -317 0 +445 -41 0 +-196 524 -644 342 0 +-562 439 451 -13 0 +16 -544 -38 499 0 +399 508 -522 -215 0 +138 -584 527 0 +108 -45 382 91 0 +-44 -238 332 575 0 +629 -400 16 -509 0 +-259 -559 448 -326 0 +-280 -368 -309 26 0 +-491 411 -57 234 0 +-418 -39 -547 632 0 +40 -175 0 +-81 -192 132 0 +-38 -364 -571 0 +-61 -568 -371 31 0 +548 -516 -303 50 0 +27 -596 471 641 0 +132 431 -258 208 0 +447 339 -429 444 0 +357 294 -351 551 0 +93 -477 -223 -373 0 +242 -626 0 +189 261 -223 -553 0 +284 -92 -460 62 0 +-527 -596 475 47 0 +-630 190 269 -417 0 +188 234 -616 343 0 +-41 388 0 +-571 -336 0 +201 -276 410 555 0 +-430 -371 31 -61 0 +-461 -61 465 -31 0 +-118 428 0 +344 16 -269 -38 0 +-259 150 -559 -326 0 +-622 -640 -141 155 0 +-240 -135 -13 -444 0 +-91 -449 290 242 0 +-257 -39 0 +-71 425 217 -169 0 +152 -111 390 259 0 +-52 411 0 +-584 -471 290 32 0 +-470 -223 -71 315 0 +-593 434 -580 -263 0 +-553 -429 0 +-192 337 0 +-190 -264 560 176 0 +-443 411 -58 379 0 +445 -506 317 86 0 +-413 -71 19 -223 0 +-594 -278 16 185 0 +-179 50 -567 -619 0 +-120 -536 0 +-476 610 458 30 0 +-622 -141 155 -510 0 +508 311 -405 -520 0 +247 -570 164 108 0 +242 -138 528 455 0 +431 -506 -219 183 0 +-196 -478 168 141 0 +396 532 224 -583 0 +-571 363 0 +-140 -257 -225 332 0 +-630 -476 30 224 0 +586 519 319 256 0 +-110 577 -238 -44 0 +525 529 -320 -374 0 +-638 329 637 0 +-81 159 -330 84 0 +-225 377 0 +343 -568 -566 -220 0 +-41 -70 258 -587 0 +-421 358 548 -354 0 +253 -160 -297 555 0 +-81 -259 85 -326 0 +-568 -193 149 77 0 +397 402 0 +-143 304 339 -615 0 +339 -429 525 529 0 +-401 -405 0 +480 358 0 +-114 -213 50 -553 0 +150 -81 0 +342 -267 -626 -147 0 +171 -376 -192 0 +-114 551 294 -213 0 +584 -612 -51 59 0 +115 -546 -99 0 +-52 588 -434 -597 0 +-92 323 0 +-84 -61 -183 49 0 +-222 121 195 -181 0 +-128 -206 -382 -612 0 +-269 224 16 344 0 +343 542 -289 0 +-594 -92 185 -353 0 +-39 -62 -27 575 0 +447 -177 256 444 0 +-461 -401 -84 0 +-233 -353 123 103 0 +-639 279 516 608 0 +342 -257 -511 563 0 +335 -235 -287 -479 0 +399 -204 69 -64 0 +590 304 -254 288 0 +-550 90 214 421 0 +475 455 32 0 +-87 149 77 -587 0 +-110 -535 -531 -336 0 +308 -257 0 +-612 141 168 242 0 +-185 -110 -336 238 0 +-564 551 0 +-104 628 303 -46 0 +222 16 -353 0 +-124 -607 10 -90 0 +-72 -139 24 -464 0 +-203 629 -536 546 0 +-275 -226 -18 0 +14 2 -159 -405 0 +-119 453 -175 -307 0 +-289 234 0 +-199 227 -327 256 0 +-38 -576 232 0 +-364 16 224 -273 0 +-309 -31 465 448 0 +439 -562 451 -553 0 +452 -175 0 +-545 -101 480 -567 0 +116 -42 -642 272 0 +629 482 16 273 0 +-81 -68 -130 -401 0 +224 537 103 585 0 +-261 -608 494 0 +300 -43 519 112 0 +234 -597 0 +-114 423 50 0 +-61 -258 0 +78 256 0 +477 423 402 -438 0 +399 407 -360 310 0 +-422 -175 8 -349 0 +-179 -223 -619 423 0 +33 439 515 386 0 +239 561 8 -550 0 +-376 416 407 -186 0 +-593 109 -263 0 +-301 198 80 74 0 +279 -71 -253 398 0 +-144 172 130 -41 0 +-316 -367 164 242 0 +-278 -408 -92 0 +387 480 104 40 0 +-193 57 0 +288 -626 0 +208 508 249 611 0 +155 300 -43 305 0 +-177 -473 409 0 +206 -1 0 +-189 628 439 569 0 +-216 -92 601 -621 0 +-314 -128 406 127 0 +480 422 -369 545 0 +-230 -635 -72 0 +-110 30 -476 -571 0 +466 318 565 -166 0 +19 -413 -71 439 0 +-492 -468 457 -430 0 +90 421 -46 -550 0 +595 -540 397 -175 0 +-41 431 0 +-463 105 234 349 0 +-462 147 0 +294 373 -564 0 +-193 -165 219 306 0 +150 445 -326 0 +638 614 -120 323 0 +-527 164 0 +-602 -92 533 -278 0 +2 -209 0 +279 -351 80 0 +290 -384 -191 -488 0 +493 -372 227 0 +-129 -538 228 -550 0 +466 -395 0 +-182 -113 20 -417 0 +486 316 112 -51 0 +-168 29 -108 0 +457 -395 -459 0 +-190 176 -353 -536 0 +398 28 -253 93 0 +-346 -559 497 211 0 +-395 453 -260 -454 0 +-200 267 242 -313 0 +292 -568 431 -77 0 +643 436 -139 0 +498 525 529 406 0 +481 519 -243 -462 0 +12 54 -330 17 0 +-557 -39 142 0 +-274 342 -194 -282 0 +-443 -368 0 +390 411 -220 -566 0 +410 201 198 -276 0 +-166 -368 -428 -419 0 +-278 -233 123 -92 0 +410 198 -373 -477 0 +-366 -139 105 0 +58 -568 -122 -295 0 +-192 49 -465 600 0 +-25 402 -79 620 0 +-278 560 0 +-427 -204 -645 211 0 +55 308 361 -39 0 +77 149 306 -52 0 +-398 358 548 -604 0 +304 -243 455 481 0 +-131 -41 172 -441 0 +-87 -289 419 296 0 +211 -365 -204 21 0 +325 158 -223 -553 0 +411 -97 -579 293 0 +641 44 0 +453 228 24 -538 0 +481 -128 -243 -612 0 +90 217 -175 421 0 +-395 -646 -565 8 0 +377 -38 -537 22 0 +-41 -295 -368 0 +-467 -640 -196 -117 0 +-216 187 -39 483 0 +319 -578 -128 0 +-327 -374 498 -199 0 +-192 -617 277 49 0 +103 -426 -533 -38 0 +-528 -489 288 18 0 +-92 -585 -110 0 +406 18 -447 -496 0 +224 -630 -507 -442 0 +498 88 0 +398 555 -253 80 0 +100 37 -129 40 0 +-96 -536 99 560 0 +-297 -564 0 +-552 -177 207 -534 0 +44 433 396 -257 0 +-61 391 514 172 0 +-122 31 390 0 +-464 -139 -175 8 0 +294 15 279 106 0 +210 381 594 -73 0 +-571 -400 381 -509 0 +499 -544 -181 -38 0 +208 -41 617 291 0 +-66 448 -347 -309 0 +290 242 475 47 0 +-353 -408 281 -181 0 +448 84 508 159 0 +-153 202 -578 519 0 +234 98 411 23 0 +-104 -46 410 0 +339 170 -640 0 +-175 549 217 -230 0 +348 304 -586 -462 0 +-467 -117 -510 288 0 +-486 112 -76 496 0 +-287 24 -145 609 0 +566 441 -568 -122 0 +-434 -558 588 -87 0 +523 -129 -289 -109 0 +582 575 -435 16 0 +332 -35 224 -298 0 +-209 134 407 -611 0 +-461 -122 427 512 0 +83 -38 -571 -633 0 +-320 -440 184 -393 0 +440 489 256 -76 0 +572 -320 339 -505 0 +102 -475 342 155 0 +594 -536 381 210 0 +345 -639 0 +-636 455 243 32 0 +-273 142 -364 -336 0 +-27 377 -38 -62 0 +112 314 -128 -530 0 +256 -177 -163 606 0 +-297 551 357 -351 0 +472 -512 431 -506 0 +142 334 232 535 0 +590 -462 -254 519 0 +-322 -196 -348 -478 0 +276 279 -71 0 +570 530 32 -612 0 +-568 162 431 66 0 +-391 431 -568 424 0 +-77 292 306 -111 0 +-451 -53 -534 -177 0 +-107 -558 10 67 0 +-325 -493 -429 205 0 +-513 -194 -22 377 0 +-239 -579 -72 392 0 +172 -249 -122 -3 0 +-281 323 -115 581 0 +214 167 -550 0 +-443 -371 -122 31 0 +-177 -525 -345 -13 0 +560 599 95 233 0 +629 323 0 +-261 7 386 -320 0 +-283 256 -174 -128 0 +-37 40 480 235 0 +560 599 233 -536 0 +214 -178 119 -79 0 +305 -1 -495 -374 0 +-182 -417 554 -113 0 +-474 -595 -46 335 0 +18 375 -462 -403 0 +387 104 24 358 0 +-441 -81 -131 -122 0 +328 -609 453 -175 0 +315 -564 0 +625 -330 172 -311 0 +-161 227 -372 494 0 +-71 158 -223 0 +-568 -587 0 +2 337 -321 469 0 +-567 -545 -485 -101 0 +100 -67 -452 0 +566 441 306 -61 0 +284 -83 332 -557 0 +-96 99 381 -536 0 +-603 -393 498 -383 0 +253 -160 -534 28 0 +234 -125 -156 0 +-462 -29 403 32 0 +560 203 16 544 0 +32 -200 -359 140 0 +489 -473 78 440 0 +135 373 279 -372 0 +-267 -196 -147 -527 0 +-378 -51 0 +-340 639 227 -372 0 +-364 142 -39 0 +-612 78 -254 590 0 +592 -240 -578 340 0 +-128 -300 -146 406 0 +377 -194 -517 -133 0 +334 164 432 -563 0 +-572 412 608 -240 0 +-92 284 -30 0 +-429 -320 0 +-564 137 386 276 0 +-393 489 -640 440 0 +-530 314 455 -128 0 +-369 609 480 0 +272 -184 -75 -13 0 +-527 -91 308 -449 0 +-362 36 411 -579 0 +97 -648 411 306 0 +-321 469 -376 -192 0 +-269 344 -92 575 0 +-293 268 -366 105 0 +227 272 0 +-388 390 -500 -111 0 +239 561 -72 24 0 +-635 -178 480 119 0 +358 548 255 413 0 +88 339 444 447 0 +172 -41 -347 -66 0 +367 -187 -39 290 0 +-579 105 34 0 +279 608 -562 451 0 +93 279 0 +137 279 294 276 0 +346 -192 -81 271 0 +-70 445 -118 258 0 +-361 308 29 -478 0 +619 -574 93 -485 0 +324 453 542 -289 0 +157 -110 364 -384 0 +121 458 0 +-630 560 0 +159 172 -192 84 0 +-175 545 422 -287 0 +63 -236 164 -51 0 +304 170 288 -59 0 +-312 -320 495 -631 0 +-482 323 -251 -115 0 +342 -511 563 -596 0 +-289 237 457 492 0 +-224 62 244 0 +590 -305 481 0 +-594 121 185 154 0 +18 -467 -117 288 0 +-529 -128 -578 -481 0 +-543 75 551 608 0 +-196 570 32 530 0 +-594 16 560 185 0 +256 -312 227 495 0 +-38 -181 531 0 +-400 381 -509 -181 0 +321 347 49 -192 0 +-384 -110 -583 532 0 +-384 476 9 363 0 +397 -354 -421 80 0 +-48 -378 455 355 0 +-194 242 267 -313 0 +614 -92 381 0 +-601 -38 -55 377 0 +164 -247 -9 577 0 +300 455 -640 -43 0 +-131 -441 -122 49 0 +-257 -513 -22 -576 0 +-366 -463 -643 349 0 +-240 -578 -505 572 0 +-398 425 0 +85 150 0 +-648 -506 -166 97 0 +85 -317 541 245 0 +49 -31 465 -122 0 +59 -48 584 455 0 +-216 577 526 0 +227 370 -473 552 0 +-245 -249 -84 0 +466 452 -98 607 0 +342 -626 102 -475 0 +-573 -330 -522 -215 0 +245 448 0 +358 -37 -635 235 0 +-13 -572 -240 412 0 +-330 94 12 -600 0 +-76 622 256 199 0 +-412 -19 294 555 0 +-376 6 407 -394 0 +406 -76 319 586 0 +577 -537 -216 22 0 +536 0 +50 93 0 +-401 -573 -394 6 0 +480 -604 -398 628 0 +151 -429 -409 205 0 +53 -374 -429 0 +-559 521 -591 -506 0 +-450 636 -257 -478 0 +-395 -579 0 +146 -7 -631 88 0 +-73 329 381 0 +53 -127 406 227 0 +-278 190 269 103 0 +154 629 0 +274 11 -576 613 0 +-417 103 544 203 0 +-645 -376 -330 0 +466 -565 -646 -593 0 +-65 24 0 +103 -630 0 +-44 377 -38 -238 0 +300 -462 -43 18 0 +-270 341 -541 -461 0 +214 -540 40 595 0 +-393 5 493 -202 0 +-289 457 -362 36 0 +161 608 -320 0 +-13 608 0 +-405 -64 69 508 0 +-148 12 0 +-122 -430 259 152 0 +-13 50 -74 0 +-216 83 -181 -633 0 +498 5 0 +-116 -177 -15 -372 0 +-151 356 279 386 0 +-76 505 -473 -375 0 +-485 609 -79 -145 0 +-320 116 386 0 +484 169 -79 -485 0 +24 8 0 +-643 -175 -67 -556 0 +-451 -135 -294 0 +50 136 386 -494 0 +-48 -322 -348 288 0 +-612 -275 -102 -76 0 +248 342 644 -194 0 +-597 -392 0 +-92 121 0 +164 644 248 -51 0 +410 229 -287 252 0 +103 -531 610 -535 0 +381 -286 638 -212 0 +-643 -463 349 234 0 +470 178 423 214 0 +-597 -289 0 +-459 234 -72 307 0 +78 174 -350 -612 0 +-67 24 -556 453 0 +445 132 208 -258 0 +-41 172 -521 365 0 +-111 -41 0 +-113 121 638 -182 0 +-111 245 541 -317 0 +-216 -55 -601 377 0 +49 -625 -309 0 +237 343 492 -289 0 +588 385 466 -434 0 +-534 -177 -161 494 0 +103 -544 610 499 0 +-393 592 -320 340 0 +-648 97 457 -430 0 +220 107 234 343 0 +103 269 190 -285 0 +101 555 335 -136 0 +-169 410 425 -46 0 +12 -573 0 +-576 -157 -248 -194 0 +-427 -645 211 -82 0 +-576 11 361 55 0 +-586 348 -76 -196 0 +305 314 -530 155 0 +-494 261 0 +282 342 288 467 0 +-547 636 -48 -450 0 +-384 -55 363 0 +386 -624 299 -240 0 +-200 -605 0 +-648 -368 -166 97 0 +234 -125 419 296 0 +-287 -65 -229 -262 0 +519 622 199 -578 0 +457 565 318 -395 0 +142 -632 -499 -384 0 +323 20 0 +601 610 458 -621 0 +121 -281 581 -115 0 +-535 -571 -216 -531 0 +-82 311 -520 -405 0 +-449 -48 290 -91 0 +18 -393 -370 0 +-429 -312 339 495 0 +214 628 229 252 0 +-467 288 -117 305 0 +439 93 -158 354 0 +-223 -477 423 -373 0 +-48 290 -282 0 +-140 377 -547 0 +-368 521 -591 -41 0 +-216 -185 238 -181 0 +288 519 0 +2 172 0 +-327 -177 -199 -473 0 +431 -295 58 -506 0 +-510 206 173 -374 0 +464 480 40 574 0 +-123 103 298 -38 0 +-38 232 396 0 +-516 279 548 -303 0 +546 -203 554 -417 0 +-353 -181 621 96 0 +-169 410 425 397 0 +-372 -13 0 +636 164 -450 -51 0 +-306 -86 70 0 +513 322 32 -194 0 +-513 -22 11 -576 0 +-223 373 135 -13 0 +214 40 415 -561 0 +-415 410 -46 -569 0 +238 -185 -571 142 0 +-369 239 561 -129 0 +371 -568 -52 -588 0 +124 556 -37 0 +383 -240 386 -357 0 +164 308 0 +427 512 150 -559 0 +-76 -300 -473 -146 0 +-573 407 0 +-52 -231 0 +603 -510 -631 0 +-204 -21 -376 404 0 +-135 -444 227 -372 0 +300 -462 -128 -43 0 +-570 -51 -547 247 0 +-143 -76 0 +-39 575 442 225 0 +-115 -278 0 +-430 317 86 -41 0 +555 423 0 +523 -109 -579 -643 0 +555 -189 569 410 0 +480 -479 -235 628 0 +323 -630 0 +230 -124 34 -593 0 +-30 -647 560 16 0 +-374 -640 603 -170 0 +613 274 -596 641 0 +548 -287 303 -104 0 +-128 590 -254 112 0 +5 639 -340 205 0 +560 -336 507 -331 0 +-111 183 -219 306 0 +170 -59 -626 305 0 +-461 245 0 +168 288 -527 141 0 +-87 -52 0 +91 382 -48 -612 0 +-642 256 116 5 0 +434 -580 -263 452 0 +604 -65 -46 167 0 +-286 638 121 -212 0 +416 -573 -186 -330 0 +-420 -250 638 -353 0 +16 533 -602 560 0 +363 224 0 +47 11 475 342 0 +339 -510 206 173 0 +-129 -565 -289 -646 0 +88 -429 0 +378 -478 308 191 0 +-359 140 -51 290 0 +254 -246 342 288 0 +-223 386 0 +161 -374 -429 283 0 +628 -564 351 -487 0 +5 -473 0 +519 -631 0 +-148 404 -21 -330 0 +386 451 279 -562 0 +-580 -34 0 +16 190 269 560 0 +-348 -527 288 -322 0 +288 141 -478 168 0 +-113 121 -115 -182 0 +-612 -48 -378 355 0 +-438 -71 217 477 0 +-82 211 341 -541 0 +-192 -209 -277 -265 0 +-462 375 519 -403 0 +101 80 358 0 +-216 -384 526 0 +145 335 -201 397 0 +-19 279 386 -412 0 +16 218 -38 0 +-128 -578 -283 -174 0 +10 -34 -263 -188 0 +3 445 -368 468 0 +-253 398 93 -223 0 +-330 338 539 -341 0 +103 -38 238 -185 0 +12 -401 -215 -522 0 +431 -31 465 49 0 +211 -41 0 +367 -576 -547 -187 0 +385 97 0 +466 -593 -296 0 +402 -604 -369 0 +-393 489 440 304 0 +-515 -240 -13 327 0 +-486 -76 496 -196 0 +-605 -644 524 288 0 +619 -574 -71 217 0 +-432 577 -218 -216 0 +646 -484 -65 -72 0 +-146 -300 18 -473 0 +410 229 397 252 0 +94 -82 399 -600 0 +-395 -87 220 107 0 +78 -481 -473 -529 0 +507 16 -278 -331 0 +-430 -501 -52 0 +-122 306 152 259 0 +339 -327 -199 -320 0 +103 195 -222 -417 0 +431 448 391 514 0 +545 217 -550 422 0 +287 25 -549 0 +-194 332 0 +-613 577 142 426 0 +-583 610 532 332 0 +93 425 402 -169 0 +381 -115 647 -4 0 +-350 174 519 -612 0 +-462 -490 359 242 0 +-324 262 -129 -369 0 +377 -613 575 426 0 +-240 294 0 +-429 -631 146 -7 0 +-369 109 8 0 +85 -559 0 +207 -429 205 -552 0 +-473 -393 0 +-542 -579 -125 -501 0 +367 -39 -187 308 0 +-31 245 85 465 0 +-181 224 0 +-71 255 413 480 0 +21 172 407 -365 0 +226 18 0 +466 -34 -188 10 0 +172 431 514 391 0 +164 -140 -225 577 0 +439 628 101 -136 0 +319 586 18 406 0 +-606 160 -177 -534 0 +-61 -388 -568 0 +480 40 484 169 0 +-557 377 -83 575 0 +-380 390 -472 -52 0 +648 -41 -568 -291 0 +-325 88 294 -493 0 +-392 -579 231 343 0 +-110 -432 377 -218 0 +112 -382 0 +-375 339 505 -640 0 +211 -541 341 -204 0 +-175 574 464 -46 0 +67 234 8 -107 0 +-527 342 0 +343 411 0 +508 341 448 -541 0 +345 -223 179 -13 0 +-97 -579 343 293 0 +-427 448 -645 -82 0 +80 -373 -477 555 0 +-63 396 -257 -532 0 +-530 112 78 314 0 +258 -430 -111 -70 0 +-213 -114 608 198 0 +399 6 -394 2 0 +-430 371 411 0 +-238 -44 377 -216 0 +418 -194 -48 -168 0 +356 -151 -223 -534 0 +-263 453 0 +466 -558 0 +364 -576 -38 157 0 +613 308 396 274 0 +-603 -440 0 +-86 -231 343 390 0 +-578 519 440 489 0 +-526 290 577 313 0 +-117 -467 455 304 0 +234 -52 -463 0 +-65 -175 0 +333 -54 448 2 0 +18 -76 0 +-584 32 -471 -200 0 +-65 328 105 -609 0 +-512 -111 -443 472 0 +267 -313 -194 -48 0 +-223 279 0 +-374 199 622 -640 0 +241 -46 -550 0 +-261 279 386 0 +-297 345 0 +-157 11 -248 396 0 +-612 348 0 +-514 -69 -204 211 0 +407 -376 94 -600 0 +93 619 402 -574 0 +-277 -265 -209 508 0 +629 -536 509 -197 0 +-427 49 0 +-434 -166 588 466 0 +-621 575 -571 601 0 +-618 -193 -506 70 0 +85 49 0 +-15 -534 -116 -177 0 +-622 112 -76 -141 0 +164 -488 -384 -191 0 +-76 -146 -300 406 0 +644 -527 308 248 0 +448 291 431 617 0 +377 -110 -238 -44 0 +-131 -61 -441 -461 0 +-509 -400 103 -417 0 +-51 -282 -274 164 0 +78 206 173 -42 0 +304 -530 314 455 0 +-270 245 611 0 +-408 560 281 -571 0 +386 357 439 -351 0 +-443 165 411 0 +457 411 0 +306 -443 0 +-569 80 -415 397 0 +-247 -194 -9 -39 0 +-368 -648 -559 0 +-4 647 -285 -264 0 +-558 385 -414 459 0 +-297 -451 -53 -429 0 +505 -375 -473 18 0 +-492 457 -368 -468 0 +126 458 113 -278 0 +-506 -512 472 -559 0 +577 -547 -232 -47 0 +595 397 -540 -65 0 +466 452 -260 -454 0 +332 -157 -248 308 0 +242 112 102 -475 0 +-553 -223 345 179 0 +-45 -206 -382 -128 0 +575 -544 16 499 0 +-336 -285 0 +-578 519 603 -170 0 +-291 85 -430 648 0 +-532 577 -63 290 0 +-477 548 551 0 +-353 120 638 0 +-354 -421 -287 548 0 +-376 -192 -645 0 +-501 -597 -542 457 0 +519 -283 -473 -174 0 +399 -405 0 +78 173 -473 206 0 +165 156 411 234 0 +-285 -417 0 +288 304 496 0 +-597 453 324 542 0 +-568 -166 0 +392 466 -239 -129 0 +614 -120 629 -264 0 +212 -582 -285 458 0 +198 -425 -356 548 0 +-438 229 46 0 +-125 -368 0 +-216 499 -336 -544 0 +611 172 249 -270 0 +16 96 621 -278 0 +421 90 -175 358 0 +-178 119 402 -79 0 +75 -543 439 -372 0 +-287 402 0 +195 -16 126 0 +-583 396 -38 532 0 +-204 416 337 -186 0 +-510 -592 -590 -374 0 +-564 628 -276 201 0 +185 -278 458 -594 0 +-255 -175 -228 397 0 +-640 -393 -447 0 +108 355 -378 -45 0 +-336 -269 0 +-281 629 20 0 +-313 290 -48 267 0 +-601 224 -55 641 0 +623 518 -285 -264 0 +-47 332 -232 -257 0 +334 -200 367 -187 0 +-147 -267 288 342 0 +-320 -75 608 -184 0 +-414 411 459 -597 0 +512 427 448 -559 0 +-212 -180 -278 -286 0 +103 -531 -535 575 0 +-237 -436 105 234 0 +305 -592 339 0 +645 508 -209 504 0 +439 158 386 325 0 +-630 284 244 400 0 +-630 -38 0 +453 -597 -293 268 0 +-507 -110 -442 -336 0 +37 10 100 -550 0 +-601 -55 -39 -38 0 +50 634 423 -106 0 +-330 -573 469 0 +-81 333 -54 -330 0 +-529 304 -481 -374 0 +474 -33 551 410 0 +444 447 227 -473 0 +272 -320 0 +-92 -353 269 190 0 +95 -120 614 121 0 +-384 -557 142 0 +-173 624 -393 -429 0 +63 -236 -257 -527 0 +-379 -193 -395 -523 0 +332 187 610 483 0 +208 -541 341 -82 0 +-263 156 457 165 0 +288 18 -243 481 0 +-510 -370 275 -374 0 +-98 453 -289 607 0 +398 551 -253 410 0 +245 -270 326 -310 0 +113 -222 0 +425 -169 628 217 0 +476 377 -216 9 0 +577 -216 476 9 0 +508 -209 -394 6 0 +142 -621 601 -181 0 +-240 -340 639 -553 0 +-65 436 105 0 +334 -110 483 187 0 +358 464 24 574 0 +-192 -573 54 17 0 +-293 268 453 234 0 +-362 -579 -125 36 0 +-360 310 -330 -148 0 +551 294 -160 253 0 +364 284 157 641 0 +548 229 252 -287 0 +103 218 284 -126 0 +549 -230 480 40 0 +117 339 305 163 0 +-320 -552 -297 207 0 +385 -368 -428 0 +548 628 0 +101 555 80 -136 0 +-415 -569 423 480 0 +-636 -48 455 243 0 +410 315 -470 555 0 +241 358 -550 0 +331 629 -56 554 0 +-369 452 -607 -90 0 +-430 -428 343 -419 0 +-76 304 0 +-353 531 16 0 +-309 -568 31 -371 0 +24 25 397 0 +-451 608 551 0 +-82 49 600 -465 0 +332 -140 11 -225 0 +28 93 -487 351 0 +227 -473 283 161 0 +625 -311 2 150 0 +89 260 -593 -79 0 +-384 308 0 +-503 221 -124 10 0 +-355 304 1 155 0 +488 610 -344 641 0 +151 -409 294 88 0 +-181 -273 -38 -364 0 +386 50 106 0 +99 -96 381 95 0 +-559 3 -118 468 0 +-127 498 406 53 0 +16 -110 0 +290 -361 242 29 0 +10 349 -463 -289 0 +439 -543 -553 75 0 +157 364 396 284 0 +-117 -467 -462 18 0 +259 152 -568 -309 0 +-292 -559 211 598 0 +540 -79 0 +-209 338 407 -341 0 +363 -537 22 334 0 +-19 198 608 -412 0 +237 492 343 234 0 +-607 -72 -90 -635 0 +589 -234 542 0 +11 -187 367 641 0 +-478 -471 -584 -194 0 +-118 -61 0 +294 551 -299 -74 0 +346 508 208 271 0 +94 0 +78 -350 112 174 0 +-148 -522 -215 -270 0 +-451 -553 498 -53 0 +-631 592 0 +334 641 0 +-578 440 489 -128 0 +-71 358 413 255 0 +-71 423 0 +306 -566 -220 -193 0 +97 -87 -506 -648 0 +-506 58 -559 -295 0 +-540 595 -485 -124 0 +-166 -231 -587 -86 0 +516 -372 -639 50 0 +10 -79 -119 -307 0 +615 227 302 -473 0 +484 169 -485 40 0 +-348 -128 -462 0 +210 594 638 -353 0 +-369 402 464 574 0 +-454 -597 453 -260 0 +406 493 -320 -202 0 +621 -417 96 -630 0 +377 363 0 +34 -175 230 8 0 +85 -430 -497 -502 0 +95 560 581 -281 0 +-86 -231 -587 -87 0 +93 28 -136 101 0 +628 217 -354 -421 0 +-111 317 390 86 0 +103 633 -518 -285 0 +-273 103 284 -364 0 +-232 641 -47 -257 0 +305 -76 0 +-48 511 350 -612 0 +-550 217 235 -37 0 +154 344 363 -269 0 +247 -478 -570 -547 0 +-297 -177 0 +142 -583 532 334 0 +-643 -395 0 +407 321 539 0 +-228 -540 79 0 +103 629 -518 633 0 +-443 -566 -220 411 0 +445 -502 -497 -118 0 +-561 635 422 0 +-81 448 0 +560 212 0 +119 358 -635 -178 0 +379 -506 -58 -166 0 +-485 80 0 +528 455 32 -138 0 +-52 502 -568 -318 0 +435 526 -110 334 0 +224 -269 344 103 0 +-437 -330 245 -132 0 +-37 235 217 -369 0 +50 74 -301 -71 0 +352 556 480 40 0 +-246 288 -527 254 0 +86 317 -309 -587 0 +-148 -271 -446 -270 0 +-145 609 217 -635 0 +519 112 -117 -467 0 +-558 -459 452 307 0 +458 -571 0 +-369 -387 436 -593 0 +377 -133 -517 -257 0 +-633 363 83 154 0 +423 -595 214 -474 0 +381 95 -281 581 0 +358 -46 0 +226 642 -42 519 0 +390 566 441 -61 0 +-427 -401 245 -645 0 +386 205 0 +319 163 473 0 +-129 -597 -109 523 0 +108 47 164 475 0 +321 448 347 407 0 +390 -52 -428 -419 0 +494 498 -553 -161 0 +-92 -216 -126 218 0 +-175 397 545 422 0 +501 411 -162 390 0 +8 -100 -36 -395 0 +-626 -605 -29 403 0 +560 -73 -197 509 0 +545 480 -124 422 0 +290 -384 -532 -63 0 +554 -250 0 +155 -243 481 -640 0 +324 -221 0 +641 610 -244 517 0 +164 -547 0 +-408 281 -630 -417 0 +-144 130 448 -41 0 +225 442 -216 577 0 +-61 388 -81 -456 0 +402 167 -79 604 0 +212 154 -582 121 0 +-384 -194 -532 -63 0 +242 382 -462 91 0 +-98 -129 -597 0 +-558 -366 0 +-525 608 -345 498 0 +-64 -209 -204 69 0 +-38 224 0 +-166 500 414 -118 0 +20 647 -285 0 +214 -369 -229 -262 0 +-395 296 -166 419 0 +-38 -39 -244 517 0 +-122 -461 -625 295 0 +83 -633 -38 -92 0 +-1 -495 304 406 0 +-133 290 -39 -517 0 +74 -564 -301 -567 0 +-620 24 0 +-550 217 -145 609 0 +-48 288 -636 243 0 +-582 212 -278 103 0 +-393 -510 -590 -592 0 +431 -26 0 +600 150 -465 2 0 +-116 -552 0 +397 -79 0 +335 198 -189 569 0 +-393 116 -429 -642 0 +-213 555 -114 -297 0 +-329 -60 121 -73 0 +-114 -372 -213 50 0 +220 -52 -289 107 0 +-413 279 -71 19 0 +448 -514 -69 -82 0 +-485 -255 -228 40 0 +-297 -325 -493 88 0 +31 -568 -371 -122 0 +397 549 -230 -175 0 +445 -219 183 -506 0 +-251 -286 0 +514 391 431 211 0 +515 551 294 33 0 +-311 -82 625 208 0 +53 -127 -177 256 0 +544 458 -285 203 0 +385 454 -263 380 0 +307 -366 105 -459 0 +628 -301 74 439 0 +103 -38 -126 218 0 +491 8 -328 -289 0 +493 5 -202 406 0 +-21 404 539 -192 0 +8 -263 392 -239 0 +-510 489 0 +610 -630 601 -621 0 +101 -136 551 80 0 +103 212 -353 -582 0 +426 -613 396 -38 0 +154 -507 363 -442 0 +551 628 -516 -303 0 +77 -568 343 0 +-181 103 0 +387 104 217 -635 0 +74 -301 279 -71 0 +-19 279 -412 205 0 +-432 575 377 0 +227 -13 -75 -184 0 +130 -144 -61 -81 0 +288 305 490 -226 0 +-473 370 552 -177 0 +-51 290 -168 418 0 +150 625 -311 508 0 +555 -516 0 +-415 -545 -358 0 +-39 22 -537 142 0 +-630 273 -285 482 0 +-64 508 69 -209 0 +-201 145 628 214 0 +-278 -536 614 0 +172 391 -122 514 0 +-437 -148 -330 0 +-318 502 411 -430 0 +-626 236 -527 43 0 +127 304 -314 256 0 +614 95 -120 560 0 +-429 386 0 +-426 224 -533 -630 0 +88 -440 -631 184 0 +-223 -372 -639 516 0 +560 -571 190 269 0 +275 -393 -370 -510 0 +-196 -510 496 -486 0 +495 -631 -312 88 0 +448 -330 0 +-473 199 -76 622 0 +-634 423 480 241 0 +22 -216 -537 -39 0 +302 240 493 0 +455 -355 1 -128 0 +-65 484 169 -287 0 +-81 -144 130 -111 0 +-368 -193 -152 362 0 +463 -263 618 457 0 +-640 486 -626 0 +565 318 385 -558 0 +-152 362 343 -430 0 +136 -494 205 198 0 +-492 -587 457 -468 0 +-181 537 363 0 +-496 -447 339 -510 0 +-263 -72 0 +-499 -632 377 -110 0 +15 106 198 205 0 +-194 -527 0 +-38 -238 -384 -44 0 +-527 288 -316 0 +-478 -547 246 -433 0 +343 -289 -97 293 0 +-464 -139 10 -79 0 +280 587 591 0 +103 224 -442 -507 0 +85 -118 0 +-41 598 172 -292 0 +-418 308 396 632 0 +8 -156 -597 139 0 +402 387 -124 104 0 +-129 10 0 +508 -405 -321 469 0 +-333 -81 -26 -111 0 +403 -48 455 -29 0 +554 -389 222 -285 0 +234 -392 231 -125 0 +-196 -640 590 -254 0 +551 205 -213 -114 0 +343 371 -588 -568 0 +-48 -596 0 +159 -81 84 -270 0 +-367 -316 -527 11 0 +474 -71 -33 -564 0 +-206 112 -128 0 +437 -405 -204 171 0 +-285 20 222 -389 0 +-597 -87 0 +93 -470 439 315 0 +-320 -42 0 +44 -39 433 308 0 +256 642 -128 226 0 +-597 318 565 411 0 +555 335 -158 354 0 +387 104 -79 -485 0 +-626 -640 -489 -528 0 +604 -550 167 -46 0 +78 -626 0 +628 -46 -545 -101 0 +-82 -437 172 0 +-356 439 0 +565 234 411 318 0 +181 -585 533 0 +280 57 -430 343 0 +-391 -506 -559 424 0 +397 -65 609 -145 0 +-505 -631 -429 572 0 +397 -255 -65 -228 0 +-79 -595 -485 0 +406 -374 0 +-462 467 -478 282 0 +150 -122 0 +-327 227 -199 -473 0 +-177 256 -7 146 0 +-64 539 69 407 0 +12 338 -341 -401 0 +50 -567 356 0 +-353 212 -181 -582 0 +-393 586 18 319 0 +610 458 -435 582 0 +455 -605 0 +-571 -460 62 575 0 +205 -562 451 555 0 +279 205 516 -639 0 +498 256 283 161 0 +-232 290 334 -47 0 +-51 133 138 164 0 +-374 615 5 302 0 +279 253 -160 294 0 +18 -393 603 -170 0 +205 137 276 555 0 +-558 -580 434 -593 0 +-571 -533 575 -426 0 +339 -320 624 -173 0 +-376 407 17 54 0 +342 133 138 -257 0 +80 50 0 +-630 531 -614 -278 0 +242 342 0 +49 -598 407 394 0 +306 -193 591 0 +-71 335 0 +-366 -434 588 -125 0 +-462 -275 -102 519 0 +112 316 108 486 0 +298 142 -123 -336 0 +-36 -289 -100 453 0 +-296 538 -597 8 0 +269 190 381 154 0 +439 151 386 0 +260 452 89 -79 0 +-143 78 -578 -615 0 +504 -330 645 -573 0 +-264 -96 99 629 0 +275 -42 519 -370 0 +371 -588 -430 457 0 +-369 -484 0 +108 -200 -511 563 0 +-91 -449 11 -478 0 +-257 187 332 0 +339 -447 305 -496 0 +32 -596 0 +511 -626 350 -527 0 +-614 531 -417 103 0 +-589 -558 -149 385 0 +-491 411 -597 -57 0 +-502 -497 -506 -559 0 +439 354 423 -158 0 +486 316 -605 -626 0 +271 245 346 -270 0 +551 386 -351 357 0 +504 407 399 0 +49 -437 -82 -132 0 +-124 214 104 387 0 +-473 -177 340 592 0 +-13 -177 639 -340 0 +-177 7 -13 -261 0 +-587 -111 0 +-467 288 304 -117 0 +-330 2 0 +50 -13 356 -151 0 +451 -562 198 205 0 +170 -59 -612 18 0 +458 -417 -331 507 0 +202 -153 -374 304 0 +121 -115 -482 -251 0 +-366 324 -72 542 0 +-598 -461 0 +488 -38 -344 377 0 +452 607 -98 -263 0 +-291 -122 648 -430 0 +-313 164 267 242 0 +-382 455 18 -206 0 +-45 -462 0 +140 -359 32 -547 0 +424 -391 -568 -41 0 +326 -310 150 -204 0 +-351 -564 386 357 0 +332 613 274 -596 0 +-412 -223 -13 -19 0 +-564 -619 -179 335 0 +-320 184 -440 -631 0 +231 -392 -193 -289 0 +343 -443 57 280 0 +448 365 -82 0 +-148 -270 -437 0 +439 -372 135 373 0 +-57 -87 -395 0 +423 477 214 -438 0 +-139 -464 10 -124 0 +466 -459 307 -593 0 +88 -7 339 146 0 +-416 131 -81 -330 0 +345 179 -372 -223 0 +233 599 -73 121 0 +-568 -193 -424 616 0 +-100 -36 453 234 0 +334 -547 0 +-401 208 0 +-39 363 0 +-594 -233 0 +-38 -384 526 435 0 +298 -123 16 -38 0 +551 548 315 -470 0 +410 -479 397 -235 0 +-247 -9 -576 308 0 +22 -576 -537 284 0 +-196 304 -355 1 0 +-553 -624 272 299 0 +284 458 -442 -507 0 +583 -181 -195 -38 0 +-278 -181 0 +434 -580 -395 453 0 +346 208 271 407 0 +323 203 0 +-157 577 -248 164 0 +211 617 2 0 +10 484 -550 0 +-289 -129 -307 0 +173 304 206 -393 0 +-340 639 -13 -240 0 +-384 44 433 164 0 +308 -527 471 0 +431 -131 448 -441 0 +407 -204 0 +-433 108 164 246 0 +538 -597 -296 453 0 +-609 8 328 -175 0 +411 -23 390 591 0 +574 464 402 -79 0 +80 555 19 -413 0 +-287 40 0 +-479 548 -235 358 0 +477 335 0 +431 428 144 -368 0 +-124 24 0 +-192 2 0 +413 548 -287 255 0 +466 234 0 +555 562 410 -252 0 +-368 -468 -492 -166 0 +-527 -475 102 288 0 +-355 455 1 -76 0 +139 453 -597 -156 0 +112 170 -59 519 0 +445 -368 183 -219 0 +583 16 284 0 +-413 335 19 198 0 +304 -510 0 +16 -571 0 +-437 49 -132 -330 0 +172 341 -330 0 +-571 218 142 -126 0 +290 449 577 0 +-300 519 -473 -146 0 +628 -373 -477 439 0 +-622 304 455 -141 0 +-521 211 -309 365 0 +-280 26 -368 -41 0 +274 11 613 332 0 +-309 211 -183 -84 0 +12 2 0 +-607 -635 -90 105 0 +-315 -207 28 -13 0 +-51 -257 0 +-330 -394 0 +399 508 469 -321 0 +-309 -591 -368 521 0 +-621 -38 16 601 0 +-75 386 5 -184 0 +381 -509 -92 -400 0 +-320 592 340 339 0 +214 -71 255 413 0 +103 -285 -400 0 +-257 577 0 +-429 -184 0 +-393 -590 -592 18 0 +-74 -553 28 -299 0 +554 -73 0 +-159 14 -148 -82 0 +334 224 0 +-201 -46 548 145 0 +189 50 -13 261 0 +-122 -347 -81 0 +-619 335 397 0 +376 504 -215 0 +114 -564 -71 479 0 +-579 -52 -463 0 +105 -565 -646 -579 0 +317 306 -111 0 +-568 -318 502 343 0 +598 172 -122 0 +305 519 0 +-194 -488 -191 -39 0 +482 273 154 323 0 +-157 -596 -248 641 0 +453 540 -175 -268 0 +33 515 -553 50 0 +227 256 -7 146 0 +397 178 470 410 0 +-366 -125 98 23 0 +-446 -204 337 0 +377 -110 -244 517 0 +-630 224 -400 0 +-255 402 0 +-547 -48 -236 63 0 +-622 -141 -196 304 0 +-534 515 0 +439 -412 -19 -553 0 +-295 -111 -430 58 0 +198 608 -315 -207 0 +50 33 515 -13 0 +266 68 -376 -330 0 +28 -639 516 -13 0 +-122 -131 -441 245 0 +648 -61 -291 -430 0 +423 217 0 +308 -48 -140 0 +-525 5 386 -345 0 +108 133 -200 138 0 +-346 497 85 245 0 +569 -71 -189 439 0 +-356 80 -425 198 0 +-352 301 214 -71 0 +375 155 -403 -510 0 +-285 -180 623 518 0 +-392 463 0 +-289 -129 -239 392 0 +419 -97 -385 0 +33 555 205 515 0 +561 -124 239 452 0 +-52 -86 390 0 +-429 -409 151 -297 0 +24 -561 415 397 0 +-54 448 407 333 0 +629 647 103 0 +-443 -122 648 -291 0 +-128 -314 127 -578 0 +-177 -553 606 0 +-1 519 0 +-576 -9 -194 -247 0 +458 -602 533 -417 0 +458 -417 -408 281 0 +-348 455 -322 32 0 +390 -122 -500 -388 0 +580 -369 -620 8 0 +363 334 442 225 0 +5 -572 412 608 0 +-640 -473 0 +-362 36 -87 -289 0 +-275 112 -102 -128 0 +-42 -631 0 +254 112 -246 -51 0 +507 92 531 0 +-200 -225 -384 -140 0 +602 -637 -264 -353 0 +-384 435 526 -110 0 +-125 -165 0 +521 -41 -591 -568 0 +-567 -564 479 114 0 +54 17 539 -401 0 +-130 -461 -68 -270 0 +-73 -190 560 176 0 +608 373 50 135 0 +58 -122 390 -295 0 +539 645 504 -192 0 +-567 423 0 +397 477 -438 80 0 +276 439 -372 0 +-478 -138 528 -462 0 +-513 -547 -22 377 0 +24 105 -464 -139 0 +-41 172 -84 -183 0 +2 404 -21 337 0 +-584 -605 11 0 +629 60 -585 103 0 +333 -330 245 -54 0 +-249 -309 211 -3 0 +-240 -429 0 +-393 -76 642 226 0 +310 508 0 +-527 378 191 308 0 +305 -128 0 +-82 -148 68 266 0 +267 -313 -194 -478 0 +89 -550 0 +-223 189 -534 261 0 +466 385 23 98 0 +-228 480 -550 -255 0 +5 -327 -199 -374 0 +335 25 -627 397 0 +431 130 211 -144 0 +256 143 304 0 +-336 -233 123 121 0 +-209 508 -186 0 +-486 -76 496 -612 0 +-240 -13 -137 0 +49 -310 -192 326 0 +229 -567 252 -485 0 +-558 -523 -379 -166 0 +288 -510 314 0 +-372 -534 0 +-330 -186 -148 416 0 +-432 -218 284 377 0 +-199 -505 0 +318 -597 457 565 0 +-333 150 -26 -559 0 +-417 -251 20 -482 0 +-231 -618 0 +96 621 103 -417 0 +325 205 158 198 0 +-46 -37 235 -175 0 +-45 -102 -275 78 0 +-540 -550 214 595 0 +-7 227 146 -578 0 +-293 -395 -129 268 0 +385 -58 379 -118 0 +-297 -13 0 +-506 502 -87 0 +-542 -501 -558 385 0 +-278 121 0 +-640 127 339 0 +-506 77 149 -87 0 +386 279 179 345 0 +-583 377 532 -38 0 +589 -289 -221 453 0 +-71 -413 19 -564 0 +-257 164 0 +453 109 -167 -635 0 +-118 -162 501 -166 0 +-506 -380 -472 -87 0 +-436 -597 -237 105 0 +-405 -522 2 -215 0 +-357 -177 -13 383 0 +-297 386 0 +615 406 498 302 0 +440 -42 -128 489 0 +382 91 155 -527 0 +508 337 134 -611 0 +556 352 -175 358 0 +-550 -620 580 8 0 +129 -607 328 0 +357 279 -351 386 0 +63 -236 -547 242 0 +-443 -125 -162 501 0 +-264 -353 56 0 +341 -541 -461 407 0 +332 -232 -47 -596 0 +-567 25 -627 217 0 +-547 -450 636 -478 0 +358 -175 229 0 +407 131 208 -416 0 +258 390 -122 -70 0 +7 5 0 +628 398 -253 -564 0 +-107 -129 67 -597 0 +512 427 -309 448 0 +80 358 25 0 +23 -125 98 234 0 +-587 445 258 -70 0 +134 -611 -82 -148 0 +8 -556 -67 -635 0 +-309 -258 132 49 0 +-330 -215 539 -522 0 +-76 -631 0 +102 -462 -478 -475 0 +243 32 -636 -462 0 +-635 10 0 +214 104 -369 387 0 +-375 505 -76 -578 0 +112 -636 32 243 0 +546 -115 0 +-583 363 334 532 0 +-483 408 224 458 0 +472 -512 -111 306 0 +363 -507 -181 -442 0 +-46 595 -175 -540 0 +608 -429 327 -515 0 +225 -194 396 0 +57 280 -52 306 0 +-568 152 431 259 0 +628 551 -425 -356 0 +-596 -513 332 -22 0 +-38 238 -185 -92 0 +-352 -124 402 0 +-38 -476 396 0 +584 -612 242 59 0 +-297 -429 494 -161 0 +-122 211 0 +508 -204 0 +-161 205 494 88 0 +-320 -327 -199 -631 0 +311 -520 508 337 0 +-289 10 268 -293 0 +2 -82 0 +423 335 0 +-285 482 458 273 0 +458 224 -435 582 0 +-478 -168 -194 418 0 +259 -587 152 -41 0 +-425 -356 423 28 0 +469 -321 -376 -204 0 +358 -262 -229 -635 0 +621 323 -181 0 +641 187 610 483 0 +-111 441 390 566 0 +-215 407 -148 0 +-633 284 83 -630 0 +-388 -500 -587 445 0 +142 -35 -298 334 0 +439 -276 -567 201 0 +507 121 -331 -181 0 +272 116 -578 -642 0 +50 -158 0 +431 -309 0 +-74 205 -299 555 0 +161 339 283 -320 0 +-488 -384 -191 -194 0 +-516 198 -303 80 0 +618 411 463 -366 0 +233 554 599 629 0 +423 -33 474 50 0 +354 -158 198 80 0 +-420 -250 -115 121 0 +-528 -489 -45 519 0 +227 592 340 -473 0 +-241 217 0 +-243 304 481 -196 0 +-438 402 93 477 0 +419 466 296 -193 0 +518 560 623 638 0 +452 -124 328 -609 0 +103 -442 -507 284 0 +551 548 398 -253 0 +60 -585 -630 -417 0 +-122 -591 521 -568 0 +242 378 164 191 0 +625 346 0 +382 -527 91 288 0 +480 252 229 -71 0 +-303 -516 439 -71 0 +-553 515 33 439 0 +-263 491 -129 0 +-218 -384 142 -432 0 +-333 448 431 0 +308 378 191 -48 0 +-643 10 0 +-91 290 -449 108 0 +198 137 294 276 0 +-296 -263 -593 0 +305 112 0 +-77 -443 85 292 0 +-435 582 575 103 0 +-48 108 0 +59 -510 288 0 +-193 371 -588 -506 0 +-506 441 431 0 +346 172 271 -82 0 +-369 352 556 480 0 +358 -635 169 484 0 +-589 -149 457 -597 0 +-568 -193 97 -648 0 +447 -177 -473 444 0 +-598 394 448 -82 0 +-230 549 -369 -485 0 +224 -195 583 103 0 +184 88 205 0 +629 212 458 -582 0 +575 -499 -632 377 0 +501 149 0 +-87 188 -395 -616 0 +2 321 150 347 0 +164 563 108 -511 0 +-200 -433 108 246 0 +32 -449 -91 -194 0 +551 386 -74 -299 0 +323 633 -518 154 0 +-584 -51 -471 -547 0 +-278 -353 0 +77 149 411 306 0 +339 525 529 -320 0 +208 -625 -309 0 +431 49 365 0 +475 -478 308 47 0 +-41 -430 441 566 0 +-635 105 580 -620 0 +-579 491 -328 453 0 +-220 -566 390 343 0 +-111 -3 -461 -249 0 +-491 -166 -558 -57 0 +390 317 -122 86 0 +-270 333 -81 -54 0 +-506 -362 -87 0 +-173 495 0 +-510 -382 -626 -206 0 +268 -293 -289 -129 0 +241 -634 335 358 0 +628 -627 358 25 0 +290 -48 -511 563 0 +205 137 276 279 0 +432 -576 0 +-61 -219 183 -587 0 +598 -309 211 -292 0 +-177 608 0 +487 -549 -567 480 0 +-553 -572 -240 412 0 +-593 392 -239 -263 0 +32 486 -612 316 0 +-215 -82 -522 -405 0 +-289 -579 0 +191 11 342 378 0 +551 93 0 +237 234 457 492 0 +282 467 112 -51 0 +-213 386 -114 551 0 +-351 -223 357 -553 0 +112 -267 -147 -51 0 +349 -366 -463 -72 0 +-516 -564 -303 628 0 +323 -389 95 222 0 +-98 607 466 -593 0 +540 -268 10 -124 0 +324 542 10 -558 0 +198 451 -562 -297 0 +-120 -56 0 +-630 -123 0 +154 -483 408 -110 0 +-263 459 -414 -87 0 +-270 399 0 +-287 -229 -262 -635 0 +645 337 -204 504 0 +-443 -219 0 +-81 -192 -365 21 0 +-374 -429 340 592 0 +480 -479 -567 -235 0 +-368 424 -309 -391 0 +2 17 54 -405 0 +-588 371 -118 -166 0 +-287 -561 -65 415 0 +-593 -79 109 -167 0 +16 -364 284 -273 0 +-576 364 157 284 0 +-193 466 588 -434 0 +-46 24 104 387 0 +-606 205 160 88 0 +-92 -123 575 298 0 +-46 -65 -262 0 +-43 300 288 -640 0 +-118 411 0 +150 172 0 +381 -181 544 203 0 +-557 -83 -38 396 0 +-276 93 201 439 0 +205 279 15 106 0 +54 539 17 -192 0 +-192 172 -365 21 0 +-601 -55 142 577 0 +575 -218 0 +-375 505 -393 304 0 +95 -278 0 +-42 -496 -447 78 0 +-506 306 0 +399 271 -82 0 +-196 -138 32 528 0 +560 531 16 -614 0 +-74 -13 439 0 +610 -435 103 582 0 +18 202 -374 -153 0 +-353 -331 0 +5 -393 370 552 0 +-540 595 -550 217 0 +272 -493 -553 -325 0 +-311 208 625 407 0 +397 -569 -415 335 0 +305 -510 0 +-194 449 377 557 0 +-395 237 457 492 0 +-168 11 418 342 0 +267 164 108 -313 0 +-270 539 338 -341 0 +342 -359 140 -257 0 +-45 288 0 +205 33 551 515 0 +238 -630 224 0 +440 -640 489 406 0 +-110 -384 -83 -557 0 +432 -563 -257 396 0 +-576 426 575 -613 0 +84 208 159 407 0 +-478 -563 11 0 +187 224 -576 483 0 +-372 -75 -184 227 0 +69 -64 399 407 0 +-434 188 0 +-178 119 -369 480 0 +144 -309 -118 0 +-76 -42 0 +31 -41 -371 -368 0 +145 423 -201 -485 0 +8 -79 0 +-21 404 -330 -376 0 +-491 -57 -87 -289 0 +-593 -90 -124 -607 0 +341 -541 508 150 0 +148 338 171 0 +-621 -336 601 -110 0 +551 -19 205 -412 0 +-368 -379 -166 0 +-92 -222 560 195 0 +145 358 40 0 +-240 -473 184 -440 0 +-278 203 103 544 0 +-395 -593 0 +16 62 -460 -216 0 +-542 -501 -395 -87 0 +629 594 210 -264 0 +489 -76 440 -578 0 +43 236 -612 -51 0 +339 5 409 -319 0 +59 -45 584 242 0 +-605 155 524 -644 0 +-264 638 0 +-462 304 -243 481 0 +386 151 -240 -409 0 +-82 508 0 +-299 198 -74 294 0 +10 -65 0 +86 317 -430 85 0 +-372 160 -240 -606 0 +-71 28 0 +-267 -527 288 -147 0 +-34 -72 0 +163 -578 117 519 0 +598 208 -309 -292 0 +519 -578 319 586 0 +271 211 -82 346 0 +-424 -506 -87 616 0 +495 -578 0 +484 214 -124 0 +524 108 -612 -644 0 +1 78 112 0 +-353 103 -509 -400 0 +-587 501 457 -162 0 +279 386 137 276 0 +-336 298 363 -123 0 +-13 5 0 +127 -42 -128 -314 0 +-194 140 0 +224 16 -544 499 0 +315 439 -470 -71 0 +323 638 -60 0 +-554 -638 73 115 -95 536 264 180 -20 0 +-194 -133 -517 -576 0 +-29 -462 403 -48 0 +-559 172 0 +242 282 0 +-374 -42 0 +-35 -298 -110 577 0 +241 -634 214 -567 0 +386 498 299 -624 0 +88 406 0 +-203 -264 560 546 0 +-512 85 -430 472 0 +-593 -349 -79 -422 0 +-596 29 -361 -605 0 +-434 -289 -52 588 0 +618 463 343 -579 0 +104 -124 387 -485 0 +-528 519 -462 -489 0 +299 88 -297 -624 0 +117 586 0 +-485 480 0 +-368 149 -166 77 0 +399 69 -64 2 0 +508 -514 -69 208 0 +243 -636 -612 242 0 +224 -476 30 458 0 +155 -510 153 -524 0 +234 -501 411 0 +-138 528 -48 455 0 +-503 -129 221 -369 0 +154 323 -602 533 0 +-56 331 381 638 0 +580 24 453 0 +-36 -366 -100 -72 0 +450 396 35 -194 0 +388 -111 172 -456 0 +127 -393 -320 0 +575 -123 -571 298 0 +-87 379 0 +-263 538 -296 10 0 +-89 -241 214 -79 0 +-437 150 508 -132 0 +-38 -435 16 582 0 +-635 -255 -228 -287 0 +-273 142 -364 -181 0 +-556 -67 -635 453 0 +16 96 621 560 0 +-597 -565 -646 8 0 +224 396 -499 -632 0 +409 -240 -553 0 +90 397 -65 421 0 +-376 522 -82 0 +402 24 0 +-533 363 -426 -336 0 +500 -587 -52 414 0 +322 290 -51 0 +-401 245 -310 326 0 +381 -181 212 -582 0 +-41 390 0 +-169 425 628 358 0 +63 -596 342 -236 0 +-39 -157 0 +-129 -620 580 -124 0 +-189 50 628 569 0 +284 344 -269 103 0 +448 -645 -427 508 0 +448 -204 249 611 0 +-496 -128 256 -447 0 +49 -330 271 346 0 +66 -587 162 431 0 +-114 -213 555 205 0 +252 229 -567 480 0 +535 575 232 -39 0 +-579 453 -565 -646 0 +-587 457 616 -424 0 +508 211 611 249 0 +-137 -302 205 -320 0 +94 508 -600 -209 0 +-336 629 0 +208 431 295 -625 0 +90 -369 217 421 0 +-435 -181 582 -110 0 +532 396 575 0 +-285 -408 281 16 0 +-82 347 321 448 0 +66 -41 -461 0 +423 201 50 0 +-136 279 0 +94 508 -600 -405 0 +-92 601 -621 575 0 +-161 88 494 -297 0 +126 -285 -630 113 0 +381 -180 0 +373 -297 198 135 0 +577 334 0 +415 -124 -561 402 0 +-605 -527 0 +-162 501 -193 -368 0 +-511 -51 563 164 0 +-92 -273 284 -364 0 +628 398 551 -253 0 +-633 83 -92 284 0 +-461 497 -61 -346 0 +381 -536 -420 -250 0 +433 -576 44 -194 0 +457 23 234 98 0 +-645 -427 -82 172 0 +24 -268 540 105 0 +-375 -510 -374 505 0 +399 508 -186 0 +-278 -285 0 +457 -395 -362 36 0 +-527 -322 155 -348 0 +-48 -246 254 -612 0 +-568 648 -291 -122 0 +-612 -76 375 -403 0 +-1 -76 256 -495 0 +142 -44 -238 -39 0 +455 91 242 382 0 +-38 -632 396 -499 0 +280 390 57 -125 0 +-534 272 -451 -53 0 +80 25 -46 0 +219 -52 -165 306 0 +-526 313 377 290 0 +411 591 -23 -443 0 +-77 292 306 -41 0 +-642 339 116 88 0 +-621 16 -216 601 0 +406 -320 283 161 0 +-108 -342 51 -32 527 605 478 -242 48 0 +-542 -166 -501 -558 0 +498 302 -372 0 +-104 -287 410 0 +-180 -190 -285 176 0 +638 560 581 -281 0 +-200 632 -418 -384 0 +610 499 -630 -544 0 +439 50 0 +-81 -309 0 +16 629 621 96 0 +646 -484 -643 -175 0 +-297 327 88 -515 0 +426 332 284 -613 0 +406 78 0 +339 -592 -590 -640 0 +623 381 518 -73 0 +36 -597 -52 -362 0 +379 -58 411 306 0 +5 -163 339 606 0 +-648 -587 457 97 0 +145 214 -201 93 0 +246 290 -433 108 0 +-510 -524 153 -196 0 +540 -635 -268 -72 0 +466 -392 -87 231 0 +396 -418 -596 632 0 +249 84 0 +96 621 -181 381 0 +214 -545 93 -101 0 +-562 28 -553 451 0 +459 -558 -414 -87 0 +439 315 423 -470 0 +-492 457 306 -468 0 +409 -393 -429 -319 0 +-378 -196 355 -478 0 +-501 385 -542 -263 0 +215 -504 0 +29 290 -361 -48 0 +-564 548 -252 562 0 +466 -289 0 +375 304 -403 -462 0 +123 154 -233 323 0 +37 100 10 -79 0 +-330 271 346 -81 0 +-262 24 -46 0 +16 -400 -353 -509 0 +154 482 381 273 0 +335 480 0 +-622 -141 112 519 0 +577 290 367 -187 0 +335 -574 619 -287 0 +575 458 582 -435 0 +308 -248 -39 0 +-196 -48 530 570 0 +-87 463 -289 618 0 +226 339 642 305 0 +-82 -148 341 0 +629 -594 458 185 0 +-366 343 -491 -57 0 +-188 8 -597 -34 0 +497 -122 172 -346 0 +-368 144 -309 428 0 +121 222 -115 -389 0 +208 -111 0 +-473 305 0 +411 502 390 -318 0 +40 402 0 +-353 190 103 269 0 +32 -168 -547 418 0 +-35 396 284 -298 0 +290 -418 577 632 0 +-320 -505 572 -631 0 +-376 6 -394 -192 0 +517 -244 -110 334 0 +-605 236 43 155 0 +-98 607 -263 10 0 +93 33 439 0 +103 601 -621 224 0 +130 208 -144 -41 0 +245 -401 456 522 0 +-139 -464 -593 -124 0 +-478 141 -462 168 0 +648 -506 -291 431 0 +16 -285 -647 -30 0 +-369 -255 -485 -228 0 +-129 -124 90 0 +-368 -70 258 -41 0 +332 44 433 -257 0 +-153 202 339 305 0 +198 354 335 -158 0 +-597 10 0 +280 306 57 457 0 +-612 -226 -128 490 0 +438 24 503 -287 0 +157 -547 577 0 +356 -223 -553 0 +150 497 -346 -559 0 +227 -578 -603 -383 0 +-395 -366 0 +-596 108 0 +452 -221 589 -395 0 +-226 490 -45 78 0 +343 -491 -597 -57 0 +-109 -289 105 523 0 +-200 -313 267 108 0 +377 290 449 557 0 +-216 458 0 +-72 234 221 0 +121 638 -176 0 +178 -217 241 0 +-61 -568 259 152 0 +-547 377 432 -563 0 +47 -194 0 +-82 456 522 172 0 +629 -264 -281 581 0 +519 -42 -314 127 0 +259 -41 152 -368 0 +-132 -541 0 +577 224 0 +421 -145 0 +-374 302 -320 615 0 +-461 -192 271 346 0 +326 -310 -461 -270 0 +648 445 -291 -587 0 +18 -374 199 622 0 +-491 -263 -87 -57 0 +-543 75 -297 555 0 +450 596 433 0 +-583 641 284 532 0 +-252 439 562 628 0 +40 580 -620 -129 0 +555 569 -189 335 0 +80 -516 -303 551 0 +-376 134 -82 -611 0 +589 -221 -263 10 0 +279 548 474 -33 0 +642 226 -640 -631 0 +16 -331 560 507 0 +508 -270 0 +-499 -632 396 284 0 +-490 102 -455 0 +18 440 489 -473 0 +-573 -341 338 -270 0 +-247 290 -9 377 0 +475 -605 -257 47 0 +-57 -491 -289 457 0 +234 -643 -237 0 +169 217 -175 484 0 +-31 -309 150 465 0 +334 -110 -298 -35 0 +-414 459 -125 -579 0 +-13 -409 272 151 0 +-61 49 -625 295 0 +-29 -478 403 155 0 +452 40 328 0 +256 -481 -529 304 0 +-483 -630 408 610 0 +-188 453 -34 -597 0 +-186 416 -148 -192 0 +-550 -620 105 580 0 +-568 144 428 -41 0 +-65 402 0 +-79 169 402 484 0 +480 -287 0 +498 -553 -444 -135 0 +272 -553 412 0 +-631 -429 440 0 +-536 -56 0 +-218 -110 -432 -39 0 +-116 -320 -15 -297 0 +-601 -39 -55 575 0 +508 337 -394 6 0 +358 421 90 -635 0 +402 -369 -241 -89 0 +502 -118 -87 0 +-578 -177 283 161 0 +171 0 +-465 -81 0 +-372 357 -351 50 0 +8 -156 139 234 0 +531 -630 -285 -614 0 +-374 519 0 +220 107 -193 -289 0 +119 -124 214 -178 0 +493 256 5 0 +105 -119 -307 24 0 +50 516 -13 -639 0 +211 427 512 -559 0 +457 -57 -587 0 +284 -185 458 238 0 +407 -522 0 +150 -456 388 -559 0 +-144 245 130 -111 0 +-473 519 -117 0 +-261 279 -372 0 +-57 -395 -166 0 +238 -610 298 0 +-405 -148 0 +-514 -192 172 -69 0 +646 -593 -79 -484 0 +-287 397 0 +-416 131 -81 -401 0 +629 269 103 190 0 +457 -568 -492 -468 0 +-640 530 -196 0 +-596 -478 0 +-587 162 66 -309 0 +191 -200 0 +484 -635 169 -46 0 +-263 231 -392 -87 0 +-401 437 -573 171 0 +262 -79 -593 -324 0 +-81 -132 -270 -437 0 +-576 641 0 +-465 211 600 2 0 +-488 -191 11 -576 0 +-372 -213 439 -114 0 +-204 -209 310 -360 0 +93 -71 0 +541 -461 -41 -317 0 +-61 390 70 0 +-538 40 228 10 0 +5 606 -393 -163 0 +327 -515 205 5 0 +505 406 304 -375 0 +-368 86 431 317 0 +-530 455 18 314 0 +439 474 -33 628 0 +-267 112 242 -147 0 +-485 421 90 -369 0 +-516 335 -303 551 0 +373 -562 -551 0 +36 -362 343 -289 0 +-417 458 185 0 +-368 445 162 66 0 +-631 340 -320 0 +258 -506 -70 431 0 +-45 -102 -128 -275 0 +466 -593 -67 0 +-200 -557 334 0 +-485 241 423 -634 0 +-194 308 0 +160 498 -606 -372 0 +-64 69 12 -401 0 +-309 31 -118 -371 0 +284 187 377 0 +-115 -286 -212 381 0 +518 623 -353 -264 0 +426 -613 610 332 0 +43 112 32 236 0 +-320 -444 0 +-597 538 -72 -296 0 +520 399 0 +-225 396 -257 -140 0 +-113 560 -182 -536 0 +-45 -478 0 +526 377 -547 0 +508 -645 211 -427 0 +-512 -368 472 445 0 +-490 359 112 108 0 +49 391 514 -41 0 +370 406 0 +409 -578 -319 -240 0 +551 -297 136 -494 0 +646 40 -484 8 0 +208 -131 -441 -309 0 +328 453 -395 0 +103 126 113 -417 0 +-216 -218 -432 -384 0 +-192 -611 539 134 0 +11 -449 -91 -527 0 +310 -360 407 -376 0 +-61 -122 0 +-626 -48 0 +-372 213 312 498 0 +279 357 -351 294 0 +155 342 236 43 0 +-48 418 290 -168 0 +304 256 -283 0 +-222 -285 458 195 0 +608 -444 5 -135 0 +49 431 -3 -249 0 +-207 -315 555 -297 0 +-512 -122 -443 472 0 +622 -640 -393 199 0 +408 -483 -571 -38 0 +70 -618 -166 -587 0 +-51 288 0 +385 -468 -492 -118 0 +-177 53 -127 -42 0 +-58 -568 379 457 0 +-483 224 408 16 0 +-46 -175 -145 609 0 +-587 -125 0 +-482 -536 -278 -251 0 +28 179 345 -13 0 +-159 -209 14 508 0 +-48 -462 511 350 0 +35 450 -257 396 0 +583 284 -630 -195 0 +431 31 -368 -371 0 +-175 397 -89 -241 0 +-395 8 -239 392 0 +-81 -441 -131 -111 0 +639 -340 -534 227 0 +420 -571 629 460 0 +308 -157 -248 -576 0 +-79 480 0 +-553 498 -15 0 +-61 130 -144 49 0 +211 448 0 +387 480 104 -635 0 +-207 28 -534 -315 0 +-470 423 -223 315 0 +-244 517 610 396 0 +458 203 544 -417 0 +-384 55 361 -194 0 +338 -341 2 -405 0 +-195 -630 610 583 0 +-612 -76 -43 300 0 +-159 -573 14 -330 0 +142 334 -537 22 0 +-135 -177 -444 -534 0 +-367 32 -200 -316 0 +560 381 0 +-547 471 27 577 0 +-61 -333 -26 -81 0 +638 -281 581 381 0 +152 -41 306 259 0 +227 624 -578 0 +-36 -643 -100 -579 0 +394 49 -82 -598 0 +-583 575 0 +-387 -369 10 436 0 +-73 560 -182 -113 0 +-387 8 436 -369 0 +542 324 -579 -643 0 +-558 10 -260 -454 0 +83 344 -142 0 +137 276 28 -13 0 +-490 -612 32 359 0 +-430 500 457 0 +-579 -98 453 607 0 +228 540 0 +214 -71 145 0 +-528 -626 -489 305 0 +608 -493 -325 498 0 +646 -175 -484 453 0 +-53 -444 0 +628 358 229 252 0 +253 -372 -223 -160 0 +335 358 255 413 0 +-401 12 -186 416 0 +-223 -534 -543 75 0 +308 -140 -225 332 0 +583 142 -571 -195 0 +88 151 -409 -297 0 +-643 580 -579 0 +-285 554 176 -190 0 +134 -82 399 -611 0 +385 -616 466 188 0 +-148 -270 266 68 0 +-259 49 -61 -326 0 +-374 18 -592 -590 0 +-461 -309 0 +439 423 562 -252 0 +-336 -582 323 212 0 +618 466 463 385 0 +431 -122 0 +-510 -153 202 -393 0 +-204 -54 150 333 0 +35 -194 377 450 0 +-282 -51 -612 0 +-573 -209 0 +-625 150 445 295 0 +-42 -128 319 0 +-598 208 394 -204 0 +-219 -118 -309 183 0 +-124 -229 214 -262 0 +466 -193 -392 231 0 +644 -527 248 -596 0 +-206 -462 -382 304 0 +407 -64 69 -148 0 +256 586 304 319 0 +561 452 239 -369 0 +154 -38 0 +412 272 -13 0 +-413 19 335 551 0 +-122 -625 295 245 0 +-289 434 8 -580 0 +-132 508 -437 448 0 +465 211 445 -31 0 +538 -296 -263 -129 0 +248 -51 644 290 0 +-604 628 358 -398 0 +458 -233 629 123 0 +-71 480 -101 -545 0 +-41 -506 0 +108 -200 248 644 0 +40 556 214 352 0 +120 -73 -353 0 +-568 428 144 -61 0 +-22 641 -596 -513 0 +431 -587 -295 58 0 +-182 -115 381 -113 0 +-576 284 -298 -35 0 +299 -624 498 608 0 +150 -111 0 +428 144 -61 -587 0 +-130 407 -68 49 0 +-153 18 202 -393 0 +433 308 332 44 0 +343 -618 70 -568 0 +-176 0 +-499 -632 396 610 0 +-270 -82 0 +168 -462 -48 141 0 +-307 -8 260 0 +-111 245 183 0 +18 -143 -473 -615 0 +-110 -576 0 +121 509 638 -197 0 +11 -547 0 +-119 -307 -635 105 0 +396 641 0 +262 -324 -129 -550 0 +63 308 0 +-417 554 99 -96 0 +457 -542 -289 -501 0 +49 407 326 -310 0 +-481 -529 -42 78 0 +-588 -506 371 -166 0 +32 112 467 282 0 +340 592 -473 -240 0 +306 -52 616 -424 0 +-189 569 198 410 0 +256 -320 0 +171 -330 437 539 0 +-430 343 -648 97 0 +-200 -384 -247 -9 0 +-534 294 0 +288 455 0 +397 40 0 +85 390 -497 -502 0 +-497 431 448 0 +-405 539 0 +-462 530 242 570 0 +-571 -353 507 0 +127 -76 -578 -314 0 +-107 453 -395 67 0 +-71 439 479 114 0 +439 261 -553 189 0 +154 363 62 -460 0 +-537 22 224 641 0 +-525 5 294 -345 0 +629 99 -96 554 0 +-626 -640 -622 -141 0 +460 103 420 -417 0 +50 -412 608 -19 0 +-23 343 591 -443 0 +-622 288 18 -141 0 +2 337 -600 94 0 +400 142 244 -336 0 +-344 -39 -38 488 0 +-116 -15 227 -534 0 +-384 363 -218 -432 0 +-536 -281 581 381 0 +272 -374 0 +26 -443 -280 -111 0 +-568 -162 501 -193 0 +335 -564 -562 0 +-645 -427 208 -82 0 +-61 208 291 617 0 +251 560 95 0 +16 499 -216 -544 0 +-117 -196 -467 -76 0 +284 442 225 641 0 +-571 -92 0 +-368 411 0 +470 358 178 -71 0 +-502 -568 431 -497 0 +-640 -275 -102 288 0 +-196 519 0 +-564 373 -553 135 0 +338 -341 508 -209 0 +514 -461 -41 391 0 +-345 205 555 0 +388 211 431 -456 0 +-365 21 -270 -461 0 +-612 590 -254 18 0 +11 -532 396 -63 0 +-51 -547 140 -359 0 +103 583 -195 610 0 +396 -344 284 488 0 +-372 -429 0 +-129 -550 -139 -464 0 +-449 -91 -605 11 0 +-196 32 282 467 0 +88 386 0 +-573 -215 -522 -270 0 +-276 628 439 201 0 +-372 -451 5 -53 0 +76 143 153 0 +-405 337 0 +308 332 -22 -513 0 +343 502 390 -318 0 +34 -79 230 -593 0 +-473 339 0 +-13 272 -261 7 0 +-565 523 263 0 +-588 371 -368 -193 0 +335 439 0 +-81 -249 -3 -61 0 +187 363 334 483 0 +613 308 377 274 0 +244 284 400 16 0 +-125 -52 0 +133 138 -478 -194 0 +304 406 163 117 0 +-563 -576 -547 0 +455 -267 -478 -147 0 +-230 549 214 -369 0 +412 -553 -572 498 0 +399 2 -311 0 +-547 -596 0 +-584 -471 290 -51 0 +563 -200 -511 -51 0 +423 80 0 +300 -128 455 -43 0 +-462 -196 0 +-192 611 49 249 0 +-72 -580 0 +-640 -615 -143 -393 0 +-556 -67 105 -65 0 +-405 -310 -204 0 +-395 -52 107 220 0 +448 -311 -82 0 +232 610 396 535 0 +343 -616 188 -597 0 +416 -82 -186 399 0 +464 574 480 -550 0 +-597 492 237 343 0 +-576 308 -488 -191 0 +305 -42 0 +-92 -633 -216 83 0 +-211 -326 -131 0 +-356 410 551 -425 0 +60 -585 103 -278 0 +339 88 -529 0 +105 -107 -366 67 0 +31 -371 -61 -587 0 +-45 242 -348 0 +447 444 256 -240 0 +333 150 -54 508 0 +-393 -312 5 495 0 +641 284 426 -613 0 +-216 400 244 -571 0 +-593 -558 139 -156 0 +-392 -166 -395 231 0 +-87 492 -289 237 0 +20 -212 -285 -286 0 +-403 112 -128 375 0 +337 -522 -215 508 0 +342 47 475 308 0 +126 458 575 0 +399 469 -82 -321 0 +8 453 0 +458 -285 -614 531 0 +586 -393 319 -510 0 +-119 -593 -307 -79 0 +-607 105 -90 -175 0 +24 -349 -643 -422 0 +155 -640 300 -43 0 +305 622 -374 199 0 +-175 580 8 -620 0 +-522 -209 -215 -82 0 +234 607 -98 8 0 +-52 -193 0 +-536 638 0 +-240 -393 552 370 0 +-75 -184 -297 -320 0 +-220 -568 -52 -566 0 +-89 -241 -635 358 0 +85 211 0 +411 -579 618 463 0 +-384 332 0 +400 -460 0 +-491 -579 343 -57 0 +363 577 -35 -298 0 +123 -233 -285 458 0 +-478 -138 528 455 0 +-81 -122 -333 -26 0 +-45 481 78 -243 0 +-530 519 314 112 0 +-277 -376 -82 -265 0 +-9 396 0 +10 230 34 -369 0 +49 -192 271 346 0 +169 -287 -635 484 0 +-171 -148 0 +-640 481 -631 0 +-481 -529 -128 -473 0 +40 -369 0 +600 -465 508 150 0 +-635 438 217 503 0 +-395 -463 349 452 0 +242 563 -511 -547 0 +555 -114 294 -213 0 +-104 423 -485 303 0 +392 234 -239 -643 0 +150 -41 0 +335 -301 74 551 0 +-384 -547 -63 -532 0 +-150 130 617 0 +-111 3 468 390 0 +-374 -640 642 226 0 +-613 426 377 284 0 +-102 -462 -76 -275 0 +237 -263 457 492 0 +-200 -547 0 +-602 381 0 +260 89 -124 10 0 +102 108 -475 -612 0 +-287 358 0 +-478 47 475 -547 0 +409 -429 339 -319 0 +502 -430 -318 -52 0 +-547 -418 632 -576 0 +-499 363 0 +399 -82 310 -360 0 +-110 577 517 -244 0 +-118 -231 -86 -87 0 +448 321 508 347 0 +234 -260 -454 453 0 +-168 418 342 -257 0 +-430 57 -125 280 0 +103 -535 -531 284 0 +-384 450 35 -200 0 +445 468 3 -118 0 +-219 -568 183 -61 0 +304 -622 -462 -141 0 +55 -194 -39 361 0 +431 -568 317 86 0 +256 489 519 440 0 +172 -204 0 +-177 5 0 +447 -473 444 272 0 +332 -157 11 -248 0 +-329 20 -417 -60 0 +306 501 -162 411 0 +-118 -368 0 +642 -510 226 -631 0 +464 24 -643 0 +439 276 -553 137 0 +139 -156 105 234 0 +-419 385 0 +-535 224 16 -531 0 +234 343 -379 -523 0 +524 -76 112 0 +-13 -553 0 +370 339 -429 552 0 +5 -127 -393 53 0 +554 -417 -120 614 0 +171 437 2 337 0 +348 -586 112 -76 0 +-379 -523 -52 -395 0 +105 -635 109 -167 0 +-528 288 304 -489 0 +164 -39 0 +18 -489 -528 -612 0 +636 -527 11 -450 0 +-354 -287 80 -421 0 +448 617 2 0 +-320 -177 0 +-443 -648 411 97 0 +540 453 -268 40 0 +-111 391 0 +-646 10 0 +-76 163 117 -393 0 +-181 507 560 -331 0 +262 40 -129 -324 0 +346 2 271 150 0 +311 -520 -209 -82 0 +-133 -39 -517 308 0 +253 -372 -160 50 0 +-46 -540 595 -635 0 +399 437 171 508 0 +636 -450 32 -194 0 +-573 14 -270 -159 0 +-430 431 0 +383 -184 0 +-401 -461 625 -311 0 +49 -330 -416 131 0 +245 -559 0 +-583 532 -216 377 0 +-587 -502 -497 -41 0 +385 466 165 156 0 +-413 279 335 19 0 +-71 214 -425 0 +548 -415 -46 0 +426 -537 0 +211 -82 625 -311 0 +-286 -212 -353 638 0 +-368 -87 -380 -472 0 +-353 -518 633 -181 0 +407 -54 333 49 0 +546 -536 -278 -203 0 +-48 -51 0 +628 470 0 +-576 -601 575 -55 0 +11 -47 -232 641 0 +96 560 -92 621 0 +-270 172 394 -598 0 +335 -223 0 +591 343 -23 390 0 +-68 -130 -401 -461 0 +560 273 16 0 +-564 189 261 386 0 +396 -38 526 435 0 +508 -573 0 +-111 -591 521 -430 0 +-180 -285 614 -120 0 +248 644 -596 342 0 +-194 290 0 +294 158 325 279 0 +31 -61 390 0 +-359 140 -527 308 0 +242 -29 403 -462 0 +-366 105 -463 349 0 +498 256 -505 572 0 +509 -197 560 -264 0 +-212 -286 381 95 0 +-522 539 -270 -215 0 +604 167 402 -124 0 +385 -597 0 +483 641 224 187 0 +-467 -117 304 -462 0 +479 93 114 439 0 +552 -393 370 -320 0 +-596 -194 0 +109 -167 40 452 0 +-92 195 575 0 +259 -568 152 -41 0 +615 339 302 -429 0 +-147 112 -267 108 0 +-366 -193 0 +-393 -240 -615 0 +-434 457 -289 588 0 +28 -372 0 +-147 -48 -267 -196 0 +638 331 121 -56 0 +91 -51 0 +615 302 -631 -429 0 +-68 277 -2 0 +308 313 32 0 +-200 644 242 248 0 +358 -550 -540 595 0 +410 -201 397 145 0 +358 -37 235 -175 0 +9 -257 377 0 +66 -111 -443 162 0 +-408 281 -571 381 0 +-595 214 -79 0 +-137 -302 88 205 0 +340 -42 592 272 0 +-571 381 -331 507 0 +-75 386 -320 -184 0 +-374 615 302 -429 0 +212 -582 103 -417 0 +-564 398 -253 548 0 +-314 256 -76 127 0 +99 -264 -96 560 0 +402 80 0 +-289 -366 0 +305 304 0 +-462 348 -586 18 0 +-464 -65 0 +-43 300 -45 78 0 +-48 -462 -348 -322 0 +245 132 -258 -111 0 +32 -282 290 0 +16 121 0 +-202 498 -393 493 0 +-247 -547 -9 -384 0 +26 -118 445 -280 0 +255 397 413 410 0 +-309 448 132 -258 0 +537 585 103 -38 0 +205 312 88 213 0 +569 -567 -189 28 0 +-239 392 452 466 0 +-257 -576 -157 -248 0 +476 -39 9 -110 0 +16 -602 -278 533 0 +589 -72 -597 -221 0 +10 -556 -67 40 0 +10 561 239 40 0 +185 -594 -285 16 0 +288 143 304 147 0 +343 -568 380 0 +154 -30 381 -647 0 +331 -56 -73 381 0 +452 -239 -263 392 0 +325 -553 28 158 0 +325 555 294 158 0 +306 -61 428 144 0 +-587 445 26 0 +-89 214 -241 40 0 +581 -281 -115 381 0 +457 188 -616 -289 0 +-146 -640 406 -300 0 +188 -52 -616 -395 0 +258 431 -368 -70 0 +501 -162 411 -443 0 +408 154 -483 142 0 +-368 -566 -220 -87 0 +425 -169 -71 -485 0 +-584 -48 -471 -547 0 +-309 -317 448 541 0 +-192 -69 -514 49 0 +-571 -518 -353 633 0 +-299 294 -74 555 0 +32 342 0 +-374 -146 -300 -510 0 +-122 245 183 0 +-350 -626 174 -510 0 +-194 377 27 471 0 +628 397 0 +50 -74 -299 -553 0 +119 358 40 -178 0 +498 272 0 +44 -194 -39 433 0 +-613 384 22 0 +284 -426 103 -533 0 +-567 358 0 +-177 -578 606 -163 0 +-585 60 323 -336 0 +130 172 -61 -144 0 +484 480 -550 169 0 +-468 -506 -87 -492 0 +139 -156 -395 -129 0 +-320 -7 -374 146 0 +385 -558 -491 -57 0 +-564 -567 543 627 0 +-585 -571 -353 60 0 +258 -70 -559 -368 0 +93 634 439 -106 0 +-61 521 -587 0 +-604 -214 -169 0 +-559 211 130 0 +-366 105 -296 538 0 +-42 406 0 +132 -559 -258 150 0 +119 8 40 0 +355 -462 -378 32 0 +445 -568 0 +262 24 -643 -324 0 +439 515 33 -13 0 +234 452 0 +-270 311 -520 -573 0 +277 -204 -617 208 0 +445 -625 295 211 0 +-514 -465 0 +-70 258 -41 -568 0 +-626 59 -527 0 +-168 -257 418 -527 0 +539 311 -520 407 0 +303 410 0 +-111 445 0 +309 -295 -497 0 +531 -614 16 -285 0 +-257 290 0 +539 14 407 -159 0 +24 -89 -287 -241 0 +332 -596 -9 -247 0 +18 642 256 0 +205 -297 0 +-430 -559 0 +410 217 0 +-313 -48 -257 267 0 +446 399 0 +-153 406 202 -128 0 +616 -430 -52 -424 0 +-604 480 -398 -71 0 +466 -260 -454 -593 0 +-587 379 -58 -166 0 +-612 242 -29 403 0 +-547 -488 -191 -576 0 +629 -278 0 +-536 -113 381 -182 0 +-71 229 252 358 0 +-252 -46 628 0 +205 88 -515 327 0 +-510 155 348 -586 0 +-520 311 -573 -330 0 +-204 611 249 211 0 +-640 -128 0 +242 164 248 644 0 +-109 234 523 8 0 +575 -601 377 -55 0 +-640 155 486 0 +339 18 0 +-221 -395 589 8 0 +190 -518 0 +628 -356 -564 -425 0 +486 242 -612 316 0 +-144 130 -41 -461 0 +609 -145 -65 -287 0 +-635 -485 0 +416 -186 -573 -192 0 +-635 105 230 34 0 +-588 -368 371 385 0 +613 577 274 164 0 +509 -417 458 0 +-37 214 -79 235 0 +195 381 -181 -222 0 +448 150 0 +540 -268 8 -175 0 +-19 50 -553 -412 0 +613 -384 0 +150 365 -559 -521 0 +-333 -26 245 85 0 +135 386 -564 373 0 +-372 -19 439 -412 0 +255 628 413 214 0 +24 503 105 0 +609 -550 -145 358 0 +-417 -73 0 +-611 -204 134 -209 0 +-133 -517 396 -596 0 +-289 343 -414 0 +441 566 -111 -443 0 +516 294 551 -639 0 +303 423 402 -104 0 +625 -81 -311 -192 0 +-61 -81 -346 497 0 +-395 -188 -34 10 0 +488 142 334 0 +-379 234 -523 -52 0 +515 198 608 33 0 +-547 -168 418 -51 0 +342 288 511 350 0 +-116 -15 -13 -240 0 +-166 466 -392 231 0 +142 -336 585 537 0 +252 477 0 +-51 -29 -612 403 0 +-429 151 -409 294 0 +325 28 158 -13 0 +137 276 551 205 0 +-605 -348 -322 155 0 +-482 -251 -264 -285 0 +-268 540 -124 452 0 +177 -312 624 0 +227 572 -505 256 0 +162 -430 0 +-223 101 -136 -71 0 +-168 -45 242 0 +-320 151 -409 294 0 +-497 -587 -502 445 0 +503 438 214 -79 0 +457 -616 188 -597 0 +50 551 0 +445 -259 0 +10 -395 139 -156 0 +525 -374 498 529 0 +32 -547 -570 247 0 +-358 -214 485 46 -397 -217 -402 -480 287 0 +-544 -571 499 -216 0 +-128 -382 455 -206 0 +-366 237 0 +548 358 -474 -595 0 +-51 254 -246 -45 0 +11 -511 -605 563 0 +498 -451 386 -53 0 +49 -270 0 +423 627 543 28 0 +-25 -124 620 402 0 +-375 505 -76 406 0 +16 -181 0 +554 560 0 +-223 -33 423 474 0 +491 452 466 -328 0 +67 -395 -107 8 0 +-41 -61 0 +-278 -180 594 0 +-297 33 515 555 0 +-499 -632 -216 -384 0 +105 -293 234 268 0 +232 535 -110 -39 0 +-547 -384 44 433 0 +-527 -257 -274 -282 0 +-587 -57 -52 0 +-444 -135 -372 -177 0 +-188 452 -34 -558 0 +-460 284 103 62 0 +-346 -204 208 0 +-635 556 352 -287 0 +93 470 402 178 0 +448 -192 0 +-631 -447 -320 0 +187 483 -576 -216 0 +359 155 -490 342 0 +-369 503 -485 438 0 +454 -193 380 466 0 +-603 498 -374 -383 0 +583 -38 -92 -195 0 +296 419 -52 234 0 +483 -39 187 575 0 +634 80 198 -106 0 +358 80 470 178 0 +466 -263 0 +-179 551 -619 548 0 +-81 -617 277 -270 0 +-368 500 -166 414 0 +80 -354 358 -421 0 +-403 288 305 375 0 +-481 -529 304 406 0 +-45 242 -490 359 0 +85 -391 390 0 +-371 31 -368 -309 0 +68 -277 0 +10 -580 434 -395 0 +351 -487 -71 279 0 +-185 224 458 238 0 +-616 188 457 -263 0 +-57 -491 -52 -579 0 +-485 413 423 255 0 +-633 575 16 83 0 +-430 -122 183 -219 0 +20 546 -417 -203 0 +60 560 -336 -585 0 +644 -257 342 248 0 +-622 455 -76 -141 0 +548 634 -106 551 0 +474 555 -33 80 0 +-441 -41 -131 49 0 +-570 -605 247 11 0 +600 -69 270 0 +-209 266 407 68 0 +480 -567 619 -574 0 +174 -510 -350 155 0 +-264 594 210 -285 0 +-478 248 -194 644 0 +519 -640 0 +-644 -478 524 288 0 +-72 -175 -324 0 +-114 -213 294 279 0 +179 -223 345 -534 0 +551 28 0 +-192 -148 -520 311 0 +-568 343 -152 362 0 +-490 -478 359 -462 0 +-593 -579 0 +-564 -303 -71 -516 0 +326 -310 448 407 0 +-26 -333 -41 172 0 +20 121 0 +-197 509 -353 -73 0 +572 -505 -578 -177 0 +20 509 -353 -197 0 +-559 -506 -280 26 0 +-591 521 -122 -430 0 +217 335 619 -574 0 +-27 -39 -62 -38 0 +-294 372 -205 13 -386 534 -608 553 297 0 +377 -257 313 -526 0 +24 -129 0 +-175 235 -37 217 0 +356 -151 28 -534 0 +594 -73 210 121 0 +-524 519 -612 153 0 +16 458 0 +-264 -278 518 623 0 +-192 321 347 -81 0 +227 213 312 -534 0 +-564 -372 261 189 0 +10 -558 -34 -188 0 +-369 -540 480 595 0 +560 185 -92 -594 0 +304 -196 -489 -528 0 +629 -571 -212 0 +279 -301 335 74 0 +178 214 -71 470 0 +425 -567 0 +-223 101 -136 -567 0 +-556 8 40 -67 0 +431 172 -456 388 0 +386 -240 -135 -444 0 +305 -631 440 489 0 +634 -470 -628 0 +329 0 +-571 460 420 -353 0 +-374 -590 304 -592 0 +-632 396 -499 575 0 +480 -230 -369 549 0 +275 18 0 +-166 588 -434 -263 0 +504 645 399 -82 0 +-220 -566 -430 343 0 +121 -571 -233 123 0 +-587 -309 424 -391 0 +-320 386 -493 -325 0 +5 370 552 339 0 +304 406 -226 0 +-320 -53 0 +-193 502 -318 -506 0 +-143 -615 -393 304 0 +-199 498 -393 -327 0 +-356 80 -425 279 0 +-156 139 -72 -597 0 +282 467 -196 -478 0 +457 -501 -430 0 +-221 -129 466 589 0 +-257 361 55 377 0 +358 24 -229 -262 0 +112 524 -51 -644 0 +121 629 0 +217 214 0 +-98 -263 -193 0 +-564 -303 548 -516 0 +365 85 -81 -521 0 +-349 24 105 -422 0 +608 189 551 0 +314 304 -374 0 +301 410 -352 -287 0 +24 109 -72 -167 0 +420 460 381 -336 0 +78 -42 603 -170 0 +316 570 0 +589 466 452 -221 0 +436 -387 8 40 0 +554 -56 331 -278 0 +-216 22 -537 377 0 +-635 421 90 -46 0 +598 461 -347 0 +381 126 113 -336 0 +601 -621 284 -630 0 +386 516 439 -639 0 +-263 -328 8 491 0 +331 -73 121 -56 0 +-48 -194 -282 -274 0 +-428 -419 -125 -443 0 +-180 638 0 +523 -109 -597 105 0 +-251 323 638 -482 0 +88 283 161 -374 0 +131 -416 -330 172 0 +199 -393 304 622 0 +121 323 0 +-366 105 -100 -36 0 +208 150 0 +15 551 106 205 0 +647 -285 -4 -180 0 +-317 541 245 -122 0 +308 242 0 +-56 95 331 323 0 +-505 572 -374 88 0 +-128 -592 -590 -42 0 +-260 452 -395 -454 0 +444 447 -631 -429 0 +358 301 -352 628 0 +541 -81 -61 0 +391 514 -309 49 0 +-372 205 0 +592 5 340 -374 0 +49 -330 277 -617 0 +-336 60 -585 121 0 +518 -264 623 629 0 +521 -591 85 -443 0 +70 -618 -587 457 0 +88 205 7 -261 0 +-251 -482 20 -278 0 +575 284 0 +-395 -125 0 +112 316 486 32 0 +-523 234 -379 411 0 +617 -122 -81 291 0 +431 211 -258 132 0 +486 155 -478 316 0 +333 -81 -192 -54 0 +-409 5 151 294 0 +227 -393 0 +-13 -75 -184 -177 0 +284 -92 244 400 0 +-535 16 575 -531 0 +482 -417 273 -630 0 +407 -401 0 +49 -82 346 271 0 +-630 -417 507 -331 0 +-249 445 150 -3 0 +105 -129 0 +460 420 103 629 0 +357 50 -553 -351 0 +347 172 -270 321 0 +-556 37 0 +-314 -640 0 +95 -115 0 +150 -559 -183 -84 0 +516 -639 551 205 0 +-393 498 642 0 +610 -571 0 +140 -605 -596 -359 0 +623 518 20 629 0 +557 449 -257 332 0 +227 -340 386 639 0 +-380 -443 411 -472 0 +40 10 -503 221 0 +-278 458 -582 212 0 +514 81 465 0 +483 -576 187 575 0 +337 -204 338 -341 0 +-61 388 172 -456 0 +214 -101 -545 423 0 +-473 -163 0 +-240 -302 0 +49 -122 -258 132 0 +318 565 -597 -193 0 +334 290 -133 -517 0 +217 -415 -71 -569 0 +-409 272 151 -534 0 +-273 -571 0 +560 460 16 420 0 +-236 11 63 -605 0 +-594 -353 -181 185 0 +308 377 -488 -191 0 +-192 338 539 0 +-533 103 -426 575 0 +123 -571 -233 560 0 +-564 179 345 -372 0 +-257 -274 -48 -282 0 +-163 -631 606 -429 0 +415 -561 217 -550 0 +243 -527 155 -636 0 +306 -165 411 219 0 +364 284 332 157 0 +-392 231 -579 411 0 +-191 -51 290 0 +-267 -478 -196 -147 0 +266 407 68 -376 0 +90 421 -485 -124 0 +284 -244 517 -576 0 +282 467 -51 -45 0 +410 479 198 114 0 +-384 -218 -110 -432 0 +-430 -61 -391 424 0 +44 577 433 164 0 +-48 138 133 -547 0 +-567 -564 -276 201 0 +-180 -278 -182 -113 0 +304 -529 339 -481 0 +541 208 -317 445 0 +208 -3 -249 431 0 +617 -41 291 172 0 +-640 -226 155 490 0 +55 361 -596 332 0 +-368 258 445 -70 0 +608 15 106 50 0 +618 411 306 0 +208 445 -456 388 0 +-129 589 -263 -221 0 +147 -612 143 519 0 +30 -476 142 -181 0 +516 198 294 -639 0 +-216 273 -181 0 +219 -165 411 390 0 +279 634 548 -106 0 +176 -190 -417 554 0 +224 537 585 16 0 +272 -444 -534 -135 0 +343 -366 454 380 0 +455 -489 304 -528 0 +-536 222 381 -389 0 +399 -204 68 266 0 +147 -510 143 -196 0 +-414 -579 459 -52 0 +-435 -38 -39 0 +-590 -592 -510 339 0 +-596 -187 367 641 0 +508 -54 208 0 +-89 -485 -241 40 0 +323 -420 -115 -250 0 +-327 498 -199 406 0 +284 -110 0 +477 358 -438 80 0 +-177 -13 -325 -493 0 +-56 20 331 -285 0 +256 -510 0 +-368 -166 -162 501 0 +-71 487 -549 -485 0 +-573 -405 0 +-549 480 628 487 0 +-181 -336 0 +191 -547 378 -48 0 +167 358 604 40 0 +337 265 0 +5 -137 608 -302 0 +-125 -193 0 +54 -82 0 +-177 -374 0 +-421 217 -354 335 0 +-424 -430 343 616 0 +100 -369 37 10 0 +-609 -90 0 +-527 -644 -196 524 0 +-496 -640 0 +-485 255 93 0 +449 308 377 557 0 +-216 273 -336 0 +18 489 440 256 0 +264 389 182 0 +-522 -573 -215 -192 0 +-19 -564 -553 -412 0 +-45 -254 519 590 0 +-38 537 585 -571 0 +-143 339 -615 -640 0 +402 214 0 +-553 -160 0 +-404 -209 0 +622 199 18 -393 0 +105 -558 0 +-309 502 -568 0 +-39 -47 -232 -547 0 +562 -71 -252 439 0 +-275 -102 155 305 0 +507 -331 381 154 0 +-487 351 -71 -223 0 +98 343 23 -579 0 +-219 -587 445 183 0 +-375 305 505 339 0 +433 396 -194 44 0 +-567 -303 -516 28 0 +78 339 0 +-605 164 0 +-81 271 346 -401 0 +-175 397 90 421 0 +629 638 0 +-240 608 -7 0 +-319 409 339 88 0 +552 370 88 -374 0 +-298 575 332 -35 0 +-417 103 185 0 +423 410 0 +60 -585 -278 16 0 +-90 -607 452 -124 0 +-640 -283 -174 -374 0 +-421 -485 423 -354 0 +-464 452 -139 -79 0 +155 -141 304 -622 0 +-369 358 0 +442 363 577 225 0 +-118 343 0 +460 629 420 16 0 +-429 -631 409 -319 0 +-563 432 577 -547 0 +505 42 199 0 +-125 -501 234 0 +284 -123 -92 298 0 +-566 -220 -430 -125 0 +-200 -527 0 +-579 -36 -100 453 0 +560 16 -408 281 0 +-238 334 -44 -110 0 +294 608 0 +50 -562 451 386 0 +226 78 642 -42 0 +40 119 480 -178 0 +-612 168 32 141 0 +-582 121 212 -181 0 +245 211 0 +272 -553 -552 207 0 +-196 348 -586 18 0 +217 -415 628 -569 0 +-647 121 -30 -571 0 +-388 -430 85 -500 0 +28 548 0 +-192 -271 -446 -148 0 +-153 -143 0 +-204 -130 211 -68 0 +224 641 426 -613 0 +-13 151 227 0 +-611 407 -376 134 0 +358 252 229 548 0 +-209 -82 504 645 0 +-92 195 -222 -278 0 +-630 -582 212 -278 0 +477 -438 -287 548 0 +-104 548 303 358 0 +-605 -48 0 +205 198 -114 -213 0 +-512 -309 -568 0 +-534 -223 135 373 0 +245 295 85 -625 0 +-507 610 458 -442 0 +563 32 -511 -194 0 +-417 509 -180 -197 0 +-240 606 -473 0 +-619 279 80 -179 0 +272 -553 -137 -302 0 +406 5 592 340 0 +53 -374 88 0 +-336 323 -602 533 0 +-318 379 0 +-282 -274 -51 -200 0 +399 407 271 0 +-263 459 -193 -414 0 +294 299 -624 88 0 +98 -52 -289 23 0 +90 421 -79 -485 0 +508 -394 6 -405 0 +171 399 -82 437 0 +93 397 0 +-46 335 487 -549 0 +-544 499 610 458 0 +-594 381 -571 185 0 +-446 -271 -148 407 0 +154 126 323 113 0 +-116 -372 -15 5 0 +-374 498 642 0 +-564 -13 0 +-140 -225 -547 -39 0 +-76 406 440 489 0 +-187 -200 367 -384 0 +-392 231 466 385 0 +262 -593 -369 -324 0 +560 123 16 -233 0 +513 322 -547 -51 0 +16 -126 0 +25 -46 -627 335 0 +-533 -426 458 224 0 +208 -61 -84 -183 0 +10 466 589 -221 0 +-568 -193 591 0 +-252 279 -71 562 0 +516 28 -553 -639 0 +607 -558 10 -98 0 +-51 243 -636 -45 0 +-643 -175 34 230 0 +-21 54 0 +165 156 -87 -289 0 +-65 -607 -90 -72 0 +322 -612 32 0 +-547 418 -478 -168 0 +569 -189 551 335 0 +150 -3 -249 -559 0 +269 190 -630 -285 0 +304 -226 -196 490 0 +369 484 167 0 +555 198 0 +451 -223 -562 -534 0 +-167 453 109 -550 0 +49 -347 -330 0 +-222 154 195 323 0 +-92 -460 -110 62 0 +50 -276 0 +-368 -111 0 +-283 -174 -128 -473 0 +577 -547 -517 -133 0 +4 0 +423 101 -223 -136 0 +-204 -215 -405 -522 0 +11 -596 0 +526 396 575 435 0 +102 32 -196 -475 0 +208 -456 407 0 +-7 146 -240 -473 0 +-156 -579 139 453 0 +-462 -246 -478 254 0 +-587 -506 0 +142 -336 -435 582 0 +180 -599 -210 0 +-635 -484 453 646 0 +-485 410 0 +-478 32 0 +438 503 -550 480 0 +223 -114 -74 0 +-333 245 -122 -26 0 +588 -434 -166 -558 0 +-66 -347 431 172 0 +-462 -530 314 519 0 +-115 -56 331 323 0 +444 5 447 406 0 +284 -83 641 -557 0 +-553 -564 -639 516 0 +-72 -593 0 +-172 132 541 0 +522 -401 -461 456 0 +628 -301 551 74 0 +-545 -101 80 -287 0 +-412 -19 -564 -372 0 +431 31 -371 -568 0 +-223 28 0 +641 -55 610 -601 0 +354 279 -158 628 0 +457 -587 -318 502 0 +-177 -440 184 -473 0 +-389 638 381 222 0 +554 -536 0 +-379 -579 -125 -523 0 +-159 -82 399 14 0 +572 -374 5 -505 0 +-278 594 210 -264 0 +392 -239 -593 466 0 +152 259 -111 -430 0 +272 -372 0 +-320 -202 -631 493 0 +387 397 24 0 +8 -558 0 +95 121 581 -281 0 +-576 224 -298 -35 0 +334 363 -244 517 0 +418 -605 11 -168 0 +-605 242 0 +-428 -506 385 0 +-336 -216 83 0 +508 600 -465 208 0 +-631 302 88 615 0 +5 272 0 +157 364 363 577 0 +434 -597 -72 0 +105 109 -167 24 0 +463 -597 0 +-443 -419 -428 343 0 +-630 284 -533 -426 0 +-181 560 -647 -30 0 +449 334 290 557 0 +245 -347 -66 85 0 +-512 -61 49 0 +84 159 508 211 0 +307 -366 -643 -459 0 +5 -493 294 -325 0 +390 -430 0 +-3 -41 -249 -461 0 +-513 -22 11 332 0 +-82 539 0 +458 -417 -222 195 0 +394 539 -401 0 +272 -240 0 +-605 -348 -322 288 0 +-42 -603 -177 -383 0 +394 330 321 0 +412 -572 294 498 0 +245 -111 295 -625 0 +-429 -393 -199 -327 0 +217 -635 604 167 0 +-506 424 -391 -309 0 +-330 208 0 +205 -320 -451 0 +-240 -137 -553 0 +-612 519 -59 170 0 +406 552 5 0 +-127 53 88 339 0 +377 632 290 -418 0 +338 -204 -209 -341 0 +554 121 0 +-55 -601 332 224 0 +-19 33 -28 0 +-266 265 0 +143 -45 519 147 0 +-270 -64 12 0 +-9 577 290 -247 0 +236 -48 288 43 0 +-127 -631 88 53 0 +-223 -639 516 -553 0 +206 -393 -640 173 0 +402 423 252 229 0 +-558 10 392 -239 0 +121 544 -181 203 0 +-92 30 -476 -38 0 +-392 -558 -166 231 0 +-248 -384 164 -157 0 +-67 -369 -593 -556 0 +-128 155 0 +7 -261 -240 -372 0 +-41 144 428 -587 0 +314 -530 112 -76 0 +-464 -124 -129 -139 0 +-640 -592 -590 -374 0 +308 -478 246 -433 0 +-257 -517 -133 -576 0 +-384 164 -632 0 +119 -178 214 40 0 +169 484 217 -635 0 +-118 -77 292 -309 0 +-122 -295 -430 58 0 +457 -395 188 -616 0 +260 452 -369 89 0 +-293 -263 268 10 0 +-371 31 -368 445 0 +-131 -41 -461 -441 0 +49 -111 0 +483 377 187 575 0 +-571 -509 -400 -353 0 +-280 26 -443 85 0 +239 -643 24 561 0 +322 -478 -194 513 0 +428 -368 144 -41 0 +-38 225 -39 0 +-14 12 0 +-289 156 165 457 0 +570 -48 -462 530 0 +93 217 0 +442 -216 -576 225 0 +-374 -510 -481 -529 0 +-350 -43 0 +-104 358 303 80 0 +-257 -532 -63 377 0 +-398 80 -604 358 0 +78 -586 -612 0 +628 -485 0 +379 -58 457 -587 0 +30 -476 -181 -110 0 +-550 484 217 169 0 +327 -515 -372 498 0 +447 339 444 5 0 +-223 -71 -425 -356 0 +-578 305 0 +453 -237 -395 -436 0 +-395 293 -193 -97 0 +217 548 -574 619 0 +-69 -461 -330 -514 0 +-128 406 603 -170 0 +37 -550 -129 100 0 +16 -285 -113 0 +406 -127 53 5 0 +641 35 0 +-162 -568 457 501 0 +-558 -149 -87 -589 0 +-318 -193 -568 502 0 +390 -219 -122 183 0 +150 -514 -204 -69 0 +154 103 0 +28 354 423 -158 0 +63 -236 342 11 0 +-262 -229 480 40 0 +361 -39 55 -200 0 +50 279 0 +-353 554 0 +577 -133 -517 164 0 +424 -368 -559 -391 0 +457 502 -318 -568 0 +-96 99 20 -353 0 +18 206 -473 173 0 +363 -336 544 0 +-612 153 -524 -128 0 +-631 -510 202 -153 0 +577 -110 -218 -432 0 +-258 132 -461 -122 0 +602 554 629 -637 0 +-158 -564 628 354 0 +362 -152 -443 343 0 +-79 -635 0 +-417 560 0 +-61 49 291 617 0 +-587 317 86 445 0 +-372 158 279 0 +-500 306 -61 -388 0 +-427 456 0 +-298 -39 -35 142 0 +373 135 205 555 0 +164 -570 242 247 0 +227 -345 -525 -372 0 +-175 604 167 397 0 +20 -180 0 +298 -571 142 -123 0 +147 -524 0 +-72 -366 -139 0 +548 619 -574 -287 0 +-526 -384 290 313 0 +-222 195 381 154 0 +-395 -580 -129 434 0 +88 205 639 0 +80 487 0 +32 -527 0 +-485 -567 413 255 0 +415 -485 -561 40 0 +11 -433 246 -527 0 +-429 -297 -572 412 0 +101 -136 439 -567 0 +548 -634 -287 241 0 +432 -194 -384 -563 0 +123 -233 -92 629 0 +397 -369 0 +-52 296 -395 419 0 +-395 318 -166 565 0 +85 317 86 -443 0 +577 483 142 187 0 +-53 227 -534 -451 0 +-128 642 226 -473 0 +509 -197 -353 638 0 +306 591 -52 -23 0 +317 -122 86 -568 0 +22 -537 142 577 0 +158 325 439 -553 0 +-586 -196 -640 348 0 +-195 -126 0 +-267 -196 342 -147 0 +-297 137 551 276 0 +613 -596 274 396 0 +342 308 -450 636 0 +577 -613 290 0 +58 -587 -61 -295 0 +569 198 80 -189 0 +-644 342 524 155 0 +102 342 288 -475 0 +-568 379 -58 -193 0 +-634 214 241 93 0 +591 -368 -87 -23 0 +40 89 453 260 0 +-327 -393 5 -199 0 +-263 36 457 -362 0 +517 -244 284 396 0 +105 -484 646 24 0 +-48 246 -433 290 0 +-564 19 548 -413 0 +-209 -204 -520 0 +78 -586 112 348 0 +-387 436 105 -635 0 +546 -203 -278 -180 0 +-187 332 367 11 0 +121 647 -4 -73 0 +-140 -200 -225 -39 0 +-571 -216 -633 83 0 +104 397 0 +-589 -193 -149 466 0 +108 -196 0 +-148 14 -159 -270 0 +386 -19 50 -412 0 +609 -124 480 0 +-117 155 304 -467 0 +608 498 213 312 0 +-369 -46 0 +293 -97 466 -166 0 +214 -46 0 +-257 247 0 +49 -401 0 +266 -204 68 -376 0 +-68 -130 -270 245 0 +220 -366 107 343 0 +-330 -270 0 +624 339 -173 88 0 +508 416 0 +50 335 0 +408 -110 -483 -336 0 +-51 -147 -612 -267 0 +100 105 37 24 0 +457 466 0 +-413 423 28 0 +156 234 165 343 0 +-393 495 -240 -312 0 +-254 -462 590 -128 0 +-58 -309 -506 0 +-614 -353 0 +31 -81 85 0 +14 -159 -376 -82 0 +234 607 -72 -98 0 +641 -244 284 517 0 +-170 -393 603 -76 0 +-263 296 419 457 0 +628 -252 -564 562 0 +-461 -81 0 +-122 31 -371 306 0 +457 -558 0 +-320 639 -340 294 0 +-72 -65 260 89 0 +-570 -596 -605 247 0 +-285 560 0 +397 335 -634 241 0 +-443 411 500 414 0 +174 -462 -350 18 0 +543 -564 548 627 0 +164 -361 0 +-463 -395 349 -129 0 +-413 80 19 551 0 +-297 272 0 +-389 -264 0 +-188 -129 -34 466 0 +150 245 0 +-462 -128 1 -355 0 +-199 -393 -327 -240 0 +-468 -166 -118 -492 0 +436 -550 -129 -387 0 +-52 -166 0 +306 -648 457 97 0 +-110 -336 -273 -364 0 +10 234 0 +280 57 306 411 0 +-13 551 0 +-438 358 335 0 +-506 648 -309 -291 0 +-38 601 -621 -92 0 +-175 -287 464 574 0 +385 -443 0 +332 164 0 +69 -270 0 +155 305 -350 174 0 +424 390 0 +-194 242 -513 0 +-250 381 -73 -420 0 +304 -393 586 319 0 +227 -42 615 302 0 +164 475 47 -51 0 +-630 363 0 +-288 626 612 462 -112 45 196 -155 -455 0 +523 453 -395 -109 0 +306 -61 -591 521 0 +107 220 -289 343 0 +-520 -401 311 12 0 +268 -263 -293 452 0 +-424 -52 -568 616 0 +364 157 641 224 0 +-98 -597 453 607 0 +-374 370 552 -429 0 +174 -510 288 -350 0 +-161 498 294 494 0 +365 431 172 0 +435 332 526 224 0 +11 -48 0 +-287 410 145 -201 0 +288 -640 -528 -489 0 +208 508 -326 0 +504 -401 539 645 0 +86 -587 317 -41 0 +455 -51 0 +-393 18 -529 -481 0 +-194 -450 636 -48 0 +-257 35 332 450 0 +-52 -587 77 149 0 +6 -394 -209 -82 0 +-320 370 552 -374 0 +211 -461 0 +-274 -596 -527 -282 0 +-145 -175 609 -287 0 +505 339 -375 304 0 +548 358 -574 619 0 +170 -59 455 18 0 +256 -163 606 498 0 +-41 -430 31 -371 0 +-571 582 0 +-194 32 313 0 +-237 -436 10 -289 0 +-33 474 548 198 0 +-295 448 -559 0 +-59 -128 -462 170 0 +-478 11 247 -570 0 +10 466 -459 307 0 +20 95 0 +-113 -182 -73 381 0 +-362 -193 -597 36 0 +121 96 -571 621 0 +628 -354 214 -421 0 +-289 -72 0 +-276 551 201 335 0 +306 26 -111 -280 0 +-193 -542 -395 -501 0 +-550 -609 328 10 0 +323 96 0 +143 -462 -128 0 +119 -178 -485 -124 0 +-230 -46 549 -175 0 +307 -558 -459 10 0 +-330 -21 12 404 0 +423 -549 402 487 0 +-553 -116 -15 -240 0 +-6 539 0 +-541 172 0 +-612 530 -51 570 0 +50 -534 0 +-640 455 -254 590 0 +-640 440 -374 489 0 +-82 -645 49 0 +85 -456 -461 388 0 +-106 80 551 634 0 +-216 -92 -442 0 +-128 -375 406 505 0 +-435 -92 582 -110 0 +150 407 0 +-378 342 -196 355 0 +438 503 358 24 0 +58 -295 390 -111 0 +294 444 -429 0 +569 -548 101 0 +-285 -329 -264 -60 0 +356 -151 294 -564 0 +-181 408 -216 -483 0 +-37 -550 235 -46 0 +-320 -240 0 +15 555 106 205 0 +574 464 358 40 0 +528 -138 342 455 0 +498 -184 -75 294 0 +439 451 -372 -562 0 +-550 262 453 -324 0 +459 -414 -166 -558 0 +-567 555 0 +-510 -631 -370 275 0 +-462 1 304 -355 0 +85 -461 541 -317 0 +105 -395 0 +-529 -42 -128 -481 0 +-289 618 457 463 0 +518 623 381 -536 0 +-39 44 433 -200 0 +343 -368 0 +50 19 -71 -413 0 +-204 -192 0 +-230 549 -485 -124 0 +293 411 -597 -97 0 +236 -478 0 +254 32 -246 -196 0 +-204 -82 0 +172 -61 -326 -259 0 +-461 -130 -68 407 0 +577 -216 344 0 +548 303 -104 -46 0 +-204 -81 0 +-127 447 0 +532 332 224 -583 0 +-216 218 -181 -126 0 +-355 -462 18 1 0 +-175 167 604 217 0 +386 227 -493 -325 0 +294 -151 555 356 0 +-79 214 484 0 +-417 -281 581 -180 0 +391 -41 208 514 0 +468 -219 0 +288 403 -527 -29 0 +210 638 323 594 0 +549 402 -230 -79 0 +-37 24 235 -287 0 +-255 -46 -228 -635 0 +-72 -395 0 +479 114 551 410 0 +-195 142 583 -181 0 +406 173 304 206 0 +112 242 43 236 0 +415 -46 -561 24 0 +-98 105 607 -579 0 +-48 -257 378 191 0 +-71 74 439 -301 0 +554 -637 -285 602 0 +-567 -104 402 303 0 +-630 629 0 +498 312 386 213 0 +-41 -568 317 86 0 +-506 343 0 +-263 -193 36 -362 0 +-478 -570 247 308 0 +8 10 0 +-61 172 -131 -441 0 +-297 189 551 261 0 +551 335 627 543 0 +105 10 0 +-177 406 0 +403 -612 -48 -29 0 +-181 142 -507 -442 0 +228 -65 -643 -538 0 +337 407 0 +154 -181 0 +-567 551 0 +342 -361 29 -596 0 +386 -137 -320 -302 0 +-52 188 -616 -289 0 +-368 445 317 86 0 +288 -59 305 170 0 +47 290 475 -51 0 +-196 -605 0 +419 -263 296 -87 0 +-640 -524 455 153 0 +40 235 -37 217 0 +66 -111 162 390 0 +-567 201 50 0 +449 -39 308 557 0 +611 448 407 249 0 +642 -473 226 519 0 +-204 -130 49 -68 0 +-320 606 406 -163 0 +133 290 -48 138 0 +452 -635 0 +291 -61 617 172 0 +-612 322 -48 0 +358 -635 549 -230 0 +305 -374 173 206 0 +155 174 -350 -640 0 +-547 449 577 0 +172 -456 388 -122 0 +-443 77 -125 149 0 +550 635 79 369 175 124 -24 65 -40 0 +5 -283 339 0 +-297 -639 0 +-384 -200 -47 -232 0 +-81 249 611 -192 0 +339 -314 -510 127 0 +68 2 0 +-510 -128 0 +165 156 466 -87 0 +501 -162 -587 -52 0 +198 50 0 +453 -289 260 0 +306 472 -122 -512 0 +191 378 342 -194 0 +-330 245 341 -541 0 +-249 208 -309 -3 0 +448 85 0 +583 284 -195 458 0 +-634 214 423 241 0 +150 -204 -437 -132 0 +-436 -237 452 -263 0 +105 -36 -100 -289 0 +-39 -9 308 -247 0 +-559 521 -368 -591 0 +-76 455 -147 0 +-177 -261 -553 7 0 +306 431 424 -391 0 +245 407 0 +-532 -63 377 290 0 +-76 -45 0 +164 342 0 +-635 -72 -119 -307 0 +8 542 324 -597 0 +-44 610 396 0 +-131 -441 -61 49 0 +-415 -569 402 423 0 +32 -196 524 0 +-420 -250 -180 -278 0 +-336 121 195 -222 0 +641 -194 0 +205 494 279 0 +-48 59 584 -612 0 +-567 28 74 -301 0 +99 -96 -73 629 0 +105 538 -296 -597 0 +-345 386 498 -525 0 +-383 -320 205 0 +-129 -369 -268 540 0 +49 -192 21 -365 0 +-285 458 -594 185 0 +-41 58 -295 -430 0 +-430 292 -41 0 +529 -578 525 272 0 +385 -118 -588 371 0 +-64 399 508 69 0 +-366 457 0 +294 -320 207 -552 0 +284 458 601 -621 0 +-473 -170 78 603 0 +-239 392 8 -289 0 +448 -310 326 2 0 +103 -582 -285 212 0 +138 308 -478 133 0 +-311 271 204 0 +-643 -100 234 -36 0 +-417 -329 -60 -180 0 +-291 -41 -430 648 0 +-181 531 -614 381 0 +335 619 -574 358 0 +-173 -578 0 +107 -597 220 343 0 +-635 24 0 +507 -181 -353 0 +150 -309 -521 365 0 +-485 -201 145 93 0 +-177 -553 -525 -345 0 +-479 410 -235 -287 0 +504 645 -270 12 0 +-440 184 -42 -177 0 +-225 577 -140 -547 0 +-635 480 -228 -255 0 +634 279 80 -106 0 +-46 -25 620 -65 0 +172 -61 497 -346 0 +-564 -372 -151 356 0 +-139 -464 105 -635 0 +-257 332 -488 -191 0 +-204 -341 338 -376 0 +-146 -42 -128 -300 0 +308 -236 342 0 +-166 466 -414 459 0 +17 -330 -376 54 0 +275 226 0 +-68 172 -270 -130 0 +18 -196 170 -59 0 +150 211 0 +-165 219 343 390 0 +-373 198 -477 80 0 +296 293 0 +-547 -274 -51 -282 0 +-39 -194 27 471 0 +306 566 441 -41 0 +-626 304 0 +-86 -430 -52 0 +315 555 335 -470 0 +636 -450 -51 -200 0 +-86 -231 385 -118 0 +-624 -553 227 299 0 +-204 469 -405 -321 0 +514 391 -559 211 0 +-144 -122 130 -461 0 +300 -43 -45 519 0 +370 552 -177 256 0 +-376 -520 -204 0 +-111 -122 0 +525 529 -429 -393 0 +343 -414 -579 459 0 +-236 290 32 63 0 +242 -433 246 -200 0 +232 535 332 610 0 +-550 480 549 -230 0 +50 -71 -487 351 0 +397 -474 -595 335 0 +221 452 -369 -503 0 +-76 -314 127 406 0 +-547 -47 -232 -384 0 +575 -460 103 62 0 +-46 -65 609 -145 0 +616 -587 -166 -424 0 +546 -278 -203 -264 0 +-467 -117 -510 -196 0 +-612 18 1 -355 0 +-417 103 -281 0 +-199 -327 88 -631 0 +-81 211 0 +-352 -46 335 301 0 +481 112 -76 -243 0 +32 102 112 -475 0 +-362 -506 -193 0 +-110 532 -583 577 0 +-391 -61 424 306 0 +242 164 274 0 +284 334 0 +533 121 -602 -571 0 +-285 482 16 273 0 +-79 -72 0 +-579 -296 105 538 0 +256 493 498 0 +295 -122 -625 172 0 +455 -510 0 +247 164 -51 -570 0 +610 224 0 +491 -263 -328 452 0 +95 -536 0 +327 -13 -515 -177 0 +358 214 0 +-197 -278 509 -536 0 +-166 -263 -36 0 +-392 -263 -166 231 0 +537 -92 585 -216 0 +-488 -194 -191 396 0 +226 304 642 339 0 +95 222 -389 381 0 +100 37 105 -635 0 +-13 624 272 0 +-166 -149 466 -589 0 +-200 -248 32 0 +-223 114 0 +272 608 0 +225 332 610 442 0 +619 303 0 +-254 590 -640 288 0 +-237 10 -436 -263 0 +-249 49 -3 -309 0 +-401 333 -461 -54 0 +-86 385 -368 -231 0 +306 -497 -502 431 0 +220 107 234 -125 0 +-184 -177 -534 -75 0 +-240 -116 -372 -15 0 +-61 132 49 0 +-460 284 -630 62 0 +342 -478 0 +601 16 284 -621 0 +610 154 0 +-181 363 -476 30 0 +-194 -450 636 342 0 +628 178 -46 0 +617 291 -309 49 0 +-347 172 -330 0 +-173 272 -473 624 0 +-128 18 0 +467 -51 282 -462 0 +-384 142 -238 -44 0 +-416 131 -82 49 0 +-52 -506 0 +-39 142 483 187 0 +334 -140 164 -225 0 +-462 -322 -348 32 0 +175 503 -262 0 +-76 455 -226 0 +154 -110 583 -195 0 +-521 49 365 -61 0 +-97 293 -87 -395 0 +-372 -240 -552 207 0 +-143 -615 406 -128 0 +-401 -461 21 -365 0 +14 -159 337 2 0 +-330 69 -64 539 0 +-395 -597 0 +294 179 345 198 0 +-366 105 542 0 +-401 211 0 +-395 -459 -129 307 0 +469 -539 6 0 +588 -395 -434 457 0 +516 439 -553 -639 0 +256 586 -76 319 0 +-136 -189 0 +-403 375 -510 -626 0 +-79 -46 0 +-309 -259 -326 150 0 +-576 535 -216 232 0 +242 -367 290 -316 0 +88 -116 -15 294 0 +-482 381 -571 0 +562 93 -252 28 0 +628 551 106 0 +381 -571 633 -518 0 +-571 460 420 121 0 +386 373 439 135 0 +304 155 147 143 0 +641 449 -257 557 0 +-79 40 0 +502 -118 -166 -318 0 +-509 420 0 +-488 557 0 +-472 385 -380 -118 0 +-511 242 563 -194 0 +628 217 -545 -101 0 +-601 284 332 -55 0 +-643 -593 0 +-373 548 -477 279 0 +431 -111 0 +-329 554 629 -60 0 +316 486 -196 -48 0 +394 -598 211 508 0 +-482 -571 121 0 +332 22 224 -537 0 +-373 -71 -477 -564 0 +43 236 112 -51 0 +-101 217 -567 -545 0 +386 299 -320 -624 0 +173 -42 -177 0 +-647 -30 -336 560 0 +-195 -181 583 -110 0 +648 -291 -122 306 0 +28 315 -470 -567 0 +-631 -1 -510 -495 0 +32 108 0 +323 -181 -233 123 0 +-160 253 608 -564 0 +310 12 -270 -360 0 +628 -33 50 474 0 +-593 -503 -369 221 0 +-39 142 -583 532 0 +-195 -571 583 -216 0 +-179 439 -619 -567 0 +479 114 198 548 0 +318 -289 565 -193 0 +-398 -567 0 +-34 452 -188 -395 0 +-642 116 -320 -393 0 +419 -597 296 411 0 +-644 -612 -48 524 0 +16 203 629 544 0 +227 624 -173 -42 0 +15 -223 -534 106 0 +304 288 -382 -206 0 +32 -29 112 403 0 +-51 112 530 570 0 +390 85 258 -70 0 +-369 452 262 -324 0 +342 -584 -471 -257 0 +-590 18 -592 -473 0 +-393 519 0 +329 -536 381 0 +80 -567 0 +-285 460 -630 0 +-540 217 595 -369 0 +560 -336 -582 0 +185 16 -594 629 0 +349 -579 -643 -463 0 +307 -72 -366 -459 0 +-7 -240 146 256 0 +-124 -287 0 +396 -62 610 -27 0 +-129 609 -635 0 +623 323 -115 518 0 +-427 -401 -81 -645 0 +-550 10 -268 540 0 +398 279 80 -253 0 +-447 -496 78 -578 0 +-83 -576 284 -557 0 +-478 282 288 467 0 +-536 -285 0 +442 -384 -216 225 0 +-203 546 -417 -180 0 +467 455 282 -48 0 +284 483 0 +-550 -129 -422 -349 0 +-340 639 498 -553 0 +47 -527 308 475 0 +219 -506 -165 -193 0 +5 -374 184 -440 0 +645 504 -573 -401 0 +279 -71 -516 -303 0 +-243 -612 481 78 0 +-550 453 540 -268 0 +308 334 0 +337 -271 508 -446 0 +-257 396 -488 -191 0 +-643 -263 0 +342 -51 0 +437 -204 171 337 0 +-296 8 234 538 0 +142 -35 -384 -298 0 +-38 298 -92 -123 0 +-207 386 0 +629 -571 126 0 +-68 -204 150 0 +288 -510 300 -43 0 +-578 256 0 +575 224 0 +-122 -66 0 +50 -299 -74 386 0 +375 112 -403 -76 0 +599 121 233 638 0 +121 -536 0 +16 -38 -476 30 0 +217 -229 -369 -262 0 +202 406 18 -153 0 +-72 100 -65 37 0 +306 445 0 +406 305 0 +437 -341 0 +342 112 0 +-221 105 0 +-473 406 0 +304 455 -59 170 0 +-31 -461 85 465 0 +465 208 445 -31 0 +-148 404 -21 -192 0 +-395 237 492 -193 0 +-591 -41 521 306 0 +-201 -354 0 +452 105 0 +448 249 508 611 0 +-196 174 18 0 +575 -39 -344 488 0 +-45 -489 -528 -128 0 +-231 -568 -86 457 0 +245 508 0 +-585 60 560 16 0 +-401 -209 0 +269 -181 190 381 0 +260 105 -289 0 +-76 -622 -196 -141 0 +8 -34 234 -188 0 +-635 556 352 -46 0 +-356 -425 335 551 0 +225 396 284 442 0 +-640 275 -374 -370 0 +-61 208 26 0 +5 299 -624 386 0 +-143 -640 406 -615 0 +63 108 -236 -200 0 +304 406 319 586 0 +554 -278 546 -203 0 +35 334 450 290 0 +-41 -3 -249 448 0 +14 -405 -159 508 0 +-428 -568 -52 -419 0 +-82 -416 211 0 +-148 504 -270 645 0 +-597 -72 542 324 0 +-87 -568 219 -165 0 +-474 93 0 +-278 -190 176 20 0 +98 -395 0 +272 256 0 +55 -384 361 -200 0 +-485 229 423 252 0 +178 -71 -485 470 0 +205 -177 0 +-129 -597 -293 268 0 +-257 32 0 +-248 377 290 -157 0 +-395 165 457 156 0 +501 -162 390 -52 0 +396 575 -83 -557 0 +-372 227 299 -624 0 +381 546 -536 -203 0 +571 -582 273 0 +-340 639 227 -13 0 +334 -238 363 -44 0 +321 407 347 172 0 +-196 -147 -76 0 +-301 551 74 548 0 +-642 116 -631 -429 0 +500 -118 414 385 0 +363 154 537 585 0 +-589 -542 0 +-587 362 -152 -193 0 +593 -268 -538 0 +-72 139 -156 -579 0 +198 548 19 -413 0 +28 -297 0 +-372 50 -151 356 0 +-13 -240 -53 -451 0 +173 206 -640 -631 0 +-479 335 -235 358 0 +458 499 575 -544 0 +-73 629 -203 546 0 +202 305 -631 -153 0 +227 608 0 +26 390 85 -280 0 +452 -79 -538 0 +236 511 0 +-593 67 -107 -263 0 +-578 -631 0 +396 577 0 +466 -414 459 385 0 +18 -447 -473 -496 0 +-578 552 370 -240 0 +132 445 -258 448 0 +234 -459 307 -643 0 +104 -550 480 387 0 +-521 365 150 445 0 +455 304 143 147 0 +284 476 0 +358 410 0 +-45 -640 0 +-327 -199 -578 227 0 +410 -101 -545 397 0 +-443 -41 0 +-79 24 0 +459 -366 -414 411 0 +306 343 -566 -220 0 +134 14 -12 0 +335 -104 217 303 0 +-84 448 445 -183 0 +90 24 421 -287 0 +487 -549 358 -71 0 +-51 -584 -471 -200 0 +105 268 -293 -579 0 +-633 -110 -571 83 0 +498 -473 -383 -603 0 +-388 -309 -500 -368 0 +-106 634 -71 279 0 +497 -346 208 -41 0 +-153 -510 339 202 0 +-21 539 -330 404 0 +592 -374 498 340 0 +-576 575 -62 -27 0 +-635 37 -72 100 0 +-222 195 381 -92 0 +-376 -64 -330 69 0 +458 -483 610 408 0 +-640 -196 -141 -622 0 +-597 98 411 23 0 +-459 234 307 105 0 +-518 -181 323 633 0 +75 -543 439 386 0 +-51 112 -475 102 0 +-359 140 -478 -547 0 +121 95 222 -389 0 +155 -76 0 +-618 70 -125 -443 0 +-76 300 -393 0 +105 -436 -579 -237 0 +412 -572 -177 -553 0 +-368 58 0 +-200 377 0 +-277 -265 399 -204 0 +108 350 -612 511 0 +554 -285 -60 -329 0 +279 -619 -71 -179 0 +-222 154 121 195 0 +-462 511 350 32 0 +-553 356 28 0 +-287 -415 -569 80 0 +450 35 308 396 0 +-425 -564 548 -356 0 +-473 227 -383 -603 0 +452 -484 40 646 0 +-438 -71 -485 477 0 +-110 83 -633 -181 0 +67 -366 -107 -72 0 +-51 -194 0 +271 407 346 49 0 +-166 -597 0 +290 246 -51 -433 0 +-545 402 -101 423 0 +-596 -511 -605 563 0 +-291 -309 150 0 +-31 -41 465 49 0 +-540 480 -124 595 0 +15 608 106 198 0 +-74 -564 -299 386 0 +-510 78 0 +-309 -368 152 259 0 +332 632 -418 -596 0 +487 -549 548 217 0 +16 -426 -533 -38 0 +-41 245 0 +-92 -533 -426 575 0 +-185 238 575 458 0 +224 -92 0 +165 -193 466 156 0 +247 -51 290 -570 0 +-540 -46 24 595 0 +460 -181 -353 420 0 +-553 312 498 213 0 +-15 -320 294 -116 0 +-4 581 0 +-173 -320 624 -374 0 +-351 357 -297 555 0 +171 437 -376 -82 0 +-291 648 306 -111 0 +410 28 0 +623 -353 518 20 0 +310 -360 -376 -192 0 +-391 424 85 -443 0 +-73 629 -420 -250 0 +423 93 0 +440 78 -42 489 0 +-473 447 -240 444 0 +-527 -462 0 +-612 242 355 -378 0 +227 -440 184 -578 0 +396 232 575 535 0 +457 -392 -289 231 0 +-87 -220 -566 -118 0 +245 -259 85 -326 0 +290 -450 -48 636 0 +423 -179 439 -619 0 +-429 -297 -515 327 0 +-141 -622 455 -640 0 +-274 -605 -282 11 0 +-640 18 0 +-219 306 -122 183 0 +-177 256 -495 0 +-41 -497 448 0 +313 641 11 -526 0 +339 -240 0 +355 -478 155 -378 0 +-525 -177 -534 -345 0 +-309 295 0 +-200 246 -433 -51 0 +2 539 0 +-51 -475 -612 102 0 +88 -631 552 370 0 +224 -39 0 +164 641 0 +542 324 -558 452 0 +97 -166 -587 -648 0 +205 -340 639 -429 0 +109 40 8 -167 0 +176 629 20 -190 0 +-130 -68 -330 245 0 +-487 351 50 423 0 +50 253 -160 -13 0 +26 -280 -430 -41 0 +141 32 455 168 0 +234 -260 -454 105 0 +306 -70 0 +-35 396 -298 -38 0 +-181 381 507 -331 0 +-582 -630 212 -285 0 +-13 -161 272 494 0 +385 -166 0 +-1 -495 -393 -640 0 +628 480 -545 -101 0 +-212 -286 629 554 0 +-336 420 560 460 0 +208 -249 -41 -3 0 +-553 -135 -444 227 0 +279 -13 0 +619 -567 -574 402 0 +453 -34 234 -188 0 +256 -590 -592 519 0 +-380 -166 -472 -587 0 +20 509 -278 -197 0 +256 -173 5 624 0 +-189 628 569 -564 0 +334 142 499 0 +16 408 -38 -483 0 +-572 498 608 412 0 +-310 448 326 -204 0 +-644 524 112 242 0 +121 154 420 460 0 +-640 275 339 -370 0 +-128 -578 199 622 0 +-374 -320 116 -642 0 +-148 17 54 -192 0 +645 504 -209 -204 0 +-400 323 -509 -181 0 +-166 362 0 +-572 412 294 -320 0 +294 555 -543 75 0 +381 -115 -56 331 0 +-124 415 -561 214 0 +522 -270 456 172 0 +-196 496 304 -486 0 +294 106 15 198 0 +-547 342 0 +551 279 0 +306 -295 -61 58 0 +40 580 -620 10 0 +515 33 555 294 0 +-355 1 -612 -128 0 +-263 318 -166 0 +-372 227 7 -261 0 +-216 601 -621 -336 0 +639 608 -320 -340 0 +-128 -626 0 +126 113 -92 560 0 +279 439 0 +-534 -429 0 +174 -196 -76 0 +-128 199 256 622 0 +50 -567 -487 351 0 +98 23 343 -366 0 +294 -543 551 75 0 +172 -111 -333 -26 0 +350 511 -462 -51 0 +524 -644 -45 242 0 +490 -510 155 -226 0 +8 -550 -556 -67 0 +-149 -263 457 -589 0 +-118 -166 219 -165 0 +308 32 29 -361 0 +-578 -312 272 0 +348 304 155 -586 0 +-477 -373 628 279 0 +-223 80 0 +388 -309 211 -456 0 +504 -405 -204 645 0 +-270 -81 -427 -645 0 +-612 -510 0 +211 514 445 391 0 +501 343 0 +-274 -194 -282 32 0 +363 30 -336 -476 0 +-287 -228 -175 -255 0 +569 -189 555 80 0 +-527 112 0 +292 -443 -77 -111 0 +107 220 -395 -193 0 +346 508 211 271 0 +-565 -646 -289 453 0 +-122 -568 428 144 0 +20 -4 0 +260 -635 105 89 0 +423 551 0 +638 546 560 -203 0 +199 406 622 18 0 +496 -374 305 0 +-65 -484 646 -643 0 +135 -564 -372 373 0 +-202 -320 339 493 0 +28 -136 -567 101 0 +453 -72 0 +294 -572 412 5 0 +-264 -637 602 -285 0 +-366 411 36 -362 0 +10 -260 -454 -263 0 +227 -320 0 +479 114 548 279 0 +238 -216 -185 -336 0 +-178 119 -369 -485 0 +-374 -393 0 +-631 272 0 +-184 -75 -372 5 0 +-625 150 -204 0 +619 358 -574 80 0 +-368 468 3 -559 0 +214 93 178 470 0 +-240 494 -553 -161 0 +608 555 0 +-320 -606 386 160 0 +611 150 508 249 0 +390 -70 -111 258 0 +28 50 0 +-369 -607 -90 8 0 +154 -518 633 381 0 +8 -550 646 -484 0 +342 140 308 -359 0 +-297 -553 0 +358 178 628 0 +-527 308 -316 -367 0 +-252 80 555 562 0 +-517 -133 -547 377 0 +90 480 -550 0 +-285 -353 0 +123 -336 560 -233 0 +572 -240 -505 256 0 +494 498 386 -161 0 +217 90 421 -550 0 +294 -429 -515 327 0 +-530 314 304 -462 0 +-512 -309 -118 472 0 +155 -612 0 +-71 397 0 +-376 -405 0 +20 -417 647 0 +601 -110 154 0 +-277 12 -270 -265 0 +-56 331 -417 554 0 +283 161 -240 -578 0 +-66 -347 -559 211 0 +466 -129 491 0 +-620 580 -550 453 0 +-257 450 -605 0 +-488 377 -191 -257 0 +-534 -564 0 +-182 -113 -285 20 0 +460 381 154 420 0 +-100 -289 10 -36 0 +400 -92 575 244 0 +198 -71 0 +562 -252 548 279 0 +-39 -216 -27 -62 0 +-257 -488 -191 -576 0 +-71 -485 -101 -545 0 +-297 494 -320 -161 0 +279 386 33 515 0 +208 341 -204 -541 0 +-238 -384 -216 -44 0 +-433 242 246 -547 0 +305 -355 1 288 0 +-216 -55 -576 -601 0 +55 334 0 +-86 -231 -368 457 0 +-67 -556 -550 453 0 +321 245 -401 347 0 +84 172 159 -82 0 +-216 583 -336 -195 0 +243 305 288 0 +-97 411 234 293 0 +95 121 599 233 0 +142 16 0 +407 84 159 172 0 +-496 -447 -473 -76 0 +172 245 0 +-42 -473 0 +-144 431 130 172 0 +-309 -568 566 441 0 +-349 239 -453 0 +544 103 203 -285 0 +-336 575 0 +-587 97 -52 -648 0 +112 108 -644 524 0 +637 -115 381 0 +531 -571 -38 0 +-558 296 0 +-473 78 -146 -300 0 +-618 -125 70 -430 0 +-353 121 0 +18 173 206 -393 0 +-324 10 262 -369 0 +242 570 530 112 0 +-269 610 -630 344 0 +-360 310 -573 -401 0 +-193 492 -597 237 0 +434 -580 8 -395 0 +-72 -597 -293 268 0 +-356 -425 410 198 0 +-104 303 480 -71 0 +222 -629 -113 0 +-118 -280 -559 26 0 +466 8 0 +-633 -269 0 +103 142 0 +-52 -579 588 0 +561 -550 239 -129 0 +319 406 -640 586 0 +526 39 157 0 +294 -564 158 325 0 +628 -549 487 217 0 +288 -141 -622 305 0 +525 -429 -297 0 +288 490 304 -226 0 +396 -38 488 -344 0 +206 173 305 339 0 +224 -27 641 0 +-26 -333 -122 49 0 +217 -635 620 -25 0 +386 412 -572 5 0 +154 323 -509 -400 0 +-59 -128 455 170 0 +457 234 -149 0 +-285 381 0 +-485 -569 -567 -415 0 +208 85 0 +452 307 -459 -395 0 +375 -612 -403 18 0 +208 391 -61 514 0 +634 555 -106 80 0 +476 9 142 334 0 +188 -125 234 -616 0 +-444 5 386 -135 0 +-60 -353 -181 0 +-576 396 0 +-301 548 50 74 0 +-1 -495 256 18 0 +127 18 -314 406 0 +-79 549 -230 214 0 +-595 -474 410 -46 0 +-571 -614 531 381 0 +628 198 0 +142 377 0 +-297 -160 253 551 0 +-645 -427 172 -192 0 +392 -579 -239 -643 0 +528 112 -138 32 0 +-278 381 0 +641 435 224 526 0 +-553 555 0 +-51 112 -29 403 0 +252 229 217 -567 0 +105 -289 -565 -646 0 +-317 150 541 -559 0 +-221 8 -263 589 0 +326 -310 -330 -81 0 +377 334 0 +343 -152 362 390 0 +453 -293 268 -579 0 +352 -175 -46 556 0 +-118 306 0 +-336 -110 83 0 +602 -264 629 -637 0 +-355 1 455 -640 0 +519 173 -473 0 +-419 -87 -428 -506 0 +-273 -38 103 -364 0 +49 -131 431 -441 0 +211 -317 541 445 0 +413 255 423 480 0 +-82 -376 6 -394 0 +214 -25 620 -124 0 +155 304 -524 153 0 +-454 453 -579 -260 0 +-505 -393 572 5 0 +634 -223 -106 93 0 +-597 -57 -52 -491 0 +335 279 474 -33 0 +399 -82 -265 -277 0 +-278 -400 -630 -509 0 +-510 -355 1 288 0 +44 -576 433 -547 0 +339 275 305 -370 0 +214 503 438 -369 0 +564 106 -315 0 +-336 -126 142 218 0 +385 156 165 -558 0 +-92 629 -518 633 0 +375 -76 -403 455 0 +-413 -93 474 0 +-46 -574 619 628 0 +-558 -643 0 +306 -41 162 66 0 +-464 40 452 -139 0 +407 -209 -600 94 0 +-41 465 -31 208 0 +-148 69 -64 -330 0 +-462 112 0 +66 390 -61 162 0 +-289 139 -156 -129 0 +453 -607 -175 -90 0 +455 32 59 584 0 +217 -79 0 +62 -460 -92 575 0 +-481 -529 18 256 0 +387 -635 104 358 0 +8 -289 -109 523 0 +-109 -579 523 -72 0 +433 377 -547 44 0 +36 -362 -52 -289 0 +-87 -23 -568 591 0 +-39 -194 367 -187 0 +391 -461 514 85 0 +189 198 261 -297 0 +-461 -111 292 0 +-194 -547 0 +-372 451 -564 -562 0 +-625 -559 150 295 0 +298 -123 -110 -181 0 +-97 -193 293 -289 0 +-79 328 -609 10 0 +323 185 -594 154 0 +142 225 334 442 0 +-65 37 100 -643 0 +-440 406 184 498 0 +32 584 59 -196 0 +-604 -485 423 -398 0 +-52 565 -289 318 0 +-213 -297 -114 551 0 +607 -558 452 -98 0 +304 163 -374 117 0 +-65 -635 0 +-635 402 0 +-87 -468 -492 -568 0 +109 -167 105 -550 0 +-601 610 -55 332 0 +-128 173 -42 206 0 +458 -460 0 +-527 -626 403 -29 0 +-293 268 8 -395 0 +-401 -81 347 321 0 +-114 50 386 -213 0 +445 -309 0 +242 -246 -612 254 0 +519 -45 153 -524 0 +452 -324 -79 262 0 +-405 12 0 +234 -87 0 +434 -366 411 0 +-443 85 31 -371 0 +-252 562 28 423 0 +108 322 290 0 +-73 -120 614 381 0 +397 470 178 335 0 +327 -515 -429 205 0 +-476 -336 142 30 0 +-114 -213 608 279 0 +324 542 -263 -129 0 +629 533 -602 -571 0 +363 -336 585 537 0 +154 -630 0 +-640 -528 -196 -489 0 +-300 -640 -146 -631 0 +453 -561 40 0 +208 132 -41 -258 0 +-129 -369 -119 -307 0 +-325 -429 294 -493 0 +11 -316 -367 -478 0 +622 305 199 339 0 +363 238 -185 -181 0 +2 399 266 0 +-92 -38 -126 218 0 +-75 -184 294 88 0 +-483 -38 408 -92 0 +453 -643 0 +508 -394 399 6 0 +-44 -238 -110 -39 0 +454 -263 380 -87 0 +-510 339 -481 -529 0 +-372 279 -315 -207 0 +154 -460 142 62 0 +80 -477 -373 279 0 +399 -360 310 -204 0 +149 77 -368 -87 0 +-576 449 11 557 0 +445 448 -456 388 0 +-76 -578 642 226 0 +-263 -414 459 -166 0 +290 -449 32 -91 0 +606 498 -473 0 +-553 386 0 +-169 425 423 402 0 +610 -630 -426 -533 0 +-587 411 0 +396 -596 55 361 0 +53 -473 -127 -177 0 +-71 480 -574 619 0 +522 -192 208 456 0 +-379 -166 -523 -395 0 +127 -640 -631 0 +-196 570 -478 530 0 +-571 601 -216 -621 0 +-240 -642 116 256 0 +43 304 455 0 +272 199 -578 0 +169 40 358 484 0 +-76 -462 174 -350 0 +11 191 378 -478 0 +334 -248 -200 -157 0 +11 -488 -191 332 0 +-146 -300 -510 339 0 +-473 202 -128 -153 0 +628 -315 439 0 +317 -430 -122 86 0 +146 -7 406 498 0 +-593 466 -436 -237 0 +453 589 -579 -221 0 +560 154 0 +10 -558 -268 0 +-52 492 237 -395 0 +603 519 -42 -170 0 +555 -179 0 +466 105 0 +214 -549 -567 487 0 +-578 -76 -529 -481 0 +-495 -393 -1 18 0 +-372 -412 -19 279 0 +-61 208 -144 130 0 +358 -175 -561 0 +164 -526 577 313 0 +-166 -58 379 -118 0 +229 93 252 -485 0 +-263 -501 -87 -542 0 +-387 -593 -79 436 0 +-510 -275 155 -102 0 +439 410 0 +93 628 0 +340 272 -473 592 0 +-199 -631 -327 -429 0 +237 492 -597 457 0 +545 -65 397 422 0 +480 423 619 -574 0 +362 411 -443 -152 0 +172 -122 465 -31 0 +106 50 15 -13 0 +-174 -300 0 +399 645 508 504 0 +55 332 361 308 0 +385 -430 0 +24 -593 0 +570 530 242 455 0 +-341 338 399 2 0 +88 -13 0 +-177 312 0 +355 455 32 -378 0 +345 608 279 179 0 +-141 -622 -510 -626 0 +-640 155 -206 -382 0 +-84 431 448 -183 0 +241 548 -634 480 0 +413 80 397 255 0 +-430 3 -111 468 0 +-162 -587 501 -87 0 +-281 581 -285 -180 0 +18 -146 -374 -300 0 +335 -354 -421 -287 0 +-443 -291 648 -111 0 +261 294 189 551 0 +-503 40 453 221 0 +-598 394 -204 150 0 +-252 -223 -71 562 0 +2 404 -405 -21 0 +306 -295 -111 58 0 +155 242 0 +-265 399 508 -277 0 +-207 -315 50 -13 0 +539 437 407 171 0 +-374 184 -320 -440 0 +385 -492 -506 -468 0 +-3 -249 448 -559 0 +479 551 80 114 0 +-167 109 -175 8 0 +453 324 -395 542 0 +-465 -330 600 -461 0 +221 453 -175 0 +-190 381 176 -73 0 +554 -329 -278 -60 0 +-380 -472 -118 -87 0 +32 290 -570 247 0 +272 -345 -553 -525 0 +411 -392 231 234 0 +407 -277 399 -265 0 +-90 -593 -607 -369 0 +-485 -71 255 413 0 +-177 116 -642 256 0 +356 50 608 -151 0 +-221 8 589 -289 0 +601 458 -621 575 0 +323 -264 0 +-129 -67 -556 40 0 +490 455 0 +105 -175 230 34 0 +-489 -128 112 -528 0 +551 106 608 15 0 +-201 80 145 -46 0 +608 261 0 +228 -538 453 -635 0 +-38 -460 62 16 0 +-587 431 -77 292 0 +-82 469 -321 -376 0 +-86 -166 -231 -118 0 +-593 -263 -436 -237 0 +-203 546 381 -73 0 +-594 185 323 -336 0 +410 551 -252 0 +418 -168 11 -527 0 +-138 -462 528 32 0 +-645 -427 172 -330 0 +-335 -477 -252 0 +-278 -594 -92 185 0 +95 381 637 0 +423 425 480 -169 0 +431 -347 -66 208 0 +-461 -26 -122 -333 0 +294 -161 88 494 0 +-395 -193 463 618 0 +-147 112 32 0 +40 -89 217 0 +-426 -181 -38 0 +-247 11 396 0 +-160 608 253 279 0 +435 526 -110 377 0 +444 53 320 0 +28 114 479 93 0 +89 260 -129 -124 0 +20 -417 -56 331 0 +-3 -81 -249 -111 0 +530 342 -626 0 +-175 -287 620 0 +479 -567 -485 0 +433 -576 44 11 0 +445 -81 0 +211 -309 259 0 +480 -561 415 -550 0 +16 585 -38 537 0 +-626 -226 -640 490 0 +75 -372 -543 -223 0 +-643 -635 0 +575 364 332 157 0 +-550 397 0 +390 591 -23 -52 0 +333 -192 -461 -54 0 +117 18 256 163 0 +-635 -89 8 0 +-122 598 49 0 +288 305 -43 300 0 +-454 -260 234 -643 0 +407 277 172 -617 0 +85 -506 0 +-73 -115 0 +258 -41 306 0 +339 88 -383 0 +-160 608 50 253 0 +500 414 -87 -587 0 +504 337 2 645 0 +-478 350 455 0 +24 -387 453 436 0 +498 -7 146 -374 0 +618 463 234 411 0 +628 80 0 +519 -128 0 +234 -263 0 +257 -247 367 0 +431 -506 162 66 0 +-389 -180 222 -285 0 +624 -631 88 -173 0 +168 -478 141 155 0 +-168 418 -194 242 0 +-537 610 641 22 0 +-472 568 500 0 +-550 8 228 -538 0 +-1 -495 -640 406 0 +132 -461 -111 -258 0 +-422 -349 105 -550 0 +-22 -384 0 +387 358 104 -175 0 +-183 85 0 +308 342 248 644 0 +-181 560 -518 633 0 +539 -600 94 407 0 +-440 184 406 -240 0 +-550 -46 549 -230 0 +-356 80 551 -425 0 +-605 -596 191 378 0 +-81 249 611 -270 0 +-573 -82 0 +127 -314 305 339 0 +-615 -76 -473 0 +-523 343 -379 -366 0 +-148 -192 68 266 0 +-527 -547 0 +-353 -281 581 -536 0 +-319 409 -374 498 0 +-520 0 +-314 -578 78 127 0 +456 448 522 -204 0 +339 161 88 283 0 +-471 -584 -48 308 0 +610 396 -483 0 +-372 439 261 189 0 +-564 335 19 -413 0 +-278 273 482 458 0 +452 542 324 466 0 +348 -586 288 305 0 +179 345 439 386 0 +-330 -465 600 245 0 +-311 508 399 0 +399 6 -204 -394 0 +504 2 645 -405 0 +-110 142 0 +-76 -382 -206 455 0 +103 -336 0 +-601 -110 377 -55 0 +-270 -204 0 +-309 497 0 +-449 308 -48 -91 0 +327 -320 386 -515 0 +238 -185 -336 142 0 +-52 36 -579 -362 0 +-13 439 -494 136 0 +-547 -384 27 471 0 +245 249 0 +-278 4 -264 0 +220 107 -597 -52 0 +-87 -118 -588 371 0 +-96 -536 99 629 0 +-473 88 0 +-596 -39 0 +-478 455 584 59 0 +290 191 -48 378 0 +-157 -526 0 +32 382 -196 91 0 +67 -289 10 -107 0 +68 266 -573 -330 0 +398 93 214 0 +-47 332 -232 11 0 +-129 8 0 +80 93 0 +-115 121 -56 331 0 +-240 -578 447 444 0 +-270 -573 -271 -446 0 +69 -64 508 337 0 +60 381 0 +113 126 -353 -92 0 +407 211 0 +50 -253 423 398 0 +144 428 -309 -568 0 +-510 -622 -141 288 0 +-79 -643 0 +575 -384 0 +-270 245 456 522 0 +335 -421 -354 -46 0 +227 -42 340 592 0 +-52 -58 -568 379 0 +-518 -181 633 381 0 +151 -320 608 -409 0 +134 508 -611 -405 0 +-631 -640 -615 -143 0 +-130 -617 0 +486 -196 342 0 +217 335 25 -627 0 +-477 -567 50 -373 0 +102 -605 288 -475 0 +-268 540 453 -635 0 +-464 -139 -635 -72 0 +-320 339 184 0 +-346 497 431 172 0 +234 -366 0 +613 -200 577 274 0 +12 -209 0 +-374 -640 505 -375 0 +-115 176 323 -190 0 +-430 -443 0 +-287 421 -175 90 0 +-187 290 377 367 0 +10 -550 260 0 +-259 -41 -326 448 0 +611 208 249 -192 0 +610 -426 -533 103 0 +154 142 583 -195 0 +-118 385 219 -165 0 +9 476 -110 334 0 +21 -365 448 -204 0 +-443 -125 280 57 0 +145 -201 80 397 0 +-506 501 -162 -193 0 +-240 151 -372 -409 0 +-116 -13 -15 -177 0 +-337 266 -265 0 +78 505 -473 0 +385 -263 -293 0 +350 304 155 0 +-417 629 0 +498 525 529 256 0 +10 324 542 -289 0 +586 319 304 339 0 +335 555 -487 351 0 +434 234 -72 0 +279 569 335 0 +-135 -444 5 -372 0 +334 483 142 187 0 +455 -48 486 316 0 +448 -309 -521 365 0 +35 -576 450 308 0 +431 -559 0 +-129 -268 540 40 0 +159 -461 407 84 0 +-114 -213 608 -564 0 +-62 -27 -576 -38 0 +414 500 -430 411 0 +585 -181 0 +-235 -479 335 217 0 +305 18 0 +-514 -204 -69 208 0 +-337 405 148 209 -539 -399 376 -12 573 0 +452 436 -124 -387 0 +-512 85 472 390 0 +-70 258 -443 85 0 +49 -41 497 -346 0 +-515 -553 -240 327 0 +-569 -415 -485 -71 0 +20 -264 0 +107 -597 220 411 0 +-643 100 24 37 0 +-135 -553 272 -444 0 +-47 -232 -200 334 0 +628 -634 0 +575 -238 396 -44 0 +-240 312 386 213 0 +-645 -427 -330 -81 0 +24 -549 -46 0 +545 -175 -46 422 0 +-487 410 551 351 0 +24 -484 646 -643 0 +-309 150 -441 -131 0 +164 -187 367 -384 0 +-48 267 -462 0 +323 458 0 +-79 228 0 +-565 -597 -646 -129 0 +-408 -92 -353 281 0 +-200 -48 0 +-571 420 460 381 0 +-626 524 -527 -644 0 +24 40 0 +166 52 -385 193 -343 125 -411 87 -457 0 +432 290 -563 -39 0 +496 18 -486 -462 0 +301 423 0 +-41 514 391 172 0 +57 -87 280 -568 0 +144 428 -506 431 0 +154 575 0 +-125 -579 107 220 0 +-479 410 -235 -46 0 +93 -516 -303 439 0 +-541 341 245 -270 0 +-467 -117 -640 155 0 +217 548 634 0 +514 391 208 431 0 +213 272 312 -553 0 +505 305 -374 -375 0 +425 -169 335 -46 0 +548 214 0 +-82 277 49 -617 0 +-280 -122 26 -443 0 +-552 5 294 207 0 +205 207 -320 -552 0 +381 -222 -336 195 0 +-420 95 121 -250 0 +-193 306 -468 -492 0 +16 284 62 -460 0 +-474 -595 80 358 0 +-285 16 507 -331 0 +198 627 548 0 +26 -280 -430 -61 0 +164 433 334 44 0 +-436 453 -237 -289 0 +-196 -530 -76 314 0 +299 -429 294 -624 0 +16 298 575 -123 0 +-640 -59 170 -196 0 +306 219 343 -165 0 +-192 68 -209 266 0 +439 -534 158 325 0 +-612 242 -475 102 0 +-313 -596 342 267 0 +452 -237 -436 466 0 +-595 548 -474 -46 0 +469 -321 407 -376 0 +-568 66 162 -61 0 +-535 142 -571 -531 0 +331 -56 560 -264 0 +-616 188 -193 -395 0 +575 -499 -632 332 0 +-84 -81 -183 -61 0 +9 -384 -110 476 0 +-645 -427 508 150 0 +-61 -31 172 465 0 +-454 -558 452 -260 0 +-474 480 -595 -567 0 +-247 -194 342 0 +121 -637 95 602 0 +-203 546 -73 560 0 +16 -483 408 -216 0 +-516 -223 -303 -567 0 +5 -372 -552 207 0 +397 556 352 24 0 +495 -312 5 339 0 +-107 -395 67 -129 0 +629 -329 -60 -73 0 +134 -611 -573 -270 0 +-506 -61 0 +-111 -131 -441 245 0 +-451 -53 -429 608 0 +113 103 -285 126 0 +-640 288 -403 375 0 +615 302 -177 -42 0 +-552 207 -553 227 0 +377 284 -557 -83 0 +407 539 -265 -277 0 +224 332 -432 -218 0 +-571 -285 0 +406 -495 -1 -76 0 +538 -296 466 10 0 +105 -188 -289 -34 0 +-602 533 458 -285 0 +-583 396 532 610 0 +-454 -395 8 0 +105 268 -289 -293 0 +-173 -374 624 -429 0 +341 -541 2 211 0 +-374 586 -510 319 0 +-197 -536 509 381 0 +-39 44 433 290 0 +607 234 -98 453 0 +256 -128 -375 505 0 +-79 -538 10 0 +-607 -635 -90 8 0 +-177 -319 -42 409 0 +431 49 -346 497 0 +-319 409 -320 -393 0 +-315 -207 294 198 0 +-52 -366 0 +560 581 -536 -281 0 +290 -47 -48 0 +-298 -576 -35 -216 0 +-374 525 529 5 0 +343 -568 57 280 0 +-181 -110 -269 344 0 +-587 97 -648 -87 0 +-449 -91 164 108 0 +-309 211 -66 -347 0 +608 -606 160 -320 0 +315 198 -470 410 0 +294 88 207 -552 0 +-288 486 530 0 +-301 439 74 -567 0 +-568 -391 -61 424 0 +-353 123 -181 -233 0 +-570 290 247 242 0 +-594 185 -336 560 0 +396 -432 308 0 +-107 67 8 -289 0 +-372 -74 -299 439 0 +-643 234 523 -109 0 +-418 632 332 -257 0 +-436 -395 -237 10 0 +-38 83 103 -633 0 +139 -156 -263 8 0 +147 -196 18 143 0 +521 -559 -591 -118 0 +-506 -559 86 317 0 +575 -630 0 +-267 -147 -527 -626 0 +34 453 230 -175 0 +-467 519 -117 -45 0 +344 -269 -571 -110 0 +-414 -289 -52 0 +88 -505 -631 572 0 +293 -97 -193 -263 0 +343 -52 0 +-395 343 0 +-177 386 0 +49 -310 -330 326 0 +-547 -478 -63 0 +-364 458 -273 575 0 +381 -353 0 +217 -635 -255 -228 0 +284 -273 -364 458 0 +-597 -501 -542 -193 0 +-600 399 508 94 0 +117 -578 163 -76 0 +35 -257 450 377 0 +357 -372 -564 -351 0 +-576 -83 -216 -557 0 +-568 -559 0 +-485 549 -79 -230 0 +-139 -369 -593 -464 0 +-640 153 -524 -626 0 +-194 29 -361 242 0 +49 448 0 +86 -70 0 +279 114 -71 479 0 +-289 459 0 +439 205 0 +-473 -153 18 202 0 +-243 -76 -462 481 0 +507 -331 629 103 0 +-72 8 0 +-506 -77 -559 292 0 +416 310 0 +381 176 638 -190 0 +313 -596 641 -526 0 +-320 5 0 +-238 577 142 -44 0 +-258 208 -309 132 0 +-567 -564 634 0 +156 -579 165 411 0 +-509 381 154 -400 0 +-295 431 -368 0 +345 179 28 -553 0 +-62 577 -110 -27 0 +498 -451 608 -53 0 +-629 278 -121 -381 353 285 -560 417 -323 0 +455 153 304 -524 0 +234 -491 343 -57 0 +-393 406 0 +-544 499 103 224 0 +-100 67 0 +-458 -16 571 630 -154 336 -103 181 92 0 +352 556 358 -635 0 +-238 610 0 +282 342 -626 467 0 +105 -167 109 -65 0 +423 569 -223 -189 0 +334 471 27 -200 0 +-491 -395 0 +16 499 284 -544 0 +-372 639 -240 -340 0 +-75 -184 294 5 0 +-297 551 -207 -315 0 +584 59 32 -612 0 +439 -297 0 +24 214 0 +403 -29 -527 155 0 +-76 163 406 117 0 +-579 -97 -125 293 0 +448 -333 445 -26 0 +-297 50 0 +-485 25 -567 -627 0 +-368 521 -591 445 0 +28 189 261 -13 0 +-618 -368 385 70 0 +519 314 -612 -530 0 +259 -118 152 -309 0 +377 -344 -110 488 0 +-289 434 10 -580 0 +-510 -393 127 -314 0 +-187 -39 -547 367 0 +-315 -207 205 551 0 +-31 245 465 -122 0 +514 -559 391 448 0 +-371 -41 -568 31 0 +601 -110 -571 -621 0 +14 -209 407 -159 0 +-114 28 -213 -553 0 +32 -194 -359 0 +93 -564 0 +-626 -462 0 +-374 -429 572 -505 0 +-643 -65 -324 262 0 +-378 -462 355 -478 0 +516 -639 279 386 0 +-111 -346 497 172 0 +288 -570 -478 0 +233 -536 -278 599 0 +283 161 -374 498 0 +335 548 0 +448 522 456 508 0 +-310 2 211 0 +211 -346 431 497 0 +-506 -231 -193 -86 0 +-395 453 -463 0 +439 -477 -71 -373 0 +-640 -382 -206 455 0 +291 431 617 172 0 +-287 470 80 178 0 +224 -216 0 +503 438 40 214 0 +185 -571 629 -594 0 +304 112 0 +18 -612 -382 -206 0 +-271 -405 -446 2 0 +53 -127 -473 -240 0 +524 342 -644 455 0 +-418 632 -257 377 0 +191 378 -527 -257 0 +346 271 -81 -270 0 +305 -467 -117 155 0 +-92 -417 0 +-200 -384 -513 0 +-344 488 284 -576 0 +-58 379 -430 457 0 +602 -536 -637 -353 0 +431 211 259 0 +555 -160 253 205 0 +445 -31 448 465 0 +267 -313 -48 308 0 +-536 594 210 -353 0 +444 5 256 447 0 +548 217 145 -201 0 +-166 371 -588 -368 0 +164 -478 0 +155 -605 254 0 +127 -314 78 -473 0 +-346 -41 497 172 0 +-578 -642 -177 116 0 +407 -215 539 0 +256 406 0 +423 634 -223 -106 0 +621 96 458 -278 0 +515 -412 0 +-71 101 -136 50 0 +-190 176 -73 -353 0 +-631 305 -283 -174 0 +-37 402 -369 235 0 +-75 498 -184 -553 0 +-475 288 102 -478 0 +11 396 450 35 0 +359 -490 342 -196 0 +272 294 0 +439 627 543 -71 0 +-189 569 -71 -564 0 +452 -139 -124 -464 0 +453 -607 -550 -90 0 +284 -44 332 -238 0 +101 50 628 -136 0 +-462 170 304 -59 0 +284 -336 0 +-564 -303 -516 -567 0 +406 -320 624 -173 0 +424 -391 -568 -309 0 +34 -635 453 230 0 +214 545 422 -550 0 +-218 -38 377 -432 0 +-635 235 -37 480 0 +-571 -331 560 507 0 +515 -223 33 -13 0 +399 94 2 -600 0 +-276 201 279 80 0 +304 -355 288 1 0 +-564 -487 -567 351 0 +-569 335 -415 -287 0 +-81 130 -144 -122 0 +142 284 0 +332 -344 284 488 0 +-478 -626 0 +548 -33 474 50 0 +-87 306 0 +517 -216 -244 -384 0 +542 324 8 -395 0 +-473 -128 -592 -590 0 +-81 -456 85 388 0 +335 -158 354 279 0 +-71 555 0 +58 -295 -443 85 0 +-297 136 555 -494 0 +-491 98 0 +-391 -443 424 -122 0 +90 -550 358 421 0 +-442 -110 154 -507 0 +159 448 2 84 0 +50 548 479 114 0 +1 -578 -128 0 +-585 16 60 629 0 +498 -42 0 +354 -158 551 335 0 +-192 -69 -514 -461 0 +323 507 -331 154 0 +-336 121 96 621 0 +-271 539 -446 -270 0 +-547 -133 -576 -517 0 +-374 447 0 +-534 272 -345 -525 0 +208 -292 -41 598 0 +283 161 -473 272 0 +-287 -101 -545 410 0 +528 -605 -626 -138 0 +-125 -430 -468 0 +-239 -558 -593 392 0 +172 -333 -82 0 +-129 -139 40 -464 0 +-309 448 130 -144 0 +227 -42 552 370 0 +-384 577 0 +-90 24 -72 -607 0 +-240 386 -325 0 +-196 -510 -382 -206 0 +249 2 211 611 0 +-630 -442 -507 610 0 +342 246 -433 -194 0 +-616 188 -166 -558 0 +-538 228 452 -124 0 +-568 -23 591 -52 0 +608 -564 -74 -299 0 +-543 -372 279 75 0 +-270 448 0 +-321 -270 12 469 0 +165 411 -597 156 0 +-471 133 0 +-180 -278 602 -637 0 +-151 551 356 386 0 +-510 275 -370 339 0 +404 0 +50 -553 253 0 +628 354 439 -158 0 +-41 -587 183 -219 0 +205 198 -151 356 0 +-79 -65 0 +-567 634 28 -106 0 +-200 308 0 +-76 455 -43 300 0 +-71 480 -569 -415 0 +-521 365 -61 -81 0 +225 -384 442 363 0 +-485 397 0 +463 618 466 -87 0 +-53 -13 -451 227 0 +49 -512 -122 0 +105 67 -107 -579 0 +519 -612 590 -254 0 +47 -51 475 -200 0 +450 35 332 308 0 +-370 256 304 275 0 +356 -151 -223 -13 0 +435 -216 0 +-481 -640 -529 -374 0 +604 24 167 -46 0 +221 -105 -324 0 +274 308 613 -39 0 +542 -593 324 -558 0 +-462 153 304 0 +325 158 -564 386 0 +-289 -87 220 107 0 +-129 -580 434 -263 0 +431 -502 -587 -497 0 +-48 -140 -257 0 +11 332 450 35 0 +-82 -376 404 0 +-570 -194 247 242 0 +423 -549 487 480 0 +-45 -168 -51 0 +7 -553 227 -261 0 +385 -523 -558 -379 0 +95 -637 323 602 0 +-236 -194 32 63 0 +332 526 435 575 0 +-115 647 -4 121 0 +224 377 0 +-444 -13 -177 -135 0 +390 292 85 -77 0 +-598 347 0 +16 -435 224 582 0 +589 343 -579 0 +-51 530 570 -462 0 +-194 -361 29 32 0 +-355 -640 1 -196 0 +16 83 -633 -38 0 +-257 -200 0 +407 -330 0 +332 575 483 187 0 +-330 245 -514 -69 0 +434 -597 -580 -129 0 +-421 -354 217 -567 0 +464 -287 574 -635 0 +334 363 -298 -35 0 +-461 -183 -84 -111 0 +-23 457 -368 591 0 +-643 -65 -620 580 0 +407 -69 49 -514 0 +-580 8 234 434 0 +362 411 -430 -152 0 +-220 -566 306 411 0 +164 11 0 +-441 172 -111 -131 0 +634 -106 198 410 0 +642 -406 -370 0 +40 104 214 387 0 +-374 -320 -312 495 0 +633 -417 458 -518 0 +-450 636 -478 11 0 +-391 -559 424 -118 0 +-596 418 342 -168 0 +-148 -277 -192 -265 0 +570 530 455 32 0 +-253 279 335 398 0 +-462 -486 496 -128 0 +406 440 304 489 0 +83 154 -633 -110 0 +327 386 498 -515 0 +-579 -565 -643 -646 0 +-362 36 -366 -125 0 +342 455 -267 -147 0 +-278 633 -518 458 0 +-550 -119 0 +-263 -523 0 +566 -568 441 -61 0 +-87 -558 419 0 +-276 201 198 548 0 +-531 -507 0 +-233 -336 123 323 0 +-597 -523 457 -379 0 +381 614 -120 95 0 +-229 402 -262 -79 0 +-405 360 0 +505 304 -375 256 0 +216 110 38 -610 -142 -363 -224 -284 -575 0 +641 -257 -22 -513 0 +-420 -353 -250 20 0 +-558 -36 -100 10 0 +234 -579 0 +539 394 -270 0 +-485 549 -230 40 0 +-576 426 -613 -216 0 +-418 632 -547 377 0 +546 -353 -536 -203 0 +-525 -372 -240 -345 0 +-576 535 224 232 0 +-489 304 155 0 +450 -194 -39 35 0 +396 -216 0 +-255 214 -228 -369 0 +-35 575 -298 -39 0 +-118 -122 0 +638 -353 602 0 +341 -270 172 0 +-209 -271 407 -446 0 +-449 -91 -596 -527 0 +49 -81 0 +-579 8 0 +629 -73 389 0 +-251 -73 0 +-617 277 407 -461 0 +-9 -247 334 164 0 +-287 -561 24 415 0 +-58 379 343 390 0 +-71 -479 217 -235 0 +-330 134 539 -611 0 +555 261 205 189 0 +410 335 0 +211 445 -258 132 0 +147 -626 143 -510 0 +-10 -453 643 -452 72 129 -105 -8 593 0 +217 -71 -421 0 +-366 8 0 +-278 281 0 +-249 -3 208 445 0 +-478 -348 155 -322 0 +310 -376 -360 -82 0 +391 431 514 49 0 +-81 -130 -68 -330 0 +-478 242 0 +-249 211 -3 445 0 +555 -562 294 0 +-536 -278 222 -389 0 +242 -584 164 -471 0 +377 44 433 -257 0 +519 -462 300 -43 0 +611 172 -82 249 0 +323 -417 0 +-45 -267 108 -147 0 +-550 -139 8 -464 0 +350 511 -605 288 0 +8 -349 -369 -422 0 +556 -635 480 352 0 +371 -568 457 -588 0 +-368 -502 0 +130 85 -461 -144 0 +647 -281 278 0 +-425 -71 -356 279 0 +-237 -156 366 0 +337 -209 0 +381 -73 -212 0 +234 -52 -362 36 0 +8 -635 -349 0 +548 -569 0 +505 -375 339 -510 0 +150 445 -26 -333 0 +174 -350 455 -128 0 +-503 -124 221 -129 0 +43 236 -51 -45 0 +10 607 -289 -98 0 +-87 -166 0 +480 -124 -235 0 +594 210 554 629 0 +-223 -413 19 -567 0 +519 78 0 +-272 572 -327 0 +-149 -589 -52 -395 0 +-166 98 -263 23 0 +-588 343 -430 371 0 +-380 -368 385 -472 0 +-559 -61 0 +117 304 -393 163 0 +-414 459 -87 -395 0 +-21 539 404 -270 0 +-550 -129 540 -268 0 +-48 102 -196 0 +20 614 -120 -285 0 +-460 -571 -110 62 0 +539 171 437 -401 0 +-478 -449 -91 -547 0 +-430 445 0 +385 -395 0 +-534 -493 -325 272 0 +498 205 0 +-571 537 585 142 0 +-611 -159 0 +-128 590 455 -254 0 +-621 601 103 575 0 +-557 -576 -38 -83 0 +135 555 -297 373 0 +135 373 -553 28 0 +303 -71 -485 -104 0 +-181 185 323 -594 0 +445 -152 -587 0 +-21 -573 -192 404 0 +519 -473 -590 -592 0 +284 363 0 +-398 410 397 -604 0 +454 380 234 411 0 +-96 -115 381 0 +-129 -72 0 +-222 -630 195 -417 0 +-320 -393 606 -163 0 +-644 288 -527 524 0 +-506 385 -618 70 0 +382 -605 91 -626 0 +385 380 466 454 0 +16 -233 123 629 0 +-68 211 -82 -130 0 +-124 217 0 +-41 -280 26 -568 0 +322 513 342 -257 0 +-571 154 0 +-643 -646 234 -565 0 +-384 -517 -133 290 0 +-470 -223 315 93 0 +498 495 -312 -473 0 +436 -593 -124 -387 0 +-611 -192 134 -376 0 +-181 -353 113 126 0 +-183 431 -84 208 0 +569 279 80 0 +-39 -35 -110 -298 0 +-485 -550 0 +554 -182 -113 -285 0 +208 -61 132 0 +-492 -468 -587 -166 0 +-87 -565 -289 0 +-140 -225 396 11 0 +155 43 -478 0 +535 142 232 577 0 +-295 58 445 -587 0 +439 294 0 +32 -91 -449 308 0 +-576 -532 0 +-443 441 566 85 0 +-547 -478 322 513 0 +10 -98 466 607 0 +-46 80 -574 619 0 +-129 -366 0 +268 -593 0 +-46 -421 -354 628 0 +445 208 391 514 0 +-639 50 608 516 0 +-635 328 -609 105 0 +466 -366 0 +641 -216 0 +477 423 -485 -438 0 +498 -505 -374 572 0 +628 551 351 -487 0 +-430 362 -52 -152 0 +-575 583 218 0 +492 411 -597 237 0 +-200 334 -532 -63 0 +-499 577 142 -632 0 +-223 325 158 -13 0 +301 -46 -352 628 0 +-240 161 -393 0 +-216 517 377 -244 0 +548 480 477 -438 0 +-494 -564 -553 136 0 +-613 577 -216 426 0 +-289 -100 -36 8 0 +-330 -437 -132 -81 0 +-522 -209 -215 -204 0 +-426 224 16 -533 0 +105 -579 542 0 +-39 308 -191 -488 0 +581 -536 629 -281 0 +74 80 279 -301 0 +488 -344 -110 334 0 +290 -478 0 +-223 551 0 +-51 -433 164 246 0 +168 455 -478 141 0 +575 -92 408 -483 0 +308 -91 -478 -449 0 +-289 -87 -97 293 0 +217 -175 -540 595 0 +608 160 -429 -606 0 +16 -533 -426 -216 0 +-62 -27 363 334 0 +31 306 -371 431 0 +-588 -125 371 -443 0 +-264 -420 -250 560 0 +-364 -273 -110 -92 0 +-283 18 -174 406 0 +-395 588 -193 -434 0 +-246 254 455 -48 0 +455 304 -206 -382 0 +-274 513 0 +445 162 -506 66 0 +-278 154 0 +-544 499 -181 -216 0 +-550 358 -229 -262 0 +5 205 -451 -53 0 +-461 -192 -68 -130 0 +383 -357 -320 608 0 +49 277 -617 -204 0 +6 -82 -405 -394 0 +-606 160 -13 -240 0 +339 -320 -7 146 0 +610 -273 -630 -364 0 +-216 -432 377 -218 0 +455 -403 304 375 0 +-27 -62 -576 284 0 +641 -488 -257 -191 0 +269 190 -353 -181 0 +233 599 -353 20 0 +-196 467 282 -527 0 +-174 -76 406 -283 0 +445 -219 -118 183 0 +620 -25 480 -124 0 +616 -588 0 +488 -39 -344 -110 0 +306 -125 0 +147 -510 143 288 0 +540 -268 40 8 0 +131 -416 -401 -461 0 +452 -387 436 -79 0 +580 -175 -620 -643 0 +-131 245 85 -441 0 +600 -81 -192 0 +50 423 -303 -516 0 +445 391 150 514 0 +-567 402 -569 -415 0 +410 -564 0 +78 112 481 -243 0 +208 -456 -309 388 0 +-447 -578 -496 -128 0 +448 -598 508 394 0 +379 -443 -58 343 0 +-527 -361 29 11 0 +480 40 167 604 0 +-204 245 0 +217 -287 0 +-593 -540 -124 0 +161 -631 -429 283 0 +-527 43 236 288 0 +392 -239 -643 -366 0 +-398 -604 335 -46 0 +-51 63 -547 -236 0 +529 -631 0 +-37 452 40 0 +-447 -496 519 256 0 +431 591 -506 0 +-46 620 -635 -25 0 +-593 105 0 +-302 88 -137 294 0 +-568 -419 -193 -428 0 +-143 -615 406 18 0 +-461 -521 365 -111 0 +371 306 343 -588 0 +386 -606 5 160 0 +-68 -130 -192 208 0 +-525 -13 -240 -345 0 +18 -578 0 +-461 131 -270 -416 0 +608 -213 -114 551 0 +-366 -542 -501 411 0 +-71 -179 -619 -223 0 +-204 311 0 +-61 183 306 -219 0 +17 54 539 -330 0 +-79 260 10 89 0 +424 -430 -391 -41 0 +541 211 -317 431 0 +-30 629 -647 16 0 +211 -309 -258 132 0 +457 588 -434 234 0 +-609 328 -369 -593 0 +-3 208 -61 -249 0 +400 -216 244 16 0 +-470 551 315 410 0 +-9 -247 -39 -200 0 +-596 641 432 -563 0 +10 328 -124 -609 0 +-87 -368 -86 -231 0 +-135 227 -444 -534 0 +-571 381 -222 195 0 +-82 134 -611 -405 0 +397 480 0 +-369 -503 221 10 0 +32 282 -462 467 0 +188 -193 -616 466 0 +-590 -592 304 406 0 +29 -200 -361 242 0 +540 -72 -268 -175 0 +274 332 308 613 0 +-297 -137 88 -302 0 +402 -89 -124 -241 0 +574 -46 -635 464 0 +-597 8 -221 589 0 +457 343 0 +85 291 617 -81 0 +-71 -398 217 -604 0 +602 629 20 -637 0 +-361 29 -257 342 0 +545 217 40 422 0 +604 214 0 +37 -635 -129 100 0 +361 577 55 -547 0 +-572 227 412 -13 0 +453 24 646 -484 0 +-263 -579 0 +-472 -380 -166 -118 0 +363 458 0 +-352 480 548 301 0 +448 208 0 +628 279 474 -33 0 +288 -486 0 +2 399 54 17 0 +-571 -533 142 -426 0 +475 -596 -605 47 0 +480 464 574 -124 0 +199 -510 339 622 0 +-286 -73 0 +-643 234 -107 67 0 +420 560 -181 460 0 +123 -181 -233 381 0 +-587 3 431 468 0 +618 -263 463 385 0 +-207 294 279 -315 0 +466 434 -580 -129 0 +-612 314 -76 -530 0 +-571 218 -110 -126 0 +-637 -329 0 +147 112 143 78 0 +-643 -90 -607 -175 0 +189 261 386 50 0 +-578 -314 519 127 0 +-378 355 -612 108 0 +-220 -587 -566 -52 0 +142 -571 269 0 +580 -79 452 -620 0 +-350 -128 174 112 0 +-175 -79 0 +-587 414 500 -166 0 +-604 -398 -287 80 0 +409 -319 -320 406 0 +443 -468 219 0 +-181 560 -60 0 +88 7 -261 -297 0 +233 323 95 599 0 +-39 -110 -364 0 +154 583 363 -195 0 +-41 -118 0 +-273 -630 224 -364 0 +-196 -102 -275 304 0 +-578 -163 272 606 0 +-546 0 +516 -297 198 0 +136 -494 294 -564 0 +332 575 232 535 0 +-393 300 18 0 +100 37 -550 453 0 +409 -374 -319 -429 0 +305 339 -615 -143 0 +-643 328 -65 -609 0 +-175 -307 -119 105 0 +457 -597 156 165 0 +342 -626 636 0 +-640 -143 -374 -615 0 +246 308 -433 342 0 +-46 480 0 +406 -76 -275 0 +-559 208 0 +560 -92 -233 123 0 +112 519 -489 -528 0 +341 49 407 -541 0 +339 -283 -640 -174 0 +629 113 0 +591 411 306 -23 0 +-286 -212 -180 -417 0 +-124 -620 10 580 0 +361 -39 290 55 0 +554 -420 -417 0 +274 613 -547 -576 0 +-478 102 -475 155 0 +-372 135 373 50 0 +588 -193 -434 -263 0 +-576 9 476 224 0 +-368 500 -87 414 0 +-87 -579 0 +-135 -320 608 0 +198 -297 137 276 0 +-576 -200 0 +316 -196 486 32 0 +284 377 -499 -632 0 +276 -564 -71 0 +419 -289 296 457 0 +-597 -260 -454 -129 0 +-427 -645 -192 -461 0 +214 -352 301 -567 0 +433 290 377 44 0 +-587 566 441 -309 0 +-139 -175 105 -464 0 +-196 348 304 -586 0 +-75 88 -297 -184 0 +109 -167 24 453 0 +-553 -53 -451 227 0 +255 413 -567 214 0 +95 -197 509 560 0 +-111 306 -424 0 +-13 386 0 +-228 -255 -485 -124 0 +-146 305 -631 -300 0 +431 -77 -506 292 0 +-83 -344 0 +-71 543 627 279 0 +-366 380 411 454 0 +-115 509 -197 121 0 +105 228 -538 -175 0 +-104 335 358 303 0 +423 -477 28 -373 0 +-41 -625 295 172 0 +474 -564 -33 -567 0 +249 150 2 611 0 +10 -558 -565 0 +-13 294 0 +560 185 -594 -571 0 +453 -565 -395 -646 0 +247 -194 -570 -48 0 +586 319 305 -374 0 +2 49 0 +339 -177 0 +507 323 -331 -336 0 +-240 -578 146 -7 0 +-264 99 -96 -285 0 +-41 648 306 -291 0 +-180 -278 99 -96 0 +397 410 -549 487 0 +427 431 448 512 0 +105 580 24 0 +-204 211 -132 -437 0 +574 104 0 +50 628 -315 0 +178 410 470 -287 0 +-228 40 -255 480 0 +332 -110 0 +50 -299 -74 -372 0 +-640 -586 288 348 0 +457 220 107 -395 0 +-249 -309 -3 150 0 +-348 342 -196 -322 0 +290 450 377 35 0 +78 -631 0 +234 -125 318 565 0 +-230 358 -550 549 0 +-485 235 0 +-153 -578 202 78 0 +-283 -510 -174 -631 0 +392 234 105 -239 0 +213 312 5 608 0 +314 -510 -530 155 0 +127 304 -314 406 0 +448 -333 -559 -26 0 +144 85 -443 428 0 +-351 50 386 357 0 +-420 -250 95 381 0 +-462 519 -141 -622 0 +2 -394 -405 6 0 +-92 -110 499 -544 0 +641 -596 361 55 0 +498 383 -372 -357 0 +-382 -206 288 -640 0 +-401 -192 0 +164 577 -632 0 +-111 -424 -430 0 +397 387 -175 0 +-429 -177 0 +214 -635 0 +-506 -58 379 385 0 +508 211 625 -311 0 +237 156 0 +474 279 -33 80 0 +377 157 -216 0 +-420 -278 20 -250 0 +-138 -612 32 528 0 +-426 -38 -533 -92 0 +167 397 -65 604 0 +-153 339 304 202 0 +-124 221 -593 -503 0 +-547 -91 -449 242 0 +351 -487 28 423 0 +439 189 261 -13 0 +-618 70 -193 -568 0 +27 471 308 377 0 +-39 284 0 +304 481 -243 288 0 +-38 537 -384 0 +-68 49 -330 -130 0 +500 -506 385 414 0 +-395 -129 -296 538 0 +-550 -46 503 0 +205 207 88 -552 0 +466 -436 10 -237 0 +-122 -521 365 -81 0 +172 -41 -31 465 0 +227 -534 -325 -493 0 +201 548 -276 -564 0 +-184 -75 -372 -177 0 +283 88 -631 161 0 +390 57 -52 280 0 +545 358 0 +-39 -83 -216 -557 0 +95 594 381 210 0 +-387 -464 0 +-372 -213 279 -114 0 +291 -461 617 -122 0 +472 -500 0 +413 -474 0 +344 -269 -110 -92 0 +-207 -223 -534 -315 0 +-240 -525 -345 386 0 +-75 294 -429 0 +-643 -175 328 -609 0 +537 -181 142 0 +415 545 0 +569 -189 -223 93 0 +512 388 0 +279 386 253 -160 0 +610 142 0 +-240 -451 -53 -553 0 +-393 -429 572 -505 0 +-631 304 0 +482 212 0 +327 227 -515 -13 0 +458 -633 610 83 0 +504 645 -148 -82 0 +-477 628 551 0 +-15 -297 -429 -116 0 +-348 -626 342 -322 0 +-474 -595 358 -71 0 +-71 402 0 +-380 -430 -472 343 0 +-177 -534 -327 0 +-372 50 15 106 0 +-197 509 -73 629 0 +-630 142 0 +396 224 435 526 0 +551 628 474 -33 0 +-56 331 -285 -264 0 +537 585 575 -571 0 +-587 -472 -193 -380 0 +332 274 613 -257 0 +284 582 -92 -435 0 +-478 155 530 570 0 +606 -553 272 0 +203 -92 381 544 0 +611 249 49 407 0 +-46 169 484 -550 0 +-462 -467 -76 -117 0 +-148 -520 311 -270 0 +5 -642 116 -393 0 +-579 -52 -379 -523 0 +-166 -395 588 -434 0 +-204 522 211 456 0 +-92 190 269 629 0 +306 -122 566 441 0 +40 -228 358 -255 0 +9 -38 -39 476 0 +407 208 394 -598 0 +316 155 -527 486 0 +-52 380 454 -597 0 +641 -38 0 +63 -51 290 -236 0 +165 156 -579 -52 0 +-120 614 629 -73 0 +255 -402 -595 0 +213 205 312 5 0 +-620 230 0 +377 284 -442 0 +628 -415 -569 -46 0 +-631 88 116 -642 0 +-137 608 -302 -429 0 +59 108 584 -45 0 +437 -204 171 399 0 +109 -635 -167 -129 0 +-274 -282 -596 -605 0 +78 -128 0 +-486 18 496 -612 0 +396 -596 -247 0 +466 10 139 -156 0 +-128 300 112 -43 0 +500 -41 -368 0 +-328 491 234 453 0 +157 575 364 -576 0 +-316 -257 -48 0 +431 208 -144 130 0 +290 -225 577 -140 0 +-201 145 402 -567 0 +386 551 75 -543 0 +208 21 407 0 +455 -48 -348 -322 0 +539 508 0 +-27 -62 377 -216 0 +448 456 522 -82 0 +163 -128 256 0 +454 380 -597 411 0 +103 -278 195 -222 0 +217 358 0 +402 -89 -79 -241 0 +112 455 0 +-51 418 -200 -168 0 +476 -38 377 9 0 +427 -456 -49 0 +496 -76 455 -486 0 +-440 498 256 184 0 +-98 -289 607 105 0 +346 -270 271 172 0 +105 -597 -98 607 0 +-614 531 121 -571 0 +-440 184 256 5 0 +-216 -298 577 -35 0 +548 -564 189 0 +603 -128 256 -170 0 +-395 452 -293 268 0 +-194 232 -384 0 +-447 -510 -631 -496 0 +104 -287 387 24 0 +-568 280 431 0 +373 28 135 -534 0 +-568 472 0 +334 -225 -200 -140 0 +-639 -223 -534 516 0 +491 -328 10 466 0 +207 -429 -552 608 0 +-152 -125 362 390 0 +178 -71 480 470 0 +214 229 252 423 0 +-280 -591 0 +233 -353 599 -536 0 +-297 -429 160 -606 0 +371 -588 -568 -87 0 +217 -178 0 +445 -368 -152 0 +390 -125 -231 -86 0 +279 -553 0 +156 -395 -87 165 0 +-329 -60 -353 -264 0 +84 49 -330 159 0 +-635 -229 -262 217 0 +-129 -635 436 -387 0 +381 113 126 -571 0 +611 -81 249 -330 0 +599 -73 233 -353 0 +228 -538 -65 105 0 +575 -576 -537 22 0 +-587 -318 502 -193 0 +-420 -250 -536 -278 0 +-193 -566 -220 -568 0 +-474 -567 214 -595 0 +105 89 -175 260 0 +-584 -471 -51 164 0 +-145 24 358 609 0 +331 -278 -92 0 +-356 -253 0 +-626 -640 143 147 0 +-570 11 -527 247 0 +326 -310 -82 172 0 +-161 -320 494 294 0 +279 479 114 628 0 +386 345 179 -564 0 +-429 294 312 213 0 +-45 108 524 -644 0 +2 508 0 +-177 -383 -578 -603 0 +431 566 -587 441 0 +498 -553 -357 383 0 +457 -165 219 -430 0 +198 -179 -619 80 0 +-578 88 0 +-1 -495 256 304 0 +396 -83 -557 610 0 +-371 31 445 -506 0 +-438 214 -567 477 0 +-175 -72 -484 646 0 +406 -7 -320 146 0 +-118 -166 -23 591 0 +325 279 158 608 0 +-372 -177 493 0 +-579 523 105 -109 0 +-461 49 0 +-115 -329 -60 121 0 +-383 -177 -603 -473 0 +501 -506 -162 -87 0 +227 -357 383 -372 0 +-374 -76 0 +-175 37 -643 100 0 +387 480 -124 104 0 +-79 10 34 230 0 +234 -97 293 -52 0 +211 508 -69 -514 0 +431 -625 211 295 0 +83 103 610 -633 0 +294 -151 356 551 0 +-384 488 -200 0 +-163 -429 339 606 0 +245 346 271 -330 0 +44 -384 -200 433 0 +-450 242 290 636 0 +-109 -646 0 +-514 -81 0 +-612 78 170 -59 0 +-481 -529 256 519 0 +-46 80 -477 0 +-79 452 109 -167 0 +85 -122 0 +-440 -42 227 184 0 +-490 359 32 -196 0 +358 169 484 -550 0 +-45 32 0 +231 457 -392 -395 0 +105 -550 436 -387 0 +-297 88 412 -572 0 +-171 -338 0 +-366 343 293 -97 0 +397 545 422 24 0 +551 386 253 -160 0 +-412 -564 386 -19 0 +-181 281 -408 323 0 +294 135 0 +214 229 93 252 0 +-509 -400 -353 -181 0 +454 380 343 -579 0 +103 -353 96 621 0 +598 431 49 -292 0 +-175 453 228 -538 0 +-578 -240 184 -440 0 +-223 -276 423 201 0 +-421 -354 214 93 0 +608 50 136 0 +566 -122 390 441 0 +16 103 0 +-419 -52 -430 -428 0 +-25 40 217 620 0 +214 90 -369 421 0 +-351 357 294 555 0 +-375 -510 -393 505 0 +84 -204 159 208 0 +-631 305 127 -314 0 +411 -430 -149 0 +75 28 -543 -13 0 +499 -544 -216 -92 0 +-226 305 490 -626 0 +5 205 160 -606 0 +600 -401 245 -465 0 +298 -216 -123 -336 0 +-209 -148 0 +-196 243 -636 342 0 +-564 -189 569 -567 0 +-285 594 -180 0 +-225 334 290 -140 0 +466 -643 0 +-374 -173 624 5 0 +-286 554 -212 -417 0 +-148 -270 134 -611 0 +448 427 -41 0 +381 -4 -536 647 0 +518 381 95 0 +-86 -231 -193 -587 0 +302 5 -372 0 +501 -162 385 -118 0 +60 458 -585 -417 0 +211 2 84 159 0 +160 386 227 0 +205 516 198 -639 0 +-412 386 -19 551 0 +-180 323 0 +77 390 -125 149 0 +-353 544 203 -571 0 +509 -73 -197 381 0 +99 560 95 -96 0 +24 -89 -241 -46 0 +647 -4 323 638 0 +-166 237 -395 492 0 +32 -316 -367 -194 0 +23 457 -597 98 0 +-65 105 646 -484 0 +450 -200 334 35 0 +459 -414 -579 411 0 +88 294 -606 160 0 +-180 -264 0 +234 -52 380 454 0 +641 -257 187 0 +465 -31 -559 448 0 +575 610 0 +-479 358 -235 -71 0 +-48 -490 -462 0 +-621 224 16 601 0 +-92 -507 0 +-578 615 227 302 0 +168 -527 155 141 0 +445 -292 208 598 0 +377 -547 55 361 0 +555 -276 201 335 0 +-576 308 367 -187 0 +-29 -612 32 403 0 +-289 -52 237 492 0 +-391 -81 -122 0 +126 560 -336 113 0 +213 312 -240 -372 0 +-78 -622 375 0 +436 -387 -175 105 0 +-464 -129 -139 -369 0 +469 -330 12 0 +370 -42 272 552 0 +-260 -454 -263 -593 0 +-530 -196 314 18 0 +-417 95 0 +382 355 -112 0 +94 -64 573 0 +-487 551 351 335 0 +30 -476 -216 -571 0 +-405 266 68 -204 0 +425 -485 -169 93 0 +448 -183 -559 -84 0 +19 628 -413 -564 0 +93 -46 0 +-492 -125 0 +198 325 158 -297 0 +-187 -9 0 +-124 262 -324 10 0 +-120 -115 121 614 0 +208 394 -598 508 0 +532 377 -583 284 0 +8 234 -459 0 +495 339 -320 -312 0 +582 103 -435 284 0 +-128 -393 0 +424 -61 -391 -587 0 +139 -156 466 -129 0 +-401 -69 -81 0 +-443 -618 70 411 0 +-289 -328 105 491 0 +-27 334 -110 -62 0 +403 141 45 0 +-547 -236 63 32 0 +105 -550 -67 -556 0 +431 427 512 208 0 +-86 -87 -568 -231 0 +108 288 0 +11 35 -576 450 0 +-601 -499 0 +245 -645 -330 -427 0 +174 519 112 -350 0 +163 -374 117 -510 0 +208 249 611 -204 0 +519 642 226 256 0 +-578 227 -505 572 0 +-110 -384 -44 -238 0 +-593 -635 0 +131 211 0 +-327 -199 256 5 0 +-264 -536 0 +345 179 205 279 0 +639 -372 -340 498 0 +304 -393 -496 -447 0 +36 -362 385 -558 0 +300 -612 519 -43 0 +638 20 0 +-625 85 -81 295 0 +-45 -128 143 147 0 +407 6 -394 -148 0 +-369 422 217 545 0 +-391 424 -118 445 0 +508 172 0 +-348 455 342 -322 0 +319 586 339 305 0 +50 106 15 -553 0 +-620 453 580 -635 0 +-420 629 -250 -536 0 +306 -23 591 457 0 +-45 528 -138 -51 0 +98 23 -289 343 0 +-73 -180 0 +-579 -366 0 +493 -202 -374 5 0 +610 377 0 +159 84 -330 172 0 +498 -370 -473 0 +-193 36 -395 -362 0 +-576 22 -537 -38 0 +-289 -193 -362 36 0 +519 -612 -622 -141 0 +-398 -46 -604 410 0 +-289 8 -237 -436 0 +15 -372 106 279 0 +-635 105 239 0 +-219 183 -111 390 0 +-163 498 -374 606 0 +167 -550 358 604 0 +-124 119 -178 480 0 +198 410 -487 0 +622 199 -578 -76 0 +-367 108 290 -316 0 +334 -576 0 +50 19 -413 423 0 +-51 168 141 -612 0 +-567 402 487 -549 0 +288 359 -605 -490 0 +629 -285 0 +224 -544 499 -630 0 +411 -318 502 306 0 +314 -45 -530 519 0 +246 -48 -433 -547 0 +-76 -462 -206 -382 0 +10 -422 40 -349 0 +184 -440 498 -374 0 +99 -96 -180 -417 0 +585 458 537 224 0 +86 -309 -506 317 0 +575 400 244 16 0 +474 402 423 0 +-378 242 455 355 0 +-368 -468 -193 -492 0 +212 -353 -582 16 0 +28 608 0 +107 220 -193 -263 0 +-388 -512 41 0 +154 -126 142 218 0 +-536 -73 0 +-640 -102 -196 -275 0 +-129 -593 0 +-203 381 546 95 0 +-199 -327 406 227 0 +306 -193 77 149 0 +80 -46 -604 -398 0 +-73 602 -637 629 0 +335 351 279 -487 0 +355 -527 -378 -196 0 +-350 -128 174 -45 0 +638 560 251 0 +108 -418 290 0 +594 -73 629 210 0 +29 -547 -361 -48 0 +-252 423 562 -223 0 +421 -46 90 -65 0 +12 416 -186 -270 0 +-222 -336 323 195 0 +221 -79 -593 -503 0 +11 475 47 -478 0 +480 -124 -230 549 0 +-216 426 377 -613 0 +154 16 0 +-640 530 455 0 +267 -478 -313 308 0 +390 -231 411 -86 0 +396 361 308 55 0 +-292 598 445 211 0 +373 386 135 50 0 +-39 -583 532 -38 0 +227 283 -578 161 0 +126 121 113 -181 0 +172 427 512 -61 0 +-597 457 588 -434 0 +-553 -75 -184 -240 0 +636 -626 -527 0 +245 -330 598 0 +551 19 -413 410 0 +282 467 -48 -196 0 +486 455 316 -478 0 +-160 279 253 205 0 +-567 214 -421 -354 0 +-193 414 306 500 0 +-144 -309 130 211 0 +28 -114 -13 0 +32 29 -361 -547 0 +-246 288 -48 254 0 +-626 -117 -467 -640 0 +-568 77 -87 149 0 +489 -76 -473 440 0 +-130 -68 208 508 0 +533 -278 -602 458 0 +-593 -597 0 +-131 -441 -461 -111 0 +-65 -485 0 +526 334 435 142 0 +-270 68 12 266 0 +318 565 385 466 0 +217 80 0 +-110 -632 577 -499 0 +-102 -275 -462 304 0 +-1 -495 -393 304 0 +-510 -631 622 199 0 +246 -433 242 164 0 +-92 621 -278 96 0 +-485 387 104 -369 0 +-355 112 0 +-42 -495 519 0 +358 301 -352 80 0 +560 -181 -582 0 +-302 -493 0 +-571 400 244 -110 0 +609 -124 -145 214 0 +436 24 -387 -72 0 +352 556 24 -287 0 +288 528 -605 -138 0 +-374 -578 0 +-188 452 -263 -34 0 +-111 85 0 +-578 519 642 226 0 +-45 -605 0 +422 545 -124 214 0 +49 -132 -204 -437 0 +-73 233 599 381 0 +121 546 -203 95 0 +-520 311 -209 -192 0 +78 -640 0 +-612 -147 -267 242 0 +-124 37 0 +455 316 486 242 0 +-89 -124 480 -241 0 +-491 -263 -57 385 0 +410 -33 474 555 0 +-578 78 -206 0 +-436 10 -237 -558 0 +95 323 647 -4 0 +40 8 221 -503 0 +16 -195 0 +-240 -473 161 283 0 +5 -173 624 -393 0 +487 -567 217 -549 0 +-61 -259 -326 -81 0 +-475 -51 -462 102 0 +155 342 350 511 0 +-486 18 496 455 0 +544 203 458 -278 0 +-596 396 -35 0 +-263 -166 618 463 0 +-282 -48 -274 -547 0 +57 411 -430 280 0 +455 18 147 143 0 +-52 -57 234 -491 0 +608 -116 5 -15 0 +-71 25 217 -627 0 +-61 31 -371 306 0 +-412 -19 -372 -223 0 +-42 -177 -642 116 0 +-72 -635 239 0 +3 -41 306 468 0 +335 301 -352 217 0 +-119 -307 -369 452 0 +-276 551 80 201 0 +-612 108 -282 0 +-320 -372 0 +-163 272 -42 606 0 +-124 214 -540 595 0 +-593 -289 0 +-562 50 608 451 0 +-129 -307 -119 40 0 +-567 198 0 +457 419 -597 296 0 +84 -461 159 -330 0 +-39 -200 -517 -133 0 +155 -527 524 -644 0 +350 511 -45 242 0 +-216 -583 532 -384 0 +340 406 592 -320 0 +276 137 -13 439 0 +582 -273 0 +445 -122 0 +560 614 -120 -73 0 +-52 -149 234 0 +256 5 53 -127 0 +-187 334 367 290 0 +646 -129 -550 -484 0 +-159 -192 14 -209 0 +-204 211 159 84 0 +-46 -101 80 -545 0 +227 -302 -137 -553 0 +-166 -587 23 0 +256 -76 -300 -146 0 +97 306 -193 -648 0 +107 385 -263 220 0 +331 -92 629 0 +-131 -441 -41 208 0 +-311 625 -330 -461 0 +-547 -51 475 47 0 +-645 -270 -427 245 0 +230 452 34 40 0 +439 -567 -516 -303 0 +542 -643 324 -366 0 +137 -372 0 +431 465 208 -31 0 +-336 -278 0 +-204 49 -310 326 0 +319 -640 -374 586 0 +525 406 -240 529 0 +-87 343 0 +539 12 0 +156 -395 -193 165 0 +50 569 423 -189 0 +557 11 449 641 0 +618 463 -87 -558 0 +-605 -246 0 +618 457 -395 463 0 +398 551 335 -253 0 +-478 644 248 308 0 +-376 -148 0 +-257 27 641 471 0 +-111 -461 -625 295 0 +525 -578 -240 529 0 +-223 205 0 +619 548 -46 -574 0 +288 -102 -275 305 0 +-39 -601 -55 142 0 +-285 -264 250 0 +509 -278 554 0 +-559 -371 -368 31 0 +-422 -349 -129 -124 0 +382 -462 -48 91 0 +-287 80 145 -201 0 +-270 407 0 +452 -263 109 0 +334 157 364 363 0 +-289 -188 10 -34 0 +-611 -209 -82 134 0 +-426 142 -384 0 +-285 323 0 +-263 646 8 0 +616 -424 -125 -430 0 +-247 577 -9 -547 0 +488 -344 641 284 0 +-383 -603 406 227 0 +-47 290 -232 -384 0 +43 108 236 -45 0 +-430 -166 0 +403 342 -29 -626 0 +172 -330 600 -465 0 +16 269 190 -353 0 +-83 575 -576 -557 0 +18 206 256 173 0 +-401 437 12 171 0 +207 -552 227 -13 0 +-462 32 -246 254 0 +-129 -597 307 -459 0 +-42 -199 0 +-221 589 -72 -579 0 +575 377 -442 0 +-197 121 509 -73 0 +40 453 -556 -67 0 +-494 136 -553 28 0 +234 453 -156 139 0 +-46 119 -65 -178 0 +-421 628 -354 358 0 +224 16 30 -476 0 +-553 639 -340 227 0 +321 -204 347 211 0 +408 -216 -483 -336 0 +-442 -216 -507 -336 0 +-379 -523 -395 457 0 +-442 -535 38 0 +544 203 560 -571 0 +419 234 457 296 0 +456 -81 522 -401 0 +-129 607 0 +-609 105 -550 328 0 +365 -461 -41 -521 0 +-27 11 -576 0 +458 30 575 -476 0 +-125 380 234 454 0 +-473 226 -76 642 0 +-412 198 -19 294 0 +188 -558 -87 -616 0 +358 101 335 0 +-430 85 219 0 +-87 -587 -220 -566 0 +457 -568 -424 616 0 +489 440 305 -374 0 +242 -471 -200 -584 0 +308 332 -191 -488 0 +-320 615 302 -631 0 +-119 -129 -124 -307 0 +519 -350 -45 174 0 +306 -193 -419 -428 0 +551 356 -151 608 0 +-110 225 334 442 0 +343 306 -428 -419 0 +-408 121 281 -336 0 +54 17 -573 -401 0 +119 402 -178 -124 0 +-74 -299 198 205 0 +-538 -369 10 228 0 +-216 -632 577 -499 0 +103 575 499 -544 0 +63 242 -236 -194 0 +370 -320 552 339 0 +498 -409 151 -372 0 +-585 629 458 60 0 +308 44 -576 433 0 +-456 448 388 431 0 +-593 -119 -307 -369 0 +152 -122 259 -568 0 +-474 -595 480 423 0 +423 198 0 +-422 -349 -643 -65 0 +-218 -432 224 641 0 +-559 -648 -506 0 +380 -125 454 -366 0 +-603 5 406 -383 0 +155 -626 0 +-374 78 0 +595 40 -485 -540 0 +-512 431 472 306 0 +-568 411 0 +-635 453 100 37 0 +-3 -61 -461 -249 0 +2 245 0 +600 208 -465 -192 0 +-72 -307 -65 -119 0 +-456 -461 388 -61 0 +311 -520 -209 508 0 +-270 -360 310 -573 0 +-467 348 0 +-475 102 -196 342 0 +-59 304 -196 170 0 +-110 -92 -633 83 0 +540 -268 -72 24 0 +-175 229 217 0 +269 458 629 190 0 +386 -184 -75 498 0 +-13 439 160 0 +-461 2 0 +-250 638 -420 560 0 +519 -473 -314 127 0 +-383 272 -603 -473 0 +172 -132 0 +-545 335 -287 -101 0 +331 121 -56 95 0 +453 392 -579 0 +-484 646 105 -550 0 +-481 -529 -76 -473 0 +167 604 -485 -79 0 +171 437 -573 -330 0 +310 407 -148 -360 0 +-510 -626 -355 1 0 +406 -481 -640 -529 0 +234 -239 392 8 0 +563 -511 -527 -257 0 +-372 213 5 312 0 +390 -111 -591 521 0 +-102 -626 -275 -510 0 +290 55 -384 361 0 +-193 -289 188 -616 0 +305 -592 -374 0 +521 -122 -591 -443 0 +15 386 0 +-387 -65 0 +78 -375 0 +-585 -92 -278 60 0 +-644 -612 524 -51 0 +-380 411 390 -472 0 +381 -115 -120 614 0 +357 -564 -351 -553 0 +-348 -45 108 -322 0 +-602 -353 103 533 0 +-196 -45 0 +386 551 345 179 0 +434 -580 -289 105 0 +-27 -62 -216 -576 0 +-47 -232 308 -576 0 +304 199 622 -374 0 +-148 508 0 +-120 323 614 -115 0 +-181 121 482 273 0 +422 545 402 -124 0 +-60 -329 121 95 0 +548 -425 50 -356 0 +-506 183 -309 -219 0 +-183 -111 172 -84 0 +400 244 -336 363 0 +242 455 254 -246 0 +245 -61 0 +-373 -477 -71 279 0 +-433 -478 11 246 0 +-91 -194 -449 -48 0 +12 -192 0 +-287 -71 0 +-116 498 0 +-421 -354 423 214 0 +-418 -547 632 -384 0 +343 318 -597 565 0 +463 618 -193 -263 0 +208 394 -192 -598 0 +358 -71 -421 0 +-644 -267 0 +-485 -104 303 -567 0 +-158 548 354 551 0 +85 445 0 +-133 -11 471 0 +-606 294 160 -429 0 +-25 -485 620 -79 0 +5 -606 -372 160 0 +-320 -642 116 -631 0 +245 84 0 +628 214 -101 -545 0 +-123 284 298 103 0 +-625 211 -204 0 +-417 126 458 113 0 +-262 480 -635 -229 0 +412 -572 -320 205 0 +453 -550 -561 0 +-193 -368 -231 -86 0 +103 560 0 +-435 -110 -336 582 0 +608 -345 -240 -525 0 +-591 -587 0 +335 -604 358 -398 0 +469 -321 -148 -82 0 +-73 121 -176 0 +300 -612 18 -43 0 +-631 603 -640 -170 0 +-216 -110 0 +-421 145 -480 0 +539 -186 -192 416 0 +-41 -259 -326 208 0 +518 -278 -536 623 0 +294 -525 -429 -345 0 +-148 311 -330 -520 0 +165 -166 156 -263 0 +-617 277 -204 211 0 +-33 474 335 -564 0 +431 152 -587 259 0 +-366 -491 -57 -125 0 +208 445 497 -346 0 +-478 -267 -147 155 0 +230 34 -124 -129 0 +624 227 406 -173 0 +112 511 350 32 0 +284 377 488 -344 0 +-76 455 314 -530 0 +388 -461 -111 -456 0 +-462 -243 481 18 0 +284 577 0 +-41 144 428 -430 0 +480 -569 -415 -567 0 +-395 -558 0 +172 -310 -192 326 0 +108 102 -45 -475 0 +198 562 548 -252 0 +599 -285 -264 233 0 +244 332 610 0 +-122 617 49 291 0 +146 227 406 -7 0 +-21 404 -270 -148 0 +-270 -360 310 539 0 +343 459 -414 -366 0 +205 50 0 +-291 431 648 -368 0 +495 498 -312 406 0 +441 -587 -61 566 0 +261 -553 28 189 0 +-122 -502 -430 -497 0 +-594 -353 185 103 0 +402 548 0 +-391 306 424 -122 0 +-400 -509 -336 381 0 +-382 18 288 -206 0 +-289 452 0 +423 279 0 +-257 242 0 +224 298 641 0 +380 -579 454 411 0 +-19 -13 439 -412 0 +256 163 -76 117 0 +-493 -429 -325 -297 0 +551 -151 -297 356 0 +407 172 -598 394 0 +60 -602 0 +-41 -3 49 -249 0 +-527 -361 29 -596 0 +-567 -619 -179 -564 0 +24 119 -287 -178 0 +230 105 -65 34 0 +-235 -479 402 93 0 +306 428 -41 144 0 +-368 -512 -309 472 0 +-218 -432 -38 396 0 +618 -558 385 463 0 +-73 518 -353 623 0 +276 28 137 -534 0 +319 -640 586 -393 0 +205 253 -160 198 0 +97 -125 -648 -430 0 +93 335 0 +-550 -369 0 +-478 -257 -316 0 +-502 -443 -497 -122 0 +453 646 -484 -550 0 +119 -89 550 0 +-79 464 574 214 0 +83 -633 363 -181 0 +378 191 -547 32 0 +203 -630 -278 544 0 +458 224 344 -269 0 +210 -180 0 +214 -230 549 -124 0 +-314 304 127 -393 0 +-642 339 5 116 0 +-461 21 -365 407 0 +-92 281 629 -408 0 +-574 -397 -104 0 +407 437 -376 171 0 +551 386 -451 0 +284 396 426 -613 0 +-321 407 469 -209 0 +560 176 -536 -190 0 +343 414 500 390 0 +-515 294 327 5 0 +-395 318 -52 565 0 +-320 -7 146 -631 0 +-535 -531 610 -630 0 +5 -429 0 +104 387 402 -369 0 +-51 155 0 +-529 -393 -510 -481 0 +-320 529 525 406 0 +222 -285 -264 0 +-70 431 258 -568 0 +-181 -126 -110 218 0 +-181 -417 0 +-297 -19 -412 198 0 +-124 40 0 +634 439 -567 -106 0 +284 610 0 +554 -212 -285 -286 0 +-379 -263 457 0 +-113 -182 -536 -353 0 +-119 10 -307 -369 0 +-461 208 0 +-114 28 -213 -534 0 +577 -27 -62 -216 0 +227 -75 386 -184 0 +112 -510 0 +-181 -110 400 244 0 +-612 304 0 +-204 134 -405 -611 0 +466 -379 -523 -166 0 +-278 222 20 -389 0 +416 -148 -186 407 0 +-372 227 -53 -451 0 +11 -384 0 +439 137 -534 276 0 +-209 69 -82 -64 0 +497 -346 208 -61 0 +-376 -341 338 -82 0 +-275 112 -76 -102 0 +-626 -243 0 +439 -372 151 0 +636 -200 242 -450 0 +-494 50 -13 136 0 +-544 -181 499 -110 0 +277 -82 -617 208 0 +-48 -361 308 29 0 +554 -285 614 -120 0 +101 80 -136 198 0 +347 172 -192 321 0 +9 -38 476 -384 0 +508 -209 437 171 0 +-462 155 0 +-166 492 466 237 0 +-194 -22 -39 -513 0 +-247 -384 290 -9 0 +-635 228 -538 -129 0 +508 338 -341 399 0 +491 -597 -193 0 +304 -462 -486 496 0 +-619 93 -179 28 0 +390 -618 343 70 0 +254 -246 32 -612 0 +67 105 -597 -107 0 +23 -366 98 411 0 +427 512 172 -111 0 +625 49 -192 -311 0 +-204 -541 341 49 0 +-57 -579 -491 411 0 +-184 -553 -75 -177 0 +354 -567 -158 -223 0 +80 -569 -46 -415 0 +544 -353 203 -181 0 +495 227 -42 -312 0 +410 179 198 0 +198 548 634 -106 0 +-368 -193 280 0 +342 288 -348 -322 0 +155 -382 -206 304 0 +358 620 -635 -25 0 +538 -296 453 -289 0 +161 608 -429 0 +-593 -366 0 +-647 -630 -417 -30 0 +-138 -527 0 +347 -82 321 172 0 +397 -549 335 487 0 +-128 275 -42 -370 0 +476 -110 577 9 0 +249 -192 611 -461 0 +-41 -559 0 +260 -72 89 -635 0 +292 -587 -77 -61 0 +377 575 -537 22 0 +123 -285 -233 16 0 +575 476 9 377 0 +-129 -422 -369 -349 0 +601 -38 -621 -571 0 +11 313 396 -526 0 +-527 570 -626 530 0 +-336 121 533 -602 0 +-4 560 -73 647 0 +-356 335 -564 -425 0 +-111 291 245 617 0 +339 622 199 304 0 +256 5 340 592 0 +279 294 -299 -74 0 +-511 478 -236 0 +396 -194 -22 -513 0 +363 408 -483 154 0 +-249 -111 172 -3 0 +227 161 283 406 0 +105 67 -107 -289 0 +-299 -213 0 +-31 -41 -461 465 0 +323 638 331 -56 0 +-561 415 -485 -79 0 +-474 410 397 -595 0 +530 242 570 -45 0 +-312 -42 272 495 0 +8 -156 139 -289 0 +195 -222 323 -181 0 +-225 -576 308 -140 0 +-577 488 -557 0 +450 35 -576 -194 0 +272 386 0 +78 18 0 +172 407 427 0 +470 178 358 335 0 +-166 293 -97 -263 0 +380 -87 454 466 0 +16 62 -460 575 0 +-493 -325 -553 498 0 +-543 205 279 0 +499 -544 -110 -571 0 +104 387 40 217 0 +-277 -265 -573 -270 0 +-43 -196 0 +-350 455 -640 174 0 +-77 390 -61 292 0 +-257 -605 563 -511 0 +-362 466 385 0 +-579 -72 -459 307 0 +198 543 0 +621 103 629 96 0 +50 555 0 +322 -51 513 164 0 +315 -470 551 80 0 +10 -550 262 -324 0 +243 108 -636 112 0 +539 -209 0 +271 245 -401 346 0 +404 17 209 0 +-559 291 0 +-424 -506 616 -193 0 +-160 -372 253 -564 0 +543 628 627 279 0 +-38 244 103 400 0 +-635 580 -129 -620 0 +-462 -76 170 -59 0 +-536 629 -212 -286 0 +11 -51 0 +11 274 613 641 0 +-71 -189 -223 569 0 +-495 -473 -1 78 0 +308 641 0 +-612 -128 -403 375 0 +629 458 633 -518 0 +-372 136 50 -494 0 +-345 -525 -372 5 0 +598 431 -292 211 0 +208 431 598 -292 0 +-251 -482 554 -285 0 +-91 -449 242 -194 0 +513 342 11 322 0 +-185 238 -38 -571 0 +49 -326 -122 -259 0 +638 -285 0 +101 551 -136 410 0 +-564 608 -15 0 +77 -368 385 149 0 +315 50 -470 -71 0 +93 -485 -398 -604 0 +-110 -442 -507 -181 0 +-395 380 454 -193 0 +290 -547 0 +471 -257 -527 0 +-485 24 0 +387 -175 -46 104 0 +-393 624 -320 -173 0 +-565 -597 -646 -72 0 +350 511 -605 -626 0 +343 -430 -468 -492 0 +-437 407 172 0 +8 -593 0 +-556 453 -175 -67 0 +467 282 -605 288 0 +-360 -148 310 -270 0 +284 -38 0 +556 352 -175 217 0 +234 385 0 +335 -425 -356 198 0 +-384 557 290 449 0 +-424 -368 385 616 0 +-553 551 0 +131 -416 -192 -461 0 +100 37 105 -550 0 +326 -204 -310 208 0 +332 -140 -225 -596 0 +-324 262 -635 -72 0 +458 610 62 0 +50 -71 -425 -356 0 +608 5 207 -552 0 +-55 -334 -632 0 +-240 -374 0 +551 -136 335 101 0 +455 242 350 511 0 +-293 268 10 -395 0 +-461 -441 85 -131 0 +-326 -259 208 -309 0 +-132 49 -437 407 0 +-285 -56 554 331 0 +-617 448 277 508 0 +314 -76 -462 -530 0 +-536 20 0 +93 -567 0 +-34 -188 -263 -129 0 +619 628 214 -574 0 +-297 551 158 325 0 +279 -372 345 179 0 +306 -52 -318 502 0 +381 458 0 +-33 19 0 +10 -550 230 34 0 +-318 343 502 -443 0 +591 -368 431 0 +448 291 617 445 0 +-39 35 290 450 0 +154 281 -408 323 0 +249 -204 611 49 0 +-274 11 342 -282 0 +-509 -400 16 560 0 +-345 639 297 0 +-353 123 -233 -92 0 +198 325 158 608 0 +-370 -76 275 -473 0 +-243 18 481 -196 0 +138 -257 133 -478 0 +243 342 -636 155 0 +-376 508 0 +256 173 519 0 +-598 49 394 -204 0 +629 273 458 482 0 +-278 638 0 +420 460 -630 -278 0 +588 343 -579 0 +68 -270 266 539 0 +158 551 325 386 0 +339 170 304 0 +227 493 -202 -42 0 +-393 -177 0 +-181 -594 560 185 0 +-350 174 288 18 0 +142 -216 0 +-241 480 -369 -89 0 +-285 -281 554 581 0 +-325 205 -493 5 0 +-502 -497 -506 431 0 +247 108 290 -570 0 +554 -482 -417 -251 0 +-579 307 -643 -459 0 +514 -461 -61 391 0 +480 -550 167 604 0 +-644 524 242 -612 0 +349 -129 -289 -463 0 +142 298 -123 -181 0 +172 -401 0 +327 -515 498 294 0 +-270 172 84 159 0 +343 -443 -231 -86 0 +-310 -461 326 -401 0 +-51 -196 0 +255 480 413 -567 0 +411 -424 -443 0 +-320 -393 -7 0 +437 -204 -209 171 0 +-566 -587 -166 0 +409 406 5 -319 0 +-250 -420 -73 121 0 +139 -436 0 +-384 290 44 433 0 +-430 566 441 -61 0 +279 -543 75 386 0 +219 -368 -193 -165 0 +323 95 581 -281 0 +350 242 511 -612 0 +-129 646 -263 0 +343 156 -289 165 0 +423 -569 -485 -415 0 +32 191 378 308 0 +-374 -128 0 +321 508 150 347 0 +-72 452 0 +-235 358 628 -479 0 +-347 -66 208 -61 0 +327 -515 -177 -372 0 +-537 -576 224 22 0 +-393 498 -173 624 0 +-461 -26 -333 -61 0 +482 560 0 +-62 142 -384 -27 0 +-374 88 409 -319 0 +-606 -297 88 160 0 +220 -193 466 0 +28 -276 201 423 0 +317 258 61 0 +500 414 -52 306 0 +-119 -307 10 40 0 +-309 -568 292 -77 0 +117 163 -640 -393 0 +-194 -532 396 -63 0 +629 -571 203 544 0 +8 -550 540 -268 0 +548 -71 0 +337 -376 0 +55 361 577 290 0 +-333 -26 85 -81 0 +455 -275 304 0 +491 -328 105 234 0 +-31 465 431 211 0 +-181 121 633 0 +222 -389 638 560 0 +-388 -122 -443 -500 0 +427 245 -122 512 0 +-122 -461 -249 -3 0 +602 -637 95 560 0 +112 155 0 +-429 -42 0 +-185 238 -216 -92 0 +623 20 -285 518 0 +-462 455 0 +-298 377 -35 284 0 +-326 -122 -259 -461 0 +-320 -606 160 -297 0 +-46 335 303 -104 0 +-125 -118 0 +-372 -75 498 -184 0 +-175 464 574 358 0 +340 -42 592 -177 0 +-122 130 -144 49 0 +-177 302 -473 615 0 +-113 -182 -73 121 0 +-639 516 439 -372 0 +8 -395 -463 349 0 +508 448 271 0 +342 -462 0 +-92 533 -602 -353 0 +227 -505 572 -473 0 +539 -204 0 +397 -567 0 +208 427 512 -309 0 +77 149 457 -587 0 +-605 -475 155 102 0 +636 -450 -48 308 0 +-468 -166 -506 -492 0 +332 -418 11 632 0 +-417 -353 0 +-353 -250 -420 -536 0 +-351 439 -534 357 0 +224 103 -126 218 0 +342 -359 -596 140 0 +-44 -576 -238 -216 0 +-602 103 533 629 0 +-543 75 50 -372 0 +49 211 0 +194 -140 -47 0 +256 18 199 622 0 +-468 -430 411 -492 0 +613 377 274 -547 0 +-54 333 508 211 0 +146 -42 272 -7 0 +205 555 -494 136 0 +447 444 5 -393 0 +294 189 261 -564 0 +-194 -257 0 +508 -192 0 +457 -419 -428 -368 0 +-234 558 597 289 395 366 263 579 -466 0 +-82 469 -321 -209 0 +-289 23 98 -87 0 +88 -372 0 +132 -461 -41 -258 0 +625 -311 -82 172 0 +-613 142 426 334 0 +301 93 214 -352 0 +184 256 -440 227 0 +-263 -362 385 36 0 +-559 -219 183 -118 0 +243 -462 -51 -636 0 +290 -367 -48 -316 0 +-506 66 -309 162 0 +-285 103 -602 533 0 +451 135 0 +-351 555 205 0 +-626 584 59 -605 0 +629 20 182 0 +104 402 -79 387 0 +-368 385 -165 219 0 +485 -235 -352 0 +93 252 402 229 0 +225 -110 -384 442 0 +237 -579 492 -52 0 +59 584 -196 -48 0 +-111 -292 598 172 0 +288 -48 -644 524 0 +-71 101 279 0 +-79 545 422 -485 0 +566 -118 -559 441 0 +358 303 628 -104 0 +-79 -485 464 574 0 +284 232 535 -576 0 +256 -590 -592 18 0 +109 -124 -593 -167 0 +-365 -401 21 245 0 +28 628 0 +508 17 54 337 0 +-149 -589 457 -289 0 +-434 588 234 -125 0 +463 -125 -366 618 0 +-462 -322 -348 -478 0 +-514 -69 407 -461 0 +-185 -630 0 +-612 305 0 +40 464 574 214 0 +290 -9 -247 -39 0 +-287 335 -487 0 +2 -159 14 399 0 +221 -550 453 -503 0 +-567 439 351 -487 0 +432 641 11 -563 0 +47 475 -596 342 0 +594 210 323 95 0 +-550 453 228 -538 0 +-576 -47 -232 -257 0 +-44 -238 575 -576 0 +-51 -605 0 +-595 358 -474 335 0 +198 -413 410 19 0 +-48 -196 -29 403 0 +-510 -462 0 +-243 288 481 -640 0 +113 -285 126 458 0 +422 -287 24 545 0 +343 231 -597 0 +16 -285 -582 212 0 +-130 508 -68 448 0 +155 1 -510 -355 0 +269 190 381 -571 0 +-22 396 -513 -257 0 +-255 -287 24 -228 0 +392 -239 -366 105 0 +-239 349 0 +-295 390 58 85 0 +-564 386 75 -543 0 +598 -292 -309 150 0 +396 432 11 -563 0 +-598 -81 -192 394 0 +334 363 232 535 0 +304 -45 0 +608 50 -137 0 +-501 -263 -166 -542 0 +108 112 -91 0 +423 354 -158 -223 0 +-243 -510 288 481 0 +244 142 -571 400 0 +-478 -257 513 322 0 +-30 458 -278 0 +-46 402 0 +-571 -531 575 -535 0 +24 -175 0 +-395 -296 538 10 0 +-82 337 0 +16 -216 218 0 +-270 -132 -437 245 0 +-424 -443 616 343 0 +17 12 -401 54 0 +40 -72 0 +315 279 335 -470 0 +178 -485 93 470 0 +481 -128 -462 -243 0 +188 -395 -166 -616 0 +-303 555 80 0 +445 26 -368 -280 0 +-72 328 -175 -609 0 +399 -321 469 2 0 +469 -573 -270 -321 0 +277 407 448 -617 0 +50 628 -303 -516 0 +-19 -534 -223 0 +-148 645 -192 504 0 +-194 133 138 342 0 +-401 337 0 +205 179 345 198 0 +342 -626 141 168 0 +-13 -494 28 136 0 +188 -87 466 -616 0 +-58 390 -52 379 0 +503 438 402 -124 0 +469 -270 -148 -321 0 +-462 18 -489 -528 0 +-473 -440 498 184 0 +396 55 -194 361 0 +189 294 261 198 0 +-509 121 -336 -400 0 +-278 331 -56 20 0 +164 -596 0 +-200 -194 0 +-118 -77 292 445 0 +458 154 0 +397 24 -89 -241 0 +-122 -368 0 +18 -473 603 -170 0 +-196 -478 243 -636 0 +-552 207 272 -534 0 +541 49 -122 -317 0 +-160 551 608 253 0 +-474 80 -595 -287 0 +588 -411 -616 0 +-60 -329 -278 -180 0 +-635 561 0 +-498 429 240 -272 -88 -227 320 177 -5 0 +-400 -92 -353 -509 0 +198 93 0 +134 -611 508 399 0 +-408 629 281 -571 0 +381 420 -181 460 0 +21 -365 -270 172 0 +546 -203 638 121 0 +293 411 -97 -366 0 +-225 -140 -384 290 0 +533 -92 -602 629 0 +-640 -510 0 +-309 -443 0 +419 457 296 -395 0 +279 608 -543 75 0 +242 32 0 +386 136 -564 -494 0 +-443 -568 0 +382 455 91 -48 0 +-174 -374 -283 305 0 +-196 467 342 282 0 +-321 469 2 -405 0 +-118 385 591 -23 0 +430 -162 77 0 +-503 221 -65 -643 0 +-240 5 0 +390 -125 -220 -566 0 +154 142 601 0 +-558 -166 318 565 0 +-138 -51 -462 528 0 +-401 399 0 +-264 -353 546 -203 0 +437 -82 171 -209 0 +-223 -553 515 33 0 +-265 -277 12 -330 0 +-495 256 -128 -1 0 +-501 -395 -542 -52 0 +-317 -61 0 +121 -96 -115 0 +24 -643 260 89 0 +319 78 -578 586 0 +50 548 354 0 +-309 317 -568 86 0 +-632 332 284 -499 0 +-72 234 -296 538 0 +88 205 299 -624 0 +21 -365 211 508 0 +-462 242 644 0 +-576 -39 0 +-259 -326 431 208 0 +453 491 -328 -289 0 +-96 -278 99 -264 0 +-568 -388 -122 0 +629 20 546 -203 0 +407 68 266 399 0 +-578 283 272 161 0 +367 308 332 -187 0 +-393 -578 0 +85 -41 0 +279 -372 357 -351 0 +-576 -140 -225 -547 0 +-215 508 -209 -522 0 +-531 -336 -535 142 0 +439 -487 -71 351 0 +-52 -616 390 0 +-38 577 0 +396 -55 284 -601 0 +377 -216 -499 -632 0 +-330 -541 341 49 0 +566 441 -111 306 0 +304 348 288 -586 0 +-309 448 -249 -3 0 +282 155 -605 467 0 +-640 339 -300 -146 0 +-356 93 -425 28 0 +-111 245 514 0 +524 342 -626 -644 0 +-321 508 469 337 0 +475 -200 108 47 0 +-523 565 0 +18 -1 -495 -473 0 +345 50 179 -553 0 +153 -128 256 0 +-216 -344 488 -39 0 +-76 -640 0 +-366 618 463 343 0 +-270 539 94 0 +622 406 199 -128 0 +-31 -559 465 211 0 +-572 -240 386 412 0 +497 150 -346 445 0 +17 -270 12 54 0 +342 236 43 455 0 +59 -51 112 584 0 +458 -585 -278 60 0 +407 625 -311 172 0 +-416 -270 245 131 0 +103 126 113 -278 0 +-71 -574 619 214 0 +-631 -202 493 88 0 +-64 69 407 -209 0 +-477 -373 -223 -567 0 +-578 272 447 444 0 +-101 548 0 +-102 -510 -275 288 0 +6 2 -394 337 0 +363 -557 -83 -384 0 +-159 -401 0 +40 -229 -262 214 0 +638 -281 581 323 0 +-189 279 0 +101 -136 -564 628 0 +583 103 -38 -195 0 +271 346 208 -82 0 +-226 406 -640 0 +-612 -478 0 +164 27 471 334 0 +545 422 -79 214 0 +-129 -369 109 0 +-58 343 -430 379 0 +-125 -263 0 +-564 -19 294 -412 0 +619 80 -287 -574 0 +-593 -369 34 230 0 +-547 267 -51 0 +-571 195 121 -222 0 +346 448 0 +332 -576 0 +-197 381 509 95 0 +-642 406 0 +283 339 161 -429 0 +-283 -174 78 -42 0 +-118 -87 -162 501 0 +544 -154 621 0 +208 -259 -61 -326 0 +86 -111 317 -430 0 +284 -92 -621 601 0 +625 -311 -82 49 0 +610 -630 537 585 0 +407 -376 -520 311 0 +-631 -615 -143 -510 0 +437 -405 171 2 0 +-81 -346 -122 497 0 +5 205 299 -624 0 +441 566 431 306 0 +343 -558 0 +512 427 -122 172 0 +105 -643 0 +-545 423 -485 -101 0 +-646 234 -565 -72 0 +267 -313 242 290 0 +-368 390 0 +225 442 142 -39 0 +5 494 -372 0 +-589 -395 -149 -166 0 +-613 426 142 -39 0 +11 -9 332 -247 0 +-360 310 -148 -192 0 +532 -216 -39 -583 0 +296 -289 343 419 0 +608 -351 357 -564 0 +327 272 0 +250 -285 20 0 +508 -326 448 0 +294 205 0 +50 189 261 -372 0 +-376 14 -159 -192 0 +-167 -129 109 -550 0 +508 208 159 84 0 +-293 268 -643 -579 0 +-527 528 -196 0 +-333 -26 -309 448 0 +-573 -394 -192 6 0 +-52 234 -434 588 0 +-559 -144 0 +-180 -417 176 -190 0 +167 214 40 0 +-35 -298 -576 575 0 +466 349 -129 -463 0 +347 321 448 -204 0 +10 491 -328 -263 0 +-387 -72 -635 436 0 +354 410 551 -158 0 +323 -353 0 +-374 5 -283 0 +-122 497 245 -346 0 +554 -482 -251 629 0 +-587 -492 -468 -193 0 +-535 -630 -531 224 0 +-598 211 394 -204 0 +-401 -84 -81 0 +381 554 0 +242 108 0 +-287 335 303 -104 0 +-212 -180 -285 -286 0 +-605 -547 0 +-128 127 -314 -473 0 +406 227 572 -505 0 +306 -424 457 616 0 +335 252 0 +-564 74 628 -301 0 +-470 315 -567 -223 0 +529 -177 -578 525 0 +258 -559 -118 -70 0 +290 513 0 +-612 143 78 147 0 +-223 -33 474 -71 0 +-296 -293 558 0 +139 -156 10 -558 0 +198 -297 515 33 0 +-503 453 -635 221 0 +448 -347 -66 445 0 +480 93 0 +-461 -132 -330 -437 0 +-547 -51 563 -511 0 +208 -131 431 -441 0 +-128 -1 -495 406 0 +-13 -315 439 -207 0 +150 -130 0 +-473 505 -375 519 0 +-183 -461 -41 -84 0 +-96 381 99 -73 0 +239 10 561 -369 0 +-57 -579 -125 -491 0 +68 -82 266 -209 0 +-384 377 0 +387 104 -369 217 0 +-603 227 -383 -42 0 +293 234 343 -97 0 +-330 49 -365 21 0 +105 -646 -597 -565 0 +279 356 294 -151 0 +-285 544 16 203 0 +490 -102 0 +-183 -122 49 -84 0 +331 -56 -264 -278 0 +-465 211 -82 600 0 +-188 105 -597 -34 0 +-401 21 -365 -81 0 +645 504 -192 -209 0 +18 112 0 +198 279 0 +-626 -612 0 +466 343 0 +-61 3 468 306 0 +-550 452 0 +406 -240 -173 624 0 +-538 -369 228 -129 0 +-309 -183 150 -84 0 +-38 -126 -571 218 0 +-128 304 0 +363 -535 -531 -336 0 +-239 392 105 -289 0 +-285 633 458 -518 0 +498 -372 -572 412 0 +537 224 -630 585 0 +518 -121 -190 0 +50 410 0 +-165 -368 219 -166 0 +-124 -538 228 10 0 +411 -193 0 +-336 458 0 +178 -46 470 335 0 +-207 -13 -315 -223 0 +88 -374 -327 -199 0 +457 -589 -149 -395 0 +230 34 -129 -550 0 +560 -637 -264 602 0 +638 518 323 623 0 +347 321 211 2 0 +577 -232 -47 290 0 +-532 -39 290 -63 0 +-240 572 -505 406 0 +406 498 624 -173 0 +-388 85 -500 390 0 +-368 144 428 445 0 +-192 -376 -265 -277 0 +234 -324 8 0 +18 117 406 163 0 +-379 385 466 -523 0 +641 377 0 +543 627 93 -223 0 +100 37 -175 105 0 +-51 636 -450 290 0 +-61 291 -461 617 0 +312 -297 -429 213 0 +-547 396 0 +-131 -441 -61 208 0 +259 -122 152 -443 0 +154 238 -110 -185 0 +49 407 -416 131 0 +-532 432 0 +-472 343 -380 -443 0 +-523 -379 411 -597 0 +-209 -186 -204 416 0 +305 348 -626 -586 0 +358 -574 -71 619 0 +480 410 0 +-200 -532 577 -63 0 +-72 -239 234 392 0 +280 57 -568 -52 0 +452 -65 0 +-568 -502 -497 -122 0 +-263 107 457 220 0 +-204 21 -209 0 +67 -289 453 -107 0 +402 -398 93 -604 0 +104 387 40 358 0 +-1 -495 304 -374 0 +294 515 33 198 0 +-179 335 -619 198 0 +-25 620 -550 480 0 +-368 591 -23 385 0 +-579 -52 -542 -501 0 +105 -369 0 +-612 314 -530 18 0 +-270 -376 0 +21 -365 -270 245 0 +444 -374 498 0 +-206 -612 -382 -76 0 +-182 638 -113 560 0 +442 225 332 575 0 +-312 406 495 -320 0 +614 -120 638 560 0 +-42 -283 -128 -174 0 +-579 452 0 +-393 -143 -615 18 0 +-626 -45 0 +423 25 480 -627 0 +628 -223 0 +-605 -322 -626 -348 0 +-506 457 0 +-571 284 0 +-297 -429 -357 0 +544 203 -630 -285 0 +27 -39 308 471 0 +409 498 -319 406 0 +138 -51 133 -200 0 +-478 355 -378 288 0 +498 -429 0 +256 -202 0 +524 -48 -196 -644 0 +-586 -196 -510 348 0 +648 428 0 +-371 -559 -118 31 0 +385 -220 -566 -368 0 +-146 -300 339 305 0 +503 -369 402 438 0 +560 323 0 +-69 -82 208 -514 0 +475 342 -194 0 +367 -187 -596 332 0 +-416 -192 131 172 0 +-367 -316 -48 -194 0 +-532 -63 -596 641 0 +-587 -70 431 258 0 +-175 -307 -72 -119 0 +555 410 634 -106 0 +-61 541 -461 0 +-79 358 0 +-417 -571 0 +-270 249 -461 611 0 +-494 -297 198 136 0 +-257 342 47 475 0 +445 -77 292 -587 0 +457 -118 0 +-541 -81 -270 341 0 +627 -487 -80 0 +11 636 -450 342 0 +-183 49 431 -84 0 +-37 -369 452 0 +-147 -267 -45 242 0 +241 -634 93 402 0 +-425 398 567 0 +629 614 -536 0 +-129 -263 -293 268 0 +-327 -578 -199 -177 0 +-374 199 -510 622 0 +127 -314 -76 -393 0 +-593 328 -609 -124 0 +411 -597 -501 -542 0 +457 306 -588 371 0 +-384 483 -216 187 0 +-510 -374 440 0 +452 -620 40 580 0 +-612 511 -51 350 0 +188 -52 234 -616 0 +-233 -417 0 +150 508 522 456 0 +-320 -631 161 283 0 +-115 -482 -251 381 0 +439 479 114 628 0 +411 77 149 390 0 +-58 379 -125 390 0 +191 164 378 108 0 +-124 -556 0 +-409 294 151 498 0 +279 33 -372 515 0 +246 -48 -194 -433 0 +-506 472 -309 -512 0 +225 396 442 224 0 +338 -341 12 -330 0 +142 -384 532 -583 0 +-139 -464 -550 453 0 +-626 -51 0 +-447 -631 305 -496 0 +-635 -46 -545 0 +-276 410 201 551 0 +-32 644 267 0 +-96 -536 -278 99 0 +-110 22 577 0 +29 -361 -547 -478 0 +98 -579 23 -125 0 +211 -111 0 +-260 -263 452 -454 0 +-61 -388 390 -500 0 +95 323 -546 0 +103 -216 0 +-543 -553 75 -564 0 +-302 5 -137 386 0 +646 8 -484 -635 0 +217 595 -635 -540 0 +-257 133 138 -605 0 +245 -326 -259 -122 0 +308 -247 377 -9 0 +335 -398 -287 -604 0 +-125 -472 -380 390 0 +199 -128 -473 622 0 +-141 -462 -622 18 0 +-421 -354 397 335 0 +313 332 -526 -257 0 +40 415 -561 217 0 +-204 49 -69 -514 0 +332 575 -613 426 0 +-559 58 -118 -295 0 +-473 -7 -177 146 0 +142 -92 0 +432 334 290 -563 0 +-21 539 -401 404 0 +63 -51 -200 -236 0 +8 -324 40 262 0 +407 -416 -461 131 0 +169 484 24 -287 0 +-177 606 -42 -163 0 +-45 -128 -59 170 0 +-29 168 0 +225 -39 442 -110 0 +272 -473 302 615 0 +-87 36 -362 -263 0 +331 381 -536 0 +12 -446 -271 -270 0 +339 -393 0 +575 -216 0 +157 364 396 575 0 +-43 455 18 300 0 +457 -472 -368 0 +-52 -118 0 +164 32 0 +-268 540 -175 -643 0 +641 610 -432 -218 0 +77 306 343 0 +-159 508 14 337 0 +-129 -538 40 228 0 +332 396 0 +-209 -204 14 -159 0 +-116 608 -15 -320 0 +-19 50 -372 -412 0 +-478 29 -361 11 0 +-621 -544 0 +47 242 475 164 0 +448 -131 -441 -41 0 +95 -285 0 +-500 -388 445 -118 0 +402 410 0 +-571 575 195 0 +382 242 -45 91 0 +-128 -141 -462 -622 0 +-13 160 272 -606 0 +211 -559 365 -521 0 +-199 -240 -327 -578 0 +-100 -36 -129 -395 0 +80 -619 397 0 +121 210 594 -115 0 +63 -257 -605 -236 0 +-470 548 315 50 0 +-76 -592 -393 -590 0 +-369 -556 -67 10 0 +-282 308 342 -274 0 +436 -387 40 10 0 +406 5 -505 572 0 +-182 -536 -113 -278 0 +2 -522 337 -215 0 +-216 -336 218 -126 0 +248 -200 -51 644 0 +28 -494 136 -534 0 +-376 -446 -271 -192 0 +548 -235 480 -479 0 +207 608 498 0 +296 419 -166 466 0 +-291 648 -309 -587 0 +-67 -556 -129 -369 0 +20 -278 -120 614 0 +32 -267 0 +-374 88 606 -163 0 +-196 18 -117 -467 0 +522 -407 -645 0 +380 454 234 343 0 +-389 -180 -417 222 0 +151 -409 5 386 0 +-241 358 -89 -175 0 +629 518 -73 623 0 +156 -289 165 -193 0 +-122 245 388 -456 0 +583 -576 -216 0 +95 623 0 +-430 -468 -52 -492 0 +219 -87 -506 -165 0 +-260 -454 -395 -129 0 +-158 555 354 80 0 +414 500 -193 -506 0 +-27 396 575 -62 0 +-543 28 75 -534 0 +112 -48 0 +423 -46 0 +-378 -626 -605 355 0 +134 -204 399 -611 0 +57 -23 0 +457 -165 -368 219 0 +577 -513 -547 -22 0 +-506 431 -500 -388 0 +528 -462 -138 242 0 +-124 -89 214 -241 0 +198 -151 294 356 0 +-369 402 -228 0 +296 -366 419 343 0 +343 591 -568 -23 0 +388 -456 -81 -122 0 +66 306 162 -111 0 +406 529 525 5 0 +-195 -571 -110 583 0 +217 -485 0 +167 -79 10 0 +195 560 -571 -222 0 +481 -243 455 -128 0 +-565 -87 -395 0 +-244 363 517 -384 0 +448 -131 -441 -559 0 +-630 -353 0 +-41 448 -347 -66 0 +628 255 413 217 0 +-194 -168 342 418 0 +445 3 -587 468 0 +-312 495 256 5 0 +385 457 0 +238 -336 363 -185 0 +-533 -426 -92 284 0 +629 458 96 621 0 +-547 -513 -22 -576 0 +-200 108 -471 -584 0 +-533 575 -426 458 0 +-573 -330 -69 0 +272 -127 -42 53 0 +386 227 -525 -345 0 +-244 396 517 575 0 +-136 101 439 93 0 +279 386 -114 -213 0 +227 161 283 -42 0 +448 445 -131 0 +-571 -400 -509 560 0 +343 23 234 98 0 +-631 202 -640 -153 0 +-369 -635 0 +-558 452 -436 -237 0 +-87 237 466 492 0 +-553 213 312 -240 0 +459 -597 -414 -52 0 +-376 12 0 +272 199 -473 0 +-368 -41 468 3 0 +105 392 -239 -579 0 +249 -330 49 611 0 +584 -478 59 -462 0 +-506 -368 0 +-578 -76 -300 -146 0 +-336 224 0 +172 -111 295 -625 0 +378 191 290 108 0 +522 -192 49 0 +150 -333 -309 -26 0 +407 -465 600 208 0 +-492 390 -468 411 0 +-328 491 234 8 0 +608 639 -240 -340 0 +246 -257 -433 342 0 +-506 -87 -618 70 0 +-31 -111 0 +-180 197 -285 0 +-79 -349 452 -422 0 +-52 -568 -648 97 0 +-561 -79 415 214 0 +256 519 -170 603 0 +453 -119 -307 40 0 +548 93 0 +-39 -632 142 -499 0 +455 242 475 0 +272 -42 -202 493 0 +-430 -87 0 +217 -470 -567 0 +505 -375 256 519 0 +-244 517 -38 -576 0 +517 -244 -110 -384 0 +70 -618 -368 -193 0 +-138 -51 112 528 0 +-162 501 -568 -87 0 +-330 277 -617 245 0 +-261 -13 7 -240 0 +503 438 -485 -124 0 +279 386 -315 0 +-315 -207 198 205 0 +342 141 168 155 0 +-169 548 425 217 0 +299 608 -624 -240 0 +-533 363 154 -426 0 +554 20 0 +202 -640 -153 -393 0 +-376 -159 407 14 0 +247 -570 -51 -200 0 +-372 357 -351 439 0 +-556 -67 105 -175 0 +-177 -372 160 -606 0 +-23 -87 -118 591 0 +-597 188 -52 -616 0 +408 -181 -483 142 0 +242 455 584 59 0 +-87 466 523 0 +-443 317 86 -122 0 +-257 641 274 613 0 +112 288 0 +423 -413 19 439 0 +440 18 489 -374 0 +-547 641 0 +551 137 276 294 0 +398 439 628 0 +142 -583 532 577 0 +112 -246 254 32 0 +-218 -432 284 396 0 +548 -398 -604 480 0 +-175 415 -561 -287 0 +-159 399 -204 14 0 +11 -200 0 +-81 347 321 -270 0 +431 -521 0 +70 -568 457 -618 0 +-92 273 381 482 0 +407 -461 346 271 0 +-568 -430 0 +-430 -219 183 -111 0 +-115 -264 0 +-384 537 -216 0 +-640 226 339 642 0 +561 -79 -593 239 0 +-484 646 -129 40 0 +-297 -302 -429 -137 0 +-576 142 0 +-160 198 294 253 0 +-475 -626 102 -605 0 +234 -57 -491 -125 0 +-94 64 0 +294 555 136 -494 0 +-261 227 386 7 0 +-144 445 211 130 0 +448 465 -31 431 0 +518 554 623 -417 0 +-630 121 0 +-265 -277 -204 -209 0 +503 438 -485 -79 0 +396 -194 613 274 0 +50 451 -562 -372 0 +-378 -527 155 355 0 +-289 -100 -36 -129 0 +-128 -196 0 +-87 -558 523 0 +99 560 -96 638 0 +7 -534 -261 272 0 +-369 -139 8 -464 0 +-320 -493 -325 205 0 +-372 -515 227 327 0 +562 551 0 +-183 431 211 -84 0 +-484 -175 646 105 0 +628 201 -276 279 0 +-149 -166 -589 -263 0 +-159 14 399 508 0 +154 121 -602 533 0 +352 556 214 -550 0 +-376 2 0 +49 -183 -41 -84 0 +-124 574 402 464 0 +112 -640 0 +-71 -516 -303 50 0 +-240 525 256 529 0 +457 -318 -430 502 0 +342 29 -361 11 0 +-200 274 613 334 0 +-280 -587 0 +-81 291 617 -111 0 +279 -299 -372 -74 0 +636 -450 32 290 0 +-596 -563 332 432 0 +-209 -186 -82 416 0 +-600 94 -209 -82 0 +-510 -196 -403 375 0 +411 459 -414 234 0 +498 615 302 -473 0 +379 -52 306 -58 0 +-321 -401 12 469 0 +32 -316 -547 -367 0 +-264 -278 176 -190 0 +-462 -48 528 -138 0 +-125 -166 0 +91 242 382 -612 0 +11 -527 -359 140 0 +-73 121 -281 581 0 +-65 -307 -119 105 0 +644 248 -596 -605 0 +154 363 -535 -531 0 +385 -263 318 0 +-166 -118 70 -618 0 +414 500 -166 -506 0 +-37 214 235 40 0 +-131 -309 448 -441 0 +103 83 575 -633 0 +-82 -405 504 645 0 +-379 -289 -523 457 0 +-544 -181 499 142 0 +-330 245 611 0 +396 -194 -157 -248 0 +-268 -643 540 -65 0 +610 -613 641 426 0 +-58 379 411 390 0 +-174 -510 -374 -283 0 +-51 -322 -348 112 0 +28 253 -160 -13 0 +-111 -430 144 428 0 +-543 279 294 75 0 +421 -635 217 90 0 +-340 386 639 5 0 +-263 231 457 -392 0 +508 171 337 437 0 +-559 445 0 +-202 272 493 -473 0 +-42 256 0 +308 418 -168 -527 0 +-81 600 -330 0 +-111 -388 -443 -500 0 +227 -473 529 525 0 +-39 449 557 -194 0 +-461 -249 85 0 +-122 172 258 0 +531 629 458 -614 0 +83 -633 575 458 0 +-199 -320 -327 -374 0 +-330 -148 6 0 +268 -366 -72 -293 0 +618 463 -558 -166 0 +-175 -268 540 105 0 +-204 -265 -277 -376 0 +84 -204 448 159 0 +370 -177 -578 552 0 +80 397 -474 -595 0 +103 30 0 +620 -230 -24 0 +-23 -368 591 -166 0 +49 -326 -309 -259 0 +-576 -499 -632 224 0 +98 -289 457 23 0 +548 -287 -235 -479 0 +455 -640 -403 375 0 +168 108 0 +581 -353 -73 -281 0 +-405 186 0 +-196 288 0 +507 -278 -331 458 0 +-640 -1 -495 -631 0 +577 27 471 -200 0 +16 533 -602 -285 0 +-262 -79 -229 214 0 +289 -459 -454 0 +272 -13 383 -357 0 +-521 49 -122 365 0 +314 -374 18 0 +-92 -285 0 +-587 -309 -512 472 0 +-257 432 -563 377 0 +202 -153 -42 78 0 +-223 439 0 +452 -620 -369 580 0 +273 323 482 -181 0 +56 536 120 0 +-617 172 -270 277 0 +519 -626 0 +130 -144 -461 -61 0 +628 -487 50 351 0 +-567 -564 -136 101 0 +-193 -558 0 +304 -117 -196 -467 0 +548 470 178 -46 0 +249 -192 611 172 0 +385 -263 -434 588 0 +-553 -177 383 -357 0 +-516 -567 -303 50 0 +227 -429 0 +519 348 -586 -45 0 +203 544 -278 16 0 +-19 -412 -13 50 0 +-46 335 -235 -479 0 +392 -239 -72 -366 0 +105 260 89 24 0 +423 -549 214 487 0 +396 -613 426 224 0 +168 -462 141 32 0 +498 -327 256 -199 0 +-125 -579 380 454 0 +504 -209 407 0 +121 95 -212 -286 0 diff --git a/tests/drup/pg4_input.cnf b/tests/drup/pg4_input.cnf new file mode 100644 index 00000000..5b8e361f --- /dev/null +++ b/tests/drup/pg4_input.cnf @@ -0,0 +1,46 @@ +p cnf 20 45 +1 2 3 4 0 +5 6 7 8 0 +9 10 11 12 0 +13 14 15 16 0 +17 18 19 20 0 +-1 -5 0 +-1 -9 0 +-1 -13 0 +-1 -17 0 +-5 -9 0 +-5 -13 0 +-5 -17 0 +-9 -13 0 +-9 -17 0 +-13 -17 0 +-2 -6 0 +-2 -10 0 +-2 -14 0 +-2 -18 0 +-6 -10 0 +-6 -14 0 +-6 -18 0 +-10 -14 0 +-10 -18 0 +-14 -18 0 +-3 -7 0 +-3 -11 0 +-3 -15 0 +-3 -19 0 +-7 -11 0 +-7 -15 0 +-7 -19 0 +-11 -15 0 +-11 -19 0 +-15 -19 0 +-4 -8 0 +-4 -12 0 +-4 -16 0 +-4 -20 0 +-8 -12 0 +-8 -16 0 +-8 -20 0 +-12 -16 0 +-12 -20 0 +-16 -20 0 diff --git a/tests/drup/simple_input.cnf b/tests/drup/simple_input.cnf new file mode 100644 index 00000000..652e03dc --- /dev/null +++ b/tests/drup/simple_input.cnf @@ -0,0 +1,9 @@ +p cnf 4 8 + 1 2 -3 0 +-1 -2 3 0 + 2 3 -4 0 +-2 -3 4 0 + 1 3 4 0 +-1 -3 -4 0 +-1 2 4 0 + 1 -2 -4 0 From bd5aa85305616a01aab846474e63938d1b876888 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 15:01:07 +0200 Subject: [PATCH 05/22] Some more proof generation testing and bugfixing --- .../unsatcores/drup/DRUPTrim.java | 25 ++++++--- .../org/logicng/io/readers/DimacsReader.java | 50 +++++++++++++----- .../java/org/logicng/solvers/MiniSat.java | 1 - .../java/org/logicng/solvers/SATSolver.java | 2 +- .../solvers/sat/MiniSatStyleSolver.java | 8 +++ .../logicng/explanations/drup/DRUPTest.java | 52 +++++++++++++++++++ 6 files changed, 118 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index aec793e2..9ac83f7a 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -301,11 +301,13 @@ int matchClause(final LNGIntVector clauselist, int[] _marks, int mark, final LNG * @return {@code true} if further processing is required and {@code false} if the formula is trivially UNSAT */ private boolean parse() { + // System.out.println(this.originalProblem); + // System.out.println(this.proof); this.nVars = 0; for (LNGIntVector vector : this.originalProblem) for (int i = 0; i < vector.size(); i++) - if (vector.get(i) > this.nVars) - this.nVars = vector.get(i); + if (Math.abs(vector.get(i)) > this.nVars) + this.nVars = Math.abs(vector.get(i)); this.nClauses = originalProblem.size(); boolean del = false; @@ -327,7 +329,7 @@ private boolean parse() { this.adlist = new LNGIntVector(); - int[] _marks = new int[2 * this.nVars + 3]; + int[] marks = new int[2 * this.nVars + 3]; int mark = 0; final Map hashTable = new HashMap<>(); @@ -335,9 +337,14 @@ private boolean parse() { boolean fileSwitchFlag; int clauseNr = 0; while (true) { + // System.out.println("NEW RUN nZeros=" + nZeros); int lit = 0; fileSwitchFlag = nZeros <= 0; LNGIntVector clause = currentVector.get(clauseNr++); + if (clause == null) { + this.lemmas = this.DB.size() + 1; + break; + } final List toks = new ArrayList<>(clause.size() - 1); if (fileSwitchFlag && clause.get(0) == -1) { del = true; @@ -346,19 +353,21 @@ private boolean parse() { toks.add(clause.get(i)); for (Integer l : toks) buffer.push(l); + // System.out.println(" clauseNr = " + clauseNr); if (clauseNr >= currentVector.size() && !fileSwitchFlag) { + // System.out.println(" Switching File"); fileSwitchFlag = true; clauseNr = 0; currentVector = proof; } - if (clauseNr >= currentVector.size() && fileSwitchFlag) + if (clauseNr >= currentVector.size() && fileSwitchFlag && !currentVector.empty()) break; if (Math.abs(lit) > this.nVars) throw new IllegalStateException(String.format("Illegal literal %d due to max var %d", lit, this.nVars)); - int hash = getHash(_marks, ++mark, buffer); + int hash = getHash(marks, ++mark, buffer); if (del) { if (this.delete) { - int match = this.matchClause(hashTable.get(hash), _marks, mark, buffer); + int match = this.matchClause(hashTable.get(hash), marks, mark, buffer); hashTable.get(hash).pop(); this.adlist.push((match << 1) + 1); } @@ -381,6 +390,8 @@ private boolean parse() { this.adlist.push(clausePtr << 1); + // System.out.println("nZeros = " + nZeros); + if (nZeros == this.nClauses) this.basePtr = clausePtr; if (nZeros == 0) { @@ -388,6 +399,7 @@ private boolean parse() { this.adlemmas = this.adlist.size() - 1; } if (nZeros > 0) { + // System.out.println(" buffer = " + buffer); if (buffer.empty() || ((buffer.size() == 1) && this.internalFalse[index(this.DB.get(clausePtr))] != 0)) return false; else if (buffer.size() == 1) { @@ -396,6 +408,7 @@ else if (buffer.size() == 1) { this.assign(this.DB.get(clausePtr)); } } else { + // System.out.println(" adding watches"); this.addWatch(clausePtr, 0); this.addWatch(clausePtr, 1); } diff --git a/src/main/java/org/logicng/io/readers/DimacsReader.java b/src/main/java/org/logicng/io/readers/DimacsReader.java index dd2b6f1e..2669bb61 100644 --- a/src/main/java/org/logicng/io/readers/DimacsReader.java +++ b/src/main/java/org/logicng/io/readers/DimacsReader.java @@ -31,14 +31,13 @@ import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; import org.logicng.formulas.Literal; -import org.logicng.formulas.Variable; import org.logicng.io.parsers.ParserException; import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; @@ -62,32 +61,32 @@ private DimacsReader() { /** * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. - * @param fileName the file name - * @param f the formula factory + * @param file the file + * @param f the formula factory * @return the list of formulas (clauses) * @throws IOException if there was a problem reading the file * @throws ParserException if there was a problem parsing the formula */ - public static List readCNF(final String fileName, final FormulaFactory f) throws IOException, ParserException { - return readCNF(fileName, f, "v"); + public static List readCNF(final File file, final FormulaFactory f) throws IOException, ParserException { + return readCNF(file, f, "v"); } /** * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. - * @param fileName the file name - * @param f the formula factory - * @param prefix the prefix for the variable names + * @param file the file + * @param f the formula factory + * @param prefix the prefix for the variable names * @return the list of formulas (clauses) * @throws IOException if there was a problem reading the file * @throws ParserException if there was a problem parsing the formula */ - public static List readCNF(final String fileName, final FormulaFactory f, final String prefix) + public static List readCNF(final File file, final FormulaFactory f, final String prefix) throws IOException, ParserException { List result = new ArrayList<>(); - try (final BufferedReader br = new BufferedReader(new FileReader(fileName))) { + try (final BufferedReader br = new BufferedReader(new FileReader(file))) { while (br.ready()) { final String line = br.readLine(); - if (!line.startsWith("c") && !line.startsWith("p")) { + if (!line.startsWith("c") && !line.startsWith("p") && !line.trim().isEmpty()) { String[] split = line.split("\\s+"); if (!"0".equals(split[split.length - 1].trim())) throw new IllegalArgumentException("Line " + line + " did not end with 0."); @@ -109,4 +108,31 @@ public static List readCNF(final String fileName, final FormulaFactory } + /** + * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. + * @param fileName the file name + * @param f the formula factory + * @return the list of formulas (clauses) + * @throws IOException if there was a problem reading the file + * @throws ParserException if there was a problem parsing the formula + */ + public static List readCNF(final String fileName, final FormulaFactory f) throws IOException, ParserException { + return readCNF(new File(fileName), f, "v"); + } + + /** + * Reads a given DIMACS CNF file and returns the contained clauses as a list of formulas. + * @param fileName the file name + * @param f the formula factory + * @param prefix the prefix for the variable names + * @return the list of formulas (clauses) + * @throws IOException if there was a problem reading the file + * @throws ParserException if there was a problem parsing the formula + */ + public static List readCNF(final String fileName, final FormulaFactory f, final String prefix) + throws IOException, ParserException { + return readCNF(new File(fileName), f, prefix); + } + + } diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 1056ef2b..04c3e5ac 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -422,7 +422,6 @@ public UNSATCore unsatCore() { DRUPTrim trimmer = new DRUPTrim(); Map clause2proposition = new HashMap<>(); - final LNGVector clauses = new LNGVector<>(this.underlyingSolver().pgOriginalClauses().size()); for (MiniSatStyleSolver.ProofInformation pi : this.underlyingSolver().pgOriginalClauses()) { clauses.push(pi.clause()); diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 572c5c33..f794bd41 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -92,7 +92,7 @@ public void add(final Formula formula) { */ public void add(final Proposition proposition) { for (final Formula formula : proposition.formulas()) - this.add(formula); + this.add(formula, proposition); } /** diff --git a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java index fe5dd6fd..f646a833 100644 --- a/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java +++ b/src/main/java/org/logicng/solvers/sat/MiniSatStyleSolver.java @@ -688,5 +688,13 @@ public LNGIntVector clause() { public Proposition proposition() { return proposition; } + + @Override + public String toString() { + return "ProofInformation{" + + "clause=" + clause + + ", proposition=" + proposition + + '}'; + } } } diff --git a/src/test/java/org/logicng/explanations/drup/DRUPTest.java b/src/test/java/org/logicng/explanations/drup/DRUPTest.java index ed9e33e4..42049133 100644 --- a/src/test/java/org/logicng/explanations/drup/DRUPTest.java +++ b/src/test/java/org/logicng/explanations/drup/DRUPTest.java @@ -30,24 +30,29 @@ import org.assertj.core.api.SoftAssertions; import org.junit.Test; +import org.logicng.collections.ImmutableFormulaList; import org.logicng.datastructures.Tristate; import org.logicng.explanations.unsatcores.UNSATCore; import org.logicng.explanations.unsatcores.drup.DRUPTrim; import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; import org.logicng.io.parsers.ParserException; +import org.logicng.io.parsers.PropositionalParser; import org.logicng.io.readers.DimacsReader; import org.logicng.propositions.Proposition; +import org.logicng.propositions.StandardProposition; import org.logicng.solvers.MiniSat; import org.logicng.solvers.SATSolver; import org.logicng.solvers.sat.GlucoseConfig; import org.logicng.solvers.sat.MiniSatConfig; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.logicng.datastructures.Tristate.FALSE; /** * Unit tests for {@link DRUPTrim}. @@ -86,6 +91,53 @@ public void testUnsatCoresFromDimacs() throws IOException, ParserException { } } + @Test + public void testUnsatCoresFromLargeTestset() throws IOException, ParserException { + final File testFolder = new File("tests/sat"); + final File[] files = testFolder.listFiles(); + assert files != null; + for (final SATSolver solver : this.solvers) { + for (final File file : files) { + final String fileName = file.getName(); + if (fileName.endsWith(".cnf")) { + List cnf = DimacsReader.readCNF(file, f); + solver.add(cnf); + if (solver.sat() == FALSE) { + final UNSATCore unsatCore = solver.unsatCore(); + verifyCore(unsatCore, cnf); + } + solver.reset(); + } + } + solver.reset(); + } + } + + @Test + public void testPropositionHandling() throws ParserException { + final PropositionalParser p = new PropositionalParser(f); + final List propositions = new ArrayList<>(); + propositions.add(new StandardProposition("P1", f.parse("((a & b) => c) & ((a & b) => d)"))); + propositions.add(new StandardProposition("P2", f.parse("(c & d) <=> ~e"))); + propositions.add(new StandardProposition("P3", new ImmutableFormulaList(p.parse("~e => f | g")))); + propositions.add(new StandardProposition("P4", f.parse("f => ~a"), f.parse("g => ~b"), f.parse("p & q"))); + propositions.add(new StandardProposition("P5", f.parse("a => b"))); + propositions.add(new StandardProposition("P6", f.parse("a"))); + propositions.add(new StandardProposition("P7", f.parse("g | h"))); + propositions.add(new StandardProposition("P8", f.parse("x => ~y | z"), f.parse("z | w"))); + + for (final SATSolver solver : this.solvers) { + for (Proposition proposition : propositions) + solver.add(proposition); + assertThat(solver.sat()).isEqualTo(FALSE); + final UNSATCore unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(propositions.get(0), propositions.get(1), + propositions.get(2), propositions.get(3), propositions.get(4), propositions.get(5)); + System.out.println(unsatCore); + solver.reset(); + } + } + /** * Checks that each formula of the core is part of the original problem and that the core is really unsat. * @param originalCore the original core From 8c68d4fafbc55fe1ab962b99b9d7544573ae6dba Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 15:46:42 +0200 Subject: [PATCH 06/22] Fixed the trivial UNSAT case --- .../unsatcores/drup/DRUPTrim.java | 23 +++---- .../java/org/logicng/solvers/MiniSat.java | 17 ++++++ .../logicng/explanations/drup/DRUPTest.java | 61 ++++++++++++++++++- 3 files changed, 84 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index 9ac83f7a..28b28371 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -301,8 +301,6 @@ int matchClause(final LNGIntVector clauselist, int[] _marks, int mark, final LNG * @return {@code true} if further processing is required and {@code false} if the formula is trivially UNSAT */ private boolean parse() { - // System.out.println(this.originalProblem); - // System.out.println(this.proof); this.nVars = 0; for (LNGIntVector vector : this.originalProblem) for (int i = 0; i < vector.size(); i++) @@ -333,14 +331,13 @@ private boolean parse() { int mark = 0; final Map hashTable = new HashMap<>(); - LNGVector currentVector = originalProblem; + LNGVector currentFile = originalProblem; boolean fileSwitchFlag; int clauseNr = 0; while (true) { - // System.out.println("NEW RUN nZeros=" + nZeros); int lit = 0; fileSwitchFlag = nZeros <= 0; - LNGIntVector clause = currentVector.get(clauseNr++); + LNGIntVector clause = currentFile.get(clauseNr++); if (clause == null) { this.lemmas = this.DB.size() + 1; break; @@ -353,14 +350,12 @@ private boolean parse() { toks.add(clause.get(i)); for (Integer l : toks) buffer.push(l); - // System.out.println(" clauseNr = " + clauseNr); - if (clauseNr >= currentVector.size() && !fileSwitchFlag) { - // System.out.println(" Switching File"); + if (clauseNr >= currentFile.size() && !fileSwitchFlag) { fileSwitchFlag = true; clauseNr = 0; - currentVector = proof; + currentFile = proof; } - if (clauseNr >= currentVector.size() && fileSwitchFlag && !currentVector.empty()) + if (clauseNr >= currentFile.size() && fileSwitchFlag && !currentFile.empty()) break; if (Math.abs(lit) > this.nVars) throw new IllegalStateException(String.format("Illegal literal %d due to max var %d", lit, this.nVars)); @@ -390,8 +385,6 @@ private boolean parse() { this.adlist.push(clausePtr << 1); - // System.out.println("nZeros = " + nZeros); - if (nZeros == this.nClauses) this.basePtr = clausePtr; if (nZeros == 0) { @@ -399,16 +392,14 @@ private boolean parse() { this.adlemmas = this.adlist.size() - 1; } if (nZeros > 0) { - // System.out.println(" buffer = " + buffer); - if (buffer.empty() || ((buffer.size() == 1) && this.internalFalse[index(this.DB.get(clausePtr))] != 0)) + if (buffer.empty() || ((buffer.size() == 1) && this.internalFalse[index(this.DB.get(clausePtr))] != 0)) { return false; - else if (buffer.size() == 1) { + } else if (buffer.size() == 1) { if (this.internalFalse[index(-this.DB.get(clausePtr))] == 0) { this.reason[Math.abs(this.DB.get(clausePtr))] = clausePtr + 1; this.assign(this.DB.get(clausePtr)); } } else { - // System.out.println(" adding watches"); this.addWatch(clausePtr, 0); this.addWatch(clausePtr, 1); } diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 04c3e5ac..1d89e76d 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -433,12 +433,29 @@ public UNSATCore unsatCore() { } final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof()); + if (result.trivialUnsat()) + return handleTrivialCase(); final LinkedHashSet propositions = new LinkedHashSet<>(); for (LNGIntVector vector : result.unsatCore()) propositions.add(clause2proposition.get(getFormulaForVector(vector))); return new UNSATCore(new ArrayList<>(propositions), false); } + private UNSATCore handleTrivialCase() { + final LNGVector clauses = this.underlyingSolver().pgOriginalClauses(); + for (int i = 0; i < clauses.size(); i++) + for (int j = i + 1; j < clauses.size(); j++) { + if (clauses.get(i).clause().size() == 1 && clauses.get(j).clause().size() == 1 + && clauses.get(i).clause().get(0) + clauses.get(j).clause().get(0) == 0) { + LinkedHashSet propositions = new LinkedHashSet<>(); + propositions.add(clauses.get(i).proposition()); + propositions.add(clauses.get(j).proposition()); + return new UNSATCore(new ArrayList<>(propositions), false); + } + } + throw new IllegalStateException("Should be a trivial unsat core, but did not found one."); + } + private Formula getFormulaForVector(LNGIntVector vector) { final List literals = new ArrayList<>(vector.size()); for (int i = 0; i < vector.size(); i++) { diff --git a/src/test/java/org/logicng/explanations/drup/DRUPTest.java b/src/test/java/org/logicng/explanations/drup/DRUPTest.java index 42049133..7f0aa29a 100644 --- a/src/test/java/org/logicng/explanations/drup/DRUPTest.java +++ b/src/test/java/org/logicng/explanations/drup/DRUPTest.java @@ -43,6 +43,7 @@ import org.logicng.propositions.StandardProposition; import org.logicng.solvers.MiniSat; import org.logicng.solvers.SATSolver; +import org.logicng.solvers.SolverState; import org.logicng.solvers.sat.GlucoseConfig; import org.logicng.solvers.sat.MiniSatConfig; @@ -133,11 +134,69 @@ public void testPropositionHandling() throws ParserException { final UNSATCore unsatCore = solver.unsatCore(); assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(propositions.get(0), propositions.get(1), propositions.get(2), propositions.get(3), propositions.get(4), propositions.get(5)); - System.out.println(unsatCore); solver.reset(); } } + @Test + public void testPropositionIncDec() throws ParserException { + final PropositionalParser p = new PropositionalParser(f); + SATSolver solver = this.solvers[0]; + final StandardProposition p1 = new StandardProposition("P1", f.parse("((a & b) => c) & ((a & b) => d)")); + final StandardProposition p2 = new StandardProposition("P2", f.parse("(c & d) <=> ~e")); + final StandardProposition p3 = new StandardProposition("P3", new ImmutableFormulaList(p.parse("~e => f | g"))); + final StandardProposition p4 = new StandardProposition("P4", f.parse("f => ~a"), f.parse("g => ~b"), f.parse("p & q")); + final StandardProposition p5 = new StandardProposition("P5", f.parse("a => b")); + final StandardProposition p6 = new StandardProposition("P6", f.parse("a")); + final StandardProposition p7 = new StandardProposition("P7", f.parse("g | h")); + final StandardProposition p8 = new StandardProposition("P8", f.parse("x => ~y | z"), f.parse("z | w")); + + final StandardProposition p9 = new StandardProposition("P9", f.parse("a"), f.parse("b")); + + final StandardProposition p10 = new StandardProposition("P10", f.parse("p => q"), f.parse("p")); + final StandardProposition p11 = new StandardProposition("P11", f.parse("a"), f.parse("~q")); + + solver.add(p1); + solver.add(p2); + solver.add(p3); + solver.add(p4); + final SolverState state1 = solver.saveState(); + solver.add(p5); + solver.add(p6); + final SolverState state2 = solver.saveState(); + solver.add(p7); + solver.add(p8); + + assertThat(solver.sat()).isEqualTo(FALSE); + UNSATCore unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p1, p2, p3, p4, p5, p6); + + solver.loadState(state2); + assertThat(solver.sat()).isEqualTo(FALSE); + unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p1, p2, p3, p4, p5, p6); + + solver.loadState(state1); + solver.add(p9); + assertThat(solver.sat()).isEqualTo(FALSE); + unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p1, p2, p3, p4, p9); + + solver.loadState(state1); + solver.add(p5); + solver.add(p6); + assertThat(solver.sat()).isEqualTo(FALSE); + unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p1, p2, p3, p4, p5, p6); + + solver.loadState(state1); + solver.add(p10); + solver.add(p11); + assertThat(solver.sat()).isEqualTo(FALSE); + unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p4, p11); + } + /** * Checks that each formula of the core is part of the original problem and that the core is really unsat. * @param originalCore the original core From 91e2a94b886c93b90939eaf827133ab245e8cd27 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 9 Jul 2017 16:55:43 +0200 Subject: [PATCH 07/22] fixed a unit test --- .../java/org/logicng/solvers/sat/IncDecTest.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/logicng/solvers/sat/IncDecTest.java b/src/test/java/org/logicng/solvers/sat/IncDecTest.java index bdf061d8..44f9c651 100644 --- a/src/test/java/org/logicng/solvers/sat/IncDecTest.java +++ b/src/test/java/org/logicng/solvers/sat/IncDecTest.java @@ -46,23 +46,26 @@ public class IncDecTest { private final FormulaFactory f; - private final SATSolver[] solvers; + private final MiniSat[] solvers; private final PigeonHoleGenerator pg; public IncDecTest() { this.f = new FormulaFactory(); this.pg = new PigeonHoleGenerator(f); - this.solvers = new SATSolver[2]; + this.solvers = new MiniSat[2]; this.solvers[0] = MiniSat.miniSat(f, new MiniSatConfig.Builder().incremental(true).build()); this.solvers[1] = MiniSat.miniCard(f, new MiniSatConfig.Builder().incremental(true).build()); } @Test public void testIncDec() { - for (final SATSolver s : this.solvers) { + for (final MiniSat s : this.solvers) { s.add(f.variable("a")); final SolverState state1 = s.saveState(); - Assert.assertEquals("SolverState{id=0, state=[1, 1, 0, 0, 1]}", state1.toString()); + if (s.underlyingSolver() instanceof MiniCard) + Assert.assertEquals("SolverState{id=0, state=[1, 1, 0, 0, 1]}", state1.toString()); + else + Assert.assertEquals("SolverState{id=0, state=[1, 1, 0, 0, 1, 0, 0]}", state1.toString()); Assert.assertEquals(TRUE, s.sat()); s.add(pg.generate(5)); Assert.assertEquals(FALSE, s.sat()); @@ -74,7 +77,10 @@ public void testIncDec() { Assert.assertEquals(TRUE, s.sat()); s.add(pg.generate(5)); final SolverState state2 = s.saveState(); - Assert.assertEquals("SolverState{id=1, state=[1, 31, 81, 0, 1]}", state2.toString()); + if (s.underlyingSolver() instanceof MiniCard) + Assert.assertEquals("SolverState{id=1, state=[1, 31, 81, 0, 1]}", state2.toString()); + else + Assert.assertEquals("SolverState{id=1, state=[1, 31, 81, 0, 1, 0, 0]}", state2.toString()); s.add(pg.generate(4)); Assert.assertEquals(FALSE, s.sat()); s.loadState(state2); From d720f078b09ed4051454d64d32576a1f34a968da Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 23 Jul 2017 01:37:50 +0200 Subject: [PATCH 08/22] Changed version to 1.3 --- README.md | 7 +++++-- pom.xml | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 634cb021..008a8a8e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![wercker status](https://app.wercker.com/status/24c4765f3a0d79520ad80a1e4c20cfa2/s/master "wercker status")](https://app.wercker.com/project/bykey/24c4765f3a0d79520ad80a1e4c20cfa2) [![Coverage Status](https://coveralls.io/repos/logic-ng/LogicNG/badge.svg?branch=master&service=github)](https://coveralls.io/github/logic-ng/LogicNG?branch=master) ![License](https://img.shields.io/badge/license-Apache%202-blue.svg) ![Version](https://img.shields.io/badge/version-1.2-ff69b4.svg) +[![wercker status](https://app.wercker.com/status/24c4765f3a0d79520ad80a1e4c20cfa2/s/master "wercker status")](https://app.wercker.com/project/bykey/24c4765f3a0d79520ad80a1e4c20cfa2) [![Coverage Status](https://coveralls.io/repos/logic-ng/LogicNG/badge.svg?branch=master&service=github)](https://coveralls.io/github/logic-ng/LogicNG?branch=master) ![License](https://img.shields.io/badge/license-Apache%202-blue.svg) ![Version](https://img.shields.io/badge/version-1.3-ff69b4.svg) logo @@ -59,6 +59,9 @@ final Tristate result = miniSat.sat(); The library is released under the Apache License and therefore is free to use in any private, educational, or commercial projects. Commercial support is available. Please contact Christoph Zengler at logicng@escsol.com for further details. ## Changelog +### Version 1.3 (Release xxx) +* Unsat Cores are now parametrized with the proposition type + ### Version 1.2 (Release July 2017) * Introduced an extended formula factory which is able to return to a previously saved state and delete old formulas (and get them garbage collected) * A simple data structure for generic graphs including algorithms for connected components and maximal cliques @@ -69,5 +72,5 @@ The library is released under the Apache License and therefore is free to use in ### Version 1.1 (Release August 2016) * Implemented cardinality constraint encodings and pseudo-Boolean constraints encodings of PBLib -* Incremental cardinality constraints, including the possibility to add cardinaliy constraints to the solver without introducing new formula factory variables +* Incremental cardinality constraints, including the possibility to add cardinaliy constraints to the solver without introducing new formula factory variables * Different MUS algorithms diff --git a/pom.xml b/pom.xml index 42996cff..bb33e46c 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 4.0.0 org.logicng logicng - 1.2 + 1.3 jar LogicNG From 00ba7ff03eee5c902b78cf33566b558b2951582e Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 23 Jul 2017 01:38:34 +0200 Subject: [PATCH 09/22] Parametrized unsat core --- .../unsatcores/MUSGeneration.java | 6 +- .../explanations/unsatcores/UNSATCore.java | 10 +-- .../algorithms/DeletionBasedMUS.java | 8 +-- .../unsatcores/algorithms/MUSAlgorithm.java | 5 +- .../algorithms/PlainInsertionBasedMUS.java | 16 ++--- .../unsatcores/MUSGenerationTest.java | 61 +++++++++---------- .../unsatcores/UNSATCoreTest.java | 19 +++--- 7 files changed, 62 insertions(+), 63 deletions(-) diff --git a/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java b/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java index ec7d3f7f..e8a41ebe 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java +++ b/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java @@ -37,7 +37,7 @@ /** * Computes a minimal unsatisfiable subset (MUS) of a given formula with different algorithms. - * @version 1.1 + * @version 1.3 * @since 1.1 */ public final class MUSGeneration { @@ -59,7 +59,7 @@ public MUSGeneration() { * @param f the formula factory * @return the MUS */ - public UNSATCore computeMUS(final List propositions, final FormulaFactory f) { + public UNSATCore computeMUS(final List propositions, final FormulaFactory f) { return this.computeMUS(propositions, f, new MUSConfig.Builder().build()); } @@ -70,7 +70,7 @@ public UNSATCore computeMUS(final List propositions, final FormulaF * @param config the MUS configuration * @return the MUS */ - public UNSATCore computeMUS(final List propositions, final FormulaFactory f, final MUSConfig config) { + public UNSATCore computeMUS(final List propositions, final FormulaFactory f, final MUSConfig config) { if (propositions.isEmpty()) throw new IllegalArgumentException("Cannot generate a MUS for an empty list of propositions"); switch (config.algorithm) { diff --git a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java index 86f7f866..99ba963f 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java +++ b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java @@ -35,12 +35,12 @@ /** * An unsatisfiable core (can be a minimal unsatisfiable sub-formula). - * @version 1.1 + * @version 1.3 * @since 1.1 */ -final public class UNSATCore { +final public class UNSATCore { - private final List propositions; + private final List propositions; private final boolean isMUS; /** @@ -48,7 +48,7 @@ final public class UNSATCore { * @param propositions the propositions of the core * @param isMUS {@code true} if it is a MUS, {@code false} otherwise */ - public UNSATCore(final List propositions, boolean isMUS) { + public UNSATCore(final List propositions, boolean isMUS) { this.propositions = propositions; this.isMUS = isMUS; } @@ -57,7 +57,7 @@ public UNSATCore(final List propositions, boolean isMUS) { * Returns the propositions of this MUS. * @return the propositions of this MUS */ - public List propositions() { + public List propositions() { return this.propositions; } diff --git a/src/main/java/org/logicng/explanations/unsatcores/algorithms/DeletionBasedMUS.java b/src/main/java/org/logicng/explanations/unsatcores/algorithms/DeletionBasedMUS.java index bf1e5a86..aede1580 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/algorithms/DeletionBasedMUS.java +++ b/src/main/java/org/logicng/explanations/unsatcores/algorithms/DeletionBasedMUS.java @@ -41,14 +41,14 @@ /** * A naive deletion-based MUS algorithm. - * @version 1.1 + * @version 1.3 * @since 1.1 */ public final class DeletionBasedMUS extends MUSAlgorithm { @Override - public UNSATCore computeMUS(List propositions, final FormulaFactory f, final MUSConfig config) { - final List mus = new ArrayList<>(propositions.size()); + public UNSATCore computeMUS(List propositions, final FormulaFactory f, final MUSConfig config) { + final List mus = new ArrayList<>(propositions.size()); final List solverStates = new ArrayList<>(propositions.size()); final MiniSat solver = MiniSat.miniSat(f); for (final Proposition proposition : propositions) { @@ -64,6 +64,6 @@ public UNSATCore computeMUS(List propositions, final FormulaFactory if (solver.sat() == Tristate.TRUE) mus.add(propositions.get(i)); } - return new UNSATCore(mus, true); + return new UNSATCore<>(mus, true); } } diff --git a/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java b/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java index 37799029..bf9a4377 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java +++ b/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java @@ -37,7 +37,7 @@ /** * Abstract super class for MUS computation algorithms. - * @version 1.1 + * @version 1.3 * @since 1.1 */ abstract class MUSAlgorithm { @@ -49,5 +49,6 @@ abstract class MUSAlgorithm { * @param config the MUS configuration * @return the MUS */ - public abstract UNSATCore computeMUS(final List propositions, final FormulaFactory f, final MUSConfig config); + public abstract UNSATCore computeMUS(final List propositions, final FormulaFactory f, + final MUSConfig config); } diff --git a/src/main/java/org/logicng/explanations/unsatcores/algorithms/PlainInsertionBasedMUS.java b/src/main/java/org/logicng/explanations/unsatcores/algorithms/PlainInsertionBasedMUS.java index 2916f5e5..9bf426e9 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/algorithms/PlainInsertionBasedMUS.java +++ b/src/main/java/org/logicng/explanations/unsatcores/algorithms/PlainInsertionBasedMUS.java @@ -40,20 +40,20 @@ /** * A naive plain insertion-based MUS algorithm. - * @version 1.1 + * @version 1.3 * @since 1.1 */ public class PlainInsertionBasedMUS extends MUSAlgorithm { @Override - public UNSATCore computeMUS(List propositions, FormulaFactory f, MUSConfig config) { - List currentFormula = new ArrayList<>(propositions.size()); + public UNSATCore computeMUS(List propositions, FormulaFactory f, MUSConfig config) { + List currentFormula = new ArrayList<>(propositions.size()); currentFormula.addAll(propositions); - final List mus = new ArrayList<>(propositions.size()); + final List mus = new ArrayList<>(propositions.size()); final MiniSat solver = MiniSat.miniSat(f); while (!currentFormula.isEmpty()) { - final List currentSubset = new ArrayList<>(propositions.size()); - Proposition transitionProposition = null; + final List currentSubset = new ArrayList<>(propositions.size()); + T transitionProposition = null; solver.reset(); for (final Proposition p : mus) solver.add(p); @@ -61,7 +61,7 @@ public UNSATCore computeMUS(List propositions, FormulaFactory f, MU while (solver.sat() == Tristate.TRUE) { if (count < 0) throw new IllegalArgumentException("Cannot compute a MUS for a satisfiable formula set."); - final Proposition removeProposition = currentFormula.get(--count); + final T removeProposition = currentFormula.get(--count); currentSubset.add(removeProposition); transitionProposition = removeProposition; solver.add(removeProposition); @@ -73,6 +73,6 @@ public UNSATCore computeMUS(List propositions, FormulaFactory f, MU mus.add(transitionProposition); } } - return new UNSATCore(mus, true); + return new UNSATCore<>(mus, true); } } diff --git a/src/test/java/org/logicng/explanations/unsatcores/MUSGenerationTest.java b/src/test/java/org/logicng/explanations/unsatcores/MUSGenerationTest.java index f91c7d29..192721a1 100644 --- a/src/test/java/org/logicng/explanations/unsatcores/MUSGenerationTest.java +++ b/src/test/java/org/logicng/explanations/unsatcores/MUSGenerationTest.java @@ -34,7 +34,6 @@ import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; import org.logicng.formulas.Literal; -import org.logicng.propositions.Proposition; import org.logicng.propositions.StandardProposition; import org.logicng.solvers.MiniSat; import org.logicng.solvers.sat.PigeonHoleGenerator; @@ -47,7 +46,7 @@ /** * Unit tests for the class {@link MUSGeneration}. - * @version 1.1 + * @version 1.3 * @since 1.1 */ public class MUSGenerationTest { @@ -55,15 +54,15 @@ public class MUSGenerationTest { private final FormulaFactory f = new FormulaFactory(); private final PigeonHoleGenerator pg = new PigeonHoleGenerator(f); - private final List pg3; - private final List pg4; - private final List pg5; - private final List pg6; - private final List pg7; - private final List file1; - private final List file2; - private final List file3; - private final List file4; + private final List pg3; + private final List pg4; + private final List pg5; + private final List pg6; + private final List pg7; + private final List file1; + private final List file2; + private final List file3; + private final List file4; public MUSGenerationTest() throws IOException { this.pg3 = generatePGPropositions(3); @@ -80,15 +79,15 @@ public MUSGenerationTest() throws IOException { @Test public void testDeletionBasedMUS() throws IOException { final MUSGeneration mus = new MUSGeneration(); - final UNSATCore mus1 = mus.computeMUS(this.pg3, this.f); - final UNSATCore mus2 = mus.computeMUS(this.pg4, this.f); - final UNSATCore mus3 = mus.computeMUS(this.pg5, this.f); - final UNSATCore mus4 = mus.computeMUS(this.pg6, this.f); - final UNSATCore mus5 = mus.computeMUS(this.pg7, this.f); - final UNSATCore mus6 = mus.computeMUS(this.file1, this.f); - final UNSATCore mus7 = mus.computeMUS(this.file2, this.f); - final UNSATCore mus8 = mus.computeMUS(this.file3, this.f); - final UNSATCore mus9 = mus.computeMUS(this.file4, this.f); + final UNSATCore mus1 = mus.computeMUS(this.pg3, this.f); + final UNSATCore mus2 = mus.computeMUS(this.pg4, this.f); + final UNSATCore mus3 = mus.computeMUS(this.pg5, this.f); + final UNSATCore mus4 = mus.computeMUS(this.pg6, this.f); + final UNSATCore mus5 = mus.computeMUS(this.pg7, this.f); + final UNSATCore mus6 = mus.computeMUS(this.file1, this.f); + final UNSATCore mus7 = mus.computeMUS(this.file2, this.f); + final UNSATCore mus8 = mus.computeMUS(this.file3, this.f); + final UNSATCore mus9 = mus.computeMUS(this.file4, this.f); testMUS(pg3, mus1); testMUS(pg4, mus2); testMUS(pg5, mus3); @@ -104,11 +103,11 @@ public void testDeletionBasedMUS() throws IOException { public void testPlainInsertionBasedMUS() throws IOException { final MUSGeneration mus = new MUSGeneration(); final MUSConfig config = new MUSConfig.Builder().algorithm(MUSConfig.Algorithm.PLAIN_INSERTION).build(); - final UNSATCore mus1 = mus.computeMUS(this.pg3, this.f, config); - final UNSATCore mus2 = mus.computeMUS(this.pg4, this.f, config); - final UNSATCore mus3 = mus.computeMUS(this.pg5, this.f, config); - final UNSATCore mus6 = mus.computeMUS(this.file1, this.f, config); - final UNSATCore mus7 = mus.computeMUS(this.file2, this.f, config); + final UNSATCore mus1 = mus.computeMUS(this.pg3, this.f, config); + final UNSATCore mus2 = mus.computeMUS(this.pg4, this.f, config); + final UNSATCore mus3 = mus.computeMUS(this.pg5, this.f, config); + final UNSATCore mus6 = mus.computeMUS(this.file1, this.f, config); + final UNSATCore mus7 = mus.computeMUS(this.file2, this.f, config); testMUS(pg3, mus1); testMUS(pg4, mus2); testMUS(pg5, mus3); @@ -122,16 +121,16 @@ public void testToString() { Assert.assertEquals("MUSGeneration", mus.toString()); } - private List generatePGPropositions(int n) { - final List result = new ArrayList<>(); + private List generatePGPropositions(int n) { + final List result = new ArrayList<>(); final Formula pgf = pg.generate(n); for (final Formula f : pgf) result.add(new StandardProposition(f)); return result; } - private List readDimacs(final String fileName) throws IOException { - final List result = new ArrayList<>(); + private List readDimacs(final String fileName) throws IOException { + final List result = new ArrayList<>(); final BufferedReader reader = new BufferedReader(new FileReader(fileName)); while (reader.ready()) { final String line = reader.readLine(); @@ -148,11 +147,11 @@ private List readDimacs(final String fileName) throws IOException { return result; } - private void testMUS(final List original, final UNSATCore mus) { + private void testMUS(final List original, final UNSATCore mus) { Assert.assertTrue(mus.isMUS()); Assert.assertTrue(mus.propositions().size() <= original.size()); final MiniSat miniSat = MiniSat.miniSat(this.f); - for (final Proposition p : mus.propositions()) { + for (final StandardProposition p : mus.propositions()) { Assert.assertTrue(original.contains(p)); Assert.assertEquals(Tristate.TRUE, miniSat.sat()); miniSat.add(p); diff --git a/src/test/java/org/logicng/explanations/unsatcores/UNSATCoreTest.java b/src/test/java/org/logicng/explanations/unsatcores/UNSATCoreTest.java index 691699f7..e753dab5 100644 --- a/src/test/java/org/logicng/explanations/unsatcores/UNSATCoreTest.java +++ b/src/test/java/org/logicng/explanations/unsatcores/UNSATCoreTest.java @@ -5,7 +5,6 @@ import org.logicng.formulas.FormulaFactory; import org.logicng.io.parsers.ParserException; import org.logicng.io.parsers.PropositionalParser; -import org.logicng.propositions.Proposition; import org.logicng.propositions.StandardProposition; import java.util.ArrayList; @@ -13,13 +12,13 @@ /** * Unit tests for {@link UNSATCore}. - * @version 1.1 + * @version 1.3 * @since 1.1 */ public class UNSATCoreTest { - private final List props1; - private final List props2; + private final List props1; + private final List props2; private final UNSATCore core1; private final UNSATCore core2; @@ -38,8 +37,8 @@ public UNSATCoreTest() throws ParserException { props2.add(new StandardProposition(parser.parse("a | ~b"))); props2.add(new StandardProposition(parser.parse("~a | ~b"))); props2.add(new StandardProposition(parser.parse("~a | ~b | c"))); - this.core1 = new UNSATCore(props1, true); - this.core2 = new UNSATCore(props2, false); + this.core1 = new UNSATCore<>(props1, true); + this.core2 = new UNSATCore<>(props2, false); } @Test @@ -53,16 +52,16 @@ public void testGetters() { @Test public void testHashCode() { Assert.assertEquals(core1.hashCode(), core1.hashCode()); - Assert.assertEquals(core2.hashCode(), new UNSATCore(props2, false).hashCode()); + Assert.assertEquals(core2.hashCode(), new UNSATCore<>(props2, false).hashCode()); } @Test public void testEquals() { Assert.assertEquals(core1, core1); - Assert.assertEquals(core1, new UNSATCore(props1, true)); + Assert.assertEquals(core1, new UNSATCore<>(props1, true)); Assert.assertNotEquals(core1, core2); - Assert.assertNotEquals(core1, new UNSATCore(props1, false)); - Assert.assertNotEquals(core1, new UNSATCore(props2, true)); + Assert.assertNotEquals(core1, new UNSATCore<>(props1, false)); + Assert.assertNotEquals(core1, new UNSATCore<>(props2, true)); Assert.assertNotEquals(core1, null); Assert.assertNotEquals(core1, "String"); } From 6664ed7196c97caef58febeedabb9a7a17dc1715 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 5 Aug 2017 01:23:01 +0200 Subject: [PATCH 10/22] fixes a bug when a not eq0 CC was generated --- .../org/logicng/formulas/PBConstraint.java | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/logicng/formulas/PBConstraint.java b/src/main/java/org/logicng/formulas/PBConstraint.java index f5147f0d..205e3cad 100644 --- a/src/main/java/org/logicng/formulas/PBConstraint.java +++ b/src/main/java/org/logicng/formulas/PBConstraint.java @@ -93,17 +93,17 @@ public void remove() { * @param f the formula factory * @throws IllegalArgumentException if the number of literals and coefficients do not correspond */ - PBConstraint(final Literal[] literals, final int[] coefficients, final CType comparator, int rhs, final FormulaFactory f) { + PBConstraint(final Literal[] literals, final int[] coefficients, final CType comparator, final int rhs, final FormulaFactory f) { super(FType.PBC, f); if (literals.length != coefficients.length) throw new IllegalArgumentException("Cannot generate a pseudo-Boolean constraint with literals.length != coefficients.length"); this.literals = literals; this.coefficients = coefficients; boolean cc = true; - maxWeight = Integer.MIN_VALUE; + this.maxWeight = Integer.MIN_VALUE; for (final int c : coefficients) { - if (c > maxWeight) - maxWeight = c; + if (c > this.maxWeight) + this.maxWeight = c; if (c != 1) cc = false; } @@ -125,7 +125,7 @@ public void remove() { * @param big the larger value * @return the GCD of the two values */ - private static int gcd(int small, int big) { + private static int gcd(final int small, final int big) { return small == 0 ? big : gcd(big % small, small); } @@ -182,8 +182,8 @@ public int maxWeight() { * @return the normalized constraint */ public Formula normalize() { - LNGVector normPs = new LNGVector<>(this.literals.length); - LNGIntVector normCs = new LNGIntVector(this.literals.length); + final LNGVector normPs = new LNGVector<>(this.literals.length); + final LNGIntVector normCs = new LNGIntVector(this.literals.length); int normRhs; switch (this.comparator) { case EQ: @@ -192,7 +192,7 @@ public Formula normalize() { normCs.push(this.coefficients[i]); } normRhs = this.rhs; - Formula f1 = this.normalize(normPs, normCs, normRhs); + final Formula f1 = this.normalize(normPs, normCs, normRhs); normPs.clear(); normCs.clear(); for (int i = 0; i < this.literals.length; i++) { @@ -200,8 +200,8 @@ public Formula normalize() { normCs.push(-this.coefficients[i]); } normRhs = -this.rhs; - Formula f2 = this.normalize(normPs, normCs, normRhs); - return f.and(f1, f2); + final Formula f2 = this.normalize(normPs, normCs, normRhs); + return this.f.and(f1, f2); case LT: case LE: for (int i = 0; i < this.literals.length; i++) { @@ -231,7 +231,7 @@ public Formula normalize() { * @param rhs the right-hand side * @return the normalized constraint */ - private Formula normalize(final LNGVector ps, final LNGIntVector cs, int rhs) { + private Formula normalize(final LNGVector ps, final LNGIntVector cs, final int rhs) { int c = rhs; int newSize = 0; for (int i = 0; i < ps.size(); i++) { @@ -255,7 +255,7 @@ private Formula normalize(final LNGVector ps, final LNGIntVector cs, in var2consts.put(x, new Pair<>(consts.first(), consts.second() + cs.get(i))); } final LNGVector> csps = new LNGVector<>(var2consts.size()); - for (Map.Entry> all : var2consts.entrySet()) { + for (final Map.Entry> all : var2consts.entrySet()) { if (all.getValue().first() < all.getValue().second()) { c -= all.getValue().first(); csps.push(new Pair<>(all.getValue().second() - all.getValue().first(), all.getKey())); @@ -282,9 +282,9 @@ private Formula normalize(final LNGVector ps, final LNGIntVector cs, in do { changed = false; if (c < 0) - return f.falsum(); + return this.f.falsum(); if (sum <= c) - return f.verum(); + return this.f.verum(); assert cs.size() > 0; int div = c; for (int i = 0; i < cs.size(); i++) @@ -303,7 +303,7 @@ private Formula normalize(final LNGVector ps, final LNGIntVector cs, in final int[] coeffs = new int[cs.size()]; for (int i = 0; i < coeffs.length; i++) coeffs[i] = cs.get(i); - return f.pbc(CType.LE, c, lits, coeffs); + return this.f.pbc(CType.LE, c, lits, coeffs); } @Override @@ -357,7 +357,7 @@ public boolean containsVariable(final Variable variable) { @Override public boolean evaluate(final Assignment assignment) { - int lhs = this.evaluateLHS(assignment); + final int lhs = this.evaluateLHS(assignment); return this.evaluateComparator(lhs); } @@ -372,7 +372,7 @@ public Formula restrict(final Assignment assignment) { final Formula restriction = assignment.restrictLit(this.literals[i]); if (restriction == null) { newLits.add(this.literals[i]); - int coeff = this.coefficients[i]; + final int coeff = this.coefficients[i]; newCoeffs.add(coeff); if (coeff > 0) maxValue += coeff; @@ -383,17 +383,17 @@ public Formula restrict(final Assignment assignment) { } if (newLits.isEmpty()) - return this.evaluateComparator(lhsFixed) ? f.verum() : f.falsum(); + return this.evaluateComparator(lhsFixed) ? this.f.verum() : this.f.falsum(); - int newRHS = this.rhs - lhsFixed; - if (comparator != CType.EQ) { - Tristate fixed = evaluateCoeffs(minValue, maxValue, newRHS, this.comparator); + final int newRHS = this.rhs - lhsFixed; + if (this.comparator != CType.EQ) { + final Tristate fixed = evaluateCoeffs(minValue, maxValue, newRHS, this.comparator); if (fixed == Tristate.TRUE) - return f.verum(); + return this.f.verum(); else if (fixed == Tristate.FALSE) - return f.falsum(); + return this.f.falsum(); } - return f.pbc(this.comparator, newRHS, newLits, newCoeffs); + return this.f.pbc(this.comparator, newRHS, newLits, newCoeffs); } /** @@ -406,7 +406,7 @@ else if (fixed == Tristate.FALSE) * @return {@link Tristate#TRUE} if the constraint is true, {@link Tristate#FALSE} if it is false and * {@link Tristate#UNDEF} if both are still possible */ - static Tristate evaluateCoeffs(int minValue, int maxValue, int rhs, CType comparator) { + static Tristate evaluateCoeffs(final int minValue, final int maxValue, final int rhs, final CType comparator) { int status = 0; if (rhs >= minValue) status++; @@ -452,7 +452,7 @@ public Formula substitute(final Substitution substitution) { final List newCoeffs = new LinkedList<>(); int lhsFixed = 0; for (int i = 0; i < this.literals.length; i++) { - Formula subst = substitution.getSubstitution(this.literals[i].variable()); + final Formula subst = substitution.getSubstitution(this.literals[i].variable()); if (subst == null) { newLits.add(this.literals[i]); newCoeffs.add(this.coefficients[i]); @@ -476,23 +476,26 @@ public Formula substitute(final Substitution substitution) { } } return newLits.isEmpty() - ? this.evaluateComparator(lhsFixed) ? f.verum() : f.falsum() - : f.pbc(this.comparator, this.rhs - lhsFixed, newLits, newCoeffs); + ? this.evaluateComparator(lhsFixed) ? this.f.verum() : this.f.falsum() + : this.f.pbc(this.comparator, this.rhs - lhsFixed, newLits, newCoeffs); } @Override public Formula negate() { switch (this.comparator) { case EQ: - return f.or(f.pbc(CType.LT, this.rhs, this.literals, this.coefficients), f.pbc(CType.GT, this.rhs, this.literals, this.coefficients)); + if (this.rhs > 0) + return this.f.or(this.f.pbc(CType.LT, this.rhs, this.literals, this.coefficients), this.f.pbc(CType.GT, this.rhs, this.literals, this.coefficients)); + else + return this.f.pbc(CType.GT, this.rhs, this.literals, this.coefficients); case LE: - return f.pbc(CType.GT, this.rhs, this.literals, this.coefficients); + return this.f.pbc(CType.GT, this.rhs, this.literals, this.coefficients); case LT: - return f.pbc(CType.GE, this.rhs, this.literals, this.coefficients); + return this.f.pbc(CType.GE, this.rhs, this.literals, this.coefficients); case GE: - return f.pbc(CType.LT, this.rhs, this.literals, this.coefficients); + return this.f.pbc(CType.LT, this.rhs, this.literals, this.coefficients); case GT: - return f.pbc(CType.LE, this.rhs, this.literals, this.coefficients); + return this.f.pbc(CType.LE, this.rhs, this.literals, this.coefficients); default: throw new IllegalStateException("Unknown pseudo-Boolean comparator"); } @@ -504,7 +507,7 @@ public Formula nnf() { if (nnf == null) { if (this.encoding == null) this.encode(); - nnf = f.and(this.encoding.formula(this.f)); + nnf = this.f.and(this.encoding.formula(this.f)); this.setTransformationCacheEntry(NNF, nnf); } return nnf; @@ -528,7 +531,7 @@ private int evaluateLHS(final Assignment assignment) { * @param lhs the left-hand side * @return {@code true} if the comparator evaluates to true, {@code false} otherwise */ - private boolean evaluateComparator(int lhs) { + private boolean evaluateComparator(final int lhs) { switch (this.comparator) { case EQ: return lhs == this.rhs; @@ -556,9 +559,9 @@ private void encode() { public int hashCode() { if (this.hashCode == 0) { int temp = this.comparator.hashCode() + this.rhs; - for (int i = 0; i < literals.length; i++) { - temp += 11 * literals[i].hashCode(); - temp += 13 * coefficients[i]; + for (int i = 0; i < this.literals.length; i++) { + temp += 11 * this.literals[i].hashCode(); + temp += 13 * this.coefficients[i]; } this.hashCode = temp; } From a6eb99f8fc421cf726290f17019eda960a168fdf Mon Sep 17 00:00:00 2001 From: Martin Siegmund Date: Mon, 21 Aug 2017 18:59:12 +0200 Subject: [PATCH 11/22] DistributiveSimplifier added, plus possibility to give additional variables for enumerateAllModels(). Not enough tests so far.. --- .../cache/TransformationCacheEntry.java | 3 +- .../java/org/logicng/solvers/CleaneLing.java | 51 +++++-- .../java/org/logicng/solvers/MiniSat.java | 33 ++++- .../java/org/logicng/solvers/SATSolver.java | 19 ++- .../DistributiveSimplifier.java | 127 ++++++++++++++++++ .../java/org/logicng/formulas/CacheTest.java | 2 +- .../DistributiveSimplifierTest.java | 95 +++++++++++++ 7 files changed, 309 insertions(+), 21 deletions(-) create mode 100644 src/main/java/org/logicng/transformations/DistributiveSimplifier.java create mode 100644 src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java diff --git a/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java b/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java index 1deeca50..99da836f 100644 --- a/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java +++ b/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java @@ -43,7 +43,8 @@ public enum TransformationCacheEntry implements CacheEntry { FACTORIZED_CNF("factorized conjunctive normal form"), FACTORIZED_DNF("factorized disjunctive normal form"), AIG("and-inverter graph"), - UNIT_PROPAGATION("unit propagation"); + UNIT_PROPAGATION("unit propagation"), + DISTRIBUTIVE_SIMPLIFICATION("distributive simplification"); private String description; diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index b9d3ca37..8743107d 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -48,6 +48,7 @@ import org.logicng.solvers.sat.CleaneLingStyleSolver; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.SortedMap; @@ -60,7 +61,7 @@ /** * Wrapper for the CleaneLing-style SAT solvers. - * @version 1.2 + * @version 1.3 * @since 1.0 */ public final class CleaneLing extends SATSolver { @@ -211,7 +212,7 @@ public void reset() { } @Override - public Assignment model(final Collection variables) { + public Assignment model(Collection variables) { if (this.result == UNDEF) throw new IllegalStateException("Cannot get a model as long as the formula is not solved. Call 'sat' first."); return this.result == TRUE ? this.createAssignment(this.solver.model(), variables) : null; @@ -219,11 +220,23 @@ public Assignment model(final Collection variables) { @Override public List enumerateAllModels(final Collection variables) { + return enumerateAllModels(variables, new HashSet()); //TODO + } + + @Override + public List enumerateAllModels(Collection variables, Collection additionalVariables) { if (this.solverStyle == SolverStyle.FULL && !this.plain) throw new UnsupportedOperationException("Model enumeration is not available if simplifications are turned on"); List models = new LinkedList<>(); + SortedSet allVariables = new TreeSet<>(); + if (variables == null) { + allVariables = null; + } else { + allVariables.addAll(variables); + allVariables.addAll(additionalVariables); + } while (this.sat((SATHandler) null) == TRUE) { - final Assignment model = this.model(variables); + final Assignment model = this.model(allVariables); models.add(model); assert model != null; this.add(model.blockingClause(this.f, variables)); @@ -233,16 +246,28 @@ public List enumerateAllModels(final Collection variables) @Override public List enumerateAllModels(final Collection literals, final ModelEnumerationHandler handler) { + return enumerateAllModels(literals, new HashSet(), handler); // TODO + } + + @Override + public List enumerateAllModels(Collection variables, Collection additionalVariables, ModelEnumerationHandler handler) { if (this.solverStyle == SolverStyle.FULL && !this.plain) throw new UnsupportedOperationException("Model enumeration is not available if simplifications are turned on"); List models = new LinkedList<>(); boolean proceed = true; + SortedSet allVariables = new TreeSet<>(); + if (variables == null) { + allVariables = null; + } else { + allVariables.addAll(variables); + allVariables.addAll(additionalVariables); + } while (proceed && this.sat((SATHandler) null) == TRUE) { - final Assignment model = this.model(literals); + final Assignment model = this.model(allVariables); models.add(model); proceed = handler.foundModel(model); assert model != null; - this.add(model.blockingClause(this.f, literals)); + this.add(model.blockingClause(this.f, variables)); } return models; } @@ -283,15 +308,13 @@ private void addClause(final Collection literals) { */ private Assignment createAssignment(final LNGBooleanVector vec, final Collection variables) { final Assignment model = new Assignment(); - if (!vec.empty()) { - for (int i = 1; i < vec.size(); i++) { - final Variable var = f.variable(this.idx2name.get(i)); - if (vec.get(i)) { - if (variables == null || variables.contains(var)) - model.addLiteral(var); - } else if (variables == null || variables.contains(var)) - model.addLiteral(var.negate()); - } + for (int i = 1; i < vec.size(); i++) { + final Variable var = this.f.variable(this.idx2name.get(i)); + if (vec.get(i)) { + if (variables == null || variables.contains(var)) + model.addLiteral(var); + } else if (variables == null || variables.contains(var)) + model.addLiteral(var.negate()); } return model; } diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 73a92e03..ea66e1d6 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -53,6 +53,7 @@ import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -66,7 +67,7 @@ /** * Wrapper for the MiniSAT-style SAT solvers. - * @version 1.2 + * @version 1.3 * @since 1.0 */ public final class MiniSat extends SATSolver { @@ -286,12 +287,24 @@ public Assignment model(final Collection variables) { @Override public List enumerateAllModels(final Collection variables) { + return enumerateAllModels(variables, new HashSet()); //TODO better empty List? + } + + @Override + public List enumerateAllModels(Collection variables, Collection additionalVariables) { List models = new LinkedList<>(); SolverState stateBeforeEnumeration = null; if (this.style == SolverStyle.MINISAT && incremental) stateBeforeEnumeration = this.saveState(); + SortedSet allVariables = new TreeSet<>(); + if (variables == null) { + allVariables = null; + } else { + allVariables.addAll(variables); + allVariables.addAll(additionalVariables); + } while (this.sat((SATHandler) null) == TRUE) { - final Assignment model = this.model(variables); + final Assignment model = this.model(allVariables); assert model != null; models.add(model); this.add(model.blockingClause(this.f, variables)); @@ -303,17 +316,29 @@ public List enumerateAllModels(final Collection variables) @Override public List enumerateAllModels(final Collection literals, final ModelEnumerationHandler handler) { + return enumerateAllModels(literals, new HashSet(), handler); //TODO + } + + @Override + public List enumerateAllModels(Collection variables, Collection additionalVariables, ModelEnumerationHandler handler) { List models = new LinkedList<>(); SolverState stateBeforeEnumeration = null; if (this.style == SolverStyle.MINISAT && incremental) stateBeforeEnumeration = this.saveState(); boolean proceed = true; + SortedSet allVariables = new TreeSet<>(); + if (variables == null) { + allVariables = null; + } else { + allVariables.addAll(variables); + allVariables.addAll(additionalVariables); + } while (proceed && this.sat((SATHandler) null) == TRUE) { - final Assignment model = this.model(literals); + final Assignment model = this.model(allVariables); assert model != null; models.add(model); proceed = handler.foundModel(model); - this.add(model.blockingClause(this.f, literals)); + this.add(model.blockingClause(this.f, variables)); } if (this.style == SolverStyle.MINISAT && incremental) this.loadState(stateBeforeEnumeration); diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 7c68a5d2..159bebf3 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -48,7 +48,7 @@ /** * A generic interface for LogicNG's SAT solvers. - * @version 1.2 + * @version 1.3 * @since 1.0 */ public abstract class SATSolver { @@ -333,6 +333,14 @@ public List enumerateAllModels(final Variable[] variables) { */ public abstract List enumerateAllModels(final Collection variables); + /** + * Enumerates all models of the current formula wrt. a given set of variables. If the set is {@code null}, + * all variables are considered relevant. Additionally keeps all the additional variables TODO + * @param variables the set of variables + * @return the list of models + */ + public abstract List enumerateAllModels(final Collection variables, final Collection additionalVariables); + /** * Enumerates all models of the current formula and passes it to a model enumeration handler. * @param handler the model enumeration handler @@ -362,6 +370,15 @@ public List enumerateAllModels(final Variable[] variables, final Mod */ public abstract List enumerateAllModels(final Collection variables, final ModelEnumerationHandler handler); + /** + * Enumerates all models of the current formula wrt. a given set of variables and passes it to a model + * enumeration handler. If the set is {@code null}, all literals are considered relevant. + * @param variables the set of variables + * @param handler the model enumeration handler TODO + * @return the list of models + */ + public abstract List enumerateAllModels(final Collection variables, final Collection additionalVariables, final ModelEnumerationHandler handler); + /** * Saves the current solver state. * @return the current solver state diff --git a/src/main/java/org/logicng/transformations/DistributiveSimplifier.java b/src/main/java/org/logicng/transformations/DistributiveSimplifier.java new file mode 100644 index 00000000..3b11e7cc --- /dev/null +++ b/src/main/java/org/logicng/transformations/DistributiveSimplifier.java @@ -0,0 +1,127 @@ +/////////////////////////////////////////////////////////////////////////// +// __ _ _ ________ // +// / / ____ ____ _(_)____/ | / / ____/ // +// / / / __ \/ __ `/ / ___/ |/ / / __ // +// / /___/ /_/ / /_/ / / /__/ /| / /_/ / // +// /_____/\____/\__, /_/\___/_/ |_/\____/ // +// /____/ // +// // +// The Next Generation Logic Library // +// // +/////////////////////////////////////////////////////////////////////////// +// // +// Copyright 2015-2017 Christoph Zengler // +// // +// Licensed under the Apache License, Version 2.0 (the "License"); // +// you may not use this file except in compliance with the License. // +// You may obtain a copy of the License at // +// // +// http://www.apache.org/licenses/LICENSE-2.0 // +// // +// Unless required by applicable law or agreed to in writing, software // +// distributed under the License is distributed on an "AS IS" BASIS, // +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // +// implied. See the License for the specific language governing // +// permissions and limitations under the License. // +// // +/////////////////////////////////////////////////////////////////////////// + +package org.logicng.transformations; + +import org.logicng.formulas.Equivalence; +import org.logicng.formulas.FType; +import org.logicng.formulas.Formula; +import org.logicng.formulas.FormulaFactory; +import org.logicng.formulas.FormulaTransformation; +import org.logicng.formulas.Implication; +import org.logicng.formulas.Not; +import org.logicng.formulas.cache.TransformationCacheEntry; + +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +/** + * A formula transformation which performs simplifications by applying the distributive laws. + * @version 1.3 + * @since 1.3 + */ +public class DistributiveSimplifier implements FormulaTransformation { + + @Override + public Formula apply(Formula formula, boolean cache) { + FormulaFactory f = formula.factory(); + final Formula result; + switch (formula.type()) { + case EQUIV: + Equivalence equiv = (Equivalence) formula; + result = f.equivalence(this.apply(equiv.left(), cache), this.apply(equiv.right(), cache)); + break; + case IMPL: + Implication impl = (Implication) formula; + result = f.implication(this.apply(impl.left(), cache), this.apply(impl.right(), cache)); + break; + case NOT: + Not not = (Not) formula; + result = f.not(this.apply(not.operand(), cache)); + break; + case OR: + case AND: + FType outerType = formula.type(); + FType innerType = outerType == FType.OR ? FType.AND : FType.OR; + Set operands = new LinkedHashSet<>(); + for (Formula op : formula) { + operands.add(this.apply(op, cache)); + } + Map> part2Operands = new LinkedHashMap<>(); + Formula mostCommon = null; + int mostCommonAmount = 0; + for (Formula op : operands) { + if (op.type() == innerType) { + for (Formula part : op) { + Set partOperands = part2Operands.get(part); + if (partOperands == null) { + partOperands = new LinkedHashSet<>(); + part2Operands.put(part, partOperands); + } + partOperands.add(op); + if (partOperands.size() > mostCommonAmount) { + mostCommon = part; + mostCommonAmount = partOperands.size(); + } + } + } + } + if (mostCommon == null || mostCommonAmount == 1) { + result = f.naryOperator(outerType, operands); + break; + } + + operands.removeAll(part2Operands.get(mostCommon)); + + Set relevantFormulas = new LinkedHashSet<>(); + for (Formula preRelevantFormula : part2Operands.get(mostCommon)) { + Set relevantParts = new LinkedHashSet<>(); + for (Formula part : preRelevantFormula) { + if (!part.equals(mostCommon)) { + relevantParts.add(part); + } + } + relevantFormulas.add(f.naryOperator(innerType, relevantParts)); + } + Formula newOperand = f.naryOperator(innerType, mostCommon, f.naryOperator(outerType, relevantFormulas)); + operands.add(newOperand); + + result = f.naryOperator(outerType, operands); + break; + default: + result = formula; + } + + if (cache) + formula.setTransformationCacheEntry(TransformationCacheEntry.DISTRIBUTIVE_SIMPLIFICATION, result); + + return result; + } +} diff --git a/src/test/java/org/logicng/formulas/CacheTest.java b/src/test/java/org/logicng/formulas/CacheTest.java index 37e7760c..d49317a4 100644 --- a/src/test/java/org/logicng/formulas/CacheTest.java +++ b/src/test/java/org/logicng/formulas/CacheTest.java @@ -64,7 +64,7 @@ public void testDescription() { @Test public void testValues() { List valuesTrans = Arrays.asList(TransformationCacheEntry.values()); - Assert.assertEquals(10, valuesTrans.size()); + Assert.assertEquals(11, valuesTrans.size()); Assert.assertTrue(valuesTrans.contains(TransformationCacheEntry.valueOf("FACTORIZED_DNF"))); Assert.assertTrue(valuesTrans.contains(TransformationCacheEntry.valueOf("PLAISTED_GREENBAUM_NEG"))); diff --git a/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java b/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java new file mode 100644 index 00000000..26489d29 --- /dev/null +++ b/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////// +// __ _ _ ________ // +// / / ____ ____ _(_)____/ | / / ____/ // +// / / / __ \/ __ `/ / ___/ |/ / / __ // +// / /___/ /_/ / /_/ / / /__/ /| / /_/ / // +// /_____/\____/\__, /_/\___/_/ |_/\____/ // +// /____/ // +// // +// The Next Generation Logic Library // +// // +/////////////////////////////////////////////////////////////////////////// +// // +// Copyright 2015-2017 Christoph Zengler // +// // +// Licensed under the Apache License, Version 2.0 (the "License"); // +// you may not use this file except in compliance with the License. // +// You may obtain a copy of the License at // +// // +// http://www.apache.org/licenses/LICENSE-2.0 // +// // +// Unless required by applicable law or agreed to in writing, software // +// distributed under the License is distributed on an "AS IS" BASIS, // +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // +// implied. See the License for the specific language governing // +// permissions and limitations under the License. // +// // +/////////////////////////////////////////////////////////////////////////// + +package org.logicng.transformations; + +import org.junit.Assert; +import org.junit.Test; +import org.logicng.formulas.F; +import org.logicng.formulas.Formula; +import org.logicng.io.parsers.ParserException; +import org.logicng.io.parsers.PropositionalParser; + +/** + * Unit tests for {@link DistributiveSimplifier}. + * @version 1.3 + * @since 1.3 + */ +public class DistributiveSimplifierTest { + + private DistributiveSimplifier distributiveSimplifier = new DistributiveSimplifier(); + + @Test + public void testConstants() { + Assert.assertEquals(F.TRUE, F.TRUE.transform(distributiveSimplifier)); + Assert.assertEquals(F.FALSE, F.FALSE.transform(distributiveSimplifier)); + } + + @Test + public void testLiterals() { + Assert.assertEquals(F.A, F.A.transform(distributiveSimplifier)); + Assert.assertEquals(F.NA, F.NA.transform(distributiveSimplifier)); + } + + @Test + public void testNoPropagation() { + Assert.assertEquals(F.AND1, F.AND1.transform(distributiveSimplifier)); + Assert.assertEquals(F.AND2, F.AND2.transform(distributiveSimplifier)); + Assert.assertEquals(F.OR1, F.OR1.transform(distributiveSimplifier)); + Assert.assertEquals(F.OR2, F.OR2.transform(distributiveSimplifier)); + } + + @Test + public void testPropagations() throws ParserException { + final PropositionalParser p = new PropositionalParser(F.f); + Assert.assertEquals(F.AND1, F.f.and(F.AND1, F.A).transform(distributiveSimplifier)); + Assert.assertEquals(F.FALSE, F.f.and(F.AND2, F.A).transform(distributiveSimplifier)); + Assert.assertEquals(F.f.and(F.OR1, F.X), F.f.and(F.OR1, F.X).transform(distributiveSimplifier)); + Assert.assertEquals(F.f.and(F.OR2, F.X), F.f.and(F.OR2, F.X).transform(distributiveSimplifier)); + Assert.assertEquals(F.f.or(F.AND1, F.A), F.f.or(F.AND1, F.A).transform(distributiveSimplifier)); + Assert.assertEquals(F.f.or(F.AND2, F.A), F.f.or(F.AND2, F.A).transform(distributiveSimplifier)); + Assert.assertEquals(F.OR1, F.f.or(F.OR1, F.X).transform(distributiveSimplifier)); + Assert.assertEquals(p.parse("(a | b | ~c) & (~a | ~d) & (~c | d) & f & c & (e | (~b | ~f | g) & (f | g | h) & (~f | ~g | h))"), + p.parse("(a | b | ~c) & (~a | ~d) & (~c | d) & (~b | e | ~f | g) & (e | f | g | h) & (e | ~f | ~g | h) & f & c").transform(distributiveSimplifier)); + } + + @Test + public void tempTest() throws ParserException { + UnitPropagation unitPropagation = new UnitPropagation(); + final PropositionalParser p = new PropositionalParser(F.f); + Formula q = p.parse("(a | b | ~c) & (~a | ~d) & (~c | d) & (~b | e | ~f | g) & (e | f | g | h) & (e | ~f | ~g | h) & f & c"); + System.out.println(q + " (" + q.numberOfAtoms() + ")"); + for (int i = 0; i < 10; i++) { + q = distributiveSimplifier.apply(q, true); + System.out.println("D: " + q + " (" + q.numberOfAtoms() + ")"); + q = unitPropagation.apply(q, true); + System.out.println("U: " + q + " (" + q.numberOfAtoms() + ")"); + System.out.println(); + } + } +} From 85607bf4a8b8243619834a319fec2588f47e6ed8 Mon Sep 17 00:00:00 2001 From: Martin Siegmund Date: Tue, 22 Aug 2017 16:29:15 +0200 Subject: [PATCH 12/22] Added tests for ModelEnumeration and DistributiveSimplifier. --- .../java/org/logicng/solvers/SATSolver.java | 14 +++-- .../java/org/logicng/solvers/sat/SATTest.java | 51 +++++++++++++++++++ .../DistributiveSimplifierTest.java | 34 +++++++++---- 3 files changed, 83 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index 159bebf3..02ce6740 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -335,8 +335,10 @@ public List enumerateAllModels(final Variable[] variables) { /** * Enumerates all models of the current formula wrt. a given set of variables. If the set is {@code null}, - * all variables are considered relevant. Additionally keeps all the additional variables TODO - * @param variables the set of variables + * all variables are considered relevant. Additionally every assignment contains literals for the given additional + * variables. + * @param variables the set of variables + * @param additionalVariables the additional variables * @return the list of models */ public abstract List enumerateAllModels(final Collection variables, final Collection additionalVariables); @@ -372,9 +374,11 @@ public List enumerateAllModels(final Variable[] variables, final Mod /** * Enumerates all models of the current formula wrt. a given set of variables and passes it to a model - * enumeration handler. If the set is {@code null}, all literals are considered relevant. - * @param variables the set of variables - * @param handler the model enumeration handler TODO + * enumeration handler. If the set is {@code null}, all literals are considered relevant. Additionally every + * assignment contains literals for the given additional variables. + * @param variables the set of variables + * @param additionalVariables the additional variables + * @param handler the model enumeration handler * @return the list of models */ public abstract List enumerateAllModels(final Collection variables, final Collection additionalVariables, final ModelEnumerationHandler handler); diff --git a/src/test/java/org/logicng/solvers/sat/SATTest.java b/src/test/java/org/logicng/solvers/sat/SATTest.java index 0f73fe77..7e209536 100644 --- a/src/test/java/org/logicng/solvers/sat/SATTest.java +++ b/src/test/java/org/logicng/solvers/sat/SATTest.java @@ -494,6 +494,57 @@ public void testPigeonHoleWithReset() { } } + @Test + public void testModelEnumeration() { + for (int i = 0; i < this.solvers.length - 1; i++) { + final SATSolver s = this.solvers[i]; + final SortedSet lits = new TreeSet<>(); + final SortedSet firstFive = new TreeSet<>(); + for (int j = 0; j < 20; j++) { + Variable lit = f.variable("x" + j); + lits.add(lit); + if (j < 5) { + firstFive.add(lit); + } + } + s.add(f.cc(CType.GE, 1, lits)); + + List models = s.enumerateAllModels(firstFive, lits); + Assert.assertEquals(32, models.size()); + for (Assignment model : models) { + for (Variable lit : lits) { + Assert.assertTrue(model.positiveLiterals().contains(lit) || model.negativeVariables().contains(lit)); + } + } + } + } + + @Test + public void testModelEnumerationWithHandler() { + for (int i = 0; i < this.solvers.length - 1; i++) { + final SATSolver s = this.solvers[i]; + final SortedSet lits = new TreeSet<>(); + final SortedSet firstFive = new TreeSet<>(); + for (int j = 0; j < 20; j++) { + Variable lit = f.variable("x" + j); + lits.add(lit); + if (j < 5) { + firstFive.add(lit); + } + } + s.add(f.cc(CType.GE, 1, lits)); + + NumberOfModelsHandler handler = new NumberOfModelsHandler(29); + List modelsWithHandler = s.enumerateAllModels(firstFive, lits, handler); + Assert.assertEquals(29, modelsWithHandler.size()); + for (Assignment model : modelsWithHandler) { + for (Variable lit : lits) { + Assert.assertTrue(model.positiveLiterals().contains(lit) || model.negativeVariables().contains(lit)); + } + } + } + } + @Test public void testNumberOfModelHandler() { for (int i = 0; i < this.solvers.length - 1; i++) { diff --git a/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java b/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java index 26489d29..cf1a23f0 100644 --- a/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java +++ b/src/test/java/org/logicng/transformations/DistributiveSimplifierTest.java @@ -79,17 +79,29 @@ public void testPropagations() throws ParserException { } @Test - public void tempTest() throws ParserException { - UnitPropagation unitPropagation = new UnitPropagation(); + public void testFormulaTypes() { + Assert.assertEquals(F.IMP1, F.IMP1.transform(distributiveSimplifier)); + Assert.assertEquals(F.EQ1, F.EQ1.transform(distributiveSimplifier)); + Assert.assertEquals(F.NOT1, F.NOT1.transform(distributiveSimplifier)); + } + + @Test + public void testComplexExamples() throws ParserException { final PropositionalParser p = new PropositionalParser(F.f); - Formula q = p.parse("(a | b | ~c) & (~a | ~d) & (~c | d) & (~b | e | ~f | g) & (e | f | g | h) & (e | ~f | ~g | h) & f & c"); - System.out.println(q + " (" + q.numberOfAtoms() + ")"); - for (int i = 0; i < 10; i++) { - q = distributiveSimplifier.apply(q, true); - System.out.println("D: " + q + " (" + q.numberOfAtoms() + ")"); - q = unitPropagation.apply(q, true); - System.out.println("U: " + q + " (" + q.numberOfAtoms() + ")"); - System.out.println(); - } + Formula cAnd = p.parse("(a | b | ~c) & (~a | ~d) & (~c | d | b) & (~c | ~b)"); + Formula cAndD1 = cAnd.transform(distributiveSimplifier); + Assert.assertEquals(p.parse("(~a | ~d) & (~c | (a | b) & (d | b) & ~b)"), cAndD1); + Assert.assertEquals(p.parse("(~a | ~d) & (~c | ~b & (b | a & d))"), cAndD1.transform(distributiveSimplifier)); + + Assert.assertEquals(F.f.not(cAndD1), F.f.not(cAnd).transform(distributiveSimplifier)); + + Formula cOr = p.parse("(x & y & z) | (x & y & ~z) | (x & ~y & z)"); + Formula cOrD1 = cOr.transform(distributiveSimplifier); + Assert.assertEquals(p.parse("x & (y & z | y & ~z | ~y & z)"), cOrD1); + Assert.assertEquals(p.parse("x & (~y & z | y)"), cOrD1.transform(distributiveSimplifier)); + + Assert.assertEquals(F.f.equivalence(cOrD1, cAndD1), F.f.equivalence(cOr, cAnd).transform(distributiveSimplifier)); + Assert.assertEquals(F.f.implication(cOrD1, cAndD1), F.f.implication(cOr, cAnd).transform(distributiveSimplifier)); + } } From a122937fac2e3a1e2389b26e4df96c733835a3d3 Mon Sep 17 00:00:00 2001 From: Martin Siegmund Date: Thu, 24 Aug 2017 16:43:25 +0200 Subject: [PATCH 13/22] Improvement on SATtest. --- src/test/java/org/logicng/solvers/sat/SATTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/org/logicng/solvers/sat/SATTest.java b/src/test/java/org/logicng/solvers/sat/SATTest.java index 7e209536..3eb9eeea 100644 --- a/src/test/java/org/logicng/solvers/sat/SATTest.java +++ b/src/test/java/org/logicng/solvers/sat/SATTest.java @@ -516,6 +516,7 @@ public void testModelEnumeration() { Assert.assertTrue(model.positiveLiterals().contains(lit) || model.negativeVariables().contains(lit)); } } + s.reset(); } } @@ -542,6 +543,19 @@ public void testModelEnumerationWithHandler() { Assert.assertTrue(model.positiveLiterals().contains(lit) || model.negativeVariables().contains(lit)); } } + s.reset(); + } + } + + @Test + public void testEmptyEnumeration() { + for (int i = 0; i < this.solvers.length - 1; i++) { + final SATSolver s = this.solvers[i]; + s.add(f.falsum()); + List models = s.enumerateAllModels(); + Assert.assertTrue(models.isEmpty()); + + s.reset(); } } From a00f10c202e4711105cbf704200cb7eb9f7a0174 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sun, 27 Aug 2017 13:53:37 +0200 Subject: [PATCH 14/22] Adjusted version to 1.2.5 --- pom.xml | 9 +--- .../org/logicng/formulas/FormulaFactory.java | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index bb33e46c..dd0473b3 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 4.0.0 org.logicng logicng - 1.3 + 1.2.5 jar LogicNG @@ -130,13 +130,6 @@ BUNDLE - - - COMPLEXITY - COVEREDRATIO - 0.8 - - diff --git a/src/main/java/org/logicng/formulas/FormulaFactory.java b/src/main/java/org/logicng/formulas/FormulaFactory.java index 47fcb37c..a3d4b6b9 100644 --- a/src/main/java/org/logicng/formulas/FormulaFactory.java +++ b/src/main/java/org/logicng/formulas/FormulaFactory.java @@ -1262,5 +1262,59 @@ public int formulas() { + this.conjunctions2 + this.conjunctions3 + this.conjunctions4 + this.conjunctionsN + this.disjunctions2 + this.disjunctions3 + this.disjunctions4 + this.disjunctionsN; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof FormulaFactoryStatistics)) return false; + FormulaFactoryStatistics that = (FormulaFactoryStatistics) o; + return positiveLiterals == that.positiveLiterals && + negativeLiterals == that.negativeLiterals && + negations == that.negations && + implications == that.implications && + equivalences == that.equivalences && + conjunctions2 == that.conjunctions2 && + conjunctions3 == that.conjunctions3 && + conjunctions4 == that.conjunctions4 && + conjunctionsN == that.conjunctionsN && + disjunctions2 == that.disjunctions2 && + disjunctions3 == that.disjunctions3 && + disjunctions4 == that.disjunctions4 && + disjunctionsN == that.disjunctionsN && + ccCounter == that.ccCounter && + pbCounter == that.pbCounter && + cnfCounter == that.cnfCounter && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, positiveLiterals, negativeLiterals, negations, implications, equivalences, conjunctions2, + conjunctions3, conjunctions4, conjunctionsN, disjunctions2, disjunctions3, disjunctions4, disjunctionsN, + ccCounter, pbCounter, cnfCounter); + } + + @Override + public String toString() { + return "FormulaFactoryStatistics{" + + "name='" + name + '\'' + + ", positiveLiterals=" + positiveLiterals + + ", negativeLiterals=" + negativeLiterals + + ", negations=" + negations + + ", implications=" + implications + + ", equivalences=" + equivalences + + ", conjunctions2=" + conjunctions2 + + ", conjunctions3=" + conjunctions3 + + ", conjunctions4=" + conjunctions4 + + ", conjunctionsN=" + conjunctionsN + + ", disjunctions2=" + disjunctions2 + + ", disjunctions3=" + disjunctions3 + + ", disjunctions4=" + disjunctions4 + + ", disjunctionsN=" + disjunctionsN + + ", ccCounter=" + ccCounter + + ", pbCounter=" + pbCounter + + ", cnfCounter=" + cnfCounter + + '}'; + } } } From 6e6399c0b9c3c388e704d9ce408b536f21151170 Mon Sep 17 00:00:00 2001 From: Martin Siegmund Date: Wed, 30 Aug 2017 14:06:16 +0200 Subject: [PATCH 15/22] Slighty improved enumerateAllModels(). --- src/main/java/org/logicng/solvers/CleaneLing.java | 6 +++--- src/main/java/org/logicng/solvers/MiniSat.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index 8743107d..ee79faa0 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -48,7 +48,7 @@ import org.logicng.solvers.sat.CleaneLingStyleSolver; import java.util.Collection; -import java.util.HashSet; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.SortedMap; @@ -220,7 +220,7 @@ public Assignment model(Collection variables) { @Override public List enumerateAllModels(final Collection variables) { - return enumerateAllModels(variables, new HashSet()); //TODO + return enumerateAllModels(variables, Collections.emptyList()); } @Override @@ -246,7 +246,7 @@ public List enumerateAllModels(Collection variables, Colle @Override public List enumerateAllModels(final Collection literals, final ModelEnumerationHandler handler) { - return enumerateAllModels(literals, new HashSet(), handler); // TODO + return enumerateAllModels(literals, Collections.emptyList(), handler); } @Override diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index ea66e1d6..b3dd7479 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -53,7 +53,7 @@ import java.util.Arrays; import java.util.Collection; -import java.util.HashSet; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -287,7 +287,7 @@ public Assignment model(final Collection variables) { @Override public List enumerateAllModels(final Collection variables) { - return enumerateAllModels(variables, new HashSet()); //TODO better empty List? + return enumerateAllModels(variables, Collections.emptyList()); } @Override @@ -316,7 +316,7 @@ public List enumerateAllModels(Collection variables, Colle @Override public List enumerateAllModels(final Collection literals, final ModelEnumerationHandler handler) { - return enumerateAllModels(literals, new HashSet(), handler); //TODO + return enumerateAllModels(literals, Collections.emptyList(), handler); } @Override From 01082345b4dca2212fce5eb9d3298a98b1051e4b Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Mon, 9 Oct 2017 14:43:43 +0200 Subject: [PATCH 16/22] minor improvements to the formula factory --- .../org/logicng/formulas/FormulaFactory.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/logicng/formulas/FormulaFactory.java b/src/main/java/org/logicng/formulas/FormulaFactory.java index a3d4b6b9..44f44855 100644 --- a/src/main/java/org/logicng/formulas/FormulaFactory.java +++ b/src/main/java/org/logicng/formulas/FormulaFactory.java @@ -641,24 +641,21 @@ private Formula constructClause(final LinkedHashSet literals) { return this.falsum(); if (literals.size() == 1) return literals.iterator().next(); - Or tempOr = null; Map, Or> opOrMap = this.orsN; - if (literals.size() > 1) { - switch (literals.size()) { - case 2: - opOrMap = this.ors2; - break; - case 3: - opOrMap = this.ors3; - break; - case 4: - opOrMap = this.ors4; - break; - default: - break; - } - tempOr = opOrMap.get(literals); + switch (literals.size()) { + case 2: + opOrMap = this.ors2; + break; + case 3: + opOrMap = this.ors3; + break; + case 4: + opOrMap = this.ors4; + break; + default: + break; } + Or tempOr = opOrMap.get(literals); if (tempOr != null) return tempOr; tempOr = new Or(literals, this, true); From 2a96b52cac40bdb6cebc74700d1f41a6ad3504a7 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Mon, 9 Oct 2017 14:45:04 +0200 Subject: [PATCH 17/22] minor improvements in the distributive simplifier --- .../DistributiveSimplifier.java | 91 +++++++++---------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/logicng/transformations/DistributiveSimplifier.java b/src/main/java/org/logicng/transformations/DistributiveSimplifier.java index 3b11e7cc..a3fe05a5 100644 --- a/src/main/java/org/logicng/transformations/DistributiveSimplifier.java +++ b/src/main/java/org/logicng/transformations/DistributiveSimplifier.java @@ -50,7 +50,7 @@ public class DistributiveSimplifier implements FormulaTransformation { @Override - public Formula apply(Formula formula, boolean cache) { + public Formula apply(final Formula formula, boolean cache) { FormulaFactory f = formula.factory(); final Formula result; switch (formula.type()) { @@ -68,60 +68,55 @@ public Formula apply(Formula formula, boolean cache) { break; case OR: case AND: - FType outerType = formula.type(); - FType innerType = outerType == FType.OR ? FType.AND : FType.OR; - Set operands = new LinkedHashSet<>(); - for (Formula op : formula) { - operands.add(this.apply(op, cache)); - } - Map> part2Operands = new LinkedHashMap<>(); - Formula mostCommon = null; - int mostCommonAmount = 0; - for (Formula op : operands) { - if (op.type() == innerType) { - for (Formula part : op) { - Set partOperands = part2Operands.get(part); - if (partOperands == null) { - partOperands = new LinkedHashSet<>(); - part2Operands.put(part, partOperands); - } - partOperands.add(op); - if (partOperands.size() > mostCommonAmount) { - mostCommon = part; - mostCommonAmount = partOperands.size(); - } - } - } - } - if (mostCommon == null || mostCommonAmount == 1) { - result = f.naryOperator(outerType, operands); - break; - } - - operands.removeAll(part2Operands.get(mostCommon)); - - Set relevantFormulas = new LinkedHashSet<>(); - for (Formula preRelevantFormula : part2Operands.get(mostCommon)) { - Set relevantParts = new LinkedHashSet<>(); - for (Formula part : preRelevantFormula) { - if (!part.equals(mostCommon)) { - relevantParts.add(part); - } - } - relevantFormulas.add(f.naryOperator(innerType, relevantParts)); - } - Formula newOperand = f.naryOperator(innerType, mostCommon, f.naryOperator(outerType, relevantFormulas)); - operands.add(newOperand); - - result = f.naryOperator(outerType, operands); + result = distributeNAry(formula, cache, f); break; default: result = formula; } - if (cache) formula.setTransformationCacheEntry(TransformationCacheEntry.DISTRIBUTIVE_SIMPLIFICATION, result); + return result; + } + private Formula distributeNAry(final Formula formula, boolean cache, final FormulaFactory f) { + final Formula result; + final FType outerType = formula.type(); + final FType innerType = outerType == FType.OR ? FType.AND : FType.OR; + final Set operands = new LinkedHashSet<>(); + for (Formula op : formula) + operands.add(this.apply(op, cache)); + final Map> part2Operands = new LinkedHashMap<>(); + Formula mostCommon = null; + int mostCommonAmount = 0; + for (Formula op : operands) + if (op.type() == innerType) + for (Formula part : op) { + Set partOperands = part2Operands.get(part); + if (partOperands == null) { + partOperands = new LinkedHashSet<>(); + part2Operands.put(part, partOperands); + } + partOperands.add(op); + if (partOperands.size() > mostCommonAmount) { + mostCommon = part; + mostCommonAmount = partOperands.size(); + } + } + if (mostCommon == null || mostCommonAmount == 1) { + result = f.naryOperator(outerType, operands); + return result; + } + operands.removeAll(part2Operands.get(mostCommon)); + final Set relevantFormulas = new LinkedHashSet<>(); + for (Formula preRelevantFormula : part2Operands.get(mostCommon)) { + final Set relevantParts = new LinkedHashSet<>(); + for (Formula part : preRelevantFormula) + if (!part.equals(mostCommon)) + relevantParts.add(part); + relevantFormulas.add(f.naryOperator(innerType, relevantParts)); + } + operands.add(f.naryOperator(innerType, mostCommon, f.naryOperator(outerType, relevantFormulas))); + result = f.naryOperator(outerType, operands); return result; } } From a257478f2ec8dc887e0d6eb7cc176fdd5d1e6991 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Mon, 9 Oct 2017 14:59:17 +0200 Subject: [PATCH 18/22] simplify trivial pseudo-Boolean constraint's toString() method --- .../org/logicng/formulas/PBConstraint.java | 45 +++++++++++++ .../printer/FormulaStringRepresentation.java | 4 ++ .../logicng/formulas/PBConstraintTest.java | 66 +++++++++++++++++++ 3 files changed, 115 insertions(+) diff --git a/src/main/java/org/logicng/formulas/PBConstraint.java b/src/main/java/org/logicng/formulas/PBConstraint.java index 205e3cad..21a16225 100644 --- a/src/main/java/org/logicng/formulas/PBConstraint.java +++ b/src/main/java/org/logicng/formulas/PBConstraint.java @@ -84,6 +84,9 @@ public void remove() { private int hashCode; private int maxWeight; + private final boolean isTrivialFalse; + private final boolean isTrivialTrue; + /** * Constructs a new pseudo-Boolean constraint. * @param literals the literals @@ -117,6 +120,32 @@ public void remove() { this.rhs = rhs; this.encoding = null; this.hashCode = 0; + + if (literals.length == 0) { + switch (comparator) { + case EQ: + isTrivialTrue = rhs == 0; + break; + case LE: + isTrivialTrue = rhs >= 0; + break; + case LT: + isTrivialTrue = rhs > 0; + break; + case GE: + isTrivialTrue = rhs <= 0; + break; + case GT: + isTrivialTrue = rhs < 0; + break; + default: + throw new IllegalArgumentException("Unknown comperator: " + comparator); + } + isTrivialFalse = !isTrivialTrue; + } else { + isTrivialTrue = false; + isTrivialFalse = false; + } } /** @@ -177,6 +206,22 @@ public int maxWeight() { return this.maxWeight; } + /** + * Returns whether the constraint is trivially false (only applies for constraints with no literals). + * @return whether the constraint is trivially false (only applies for constraints with no literals). + */ + public boolean isTrivialFalse() { + return this.isTrivialFalse; + } + + /** + * Returns whether the constraint is trivially true (only applies for constraints with no literals). + * @return whether the constraint is trivially true (only applies for constraints with no literals). + */ + public boolean isTrivialTrue() { + return this.isTrivialTrue; + } + /** * Normalizes this constraint s.t. it can be converted to CNF. * @return the normalized constraint diff --git a/src/main/java/org/logicng/formulas/printer/FormulaStringRepresentation.java b/src/main/java/org/logicng/formulas/printer/FormulaStringRepresentation.java index ccca6d63..4c7f5f09 100644 --- a/src/main/java/org/logicng/formulas/printer/FormulaStringRepresentation.java +++ b/src/main/java/org/logicng/formulas/printer/FormulaStringRepresentation.java @@ -73,6 +73,10 @@ public String toString(final Formula formula) { return this.naryOperator(nary, String.format(" %s ", op)); case PBC: final PBConstraint pbc = (PBConstraint) formula; + if (pbc.isTrivialFalse()) + return this.falsum(); + else if (pbc.isTrivialTrue()) + return this.verum(); return String.format("%s %s %d", this.pbLhs(pbc.operands(), pbc.coefficients()), this.pbComparator(pbc.comparator()), pbc.rhs()); default: throw new IllegalArgumentException("Cannot print the unknown formula type " + formula.type()); diff --git a/src/test/java/org/logicng/formulas/PBConstraintTest.java b/src/test/java/org/logicng/formulas/PBConstraintTest.java index 8780d1ef..f55dfe00 100644 --- a/src/test/java/org/logicng/formulas/PBConstraintTest.java +++ b/src/test/java/org/logicng/formulas/PBConstraintTest.java @@ -35,6 +35,7 @@ import org.logicng.datastructures.Tristate; import org.logicng.io.parsers.ParserException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -527,4 +528,69 @@ public void testEvaluateCoeffs() { Assert.assertEquals(Tristate.UNDEF, PBConstraint.evaluateCoeffs(-2, 2, 2, CType.LT)); Assert.assertEquals(Tristate.UNDEF, PBConstraint.evaluateCoeffs(-2, 2, 0, CType.LT)); } + + @Test + public void testTrivialTrue() { + Assert.assertTrue(f.pbc(CType.EQ, 0, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.EQ, 1, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.EQ, -1, new ArrayList(), new ArrayList()).isTrivialTrue()); + + Assert.assertFalse(f.pbc(CType.GT, 0, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.GT, 1, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertTrue(f.pbc(CType.GT, -1, new ArrayList(), new ArrayList()).isTrivialTrue()); + + Assert.assertTrue(f.pbc(CType.GE, 0, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.GE, 1, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertTrue(f.pbc(CType.GE, -1, new ArrayList(), new ArrayList()).isTrivialTrue()); + + Assert.assertFalse(f.pbc(CType.LT, 0, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertTrue(f.pbc(CType.LT, 1, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.LT, -1, new ArrayList(), new ArrayList()).isTrivialTrue()); + + Assert.assertTrue(f.pbc(CType.LE, 0, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertTrue(f.pbc(CType.LE, 1, new ArrayList(), new ArrayList()).isTrivialTrue()); + Assert.assertFalse(f.pbc(CType.LE, -1, new ArrayList(), new ArrayList()).isTrivialTrue()); + } + + @Test + public void testTrivialFalse() { + Assert.assertFalse(f.pbc(CType.EQ, 0, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.EQ, 1, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.EQ, -1, new ArrayList(), new ArrayList()).isTrivialFalse()); + + Assert.assertTrue(f.pbc(CType.GT, 0, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.GT, 1, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertFalse(f.pbc(CType.GT, -1, new ArrayList(), new ArrayList()).isTrivialFalse()); + + Assert.assertFalse(f.pbc(CType.GE, 0, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.GE, 1, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertFalse(f.pbc(CType.GE, -1, new ArrayList(), new ArrayList()).isTrivialFalse()); + + Assert.assertTrue(f.pbc(CType.LT, 0, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertFalse(f.pbc(CType.LT, 1, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.LT, -1, new ArrayList(), new ArrayList()).isTrivialFalse()); + + Assert.assertFalse(f.pbc(CType.LE, 0, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertFalse(f.pbc(CType.LE, 1, new ArrayList(), new ArrayList()).isTrivialFalse()); + Assert.assertTrue(f.pbc(CType.LE, -1, new ArrayList(), new ArrayList()).isTrivialFalse()); + } + + @Test + public void testSimplifiedToString() { + Assert.assertEquals(f.pbc(CType.EQ, 0, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.EQ, 1, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.EQ, -1, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.GT, 0, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.GT, 1, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.GT, -1, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.GE, 0, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.GE, 1, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.GE, -1, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.LT, 0, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.LT, 1, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.LT, -1, new ArrayList(), new ArrayList()).toString(), "$false"); + Assert.assertEquals(f.pbc(CType.LE, 0, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.LE, 1, new ArrayList(), new ArrayList()).toString(), "$true"); + Assert.assertEquals(f.pbc(CType.LE, -1, new ArrayList(), new ArrayList()).toString(), "$false"); + } } From bd1e20e04f6f18b6b836e5ee7a670ee7bca9dfa7 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 21 Oct 2017 10:55:52 +0200 Subject: [PATCH 19/22] Fixed a small bug in the proof tracer and added a lot of tests --- .../java/org/logicng/solvers/MiniSat.java | 20 +- .../logicng/explanations/drup/DRUPTest.java | 50 + tests/sat/unsat/aim-100-1_6-no-1.cnf | 171 + tests/sat/unsat/aim-100-1_6-no-2.cnf | 171 + tests/sat/unsat/aim-100-1_6-no-3.cnf | 171 + tests/sat/unsat/aim-100-1_6-no-4.cnf | 171 + tests/sat/unsat/aim-100-2_0-no-1.cnf | 211 + tests/sat/unsat/aim-100-2_0-no-2.cnf | 211 + tests/sat/unsat/aim-100-2_0-no-3.cnf | 211 + tests/sat/unsat/aim-100-2_0-no-4.cnf | 211 + tests/sat/unsat/aim-200-1_6-no-1.cnf | 331 + tests/sat/unsat/aim-200-1_6-no-2.cnf | 331 + tests/sat/unsat/aim-200-1_6-no-3.cnf | 331 + tests/sat/unsat/aim-200-1_6-no-4.cnf | 331 + tests/sat/unsat/aim-200-2_0-no-1.cnf | 411 + tests/sat/unsat/aim-200-2_0-no-2.cnf | 411 + tests/sat/unsat/aim-200-2_0-no-3.cnf | 411 + tests/sat/unsat/aim-200-2_0-no-4.cnf | 411 + tests/sat/unsat/aim-50-1_6-no-1.cnf | 91 + tests/sat/unsat/aim-50-1_6-no-2.cnf | 91 + tests/sat/unsat/aim-50-1_6-no-3.cnf | 91 + tests/sat/unsat/aim-50-1_6-no-4.cnf | 91 + tests/sat/unsat/aim-50-2_0-no-1.cnf | 111 + tests/sat/unsat/aim-50-2_0-no-2.cnf | 111 + tests/sat/unsat/aim-50-2_0-no-3.cnf | 111 + tests/sat/unsat/aim-50-2_0-no-4.cnf | 111 + tests/sat/unsat/bf0432-007.cnf | 3681 +++++++++ tests/sat/unsat/bf1355-075.cnf | 6791 +++++++++++++++++ tests/sat/unsat/bf1355-638.cnf | 6781 ++++++++++++++++ tests/sat/unsat/bf2670-001.cnf | 3447 +++++++++ tests/sat/unsat/pret150_25.cnf | 421 + tests/sat/unsat/pret150_40.cnf | 421 + tests/sat/unsat/pret150_60.cnf | 421 + tests/sat/unsat/pret150_75.cnf | 421 + tests/sat/unsat/pret60_25.cnf | 181 + tests/sat/unsat/pret60_40.cnf | 181 + tests/sat/unsat/pret60_60.cnf | 181 + tests/sat/unsat/pret60_75.cnf | 181 + 38 files changed, 28479 insertions(+), 3 deletions(-) create mode 100644 tests/sat/unsat/aim-100-1_6-no-1.cnf create mode 100644 tests/sat/unsat/aim-100-1_6-no-2.cnf create mode 100644 tests/sat/unsat/aim-100-1_6-no-3.cnf create mode 100644 tests/sat/unsat/aim-100-1_6-no-4.cnf create mode 100644 tests/sat/unsat/aim-100-2_0-no-1.cnf create mode 100644 tests/sat/unsat/aim-100-2_0-no-2.cnf create mode 100644 tests/sat/unsat/aim-100-2_0-no-3.cnf create mode 100644 tests/sat/unsat/aim-100-2_0-no-4.cnf create mode 100644 tests/sat/unsat/aim-200-1_6-no-1.cnf create mode 100644 tests/sat/unsat/aim-200-1_6-no-2.cnf create mode 100644 tests/sat/unsat/aim-200-1_6-no-3.cnf create mode 100644 tests/sat/unsat/aim-200-1_6-no-4.cnf create mode 100644 tests/sat/unsat/aim-200-2_0-no-1.cnf create mode 100644 tests/sat/unsat/aim-200-2_0-no-2.cnf create mode 100644 tests/sat/unsat/aim-200-2_0-no-3.cnf create mode 100644 tests/sat/unsat/aim-200-2_0-no-4.cnf create mode 100644 tests/sat/unsat/aim-50-1_6-no-1.cnf create mode 100644 tests/sat/unsat/aim-50-1_6-no-2.cnf create mode 100644 tests/sat/unsat/aim-50-1_6-no-3.cnf create mode 100644 tests/sat/unsat/aim-50-1_6-no-4.cnf create mode 100644 tests/sat/unsat/aim-50-2_0-no-1.cnf create mode 100644 tests/sat/unsat/aim-50-2_0-no-2.cnf create mode 100644 tests/sat/unsat/aim-50-2_0-no-3.cnf create mode 100644 tests/sat/unsat/aim-50-2_0-no-4.cnf create mode 100644 tests/sat/unsat/bf0432-007.cnf create mode 100644 tests/sat/unsat/bf1355-075.cnf create mode 100644 tests/sat/unsat/bf1355-638.cnf create mode 100644 tests/sat/unsat/bf2670-001.cnf create mode 100644 tests/sat/unsat/pret150_25.cnf create mode 100644 tests/sat/unsat/pret150_40.cnf create mode 100644 tests/sat/unsat/pret150_60.cnf create mode 100644 tests/sat/unsat/pret150_75.cnf create mode 100644 tests/sat/unsat/pret60_25.cnf create mode 100644 tests/sat/unsat/pret60_40.cnf create mode 100644 tests/sat/unsat/pret60_60.cnf create mode 100644 tests/sat/unsat/pret60_75.cnf diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 354f3f84..4eb8ec9d 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -69,7 +69,6 @@ import java.util.SortedSet; import java.util.TreeSet; -import static org.logicng.datastructures.Tristate.FALSE; import static org.logicng.datastructures.Tristate.TRUE; import static org.logicng.datastructures.Tristate.UNDEF; @@ -437,8 +436,11 @@ public boolean initialPhase() { public UNSATCore unsatCore() { if (!this.config.proofGeneration()) throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); - if (this.result != FALSE) - throw new IllegalStateException("A unsat core can only be generated if the formula is solved and is UNSAT"); + if (this.result == TRUE) + throw new IllegalStateException("An unsat core can only be generated if the formula is solved and is UNSAT"); + if (this.result == Tristate.UNDEF) { + throw new IllegalStateException("Cannot generate an unsat core before the formula was solved."); + } if (this.underlyingSolver() instanceof MiniCard) throw new IllegalStateException("Cannot compute an unsat core with MiniCard."); if (this.underlyingSolver() instanceof GlucoseSyrup && this.config.incremental()) @@ -457,6 +459,11 @@ public UNSATCore unsatCore() { clause2proposition.put(clause, proposition); } + if (containsEmptyClause(clauses)) { + final Proposition emptyClause = clause2proposition.get(f.falsum()); + return new UNSATCore<>(Collections.singletonList(emptyClause), true); + } + final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof()); if (result.trivialUnsat()) return handleTrivialCase(); @@ -481,6 +488,13 @@ private UNSATCore handleTrivialCase() { throw new IllegalStateException("Should be a trivial unsat core, but did not found one."); } + private boolean containsEmptyClause(final LNGVector clauses) { + for (LNGIntVector clause : clauses) + if (clause.empty()) + return true; + return false; + } + private Formula getFormulaForVector(LNGIntVector vector) { final List literals = new ArrayList<>(vector.size()); for (int i = 0; i < vector.size(); i++) { diff --git a/src/test/java/org/logicng/explanations/drup/DRUPTest.java b/src/test/java/org/logicng/explanations/drup/DRUPTest.java index c335684f..bdd26967 100644 --- a/src/test/java/org/logicng/explanations/drup/DRUPTest.java +++ b/src/test/java/org/logicng/explanations/drup/DRUPTest.java @@ -97,6 +97,7 @@ public void testUnsatCoresFromLargeTestset() throws IOException, ParserException final File testFolder = new File("tests/sat"); final File[] files = testFolder.listFiles(); assert files != null; + int count = 0; for (final SATSolver solver : this.solvers) { for (final File file : files) { final String fileName = file.getName(); @@ -106,12 +107,38 @@ public void testUnsatCoresFromLargeTestset() throws IOException, ParserException if (solver.sat() == FALSE) { final UNSATCore unsatCore = solver.unsatCore(); verifyCore(unsatCore, cnf); + count++; } solver.reset(); } } solver.reset(); } + assertThat(count).isEqualTo(11 * this.solvers.length); + } + + @Test + public void testUnsatCoresAimTestset() throws IOException, ParserException { + final File testFolder = new File("tests/sat/unsat"); + final File[] files = testFolder.listFiles(); + assert files != null; + int count = 0; + for (final SATSolver solver : this.solvers) { + for (final File file : files) { + final String fileName = file.getName(); + if (fileName.endsWith(".cnf")) { + List cnf = DimacsReader.readCNF(file, f); + solver.add(cnf); + assertThat(solver.sat()).isEqualTo(Tristate.FALSE); + final UNSATCore unsatCore = solver.unsatCore(); + verifyCore(unsatCore, cnf); + solver.reset(); + count++; + } + } + solver.reset(); + } + assertThat(count).isEqualTo(36 * this.solvers.length); } @Test @@ -197,6 +224,29 @@ public void testPropositionIncDec() throws ParserException { assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p4, p11); } + @Test + public void testTrivialCasesPropositions() throws ParserException { + for (final SATSolver solver : this.solvers) { + assertThat(solver.sat()).isEqualTo(Tristate.TRUE); + final StandardProposition p1 = new StandardProposition("P1", f.parse("$false")); + solver.add(p1); + assertThat(solver.sat()).isEqualTo(Tristate.FALSE); + UNSATCore unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p1); + + solver.reset(); + assertThat(solver.sat()).isEqualTo(Tristate.TRUE); + final StandardProposition p2 = new StandardProposition("P2", f.parse("a")); + solver.add(p2); + assertThat(solver.sat()).isEqualTo(Tristate.TRUE); + final StandardProposition p3 = new StandardProposition("P3", f.parse("~a")); + solver.add(p3); + assertThat(solver.sat()).isEqualTo(Tristate.FALSE); + unsatCore = solver.unsatCore(); + assertThat(unsatCore.propositions()).containsExactlyInAnyOrder(p2, p3); + } + } + /** * Checks that each formula of the core is part of the original problem and that the core is really unsat. * @param originalCore the original core diff --git a/tests/sat/unsat/aim-100-1_6-no-1.cnf b/tests/sat/unsat/aim-100-1_6-no-1.cnf new file mode 100644 index 00000000..0b72579b --- /dev/null +++ b/tests/sat/unsat/aim-100-1_6-no-1.cnf @@ -0,0 +1,171 @@ +c FILE: aim-100-1_6-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 160 +16 30 95 0 +-16 30 95 0 +-30 35 78 0 +-30 -78 85 0 +-78 -85 95 0 +8 55 100 0 +8 55 -95 0 +9 52 100 0 +9 73 -100 0 +-8 -9 52 0 +38 66 83 0 +-38 83 87 0 +-52 83 -87 0 +66 74 -83 0 +-52 -66 89 0 +-52 73 -89 0 +-52 73 -74 0 +-8 -73 -95 0 +40 -55 90 0 +-40 -55 90 0 +25 35 82 0 +-25 82 -90 0 +-55 -82 -90 0 +11 75 84 0 +11 -75 96 0 +23 -75 -96 0 +-11 23 -35 0 +-23 29 65 0 +29 -35 -65 0 +-23 -29 84 0 +-35 54 70 0 +-54 70 77 0 +19 -77 -84 0 +-19 -54 70 0 +22 68 81 0 +-22 48 81 0 +-22 -48 93 0 +3 -48 -93 0 +7 18 -81 0 +-7 56 -81 0 +3 18 -56 0 +-18 47 68 0 +-18 -47 -81 0 +-3 68 77 0 +-3 -77 -84 0 +19 -68 -70 0 +-19 -68 74 0 +-68 -70 -74 0 +54 61 -62 0 +50 53 -62 0 +-50 61 -62 0 +-27 56 93 0 +4 14 76 0 +4 -76 96 0 +-4 14 80 0 +-14 -68 80 0 +-10 -39 -89 0 +1 49 -81 0 +1 26 -49 0 +17 -26 -49 0 +-1 17 -40 0 +16 51 -89 0 +-9 57 60 0 +12 45 -51 0 +2 12 69 0 +2 -12 40 0 +-12 -51 69 0 +-33 60 -98 0 +5 -32 -66 0 +2 -47 -100 0 +-42 64 83 0 +20 -42 -64 0 +20 -48 98 0 +-20 50 98 0 +-32 -50 98 0 +-24 37 -73 0 +-24 -37 -100 0 +-57 71 81 0 +-37 40 -91 0 +31 42 81 0 +-31 42 72 0 +-31 42 -72 0 +7 -19 25 0 +-1 -25 -94 0 +-15 -44 79 0 +-6 31 46 0 +-39 41 88 0 +28 -39 43 0 +28 -43 -88 0 +-4 -28 -88 0 +-30 -39 -41 0 +-29 33 88 0 +-16 21 94 0 +-10 26 62 0 +-11 -64 86 0 +-6 -41 76 0 +38 -46 93 0 +26 -37 94 0 +-26 53 -79 0 +78 87 -94 0 +65 76 -87 0 +23 51 -62 0 +-11 -36 57 0 +41 59 -65 0 +-56 72 -91 0 +13 -20 -46 0 +-13 15 79 0 +-17 47 -60 0 +-13 -44 99 0 +-7 -38 67 0 +37 -49 62 0 +-14 -17 -79 0 +-13 -15 -22 0 +32 -33 -34 0 +24 45 48 0 +21 24 -48 0 +-36 64 -85 0 +10 -61 67 0 +-5 44 59 0 +-80 -85 -99 0 +6 37 -97 0 +-21 -34 64 0 +-5 44 46 0 +58 -76 97 0 +-21 -36 75 0 +-15 58 -59 0 +-58 -76 -99 0 +-2 15 33 0 +-26 34 -57 0 +-18 -82 -92 0 +27 -80 -97 0 +6 32 63 0 +-34 -86 92 0 +13 -61 97 0 +-28 43 -98 0 +5 39 -86 0 +39 -45 92 0 +27 -43 97 0 +13 -58 -86 0 +-28 -67 -93 0 +-69 85 99 0 +42 71 -72 0 +10 -27 -63 0 +-59 63 -83 0 +36 86 -96 0 +-2 36 75 0 +-59 -71 89 0 +36 -67 91 0 +36 -60 63 0 +-63 91 -93 0 +25 87 92 0 +-21 49 -71 0 +-2 10 22 0 +6 -18 41 0 +6 71 -92 0 +-53 -69 -71 0 +-2 -53 -58 0 +43 -45 -96 0 +34 -45 -69 0 +63 -86 -98 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-1_6-no-2.cnf b/tests/sat/unsat/aim-100-1_6-no-2.cnf new file mode 100644 index 00000000..144d8aaa --- /dev/null +++ b/tests/sat/unsat/aim-100-1_6-no-2.cnf @@ -0,0 +1,171 @@ +c FILE: aim-100-1_6-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 160 +4 8 97 0 +4 8 -97 0 +1 -4 33 0 +1 -33 56 0 +-33 54 -56 0 +-56 83 99 0 +-56 83 -99 0 +-56 70 -83 0 +-33 -70 -83 0 +-1 20 36 0 +26 36 97 0 +28 49 -97 0 +-28 49 51 0 +-28 -51 59 0 +36 -49 59 0 +-1 40 -59 0 +26 -40 -59 0 +-26 50 57 0 +-20 -57 73 0 +50 -57 -73 0 +-26 36 -50 0 +-1 -4 -36 0 +54 80 82 0 +14 -54 80 0 +-14 -54 82 0 +-8 -80 82 0 +13 52 90 0 +-13 52 90 0 +34 -52 -82 0 +-34 -52 -82 0 +26 60 -90 0 +22 -26 60 0 +-22 60 95 0 +-60 95 99 0 +-60 95 -99 0 +55 -90 -95 0 +20 58 93 0 +-20 32 58 0 +-32 58 93 0 +-58 76 93 0 +-55 -58 -76 0 +18 47 94 0 +-47 -93 94 0 +18 -93 -94 0 +33 41 92 0 +17 -33 92 0 +-17 -18 92 0 +-18 41 -92 0 +-41 67 69 0 +57 67 -69 0 +-41 67 -69 0 +48 55 -67 0 +48 -55 -67 0 +-8 21 -48 0 +13 -21 -48 0 +-13 -21 -48 0 +45 -72 -86 0 +38 -67 72 0 +-36 -50 -74 0 +26 45 -51 0 +5 -42 -88 0 +22 -47 100 0 +35 72 98 0 +-46 89 -95 0 +-46 53 -89 0 +13 40 -46 0 +-40 -46 62 0 +-46 -53 -89 0 +-53 -81 82 0 +30 56 65 0 +11 -37 66 0 +10 12 58 0 +-10 12 20 0 +31 -72 -85 0 +50 -66 87 0 +-2 -30 47 0 +24 27 88 0 +31 34 37 0 +-39 71 -98 0 +46 -64 -84 0 +25 27 85 0 +-25 27 85 0 +-14 28 -35 0 +14 30 -70 0 +-15 -19 -63 0 +-16 65 -86 0 +-16 65 -73 0 +-24 61 -79 0 +-24 -64 -79 0 +-9 19 98 0 +-19 62 -94 0 +-9 -19 -62 0 +71 77 84 0 +51 77 -84 0 +3 -77 79 0 +-62 -77 79 0 +-3 -63 -77 0 +15 -61 -85 0 +3 76 -88 0 +-2 -3 25 0 +17 -29 69 0 +7 -92 97 0 +16 66 -88 0 +-7 -34 -87 0 +10 -85 -87 0 +42 87 100 0 +3 -10 -78 0 +6 29 31 0 +5 76 91 0 +14 -35 -80 0 +9 -11 64 0 +35 38 89 0 +-11 -68 -98 0 +7 9 -80 0 +57 86 96 0 +-49 -71 96 0 +-15 29 -96 0 +21 73 -76 0 +-12 -78 -81 0 +39 -45 -75 0 +6 43 -100 0 +-38 44 99 0 +-38 44 -75 0 +-42 -51 -74 0 +16 19 39 0 +15 -22 -81 0 +-15 -37 78 0 +-6 -32 -75 0 +44 -60 91 0 +53 67 88 0 +-39 42 86 0 +-7 74 -91 0 +2 -59 68 0 +-44 78 -100 0 +-7 -42 -66 0 +-49 75 -91 0 +11 -23 -68 0 +-23 -27 -74 0 +-59 68 81 0 +33 -42 -66 0 +23 -27 63 0 +-61 70 75 0 +-5 -17 42 0 +-6 -25 -49 0 +23 -38 74 0 +32 -74 -96 0 +-45 63 84 0 +-5 -23 64 0 +46 -71 97 0 +-45 61 -71 0 +-5 -7 43 0 +-5 24 74 0 +2 23 74 0 +84 85 0 +-29 75 81 0 +-31 -43 -44 0 +37 -65 0 +-12 -25 -31 0 +2 -43 74 0 +-30 37 -61 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-1_6-no-3.cnf b/tests/sat/unsat/aim-100-1_6-no-3.cnf new file mode 100644 index 00000000..f4db0f18 --- /dev/null +++ b/tests/sat/unsat/aim-100-1_6-no-3.cnf @@ -0,0 +1,171 @@ +c FILE: aim-100-1_6-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 160 +5 31 91 0 +31 38 40 0 +-38 40 -91 0 +31 -40 -91 0 +30 -31 39 0 +-30 39 88 0 +-31 39 -88 0 +-39 69 82 0 +-39 69 -82 0 +10 60 94 0 +-10 24 74 0 +-10 60 -74 0 +20 26 -60 0 +-20 52 87 0 +52 -60 -87 0 +26 -52 94 0 +-26 45 57 0 +-26 -45 57 0 +-26 -57 100 0 +24 -60 -100 0 +11 -24 38 0 +5 11 -38 0 +5 -11 -24 0 +4 42 -69 0 +4 -42 100 0 +-42 -69 -100 0 +71 83 -94 0 +-4 -71 83 0 +-4 -83 -94 0 +-5 59 73 0 +-5 59 -73 0 +13 -59 78 0 +15 77 92 0 +53 -77 92 0 +28 -53 98 0 +-28 -53 98 0 +22 89 -98 0 +22 -53 -89 0 +12 -22 58 0 +12 -58 -98 0 +-12 -22 -53 0 +15 18 36 0 +21 -36 -92 0 +18 -21 -36 0 +-18 -92 96 0 +-18 -78 -96 0 +13 -15 -78 0 +1 8 42 0 +56 61 91 0 +2 -56 61 0 +2 8 61 0 +-2 -42 61 0 +1 -42 -61 0 +-8 -13 64 0 +32 -64 88 0 +-8 -32 -64 0 +-8 28 -88 0 +-28 -64 -88 0 +-1 -13 -59 0 +-35 -40 65 0 +-40 -65 77 0 +-35 -77 -83 0 +33 62 78 0 +47 53 -65 0 +30 37 58 0 +-37 58 71 0 +-12 -37 71 0 +20 30 51 0 +20 -51 -71 0 +-32 -61 89 0 +27 -63 65 0 +-22 -48 50 0 +-89 -97 98 0 +49 -50 -82 0 +-16 -46 95 0 +-16 -46 -95 0 +-17 -37 -76 0 +51 -93 -99 0 +27 76 79 0 +-52 76 79 0 +-1 -25 68 0 +34 -58 -75 0 +-15 -20 -90 0 +33 64 85 0 +-11 64 -85 0 +-18 -33 -48 0 +54 -63 75 0 +3 -49 -95 0 +-3 74 -95 0 +-33 44 -54 0 +-44 -50 -54 0 +-2 82 96 0 +16 49 82 0 +-19 -41 -44 0 +46 -49 81 0 +-3 -23 25 0 +29 34 63 0 +-25 -34 -75 0 +-23 44 -70 0 +-29 -38 -82 0 +-7 -49 -77 0 +6 44 81 0 +17 -19 -86 0 +-29 -73 93 0 +11 -52 -85 0 +-44 46 64 0 +-17 -34 95 0 +17 47 -57 0 +-81 -96 97 0 +3 -34 99 0 +43 -56 -76 0 +-27 72 -79 0 +-6 -27 70 0 +55 67 73 0 +16 -74 -84 0 +-43 90 97 0 +50 56 -93 0 +-47 -70 -90 0 +14 16 -79 0 +45 -66 80 0 +66 -66 -68 0 +10 -80 87 0 +-55 -81 93 0 +37 -45 72 0 +19 68 -97 0 +-9 -70 -93 0 +7 35 54 0 +-41 -55 0 +14 -14 70 0 +23 -23 -62 0 +23 -67 -80 0 +10 36 -51 0 +21 -68 85 0 +-6 43 -55 0 +32 48 86 0 +21 -41 99 0 +14 81 97 0 +-9 -43 -72 0 +7 -9 -79 0 +-41 84 -90 0 +25 -72 86 0 +-9 -46 63 0 +6 -14 38 0 +7 -21 35 0 +9 -87 99 0 +-20 -58 80 0 +-3 75 -86 0 +19 -62 84 0 +-14 -67 82 0 +-27 48 -68 0 +-25 45 -84 0 +-7 41 67 0 +-30 -47 48 0 +66 97 -99 0 +9 41 55 0 +-29 36 -86 0 +50 62 -81 0 +29 -86 90 0 +-48 54 -55 0 +19 -34 89 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-1_6-no-4.cnf b/tests/sat/unsat/aim-100-1_6-no-4.cnf new file mode 100644 index 00000000..bec7a813 --- /dev/null +++ b/tests/sat/unsat/aim-100-1_6-no-4.cnf @@ -0,0 +1,171 @@ +c FILE: aim-100-1_6-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 160 +50 62 92 0 +50 55 -92 0 +-55 62 -92 0 +-50 62 80 0 +-80 83 99 0 +-50 -80 -99 0 +10 45 -62 0 +-10 53 -62 0 +45 -53 83 0 +-45 58 83 0 +-45 48 -58 0 +-83 92 93 0 +48 -83 -93 0 +48 -83 -92 0 +14 53 54 0 +8 14 -53 0 +8 -14 54 0 +-8 41 -48 0 +-41 57 74 0 +-8 -57 74 0 +11 -41 -74 0 +-8 -41 -74 0 +6 36 66 0 +6 -36 66 0 +-6 52 73 0 +-6 66 -73 0 +32 39 87 0 +39 78 -87 0 +32 -39 -54 0 +-32 -66 81 0 +-32 -54 -81 0 +17 23 -78 0 +-23 29 52 0 +-29 52 61 0 +-29 -61 -78 0 +5 -17 52 0 +-5 -17 -78 0 +51 -52 98 0 +-48 -51 98 0 +2 -52 -98 0 +-2 70 -98 0 +58 -70 75 0 +33 75 90 0 +33 35 -90 0 +-33 -58 -70 0 +-2 73 -75 0 +35 -73 96 0 +-73 -75 -96 0 +-35 -70 -98 0 +26 72 95 0 +72 79 95 0 +1 26 -28 0 +-26 -28 87 0 +-26 -28 -87 0 +7 37 -38 0 +-1 27 67 0 +31 71 -94 0 +-18 -31 71 0 +-13 34 -94 0 +3 6 -67 0 +-3 -67 -79 0 +15 17 55 0 +5 -55 93 0 +-5 15 -55 0 +-23 64 86 0 +-1 -22 80 0 +36 41 -53 0 +-22 46 -51 0 +-11 -65 -81 0 +18 -21 -27 0 +-11 -21 -27 0 +26 -35 40 0 +-12 49 -95 0 +-12 -49 -95 0 +28 57 61 0 +28 -57 -65 0 +-4 -57 69 0 +5 -25 77 0 +-47 57 -79 0 +34 -38 -76 0 +11 -68 -71 0 +30 65 85 0 +-30 69 85 0 +56 -69 77 0 +-56 65 -69 0 +40 64 -88 0 +3 -19 -89 0 +-3 -31 -89 0 +10 -42 43 0 +18 24 31 0 +-18 34 -39 0 +24 -34 -39 0 +25 -30 71 0 +-49 79 90 0 +22 -37 40 0 +-10 56 94 0 +43 46 -61 0 +-9 -14 20 0 +26 59 65 0 +-19 26 -59 0 +4 9 -68 0 +-9 -40 -93 0 +-46 49 56 0 +-36 57 76 0 +-1 82 97 0 +82 -96 97 0 +4 18 82 0 +-59 67 68 0 +-17 30 -91 0 +1 28 29 0 +30 -60 -72 0 +-4 12 81 0 +-10 19 -79 0 +-47 81 100 0 +47 -90 0 +44 -56 91 0 +13 -44 88 0 +-64 -85 -99 0 +9 44 -100 0 +-4 68 -88 0 +-20 33 38 0 +2 27 89 0 +21 -57 -60 0 +-37 -79 99 0 +78 88 96 0 +-56 -77 -82 0 +-16 -44 -91 0 +-16 29 -84 0 +-66 -71 -86 0 +-25 88 -97 0 +7 -59 -82 0 +-28 42 -63 0 +-42 -71 -76 0 +-20 -24 -56 0 +-15 59 0 +-46 60 84 0 +-33 -34 73 0 +-49 60 63 0 +47 76 -88 0 +-24 -90 91 0 +-44 -72 100 0 +12 20 21 0 +-3 -13 16 0 +16 63 -64 0 +42 -97 -100 0 +-5 -7 -84 0 +38 51 84 0 +-43 -87 -88 0 +25 -63 86 0 +-32 59 -77 0 +13 23 -86 0 +22 -44 65 0 +-34 37 -99 0 +-15 30 -40 0 +-16 38 86 0 +32 -43 89 0 +19 -43 -46 0 +46 -74 -82 0 +38 -85 94 0 +-7 -64 70 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-2_0-no-1.cnf b/tests/sat/unsat/aim-100-2_0-no-1.cnf new file mode 100644 index 00000000..25a5e6a4 --- /dev/null +++ b/tests/sat/unsat/aim-100-2_0-no-1.cnf @@ -0,0 +1,211 @@ +c FILE: aim-100-2_0-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 200 +6 55 66 0 +6 62 -66 0 +-62 -66 68 0 +6 8 -55 0 +8 58 70 0 +-6 58 -70 0 +-6 33 -58 0 +-6 8 -33 0 +-8 61 68 0 +-8 -61 68 0 +35 42 51 0 +30 -42 51 0 +30 -51 75 0 +20 -51 -75 0 +-20 -51 -75 0 +-30 35 -68 0 +34 -35 46 0 +-35 46 86 0 +-34 46 -68 0 +-35 -46 -68 0 +-31 42 91 0 +-7 20 85 0 +-20 -24 -42 0 +18 -85 91 0 +-18 -24 -31 0 +-24 -31 -91 0 +-17 32 60 0 +-17 39 -60 0 +36 50 56 0 +-50 56 91 0 +-44 52 -54 0 +-52 53 -54 0 +71 79 -97 0 +9 71 -79 0 +-8 34 -71 0 +34 -71 95 0 +-56 85 -95 0 +-71 -85 -95 0 +-18 -56 87 0 +-52 -56 87 0 +-7 -76 -93 0 +3 9 86 0 +3 -86 -96 0 +3 12 67 0 +-9 -40 67 0 +-9 13 -67 0 +-9 -67 -88 0 +-3 13 -96 0 +2 12 27 0 +-33 36 -74 0 +-13 -29 -41 0 +11 52 -98 0 +-50 90 92 0 +-26 -47 -77 0 +5 42 -93 0 +28 36 -42 0 +5 28 -36 0 +-28 45 -73 0 +5 -45 -73 0 +7 25 -86 0 +-25 37 -86 0 +19 -25 -37 0 +7 -19 41 0 +12 -34 -47 0 +-12 -34 -47 0 +-13 -60 93 0 +19 -94 98 0 +92 -94 -98 0 +67 -92 -98 0 +1 26 55 0 +26 -53 55 0 +18 -29 31 0 +-1 69 94 0 +23 69 -93 0 +-1 -23 69 0 +-19 29 43 0 +33 37 62 0 +-20 -33 62 0 +-18 39 65 0 +45 51 -53 0 +-1 11 -28 0 +18 33 84 0 +-14 -52 84 0 +7 -40 -53 0 +-7 -17 -40 0 +-19 65 72 0 +-63 77 -85 0 +27 -63 -77 0 +-4 64 94 0 +22 -82 99 0 +-11 41 -99 0 +-11 85 -99 0 +4 -65 -87 0 +17 37 100 0 +25 -37 100 0 +17 -25 -37 0 +83 -89 -100 0 +15 17 -89 0 +-15 -83 -100 0 +-39 -74 -90 0 +19 -26 40 0 +41 -70 -99 0 +-26 -41 -70 0 +-28 59 -62 0 +4 78 90 0 +4 21 78 0 +39 -49 63 0 +-39 -49 -95 0 +48 -54 65 0 +60 82 98 0 +49 -74 97 0 +-21 49 -97 0 +-79 87 -88 0 +21 45 -75 0 +16 -84 -89 0 +-21 -46 63 0 +14 16 -81 0 +-14 -81 -87 0 +-66 -67 -83 0 +-80 81 100 0 +2 -29 99 0 +-2 -39 99 0 +-44 -64 -90 0 +-13 14 23 0 +-10 -45 -91 0 +10 40 73 0 +40 -73 -76 0 +22 -76 78 0 +21 -32 -57 0 +-38 -64 86 0 +-12 -15 54 0 +-12 47 -69 0 +47 -69 -82 0 +-22 -23 32 0 +-22 -23 -78 0 +-10 20 -50 0 +-5 10 84 0 +23 -92 97 0 +-69 72 -78 0 +1 11 -80 0 +-2 27 50 0 +-57 -61 -79 0 +43 76 -90 0 +-22 -49 -92 0 +26 43 -60 0 +-10 50 98 0 +10 -30 59 0 +-55 -72 -100 0 +-41 53 -78 0 +38 -65 94 0 +38 -65 -94 0 +29 -55 61 0 +-46 -48 59 0 +53 73 90 0 +1 -11 74 0 +15 76 82 0 +-27 -82 -97 0 +-3 -36 -48 0 +28 -32 80 0 +9 -63 80 0 +70 73 89 0 +-80 -91 93 0 +22 -64 77 0 +66 72 -87 0 +-36 83 88 0 +24 -38 52 0 +-43 81 -96 0 +-59 -62 81 0 +48 66 71 0 +-2 48 63 0 +29 -83 93 0 +-16 25 -72 0 +-27 57 -84 0 +-5 77 88 0 +-5 -59 88 0 +15 44 -45 0 +13 -84 89 0 +47 -48 83 0 +-14 -44 54 0 +-30 31 64 0 +24 70 75 0 +-15 -32 92 0 +-16 -58 74 0 +-4 54 -77 0 +-43 57 60 0 +-16 61 64 0 +-59 79 95 0 +-4 -61 -88 0 +58 74 80 0 +49 -58 82 0 +16 44 -57 0 +2 89 95 0 +-3 -27 -81 0 +24 75 79 0 +44 96 97 0 +31 -38 57 0 +14 -43 -72 0 +38 76 96 0 +30 32 96 0 +-21 35 56 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-2_0-no-2.cnf b/tests/sat/unsat/aim-100-2_0-no-2.cnf new file mode 100644 index 00000000..51525016 --- /dev/null +++ b/tests/sat/unsat/aim-100-2_0-no-2.cnf @@ -0,0 +1,211 @@ +c FILE: aim-100-2_0-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 200 +40 54 75 0 +-40 54 58 0 +-40 -58 69 0 +-40 -69 95 0 +-51 -69 95 0 +64 75 89 0 +26 -64 89 0 +26 -69 -95 0 +-26 75 -95 0 +11 28 82 0 +-11 23 82 0 +14 -23 28 0 +-11 -14 28 0 +-28 -75 88 0 +-28 84 -88 0 +62 -75 -84 0 +12 51 -62 0 +12 -51 -62 0 +-12 43 65 0 +-12 -65 82 0 +-12 -28 -43 0 +54 -75 -82 0 +-54 77 86 0 +8 -86 94 0 +-8 36 -86 0 +-8 -36 -86 0 +24 77 -94 0 +4 7 78 0 +4 -78 84 0 +4 7 -84 0 +-4 7 -77 0 +-7 63 76 0 +-7 24 -63 0 +-7 -55 -63 0 +24 -76 93 0 +-76 -77 -93 0 +6 -24 98 0 +6 94 -98 0 +-6 -54 94 0 +62 -94 96 0 +-62 -94 96 0 +-54 -88 96 0 +20 -24 -96 0 +-20 -24 -96 0 +20 27 32 0 +-20 27 32 0 +-15 -53 78 0 +26 44 -46 0 +-26 44 -89 0 +12 35 -39 0 +1 -51 -80 0 +-3 21 60 0 +-3 -48 60 0 +-48 -60 100 0 +-48 -60 61 0 +-60 -61 -100 0 +9 -22 -93 0 +-21 44 93 0 +-44 46 69 0 +-46 69 93 0 +13 -46 -85 0 +-13 -44 -85 0 +41 43 84 0 +-41 43 87 0 +-37 49 74 0 +-29 -37 -70 0 +-37 49 -74 0 +33 35 41 0 +-15 33 41 0 +-5 -43 -85 0 +-92 -93 -98 0 +15 50 63 0 +-21 -58 87 0 +25 -39 -97 0 +-25 51 -97 0 +-25 -39 -97 0 +-4 -38 -52 0 +59 79 95 0 +14 59 -79 0 +76 -89 99 0 +40 76 -99 0 +40 -76 -89 0 +-5 -22 46 0 +-31 86 100 0 +10 31 62 0 +14 31 58 0 +10 31 -58 0 +-30 42 -67 0 +-21 -30 42 0 +-30 42 -77 0 +5 -11 13 0 +11 -26 92 0 +15 38 83 0 +-13 56 -100 0 +-16 47 87 0 +47 83 -87 0 +6 -35 92 0 +-6 -65 92 0 +61 66 -82 0 +-1 -18 68 0 +-18 52 -68 0 +32 64 -96 0 +-8 35 -67 0 +10 -83 -90 0 +-10 -32 -91 0 +20 68 72 0 +16 85 -95 0 +9 29 30 0 +-1 -29 30 0 +39 45 51 0 +39 45 -82 0 +19 70 88 0 +-19 -45 88 0 +-36 -45 -70 0 +-59 -70 -81 0 +-1 -52 81 0 +15 -35 55 0 +-18 -45 48 0 +-35 -53 -68 0 +16 -38 -64 0 +27 46 57 0 +9 -27 57 0 +-32 -43 70 0 +-23 34 -67 0 +55 85 -92 0 +18 -25 48 0 +-36 67 -78 0 +-59 66 86 0 +-4 -44 60 0 +-20 -31 -78 0 +-61 -80 97 0 +21 -84 91 0 +22 52 -90 0 +73 -83 -98 0 +13 80 -91 0 +1 -15 19 0 +64 83 90 0 +16 33 99 0 +-16 -65 99 0 +-16 53 -74 0 +53 -63 85 0 +17 61 -80 0 +3 17 -61 0 +-41 74 -83 0 +47 -72 -73 0 +8 30 72 0 +-27 -34 53 0 +1 56 97 0 +29 -68 79 0 +67 -73 -92 0 +18 -57 89 0 +22 36 91 0 +-14 -23 56 0 +-52 68 100 0 +37 -38 -50 0 +-13 -33 57 0 +55 58 59 0 +19 36 37 0 +-19 78 97 0 +3 -14 37 0 +-5 -57 98 0 +-9 72 -87 0 +48 -90 -99 0 +23 -55 -99 0 +39 -64 -81 0 +66 81 -87 0 +-17 -41 90 0 +-17 -53 -57 0 +-47 -79 80 0 +-3 -42 -56 0 +3 -27 -33 0 +-6 22 -34 0 +-22 -34 81 0 +-2 23 73 0 +29 -55 -59 0 +-10 65 -79 0 +34 63 79 0 +67 -71 -88 0 +38 -50 90 0 +-10 25 98 0 +52 73 -91 0 +45 -73 91 0 +25 34 38 0 +-9 -47 -72 0 +5 8 -17 0 +2 -32 71 0 +-9 65 80 0 +-47 -49 -66 0 +-19 -33 -50 0 +-42 -56 -66 0 +17 -56 -74 0 +5 -31 77 0 +2 11 -100 0 +18 -49 71 0 +2 -2 49 0 +50 70 -72 0 +21 -42 74 0 +-49 -71 -81 0 +-29 -66 71 0 +-2 50 -71 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-2_0-no-3.cnf b/tests/sat/unsat/aim-100-2_0-no-3.cnf new file mode 100644 index 00000000..634c1120 --- /dev/null +++ b/tests/sat/unsat/aim-100-2_0-no-3.cnf @@ -0,0 +1,211 @@ +c FILE: aim-100-2_0-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 200 +28 67 77 0 +16 -28 67 0 +-16 -28 77 0 +65 67 -77 0 +23 -65 74 0 +16 23 -74 0 +-16 22 23 0 +72 85 99 0 +-23 -85 99 0 +22 37 -72 0 +-37 -72 99 0 +22 -65 -99 0 +-22 72 -77 0 +-22 72 -100 0 +-22 -65 -77 0 +-67 84 95 0 +8 50 -84 0 +-50 -84 95 0 +-8 -84 95 0 +18 -67 -95 0 +9 -18 92 0 +9 -92 -95 0 +-9 38 64 0 +38 40 -64 0 +14 20 -38 0 +14 -18 -20 0 +-9 -14 40 0 +-18 35 -40 0 +-9 -35 -40 0 +18 93 100 0 +33 55 64 0 +33 -55 100 0 +18 -33 58 0 +-33 -58 100 0 +-20 -33 64 0 +4 78 80 0 +4 55 -78 0 +10 30 -55 0 +-10 30 38 0 +8 -30 -55 0 +-8 -30 32 0 +4 -8 -32 0 +-45 -79 90 0 +-4 43 -61 0 +56 60 83 0 +24 -60 83 0 +24 73 -83 0 +24 -56 -70 0 +63 79 -100 0 +63 -79 98 0 +7 63 -100 0 +-6 34 37 0 +1 20 -37 0 +16 88 -93 0 +50 -88 -93 0 +-16 48 50 0 +-1 -50 62 0 +14 20 48 0 +-1 -14 -50 0 +-6 34 -48 0 +-6 -20 34 0 +-7 42 -53 0 +-7 -42 -53 0 +-7 -42 -56 0 +13 40 80 0 +13 80 -95 0 +7 -64 94 0 +12 36 98 0 +-36 -54 98 0 +13 -54 -98 0 +-27 46 78 0 +8 45 46 0 +-27 -45 -78 0 +-27 46 -67 0 +15 -26 -97 0 +44 49 69 0 +39 49 -69 0 +44 -49 55 0 +39 -44 73 0 +26 -53 -76 0 +-26 -76 -88 0 +43 -72 79 0 +-43 79 -98 0 +5 -54 -70 0 +27 84 91 0 +-37 -64 92 0 +48 56 -94 0 +53 -87 -92 0 +12 -34 81 0 +-34 77 -81 0 +-38 73 -81 0 +-38 -73 -81 0 +6 21 -60 0 +6 -21 68 0 +-17 53 68 0 +-17 -60 -68 0 +-13 52 -62 0 +-13 -52 -62 0 +12 -13 -52 0 +-35 85 -99 0 +70 -80 -89 0 +-44 70 75 0 +-44 -75 86 0 +21 86 -96 0 +21 -86 -96 0 +31 57 69 0 +31 57 -69 0 +-11 -23 -31 0 +7 90 91 0 +86 -90 91 0 +17 -75 93 0 +-17 -75 92 0 +-28 33 -56 0 +-11 31 -45 0 +-12 56 78 0 +-12 93 -98 0 +-12 -78 -93 0 +-1 9 -49 0 +-15 43 57 0 +-30 53 -73 0 +17 -92 -97 0 +-15 59 -87 0 +-4 -66 71 0 +52 -76 -80 0 +11 61 84 0 +32 66 -89 0 +-32 -61 -70 0 +39 -48 82 0 +27 -34 -99 0 +-61 -68 -82 0 +-31 32 35 0 +-5 15 -79 0 +-14 -15 25 0 +-31 -32 82 0 +1 5 29 0 +11 35 96 0 +-24 -87 94 0 +15 -49 -80 0 +5 36 -71 0 +51 60 -73 0 +42 -74 88 0 +28 -51 -83 0 +-10 -52 70 0 +17 37 54 0 +11 -57 60 0 +-48 -68 -69 0 +6 10 -63 0 +59 76 96 0 +-2 19 -19 0 +27 -40 -91 0 +26 -39 -86 0 +41 52 -86 0 +-21 -36 75 0 +19 65 68 0 +29 49 74 0 +41 44 -46 0 +-25 -29 74 0 +-41 62 -66 0 +71 -71 -88 0 +-5 51 -96 0 +58 -71 96 0 +-36 -91 97 0 +-3 -41 -59 0 +45 71 -85 0 +-23 85 87 0 +-21 81 -91 0 +3 61 81 0 +-3 -25 97 0 +36 54 -58 0 +2 47 -59 0 +59 66 87 0 +-46 -51 -89 0 +1 -46 58 0 +-39 47 -82 0 +26 -39 -43 0 +-19 65 82 0 +-2 25 47 0 +2 25 29 0 +-35 -41 88 0 +-47 -66 -82 0 +-19 -58 76 0 +-5 30 -94 0 +62 76 89 0 +19 -63 -90 0 +-2 51 -97 0 +42 87 -90 0 +10 -74 -85 0 +3 61 90 0 +-29 94 97 0 +2 41 -63 0 +-51 54 69 0 +28 89 0 +3 -4 -59 0 +-3 -57 -83 0 +-47 83 0 +-11 -24 -43 0 +-24 45 -62 0 +-57 75 -94 0 +-10 -29 -42 0 +-25 -26 66 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-100-2_0-no-4.cnf b/tests/sat/unsat/aim-100-2_0-no-4.cnf new file mode 100644 index 00000000..669f57fd --- /dev/null +++ b/tests/sat/unsat/aim-100-2_0-no-4.cnf @@ -0,0 +1,211 @@ +c FILE: aim-100-2_0-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 100 200 +37 62 87 0 +37 47 -87 0 +-37 45 62 0 +-37 -45 62 0 +38 47 56 0 +38 47 -62 0 +11 -38 -62 0 +80 92 97 0 +20 92 -97 0 +20 80 -92 0 +-20 39 -47 0 +-39 -47 80 0 +52 -80 96 0 +40 -52 96 0 +16 40 -96 0 +-16 -80 -96 0 +11 -40 -47 0 +12 19 93 0 +16 -19 93 0 +-16 19 93 0 +12 -16 -19 0 +81 85 97 0 +52 85 -97 0 +-52 85 -93 0 +12 -85 -93 0 +-11 -81 -93 0 +-11 14 49 0 +3 -12 49 0 +-3 -14 49 0 +20 -49 57 0 +-49 -57 79 0 +-39 -49 79 0 +-12 -20 79 0 +-11 -12 -79 0 +31 -65 92 0 +-65 81 84 0 +-31 -65 -81 0 +35 -45 67 0 +35 -63 70 0 +5 -70 75 0 +-67 -70 -75 0 +-45 -63 -67 0 +-1 -29 86 0 +-29 -78 -86 0 +-25 26 33 0 +15 -78 -99 0 +13 -14 -15 0 +-13 -15 -99 0 +2 15 -84 0 +-2 -81 -84 0 +-21 28 -36 0 +22 58 64 0 +22 34 -64 0 +22 58 -64 0 +28 38 71 0 +66 -83 95 0 +-66 -83 95 0 +18 -41 -79 0 +-56 67 -75 0 +5 36 77 0 +18 53 -96 0 +27 46 63 0 +-33 -73 -85 0 +-36 55 97 0 +-2 56 -94 0 +-2 17 -44 0 +3 36 68 0 +-3 36 68 0 +51 -66 -92 0 +17 51 -72 0 +5 42 -72 0 +-17 42 -72 0 +-17 -42 -92 0 +-51 -66 84 0 +-51 56 -84 0 +17 -34 98 0 +-34 -40 98 0 +-22 94 100 0 +-5 19 86 0 +-5 24 86 0 +-5 -19 -24 0 +4 -32 -55 0 +-4 -32 -55 0 +15 76 90 0 +6 41 -95 0 +-35 41 -95 0 +-55 83 -94 0 +10 16 32 0 +-1 10 32 0 +26 -54 -94 0 +8 70 90 0 +8 -53 70 0 +-23 28 33 0 +7 -44 -56 0 +-7 -44 82 0 +-7 -56 -82 0 +29 87 -98 0 +-28 54 72 0 +-28 54 -86 0 +-28 -54 72 0 +-3 52 100 0 +-31 42 63 0 +8 -43 87 0 +-8 -29 -43 0 +7 -70 -97 0 +68 74 -76 0 +-68 74 -76 0 +-20 -73 88 0 +29 -60 -64 0 +-51 78 -83 0 +10 58 -79 0 +-24 37 -60 0 +7 32 81 0 +-36 72 -78 0 +1 4 95 0 +-1 4 -40 0 +23 -68 -90 0 +-24 -33 78 0 +45 61 -98 0 +29 61 -100 0 +61 -98 -100 0 +-23 66 73 0 +-23 -73 -88 0 +21 31 -59 0 +45 59 -62 0 +60 89 -91 0 +14 82 -87 0 +-13 -17 -76 0 +-38 43 -89 0 +-32 64 83 0 +6 26 -82 0 +9 -31 75 0 +6 -26 78 0 +-18 69 -71 0 +71 -77 88 0 +-9 18 -90 0 +-69 -75 77 0 +-30 -38 96 0 +-21 -30 59 0 +-21 -30 -59 0 +-10 50 -88 0 +-41 -53 59 0 +1 -41 -53 0 +1 -35 -59 0 +-6 34 -48 0 +-10 -52 74 0 +39 -69 -87 0 +-18 -69 -80 0 +65 69 -74 0 +14 30 33 0 +21 -86 88 0 +-26 46 51 0 +-13 -26 46 0 +-48 63 73 0 +3 -34 -46 0 +-37 -58 67 0 +-43 64 66 0 +23 -82 83 0 +-14 60 77 0 +13 -48 100 0 +-88 -89 98 0 +-46 53 54 0 +-8 -18 43 0 +24 -33 91 0 +-57 -74 -85 0 +-15 -25 -71 0 +31 50 -61 0 +-7 -10 -27 0 +75 -89 -95 0 +-6 40 43 0 +21 -61 91 0 +50 -68 89 0 +34 82 -90 0 +24 -50 -57 0 +-8 -25 71 0 +27 -54 -99 0 +-6 -60 91 0 +41 89 94 0 +-9 60 -91 0 +23 39 90 0 +30 69 -71 0 +9 48 -91 0 +-50 -58 99 0 +2 11 -67 0 +-9 25 94 0 +35 48 -61 0 +-50 53 57 0 +-35 -39 76 0 +-4 -27 -58 0 +27 44 48 0 +2 -46 -100 0 +-42 57 -63 0 +44 65 99 0 +25 44 99 0 +30 -74 -77 0 +-27 -42 55 0 +-4 25 76 0 +-22 73 84 0 +-22 65 -77 0 +9 13 55 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-1_6-no-1.cnf b/tests/sat/unsat/aim-200-1_6-no-1.cnf new file mode 100644 index 00000000..69aa6595 --- /dev/null +++ b/tests/sat/unsat/aim-200-1_6-no-1.cnf @@ -0,0 +1,331 @@ +c FILE: aim-200-1_6-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 320 +43 169 174 0 +61 -169 172 0 +-61 70 118 0 +-70 97 172 0 +-61 -70 -97 0 +43 -169 172 0 +68 144 -169 0 +48 135 144 0 +48 -68 -135 0 +-48 -68 -172 0 +123 130 138 0 +-123 130 -144 0 +-130 138 -172 0 +-138 -172 175 0 +-172 174 -175 0 +87 161 -174 0 +3 74 -87 0 +-3 74 -87 0 +-74 -87 159 0 +124 -159 -174 0 +-74 -124 -159 0 +6 -43 161 0 +-6 -43 161 0 +14 110 -161 0 +173 189 190 0 +122 132 190 0 +122 -132 189 0 +121 -122 -173 0 +-110 -122 -173 0 +14 189 -190 0 +14 -110 -189 0 +66 102 115 0 +66 -102 163 0 +66 -102 -163 0 +-66 146 192 0 +115 141 -146 0 +-66 -141 -146 0 +-115 188 192 0 +-115 -188 192 0 +87 149 -192 0 +8 -149 -192 0 +6 58 180 0 +-6 -14 58 0 +28 38 116 0 +28 -38 116 0 +35 -116 118 0 +-35 57 118 0 +-35 -57 180 0 +49 -116 -118 0 +-49 155 179 0 +-49 -118 -155 0 +-49 -116 -179 0 +95 107 169 0 +25 95 -107 0 +-25 -58 -107 0 +-28 95 -169 0 +27 -28 -58 0 +-27 -28 -95 0 +8 -14 -180 0 +16 51 120 0 +-51 120 143 0 +79 -120 143 0 +93 129 -143 0 +79 93 -129 0 +16 -93 -161 0 +-16 79 188 0 +-16 79 -188 0 +39 60 -79 0 +-8 -39 60 0 +-8 -60 -79 0 +5 42 162 0 +5 42 -162 0 +100 104 -126 0 +-104 -126 -167 0 +13 53 -100 0 +-33 53 -100 0 +-53 96 -167 0 +13 -96 166 0 +-96 -100 -166 0 +12 104 107 0 +12 -104 159 0 +-56 -138 -190 0 +38 151 177 0 +-29 -38 177 0 +109 -151 177 0 +-45 -91 175 0 +21 -121 -129 0 +-21 83 165 0 +-21 -83 165 0 +-121 -143 165 0 +65 -176 -178 0 +75 -93 145 0 +75 76 -145 0 +109 119 -188 0 +-82 109 -119 0 +3 -65 -148 0 +-3 -65 -148 0 +19 108 121 0 +19 -108 121 0 +45 -47 -106 0 +100 -140 193 0 +29 -52 78 0 +-29 -52 101 0 +55 78 -119 0 +55 78 151 0 +55 -79 -151 0 +-55 78 141 0 +-55 -141 197 0 +-108 -138 158 0 +-12 83 113 0 +-12 -113 -195 0 +-39 81 200 0 +50 56 -180 0 +-31 -50 56 0 +38 44 -56 0 +44 -56 -180 0 +-54 119 -158 0 +-140 160 183 0 +160 173 -183 0 +7 -13 -99 0 +-13 -99 -163 0 +-19 69 -193 0 +-19 81 -193 0 +-13 -97 -185 0 +-88 -107 -187 0 +-150 -156 183 0 +31 -109 175 0 +31 -109 110 0 +106 125 -155 0 +9 -114 186 0 +22 35 194 0 +22 158 -194 0 +-103 -173 198 0 +-39 -103 -198 0 +20 -66 71 0 +-60 -66 -71 0 +127 163 197 0 +88 -175 184 0 +-71 129 -152 0 +9 24 62 0 +-9 24 62 0 +35 -114 162 0 +20 -171 -179 0 +90 134 -177 0 +-85 -145 -153 0 +-9 -122 -186 0 +102 -139 166 0 +-125 184 -199 0 +-119 -141 198 0 +97 -141 -198 0 +27 33 -47 0 +-27 33 -114 0 +10 30 67 0 +-26 -77 -106 0 +32 105 -189 0 +30 72 -157 0 +131 138 147 0 +89 124 -157 0 +89 -124 -157 0 +7 -78 91 0 +54 -85 125 0 +23 54 -125 0 +-69 171 -187 0 +-50 -69 -187 0 +-4 23 -156 0 +1 -44 -181 0 +59 76 137 0 +59 -76 -166 0 +-88 117 126 0 +-117 126 135 0 +29 -42 -77 0 +11 -29 -42 0 +-59 128 163 0 +57 -97 -185 0 +73 -84 103 0 +2 -22 -149 0 +-9 132 149 0 +80 -82 -200 0 +-65 92 -183 0 +47 92 -197 0 +-92 -146 195 0 +-48 71 -196 0 +-48 -64 178 0 +-117 -158 -168 0 +77 -147 193 0 +-59 62 139 0 +11 38 -76 0 +50 91 -137 0 +92 96 185 0 +-1 26 -171 0 +101 136 152 0 +-11 -57 -78 0 +-67 94 114 0 +-67 -95 114 0 +-63 182 195 0 +-34 85 -123 0 +25 86 147 0 +67 94 -136 0 +1 134 156 0 +50 69 -178 0 +30 -80 112 0 +-7 -147 -154 0 +-40 88 -152 0 +27 -128 179 0 +-54 185 -196 0 +131 153 -176 0 +-72 -113 -162 0 +-72 -113 -158 0 +-101 105 -194 0 +-17 -53 136 0 +-56 178 185 0 +37 45 65 0 +-72 -147 170 0 +-5 15 -193 0 +90 -101 -154 0 +-24 105 -160 0 +-23 -76 153 0 +85 194 -200 0 +-33 -83 -195 0 +-46 156 164 0 +-7 15 108 0 +7 -40 63 0 +-49 -89 -191 0 +52 -135 154 0 +46 63 -72 0 +-18 34 103 0 +21 99 -177 0 +-127 140 196 0 +-21 -127 147 0 +-11 98 -123 0 +51 64 -129 0 +-81 -105 -194 0 +-30 -84 117 0 +-36 139 186 0 +18 36 171 0 +64 -91 -127 0 +-30 84 148 0 +-120 -142 -191 0 +-2 18 146 0 +-5 70 -199 0 +41 -63 176 0 +52 -111 145 0 +-46 -133 -184 0 +113 -164 191 0 +-36 -131 -179 0 +18 32 182 0 +-51 61 181 0 +-15 -73 -156 0 +47 -131 -197 0 +-21 82 -89 0 +-22 -112 142 0 +77 154 200 0 +7 133 -168 0 +-139 150 182 0 +36 -182 -194 0 +-26 98 103 0 +-23 -64 -94 0 +40 -77 -121 0 +17 -18 38 0 +127 166 -184 0 +121 168 199 0 +-94 -165 192 0 +89 -98 148 0 +-86 -142 -165 0 +7 -37 196 0 +-73 -136 181 0 +17 108 142 0 +-32 72 -160 0 +40 -89 -112 0 +-1 46 -134 0 +80 164 -170 0 +37 -170 191 0 +-153 154 155 0 +63 -64 -75 0 +-144 170 197 0 +10 -134 -137 0 +-33 -34 176 0 +-41 133 199 0 +-81 -98 -128 0 +-128 -150 176 0 +-45 -90 170 0 +4 -24 49 0 +123 -165 -186 0 +99 -111 -164 0 +98 112 -165 0 +-86 -131 157 0 +126 150 172 0 +-10 -75 187 0 +-15 128 177 0 +140 148 152 0 +-18 -23 -132 0 +111 141 167 0 +41 -61 98 0 +86 106 -130 0 +17 -168 -182 0 +-33 -41 60 0 +-102 -105 136 0 +-37 -98 123 0 +-52 -62 117 0 +8 -44 82 0 +-20 168 199 0 +30 34 154 0 +-31 -32 186 0 +47 90 -105 0 +-20 -34 101 0 +167 -181 199 0 +-2 -133 181 0 +39 -45 -170 0 +68 137 157 0 +-23 -25 -84 0 +-4 -62 -132 0 +-53 -80 -198 0 +4 73 -90 0 +2 -17 134 0 +11 -22 26 0 +30 86 111 0 +-7 40 126 0 +-62 101 0 +36 47 187 0 +-10 84 -92 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-1_6-no-2.cnf b/tests/sat/unsat/aim-200-1_6-no-2.cnf new file mode 100644 index 00000000..18539d91 --- /dev/null +++ b/tests/sat/unsat/aim-200-1_6-no-2.cnf @@ -0,0 +1,331 @@ +c FILE: aim-200-1_6-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 320 +61 69 128 0 +62 100 124 0 +62 108 162 0 +-108 -124 162 0 +-69 -124 -162 0 +61 -62 100 0 +61 -69 -100 0 +31 65 128 0 +31 -61 -65 0 +-31 -61 128 0 +6 82 -128 0 +6 -82 -128 0 +-70 140 146 0 +-70 140 -146 0 +66 78 -140 0 +29 125 137 0 +29 125 -137 0 +12 102 -125 0 +12 -102 106 0 +-12 -125 198 0 +-12 106 -125 0 +-29 159 193 0 +-29 159 -193 0 +50 131 -159 0 +82 -131 199 0 +82 -159 -199 0 +50 -82 -131 0 +64 112 133 0 +60 81 107 0 +99 -133 190 0 +81 99 -190 0 +81 -99 -107 0 +9 160 170 0 +-9 -81 160 0 +60 -160 170 0 +-81 -133 -170 0 +-60 64 -133 0 +-64 112 145 0 +-64 112 -145 0 +86 -112 144 0 +86 -112 -144 0 +-50 -86 -112 0 +55 98 -106 0 +55 -98 198 0 +109 197 -198 0 +32 134 -197 0 +32 109 -134 0 +-32 109 -197 0 +35 42 51 0 +-35 51 192 0 +-51 -109 192 0 +-51 -172 192 0 +42 -109 -192 0 +-42 57 -198 0 +-42 -57 -109 0 +14 46 91 0 +-14 91 98 0 +-14 91 -98 0 +46 49 -91 0 +-46 49 -55 0 +-49 -55 66 0 +17 23 -66 0 +-23 78 167 0 +-78 121 167 0 +-78 -121 167 0 +49 132 142 0 +-49 132 142 0 +89 -132 -167 0 +-89 -132 -167 0 +17 -23 -142 0 +-17 -140 163 0 +-17 -66 -163 0 +-6 33 68 0 +33 -68 165 0 +33 -68 -165 0 +-6 -33 107 0 +70 116 155 0 +5 20 184 0 +5 20 -184 0 +-5 122 156 0 +-5 122 -156 0 +-5 -116 -122 0 +-20 -116 172 0 +-20 155 -172 0 +70 -107 -155 0 +-37 -57 -119 0 +-65 117 -188 0 +21 -22 97 0 +-21 -22 97 0 +45 -122 181 0 +45 -122 -181 0 +-2 -76 -181 0 +43 -74 93 0 +14 -33 87 0 +-54 137 -145 0 +-9 -147 195 0 +88 -99 121 0 +-16 48 166 0 +126 169 -180 0 +126 136 -169 0 +-125 -126 -180 0 +-20 -176 -182 0 +71 119 175 0 +96 -147 -187 0 +-4 -21 103 0 +30 68 -164 0 +-53 -108 144 0 +24 67 -193 0 +56 120 -124 0 +104 -143 -150 0 +-67 104 -150 0 +-83 92 184 0 +-18 84 179 0 +1 36 127 0 +-79 116 190 0 +-54 -145 164 0 +1 158 -181 0 +157 161 170 0 +-77 156 -196 0 +-80 -174 -188 0 +-100 129 -187 0 +23 34 -153 0 +74 -97 179 0 +26 -39 -178 0 +11 23 69 0 +-3 -86 -177 0 +-53 101 127 0 +-111 113 163 0 +-34 94 -194 0 +-45 -154 -189 0 +-77 -95 -177 0 +67 92 104 0 +-15 -38 -130 0 +-58 131 -158 0 +129 169 171 0 +171 172 197 0 +-30 -48 200 0 +28 75 -151 0 +-2 -40 139 0 +-90 182 -200 0 +39 63 195 0 +21 68 111 0 +77 111 -200 0 +45 187 -189 0 +58 -123 -135 0 +-119 177 -179 0 +-87 146 -184 0 +7 124 168 0 +-58 -142 -169 0 +13 40 -111 0 +-46 120 -148 0 +30 -35 53 0 +-3 21 -40 0 +-89 181 193 0 +48 -106 -144 0 +57 87 89 0 +38 -79 110 0 +-83 -191 -199 0 +-118 153 -166 0 +-91 154 199 0 +24 123 -188 0 +-16 -95 186 0 +-13 83 -101 0 +-44 -63 74 0 +-117 -129 -157 0 +3 40 -179 0 +90 -103 -154 0 +-71 -88 135 0 +38 94 145 0 +-34 -59 -60 0 +-37 -46 117 0 +-56 -76 89 0 +15 -96 -195 0 +-31 -150 -173 0 +-58 -90 -148 0 +73 -161 186 0 +-46 -77 150 0 +-24 -84 188 0 +135 -163 174 0 +-28 -101 -118 0 +7 -28 -115 0 +68 79 185 0 +-13 -43 73 0 +47 -120 -139 0 +10 -63 172 0 +-60 -119 180 0 +72 103 -139 0 +-15 -129 173 0 +-16 110 136 0 +-9 65 157 0 +19 188 -191 0 +8 -75 -169 0 +39 -93 -141 0 +108 -154 -163 0 +-36 152 168 0 +25 37 52 0 +2 -121 -156 0 +-52 -154 -179 0 +-97 119 173 0 +56 90 186 0 +-10 -121 186 0 +3 -41 149 0 +44 -141 -143 0 +59 -74 -194 0 +16 -75 -170 0 +115 -135 -139 0 +27 95 -137 0 +27 -43 147 0 +4 -120 -185 0 +38 -136 183 0 +-94 -126 138 0 +2 16 -110 0 +8 -63 83 0 +-118 -171 -188 0 +-4 -27 84 0 +-96 166 -168 0 +41 -72 -178 0 +-7 25 -177 0 +4 -25 -67 0 +-62 140 -174 0 +39 -138 173 0 +-129 -173 -195 0 +-19 -105 172 0 +105 -158 -186 0 +13 114 -153 0 +19 28 189 0 +-88 134 191 0 +47 -47 -165 0 +-8 -43 113 0 +-45 -147 -152 0 +40 117 130 0 +85 -149 151 0 +-84 -104 -110 0 +-115 123 -158 0 +-18 35 101 0 +-11 72 -117 0 +-52 177 0 +-113 -151 -183 0 +-152 198 200 0 +41 43 -192 0 +-15 -76 -104 0 +-26 -59 143 0 +37 80 183 0 +-126 141 -187 0 +-87 114 -171 0 +-35 -73 -114 0 +-85 -92 -127 0 +-13 -176 178 0 +-8 10 158 0 +-87 133 161 0 +174 -175 -190 0 +18 -36 -157 0 +-27 -96 -182 0 +67 -162 -175 0 +-90 -134 152 0 +-25 -103 114 0 +108 -120 -148 0 +21 41 -41 0 +-44 -48 -141 0 +-50 52 138 0 +28 -121 176 0 +22 -127 -151 0 +63 80 -161 0 +30 -44 76 0 +10 -39 189 0 +52 76 130 0 +131 -157 -186 0 +22 94 -182 0 +-114 148 194 0 +-138 150 -166 0 +-29 141 -148 0 +-7 -92 -190 0 +-84 95 -136 0 +-25 149 175 0 +-94 -190 196 0 +-34 75 -185 0 +115 185 194 0 +18 19 -94 0 +-79 -113 176 0 +92 93 -93 0 +34 -73 118 0 +54 -105 164 0 +-85 -149 166 0 +-32 85 -160 0 +58 153 186 0 +-146 -177 191 0 +-100 -130 180 0 +9 -16 65 0 +11 -186 -187 0 +-3 -35 165 0 +-10 28 196 0 +-19 154 182 0 +58 -64 -94 0 +44 -104 -123 0 +-1 -47 -115 0 +-2 22 -80 0 +79 102 176 0 +-71 -86 -177 0 +-11 44 86 0 +-56 135 194 0 +-1 -95 -164 0 +139 178 -183 0 +-17 88 187 0 +-27 -43 -160 0 +34 71 -100 0 +15 -72 -168 0 +-102 143 191 0 +-26 54 148 0 +-24 71 -155 0 +-25 105 -196 0 +-1 80 152 0 +59 -117 156 0 +-38 53 151 0 +73 144 196 0 +77 147 188 0 +26 -30 -103 0 +-31 36 -117 0 +-94 118 -183 0 +12 -84 194 0 +96 145 186 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-1_6-no-3.cnf b/tests/sat/unsat/aim-200-1_6-no-3.cnf new file mode 100644 index 00000000..cf681eb6 --- /dev/null +++ b/tests/sat/unsat/aim-200-1_6-no-3.cnf @@ -0,0 +1,331 @@ +c FILE: aim-200-1_6-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 320 +11 43 90 0 +11 -43 90 0 +11 -43 -70 0 +-11 84 98 0 +-11 -84 98 0 +-11 15 -98 0 +-15 28 -98 0 +-15 -28 65 0 +-11 -65 -98 0 +87 -90 138 0 +-87 -90 197 0 +-87 138 -197 0 +29 91 148 0 +29 41 113 0 +3 -41 113 0 +3 -91 -113 0 +29 -91 148 0 +-29 60 104 0 +-29 -104 182 0 +-29 60 -182 0 +4 126 199 0 +-4 106 199 0 +1 -106 199 0 +1 126 -199 0 +34 127 194 0 +-34 127 194 0 +59 70 128 0 +70 73 132 0 +-59 -73 132 0 +-59 128 -132 0 +-70 121 128 0 +105 106 -128 0 +-105 106 -128 0 +50 62 193 0 +-106 193 -194 0 +-106 -193 -194 0 +-50 -106 -128 0 +121 -126 -127 0 +91 118 190 0 +91 149 -190 0 +-91 118 147 0 +10 107 147 0 +10 -107 149 0 +-10 -118 147 0 +-60 -147 192 0 +-147 166 -192 0 +35 -166 -192 0 +-35 -166 -192 0 +68 71 83 0 +-68 71 -149 0 +-71 83 191 0 +-83 -149 191 0 +-60 -126 -191 0 +-1 137 145 0 +113 137 -145 0 +-113 -145 179 0 +-1 -137 179 0 +105 136 -179 0 +-105 136 -179 0 +41 153 155 0 +-41 153 154 0 +21 94 155 0 +21 129 154 0 +21 -129 -153 0 +-21 -153 155 0 +65 154 -155 0 +-65 140 -155 0 +-65 -121 -140 0 +-121 -148 -154 0 +31 -136 186 0 +-31 120 145 0 +120 -145 198 0 +-31 -120 186 0 +23 -136 -186 0 +-23 -186 198 0 +44 135 -148 0 +-44 135 -148 0 +44 74 -135 0 +24 62 -74 0 +-24 -74 -198 0 +44 -62 -74 0 +-44 -135 -198 0 +-138 151 178 0 +-138 -151 178 0 +8 -60 97 0 +-8 32 97 0 +-8 -32 -178 0 +52 -97 108 0 +-52 108 -178 0 +26 -108 137 0 +38 118 123 0 +38 -118 123 0 +-4 38 -118 0 +38 45 -123 0 +26 -45 -123 0 +26 27 -38 0 +-27 -38 -137 0 +7 112 162 0 +-26 130 -162 0 +-41 130 -162 0 +112 -130 -162 0 +-26 -112 177 0 +7 -112 -177 0 +-7 -108 176 0 +48 50 161 0 +-7 -50 161 0 +48 -161 -176 0 +-48 -97 156 0 +-48 -156 -176 0 +-28 -73 -124 0 +97 104 -114 0 +-10 -19 175 0 +89 133 -175 0 +-19 -89 133 0 +69 130 -189 0 +25 -69 130 0 +-13 63 -139 0 +-13 -20 -63 0 +-120 166 197 0 +-6 22 -171 0 +39 -132 184 0 +39 -62 184 0 +-5 -72 -139 0 +-94 109 -180 0 +-94 -180 -187 0 +-109 -180 -187 0 +140 160 -173 0 +-64 -160 -173 0 +-71 116 -125 0 +-24 -39 132 0 +46 57 -78 0 +74 144 185 0 +-14 -27 -151 0 +117 -165 -177 0 +19 -117 195 0 +-19 -27 58 0 +-27 -117 -195 0 +40 159 177 0 +25 -40 159 0 +61 114 168 0 +25 45 122 0 +4 -45 122 0 +14 76 169 0 +57 76 -169 0 +15 119 174 0 +157 165 171 0 +157 -171 -189 0 +144 -154 -175 0 +78 109 110 0 +-42 125 170 0 +27 -99 -103 0 +-122 164 167 0 +100 103 -122 0 +100 -103 -164 0 +-67 -100 167 0 +66 152 185 0 +81 176 -185 0 +66 81 -185 0 +-81 152 -185 0 +42 51 68 0 +-39 42 -68 0 +-6 -81 174 0 +33 54 171 0 +-20 33 -54 0 +-14 -66 -133 0 +28 -119 -143 0 +-119 -143 192 0 +-3 164 169 0 +-46 -114 200 0 +12 -46 -200 0 +-12 -125 -200 0 +-12 73 81 0 +111 129 150 0 +-3 125 134 0 +16 20 165 0 +16 35 165 0 +-17 51 -170 0 +-35 -104 110 0 +-35 -37 110 0 +-2 119 134 0 +18 -33 187 0 +-49 -57 190 0 +-49 -190 -199 0 +-74 -144 163 0 +39 -67 200 0 +27 -58 170 0 +-2 -53 85 0 +-82 180 -195 0 +14 20 85 0 +-41 -100 -110 0 +46 -127 163 0 +67 -130 141 0 +-12 -42 -142 0 +49 -134 -184 0 +-22 -78 -130 0 +-36 -75 -197 0 +12 43 -193 0 +52 -84 -183 0 +72 75 -85 0 +-25 -64 -167 0 +-142 -164 -167 0 +-25 -63 189 0 +23 -53 -183 0 +-18 -116 -157 0 +-40 101 168 0 +-18 34 84 0 +8 64 96 0 +-32 64 -96 0 +-52 61 150 0 +-52 89 -95 0 +-89 -95 183 0 +-116 140 -161 0 +-21 82 160 0 +-30 40 -54 0 +-76 143 146 0 +32 -76 146 0 +18 24 -152 0 +-14 125 -158 0 +-42 59 -96 0 +-4 48 102 0 +-48 102 103 0 +-72 -88 98 0 +86 -123 -191 0 +94 -183 -200 0 +78 108 -109 0 +47 79 137 0 +-102 -141 -146 0 +-29 37 -115 0 +-37 -66 -115 0 +6 -139 -159 0 +6 80 182 0 +-100 -107 142 0 +93 131 180 0 +93 131 -141 0 +57 175 189 0 +31 73 -82 0 +18 -36 -92 0 +93 116 -158 0 +75 173 193 0 +43 156 -165 0 +30 -99 -153 0 +37 -51 196 0 +19 -51 -172 0 +-140 141 -160 0 +-9 -36 -162 0 +-22 72 -150 0 +69 151 158 0 +56 -113 -172 0 +22 -129 -188 0 +40 69 183 0 +-69 -88 183 0 +28 34 86 0 +80 -140 173 0 +-89 160 196 0 +-96 130 -131 0 +19 -92 -102 0 +-9 -36 47 0 +30 -55 117 0 +15 -159 187 0 +71 -177 190 0 +-9 49 -146 0 +139 -181 -184 0 +53 56 -131 0 +-111 -181 -193 0 +43 75 143 0 +-17 73 101 0 +-30 -134 -146 0 +-93 -133 -160 0 +101 115 173 0 +-75 80 99 0 +-45 114 -158 0 +15 -170 181 0 +55 -80 -200 0 +2 -47 82 0 +-35 -111 -174 0 +-56 -129 188 0 +96 -150 -152 0 +9 -157 -196 0 +-34 36 99 0 +-5 58 -144 0 +-5 88 -109 0 +9 -111 116 0 +45 -79 107 0 +55 59 77 0 +92 -124 -156 0 +124 -134 142 0 +77 -110 -188 0 +17 95 158 0 +53 -68 -129 0 +9 158 -168 0 +-30 172 -174 0 +5 -61 -144 0 +103 158 -163 0 +-58 -77 -177 0 +-79 -83 188 0 +67 92 -163 0 +63 95 -163 0 +13 -55 -85 0 +-86 -101 -131 0 +79 -188 195 0 +-23 162 -182 0 +-33 -34 -86 0 +-16 -56 -80 0 +-12 36 181 0 +2 115 -196 0 +13 -86 172 0 +5 45 111 0 +-80 -101 0 +-33 67 -79 0 +17 54 124 0 +9 -47 139 0 +-16 -61 -169 0 +12 55 115 0 +55 -57 -79 0 +13 -85 88 0 +87 -93 -163 0 +-67 95 -168 0 +53 -56 143 0 +77 -80 0 +-30 -77 -101 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-1_6-no-4.cnf b/tests/sat/unsat/aim-200-1_6-no-4.cnf new file mode 100644 index 00000000..912455ab --- /dev/null +++ b/tests/sat/unsat/aim-200-1_6-no-4.cnf @@ -0,0 +1,331 @@ +c FILE: aim-200-1_6-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 320 +33 60 160 0 +-60 79 160 0 +53 -60 -79 0 +-53 -79 160 0 +33 61 -160 0 +-61 -160 200 0 +33 -61 -160 0 +-33 78 92 0 +-33 78 -92 0 +35 144 168 0 +67 104 139 0 +43 -104 139 0 +-43 -104 -144 0 +35 56 -139 0 +35 -139 -144 0 +-35 153 168 0 +67 70 -168 0 +-70 153 -168 0 +2 66 115 0 +2 -66 -67 0 +-2 9 115 0 +-67 71 -115 0 +9 -71 -115 0 +-9 -67 96 0 +-9 -78 -96 0 +132 -153 170 0 +130 131 -132 0 +106 -130 -132 0 +-106 -130 170 0 +-78 131 -170 0 +-131 194 200 0 +-153 -194 200 0 +26 68 -131 0 +26 122 178 0 +-68 -122 178 0 +26 67 -178 0 +-67 -68 -178 0 +46 108 -200 0 +12 46 -108 0 +-46 80 100 0 +-46 72 -80 0 +12 -46 -80 0 +4 100 161 0 +92 111 164 0 +-111 161 164 0 +-12 64 92 0 +-64 92 -164 0 +-4 -12 -92 0 +-26 100 -161 0 +-26 -100 -200 0 +150 174 175 0 +49 -150 175 0 +49 72 174 0 +31 138 -175 0 +-72 -120 146 0 +-120 138 -146 0 +31 114 -138 0 +-114 -138 -175 0 +1 109 180 0 +-1 109 -188 0 +-16 61 152 0 +-16 39 -152 0 +-16 -108 158 0 +39 156 -158 0 +22 39 -156 0 +-22 -108 -158 0 +-17 -89 179 0 +4 40 -77 0 +28 -52 149 0 +-4 55 -178 0 +-54 154 156 0 +-54 -154 -188 0 +60 73 152 0 +4 36 -176 0 +-36 -176 191 0 +84 91 129 0 +84 91 -129 0 +-45 95 -191 0 +39 -108 176 0 +18 48 73 0 +-18 48 120 0 +-48 108 120 0 +3 5 188 0 +-5 162 188 0 +3 162 197 0 +-3 8 195 0 +8 162 189 0 +-8 52 189 0 +-8 -154 189 0 +52 -162 195 0 +17 27 -149 0 +-16 -38 -96 0 +3 38 -86 0 +38 71 89 0 +-71 -86 89 0 +-21 90 192 0 +90 -155 -192 0 +150 154 197 0 +40 -150 197 0 +32 -38 199 0 +-30 32 199 0 +-44 -138 -189 0 +85 102 -139 0 +-50 134 158 0 +-50 110 -134 0 +-5 -52 -100 0 +13 42 -118 0 +-42 -44 -118 0 +-55 165 193 0 +-55 150 -193 0 +68 -159 -187 0 +103 149 163 0 +-90 103 -163 0 +-3 -95 99 0 +-95 99 -159 0 +-101 112 165 0 +124 -126 178 0 +23 -124 -126 0 +55 -124 -126 0 +83 -128 187 0 +10 -65 83 0 +-65 -83 179 0 +-63 70 88 0 +-63 88 -98 0 +-17 -25 -107 0 +75 106 -155 0 +24 -75 -155 0 +24 -75 -174 0 +107 -152 156 0 +-107 132 -152 0 +-37 124 147 0 +-2 -28 56 0 +-19 -42 -183 0 +-70 -88 -90 0 +76 82 -197 0 +-76 102 -197 0 +80 116 -141 0 +-76 -80 -102 0 +-102 -116 -141 0 +-32 88 180 0 +-20 -59 121 0 +51 155 187 0 +-21 132 178 0 +-69 117 -157 0 +27 -101 123 0 +-27 -88 123 0 +122 -185 190 0 +90 110 -162 0 +-11 -20 -81 0 +-42 62 -81 0 +30 74 85 0 +30 -74 110 0 +-56 -110 -117 0 +-7 -22 -76 0 +63 80 137 0 +-63 80 176 0 +45 -106 167 0 +22 181 193 0 +3 21 166 0 +21 45 -166 0 +-6 74 130 0 +-28 159 172 0 +58 159 -172 0 +-18 -41 -73 0 +-48 -62 143 0 +-25 -51 58 0 +36 -94 -117 0 +-56 107 -157 0 +81 121 178 0 +-31 -135 -189 0 +-74 -137 -191 0 +17 148 190 0 +-58 -152 192 0 +-47 83 -198 0 +23 129 -194 0 +1 19 191 0 +-13 65 -109 0 +11 27 -58 0 +11 -27 57 0 +-27 -57 158 0 +44 -91 -97 0 +-119 125 -145 0 +75 -145 167 0 +-59 -142 -173 0 +29 -114 -187 0 +-29 171 -187 0 +37 182 -193 0 +37 -182 -193 0 +-19 -176 -180 0 +20 95 -143 0 +10 -80 -85 0 +10 -85 -163 0 +25 183 190 0 +-62 -110 183 0 +134 183 -190 0 +25 -134 -190 0 +-98 -103 -128 0 +-6 57 182 0 +-93 177 -182 0 +-120 177 -182 0 +18 -93 -177 0 +126 146 -167 0 +44 96 -123 0 +-15 -87 -121 0 +-135 147 -172 0 +-123 -147 -172 0 +6 11 -180 0 +-143 -167 186 0 +-77 -122 -149 0 +32 -87 -125 0 +14 53 172 0 +-34 -102 -181 0 +-13 28 81 0 +50 62 -73 0 +54 -112 127 0 +16 -29 -111 0 +14 37 171 0 +-84 93 -133 0 +93 -116 -151 0 +-65 -77 116 0 +29 111 157 0 +-34 -35 36 0 +51 117 -166 0 +65 148 186 0 +7 15 96 0 +77 -99 -151 0 +-43 -47 -100 0 +6 15 66 0 +6 -15 -142 0 +-133 141 166 0 +-59 -190 194 0 +7 29 -140 0 +81 -113 -127 0 +64 -66 94 0 +-64 94 -156 0 +16 125 -126 0 +36 196 -198 0 +-10 112 -186 0 +20 116 136 0 +-99 -136 142 0 +-14 -34 -91 0 +-40 -129 -192 0 +-7 141 143 0 +-30 -41 80 0 +-36 -50 126 0 +-40 47 104 0 +-31 125 -136 0 +50 173 -185 0 +-32 -121 -174 0 +-40 105 -181 0 +-125 -163 -173 0 +-83 97 -165 0 +-57 -97 -165 0 +-43 104 119 0 +41 76 82 0 +41 -82 97 0 +97 129 -182 0 +-14 -45 77 0 +-82 -134 186 0 +-37 69 -136 0 +-1 97 103 0 +-109 114 126 0 +-164 -170 194 0 +-83 -94 -191 0 +-10 14 -69 0 +54 -147 -186 0 +-23 125 144 0 +-24 127 -161 0 +-1 -39 59 0 +-112 -140 -152 0 +42 -113 -185 0 +59 105 173 0 +-15 47 135 0 +-11 41 142 0 +34 79 -106 0 +59 -94 -147 0 +88 -103 -196 0 +-84 -137 -161 0 +43 126 -196 0 +-113 -137 -184 0 +-39 -49 -196 0 +43 -127 133 0 +-112 -183 -195 0 +47 87 93 0 +145 155 -169 0 +140 -195 198 0 +-51 63 -89 0 +-24 -49 -53 0 +87 135 -171 0 +5 86 -119 0 +63 -105 169 0 +-111 133 145 0 +-49 -73 -169 0 +119 -148 185 0 +58 151 -184 0 +118 129 -184 0 +69 136 -146 0 +13 -195 196 0 +98 158 -171 0 +-148 181 192 0 +42 -53 -174 0 +128 -171 198 0 +118 155 -170 0 +17 113 169 0 +135 169 198 0 +-24 -148 -179 0 +-23 98 163 0 +98 128 -186 0 +-105 113 157 0 +137 -170 -199 0 +19 -72 142 0 +-119 184 -185 0 +101 -140 -164 0 +80 169 -177 0 +34 101 -199 0 +86 171 184 0 +19 -179 185 0 +-1 151 184 0 +34 116 -179 0 +-80 140 173 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-2_0-no-1.cnf b/tests/sat/unsat/aim-200-2_0-no-1.cnf new file mode 100644 index 00000000..eeb123be --- /dev/null +++ b/tests/sat/unsat/aim-200-2_0-no-1.cnf @@ -0,0 +1,411 @@ +c FILE: aim-200-2_0-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 400 +22 101 108 0 +22 108 130 0 +21 -22 178 0 +9 37 90 0 +9 -37 178 0 +8 165 -178 0 +90 165 -178 0 +26 -90 165 0 +-26 -90 145 0 +-22 -90 -145 0 +44 105 144 0 +44 -105 -165 0 +130 -144 -165 0 +-22 -44 130 0 +112 162 183 0 +-130 162 -183 0 +-112 -130 162 0 +39 147 -162 0 +9 -39 147 0 +108 -130 -147 0 +73 131 189 0 +74 -131 189 0 +73 74 -189 0 +-13 73 -189 0 +-74 -108 186 0 +-74 155 -186 0 +-74 -155 -186 0 +61 -73 -108 0 +-61 -73 -108 0 +12 24 35 0 +65 89 139 0 +-35 -89 139 0 +-35 65 -139 0 +12 -65 100 0 +-12 24 28 0 +-12 28 -72 0 +-12 -28 155 0 +-28 81 100 0 +-81 100 -155 0 +6 -9 24 0 +-6 -9 -100 0 +35 48 115 0 +-48 171 188 0 +35 171 -188 0 +-48 143 -171 0 +-35 115 143 0 +72 -143 156 0 +16 -143 -156 0 +115 -143 -156 0 +-24 79 148 0 +12 -115 -148 0 +4 38 137 0 +11 -115 -148 0 +-4 -11 38 0 +-38 79 137 0 +-115 -137 -148 0 +-24 -79 170 0 +72 -79 -170 0 +-9 -72 79 0 +-24 -72 -79 0 +-75 107 -113 0 +-46 122 -150 0 +-23 83 183 0 +-23 -83 183 0 +71 146 151 0 +52 146 151 0 +-23 -146 151 0 +22 87 -183 0 +52 97 141 0 +52 -151 -191 0 +-97 141 -151 0 +87 -141 159 0 +-141 -159 -183 0 +-57 160 -162 0 +66 -161 199 0 +66 -87 -161 0 +21 -161 199 0 +-78 84 -181 0 +-71 -84 131 0 +-84 -131 189 0 +-84 161 -189 0 +14 132 149 0 +14 67 -132 0 +-14 67 149 0 +-5 47 135 0 +-5 -18 154 0 +-18 -47 -154 0 +42 -57 69 0 +122 186 193 0 +122 -186 193 0 +-122 184 193 0 +-122 138 -184 0 +135 -138 -184 0 +135 -178 -184 0 +15 -100 -155 0 +-15 65 -98 0 +-15 -65 195 0 +-60 -103 127 0 +-60 -103 -127 0 +29 -65 -162 0 +51 -107 -149 0 +-51 -107 -149 0 +-80 -124 -149 0 +38 94 -160 0 +-38 -110 -160 0 +32 -53 196 0 +-32 136 196 0 +27 56 153 0 +-16 50 80 0 +-16 -80 143 0 +113 119 -200 0 +53 -113 -200 0 +31 94 127 0 +66 -98 -142 0 +-66 93 -98 0 +-31 -66 -93 0 +-78 176 178 0 +-114 116 182 0 +163 -182 -197 0 +-114 116 -163 0 +-21 97 126 0 +-21 -110 -126 0 +-21 -97 -165 0 +17 -106 139 0 +17 -139 195 0 +21 31 195 0 +16 -17 -31 0 +-16 -17 -31 0 +18 -88 150 0 +-75 133 177 0 +-75 -133 177 0 +-51 -73 180 0 +-36 76 156 0 +111 137 -157 0 +129 -171 199 0 +31 -37 197 0 +-37 -52 -197 0 +-8 -15 129 0 +39 -85 112 0 +-80 -110 138 0 +17 48 159 0 +-41 -157 -159 0 +-17 48 -157 0 +90 -105 -170 0 +-101 160 -176 0 +13 28 -193 0 +13 43 -137 0 +-8 50 106 0 +50 -106 -151 0 +-6 97 -170 0 +-52 109 155 0 +-38 -52 109 0 +-87 -139 -173 0 +-13 -36 -77 0 +-85 164 190 0 +33 -85 -190 0 +-3 80 -197 0 +10 111 -164 0 +62 -142 161 0 +32 74 -125 0 +126 -158 191 0 +-45 -97 134 0 +78 116 170 0 +-8 167 -190 0 +-40 59 145 0 +-59 -112 166 0 +-40 -112 -166 0 +47 88 173 0 +47 173 -185 0 +-3 -42 -150 0 +-117 -150 187 0 +-10 -113 141 0 +-64 -94 -138 0 +-49 71 192 0 +20 -71 176 0 +-20 -71 192 0 +-49 -94 176 0 +-30 76 -180 0 +-18 -30 -76 0 +-43 -69 158 0 +-43 -69 -158 0 +-58 82 182 0 +-58 182 198 0 +-58 -82 -198 0 +59 -94 -126 0 +-59 -126 -164 0 +166 -182 186 0 +8 -26 -39 0 +-26 -39 -122 0 +41 120 192 0 +-19 -34 -49 0 +-56 63 -164 0 +42 128 133 0 +104 107 -193 0 +-103 104 -107 0 +-50 147 164 0 +-50 164 181 0 +-41 -50 -181 0 +18 44 -152 0 +4 83 96 0 +-4 83 -156 0 +-129 -145 -200 0 +7 58 -176 0 +7 -61 185 0 +-44 -109 112 0 +110 120 166 0 +-124 169 185 0 +119 -169 185 0 +-119 -124 157 0 +-32 124 -142 0 +88 120 -138 0 +-33 -66 123 0 +-33 70 -123 0 +-34 -163 174 0 +18 110 -123 0 +-105 138 -160 0 +8 -100 -180 0 +107 -188 -194 0 +13 -28 -176 0 +-11 41 105 0 +127 -169 172 0 +81 179 -194 0 +-2 -152 167 0 +-19 42 188 0 +95 113 128 0 +57 88 174 0 +11 36 121 0 +84 -136 -180 0 +-5 77 -102 0 +-48 -114 117 0 +-47 95 129 0 +-47 -95 177 0 +64 157 -158 0 +41 -64 157 0 +86 -191 200 0 +-13 -96 -128 0 +2 -10 -145 0 +-46 75 153 0 +54 75 -153 0 +-46 54 133 0 +14 -53 69 0 +4 -42 152 0 +-82 152 -177 0 +-42 -82 -152 0 +59 61 -81 0 +-11 29 49 0 +103 128 -166 0 +10 113 197 0 +15 -68 71 0 +-83 91 -199 0 +-96 -104 191 0 +10 -104 -191 0 +-96 -104 -147 0 +55 109 144 0 +20 -167 172 0 +-1 -54 102 0 +67 163 -182 0 +136 -154 -198 0 +96 104 174 0 +43 96 -174 0 +-43 -57 -174 0 +-102 169 196 0 +57 93 -120 0 +-3 6 -54 0 +6 -44 -199 0 +-109 -140 -177 0 +55 -101 -171 0 +29 91 -179 0 +-89 99 -173 0 +5 167 200 0 +5 -167 200 0 +26 -111 136 0 +26 -111 150 0 +55 -111 -136 0 +36 -76 -136 0 +-29 82 188 0 +105 148 179 0 +-2 -53 159 0 +-2 39 -159 0 +15 131 156 0 +-29 -120 -163 0 +45 70 101 0 +70 -101 126 0 +-10 82 95 0 +-14 69 170 0 +-34 45 168 0 +3 146 191 0 +2 -61 -95 0 +5 7 149 0 +-19 34 98 0 +75 -121 134 0 +45 60 -185 0 +-60 -135 -166 0 +49 -67 180 0 +-36 101 171 0 +-20 -56 -185 0 +20 49 -190 0 +36 -123 154 0 +-51 54 118 0 +25 140 -153 0 +-56 -132 163 0 +-29 -93 119 0 +-78 -169 172 0 +51 53 78 0 +93 -109 -116 0 +-45 68 86 0 +-95 -119 173 0 +37 91 -199 0 +-63 85 124 0 +62 -127 -188 0 +85 -129 -141 0 +89 -89 -146 0 +11 161 -179 0 +-30 34 -117 0 +56 92 -120 0 +-25 -195 198 0 +-121 -134 152 0 +30 -102 -134 0 +-118 -140 145 0 +-64 89 114 0 +-68 117 198 0 +-27 57 -195 0 +61 -144 -177 0 +27 -125 140 0 +46 -175 -194 0 +-67 106 -192 0 +111 -132 154 0 +40 -54 -153 0 +3 -77 -172 0 +187 190 -193 0 +160 -172 -187 0 +33 99 121 0 +27 43 63 0 +-27 -63 -93 0 +-67 -70 142 0 +68 -134 184 0 +-119 -187 190 0 +1 53 194 0 +-121 142 175 0 +32 110 123 0 +2 -7 -86 0 +19 64 -69 0 +92 124 158 0 +3 -62 -133 0 +-1 -27 -70 0 +63 -117 -128 0 +60 86 132 0 +-4 -91 -173 0 +84 -88 -144 0 +-32 -168 -195 0 +37 103 -128 0 +94 -99 -137 0 +23 -99 -175 0 +-175 181 197 0 +33 46 134 0 +-87 106 144 0 +56 -76 -106 0 +16 -135 179 0 +19 30 -40 0 +58 121 125 0 +-86 -116 -154 0 +19 30 -167 0 +-83 153 -179 0 +-7 125 194 0 +1 -45 -135 0 +-7 51 -168 0 +-20 -41 -198 0 +77 158 -187 0 +-86 98 -125 0 +62 123 -127 0 +-55 58 0 +80 -99 -140 0 +-68 92 -116 0 +-25 -63 -192 0 +81 180 181 0 +23 60 -133 0 +40 68 -196 0 +46 142 -192 0 +-25 76 -146 0 +23 -55 77 0 +-118 132 -181 0 +87 169 -172 0 +-91 125 -174 0 +40 -88 118 0 +-62 118 -129 0 +1 -92 -118 0 +102 -131 194 0 +-6 -77 99 0 +-33 114 168 0 +25 -70 -196 0 +103 -147 175 0 +64 117 -196 0 +-1 -92 175 0 +34 114 187 0 +-59 -81 -168 0 +25 72 150 0 +140 148 184 0 +85 -91 168 0 +-62 -92 102 0 +-14 78 98 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-2_0-no-2.cnf b/tests/sat/unsat/aim-200-2_0-no-2.cnf new file mode 100644 index 00000000..c44b2d46 --- /dev/null +++ b/tests/sat/unsat/aim-200-2_0-no-2.cnf @@ -0,0 +1,411 @@ +c FILE: aim-200-2_0-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 400 +1 110 117 0 +-1 57 63 0 +70 73 110 0 +-63 92 181 0 +-70 92 -181 0 +-70 73 -92 0 +57 -73 197 0 +-63 123 144 0 +-63 -123 -197 0 +-73 -144 -197 0 +-1 -57 116 0 +-1 -57 117 0 +-117 146 153 0 +121 -153 178 0 +146 -153 -178 0 +79 121 -146 0 +-79 121 -146 0 +86 112 -121 0 +-86 110 112 0 +-112 -117 -121 0 +83 154 194 0 +10 113 133 0 +10 113 -133 0 +-10 98 113 0 +-10 83 -98 0 +83 -110 -113 0 +97 132 154 0 +101 -132 154 0 +14 -101 115 0 +33 -101 -115 0 +14 -33 166 0 +54 158 -166 0 +-54 97 158 0 +-33 -158 -166 0 +14 -83 -97 0 +56 142 194 0 +-56 -83 194 0 +156 189 -194 0 +43 142 -156 0 +124 142 -189 0 +43 -124 -189 0 +-83 101 -142 0 +43 -101 -142 0 +37 -43 100 0 +-14 -37 100 0 +55 82 -182 0 +-37 -82 100 0 +-37 74 -82 0 +55 172 -182 0 +55 -74 -172 0 +-43 -100 161 0 +-43 56 -100 0 +-14 -56 -100 0 +9 -110 189 0 +-110 140 -189 0 +9 -44 140 0 +-9 140 -154 0 +126 -140 -154 0 +-126 -140 -154 0 +60 62 164 0 +58 -62 164 0 +58 60 -164 0 +-60 -142 173 0 +-46 -171 -178 0 +35 -108 188 0 +-3 64 164 0 +64 -108 -164 0 +-64 -108 188 0 +20 -109 193 0 +20 -76 -109 0 +-20 -109 193 0 +16 -67 -125 0 +-67 -125 -193 0 +50 95 123 0 +50 95 -123 0 +-84 -91 -168 0 +23 -84 184 0 +23 71 -84 0 +76 166 -180 0 +-85 -166 -180 0 +-76 -85 146 0 +-81 105 168 0 +10 -29 134 0 +65 133 134 0 +-29 65 -184 0 +25 -65 134 0 +-25 -29 -65 0 +40 42 -116 0 +-58 68 152 0 +-9 139 170 0 +-128 139 170 0 +-9 -139 170 0 +-4 76 130 0 +-6 -18 157 0 +18 71 122 0 +18 71 -122 0 +6 -79 120 0 +6 -120 186 0 +-120 144 -186 0 +-14 -120 144 0 +-6 -18 -79 0 +23 98 195 0 +-161 177 199 0 +-161 -177 199 0 +-15 52 145 0 +143 -161 178 0 +44 -143 178 0 +13 -15 -103 0 +53 -95 115 0 +53 66 -136 0 +-53 -95 -136 0 +24 -56 -127 0 +-24 -76 -127 0 +87 -146 182 0 +27 161 165 0 +-27 30 165 0 +-18 -49 179 0 +41 66 -107 0 +-41 66 -107 0 +-51 68 -170 0 +-68 -69 -170 0 +76 103 -133 0 +-12 -46 156 0 +-46 156 -195 0 +-49 -65 -131 0 +8 -67 98 0 +81 -107 169 0 +46 -73 129 0 +-48 129 -147 0 +46 -48 -129 0 +-58 -94 102 0 +44 109 -171 0 +-58 -128 174 0 +27 95 175 0 +49 58 102 0 +-8 -144 151 0 +41 -80 149 0 +-80 -149 184 0 +41 -149 -184 0 +-92 -97 127 0 +26 127 -128 0 +26 -92 -127 0 +80 160 162 0 +-69 89 148 0 +13 89 -148 0 +-13 -148 176 0 +-97 -155 179 0 +-4 -155 -179 0 +72 -91 149 0 +-16 33 -147 0 +35 46 176 0 +-35 117 176 0 +-22 -114 135 0 +29 -78 195 0 +18 29 -78 0 +29 31 -195 0 +4 -31 159 0 +-4 -31 -78 0 +-38 -134 -156 0 +-48 -87 104 0 +-66 111 153 0 +-40 -114 195 0 +48 -140 177 0 +28 150 -180 0 +-119 182 -186 0 +-26 -39 -132 0 +-149 173 -186 0 +3 -60 -111 0 +103 104 -168 0 +38 103 -165 0 +122 128 150 0 +6 120 -150 0 +-6 122 128 0 +-77 128 -150 0 +-12 27 -93 0 +39 132 171 0 +39 171 -195 0 +-82 108 143 0 +-5 -143 196 0 +108 -143 -196 0 +74 -81 147 0 +90 159 161 0 +-24 90 159 0 +-24 88 -90 0 +-17 167 -170 0 +-17 115 -167 0 +-23 -136 -155 0 +116 120 137 0 +35 -116 137 0 +-35 -115 137 0 +17 -50 141 0 +5 79 -141 0 +-5 79 -141 0 +-38 104 165 0 +26 -124 -133 0 +-12 -50 173 0 +69 75 -173 0 +69 -75 91 0 +-75 87 -91 0 +-50 -173 193 0 +-69 -173 -193 0 +30 -49 152 0 +30 163 -192 0 +-30 -94 -192 0 +19 174 191 0 +19 -174 191 0 +19 31 -174 0 +-19 31 -160 0 +-111 -118 -150 0 +-7 34 74 0 +-88 -132 -196 0 +119 169 -200 0 +119 -169 -200 0 +-30 123 151 0 +73 -123 151 0 +-52 99 163 0 +67 -183 191 0 +67 168 -191 0 +12 22 101 0 +-34 157 171 0 +-34 68 157 0 +-151 -168 -185 0 +-89 -151 -185 0 +89 -115 177 0 +99 -102 -159 0 +11 126 -134 0 +105 -179 -191 0 +37 -45 -77 0 +-45 -77 -114 0 +54 -126 147 0 +60 -126 147 0 +24 -86 149 0 +-19 -124 -191 0 +-117 145 -157 0 +25 -85 -153 0 +34 -51 197 0 +-34 -51 197 0 +24 -130 187 0 +77 130 -177 0 +48 105 180 0 +15 88 -177 0 +-27 -36 -80 0 +-20 -99 -119 0 +-162 -175 200 0 +7 126 -178 0 +52 -116 162 0 +4 77 162 0 +131 -137 200 0 +-131 -137 200 0 +-27 36 -181 0 +-62 72 109 0 +28 163 175 0 +-25 28 75 0 +37 -54 187 0 +-45 -138 -196 0 +82 102 -119 0 +-105 -157 -164 0 +-35 91 -122 0 +96 148 175 0 +77 -145 187 0 +20 111 -183 0 +-11 39 50 0 +-36 -171 199 0 +-32 38 45 0 +7 -32 45 0 +-129 188 198 0 +-15 52 -156 0 +-52 56 86 0 +-57 -95 -118 0 +-23 -90 -99 0 +-3 49 196 0 +17 -62 184 0 +-21 49 136 0 +-20 -102 181 0 +32 -160 -167 0 +-55 -106 -138 0 +22 -32 -174 0 +-162 -175 -197 0 +-21 42 143 0 +42 -88 -104 0 +9 12 47 0 +-68 160 182 0 +-68 160 -182 0 +-19 -88 127 0 +80 135 -159 0 +-16 -25 114 0 +13 -104 -113 0 +-8 -41 87 0 +-30 -112 180 0 +-64 -72 135 0 +-59 -129 196 0 +-2 -104 118 0 +86 -90 198 0 +12 40 -98 0 +40 -98 -160 0 +4 -86 -134 0 +8 75 -175 0 +80 -93 138 0 +-52 94 169 0 +53 -105 129 0 +-31 99 174 0 +7 -64 -187 0 +-23 -38 94 0 +-55 152 -187 0 +25 -130 185 0 +-70 -113 -137 0 +22 -145 -200 0 +78 114 136 0 +-39 94 -125 0 +2 84 112 0 +2 84 -112 0 +-40 -102 145 0 +-36 -40 -94 0 +-44 -87 -179 0 +-71 81 90 0 +70 118 -157 0 +-66 81 -147 0 +16 138 -148 0 +-44 -135 153 0 +-42 138 155 0 +-144 148 186 0 +64 136 -199 0 +-22 33 111 0 +-39 -66 130 0 +2 108 119 0 +-55 62 -75 0 +-72 93 114 0 +34 -41 -81 0 +-8 -111 190 0 +47 65 -145 0 +70 -74 141 0 +-13 15 -26 0 +54 -99 186 0 +-13 -106 155 0 +92 125 183 0 +57 63 -187 0 +-11 32 -169 0 +11 -159 168 0 +-11 36 51 0 +3 82 -118 0 +8 125 183 0 +-61 -89 141 0 +-151 -169 190 0 +-28 -163 -188 0 +47 106 116 0 +-21 -22 -188 0 +1 133 -163 0 +5 172 -198 0 +5 -42 185 0 +1 158 181 0 +-71 93 155 0 +48 67 131 0 +-28 51 -152 0 +15 -53 -96 0 +21 78 131 0 +-89 107 -122 0 +3 -121 180 0 +107 166 -185 0 +85 -152 0 +-7 -96 118 0 +-61 -105 -192 0 +72 -139 -176 0 +-16 -103 106 0 +45 124 167 0 +-87 96 -162 0 +-61 96 -198 0 +167 172 192 0 +-10 -184 -194 0 +-163 -165 192 0 +38 -59 -135 0 +59 61 -172 0 +36 -42 -167 0 +32 -96 -199 0 +-47 84 -193 0 +-26 93 -181 0 +-3 -176 190 0 +51 62 -190 0 +21 59 91 0 +69 85 -165 0 +16 21 -135 0 +-74 -139 150 0 +-5 85 97 0 +11 -54 -172 0 +63 -103 -141 0 +109 -176 179 0 +-2 -47 -188 0 +-28 78 185 0 +-7 61 -130 0 +-138 189 -199 0 +44 -158 -190 0 +106 -106 -158 0 +-33 107 -194 0 +-2 -60 -190 0 +-53 125 -198 0 +17 183 192 0 +-47 -59 61 0 +-72 132 -183 0 +59 -71 124 0 +-17 -93 -131 0 +88 139 198 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-2_0-no-3.cnf b/tests/sat/unsat/aim-200-2_0-no-3.cnf new file mode 100644 index 00000000..277c284c --- /dev/null +++ b/tests/sat/unsat/aim-200-2_0-no-3.cnf @@ -0,0 +1,411 @@ +c FILE: aim-200-2_0-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 400 +56 71 125 0 +-71 113 125 0 +56 -71 -113 0 +-56 125 128 0 +47 62 75 0 +-47 62 78 0 +75 -78 123 0 +-78 88 -123 0 +-47 -88 196 0 +-88 128 -196 0 +-62 75 -125 0 +7 -75 128 0 +-7 23 -75 0 +-23 -125 176 0 +-7 -75 -125 0 +48 126 153 0 +105 -153 190 0 +105 -153 -190 0 +29 -48 194 0 +-29 105 194 0 +-48 126 -194 0 +-105 126 177 0 +28 -105 -177 0 +27 -128 -177 0 +-27 -28 -105 0 +99 -126 177 0 +99 -177 200 0 +34 98 150 0 +79 98 -200 0 +-79 -150 -200 0 +34 -98 120 0 +34 -120 -126 0 +3 32 176 0 +3 99 -176 0 +-3 -34 100 0 +-3 32 -100 0 +-32 -34 -200 0 +52 -99 -126 0 +-52 -99 -128 0 +7 55 64 0 +23 55 -64 0 +6 -55 121 0 +-55 119 -121 0 +-55 -119 -121 0 +59 -86 111 0 +31 65 165 0 +6 -65 165 0 +31 151 -165 0 +-2 -151 -165 0 +59 -100 179 0 +-59 -100 179 0 +-2 54 152 0 +-54 150 152 0 +89 150 -152 0 +-130 -152 -153 0 +-2 -89 -130 0 +63 79 104 0 +-79 104 120 0 +-23 104 -120 0 +15 73 147 0 +-15 73 -170 0 +-82 147 -170 0 +7 -82 -147 0 +-7 -147 169 0 +1 13 108 0 +13 -108 181 0 +-6 -13 169 0 +-1 -6 181 0 +137 -169 199 0 +137 181 -199 0 +-82 -137 -169 0 +67 145 175 0 +-67 -77 145 0 +108 162 -191 0 +-20 -108 -191 0 +-20 -162 -191 0 +10 -97 139 0 +10 84 -139 0 +10 84 -147 0 +68 84 -97 0 +-10 -68 -97 0 +20 153 -158 0 +-20 153 -165 0 +-37 -116 -154 0 +-4 72 187 0 +-4 70 187 0 +-4 -70 187 0 +-70 -84 121 0 +136 182 184 0 +-18 -119 132 0 +-18 132 -180 0 +-62 127 142 0 +-22 127 -156 0 +88 -127 -156 0 +-62 88 -142 0 +62 -168 175 0 +17 89 -158 0 +50 89 198 0 +-17 50 -198 0 +-17 -28 50 0 +113 160 174 0 +-80 160 -174 0 +-60 -80 -174 0 +3 113 160 0 +-3 -80 -186 0 +-34 -132 -188 0 +28 -71 95 0 +2 -69 -92 0 +17 33 -143 0 +-33 -65 -143 0 +-64 130 142 0 +-114 -138 142 0 +-64 -114 -130 0 +-32 40 -59 0 +-40 -50 -59 0 +-50 -122 -189 0 +-134 154 186 0 +66 170 186 0 +-154 -170 186 0 +22 66 193 0 +22 70 -193 0 +-70 -134 -193 0 +6 156 200 0 +-6 66 200 0 +-22 65 -156 0 +-22 -134 -186 0 +12 171 -186 0 +-83 -102 197 0 +24 -83 -197 0 +-83 -98 -102 0 +29 -94 -168 0 +30 -104 176 0 +-104 110 -176 0 +30 -110 -176 0 +39 72 162 0 +39 -61 -72 0 +41 63 -87 0 +56 72 86 0 +45 144 156 0 +45 86 144 0 +30 -45 144 0 +-72 86 -144 0 +-98 -115 -178 0 +-15 111 -181 0 +-54 154 196 0 +23 -136 -137 0 +-73 -88 121 0 +-47 -73 -121 0 +-84 -146 151 0 +24 -76 -136 0 +-65 93 -141 0 +-11 65 112 0 +4 27 -192 0 +-27 158 -192 0 +-112 133 188 0 +9 -112 193 0 +-9 60 -188 0 +-60 -188 193 0 +-112 133 -193 0 +37 -72 115 0 +37 -115 -136 0 +49 134 175 0 +49 -107 -175 0 +16 -49 -107 0 +-16 -49 134 0 +24 -45 177 0 +-86 112 140 0 +-86 112 -140 0 +95 -116 -171 0 +-95 130 -171 0 +9 -28 166 0 +21 -39 116 0 +36 -106 155 0 +-36 -106 155 0 +80 133 183 0 +-61 80 -183 0 +-78 -120 194 0 +-33 188 189 0 +-91 111 -150 0 +85 -101 127 0 +60 -85 -101 0 +60 -101 -150 0 +17 -26 156 0 +-96 122 -171 0 +-96 -122 165 0 +64 -122 -167 0 +32 61 149 0 +-73 100 164 0 +4 40 139 0 +-40 106 139 0 +58 -157 182 0 +-23 82 135 0 +107 -140 -184 0 +117 -129 146 0 +117 -131 -146 0 +27 47 189 0 +-24 63 173 0 +-24 -63 173 0 +47 81 129 0 +-27 81 -129 0 +-81 173 189 0 +48 -53 185 0 +-48 -53 162 0 +1 -63 107 0 +90 97 -148 0 +-45 -187 -197 0 +-61 98 -189 0 +-107 -151 -187 0 +78 85 -163 0 +78 -118 -163 0 +51 -90 136 0 +120 170 183 0 +-53 102 163 0 +82 100 -167 0 +46 64 195 0 +-117 182 195 0 +-117 -182 195 0 +117 -155 -197 0 +28 -161 198 0 +94 -161 198 0 +-87 94 -161 0 +55 -87 -94 0 +123 -127 -143 0 +-66 143 157 0 +143 157 172 0 +-66 143 -172 0 +1 -74 168 0 +-51 52 -67 0 +-8 -13 -159 0 +-116 170 -184 0 +-51 107 -127 0 +57 -141 -149 0 +54 -89 158 0 +54 -89 -178 0 +52 171 196 0 +87 158 -174 0 +123 164 199 0 +37 -90 -164 0 +-37 -90 -164 0 +-15 31 -104 0 +-9 179 191 0 +9 -179 188 0 +-9 168 -179 0 +-33 -168 -179 0 +19 35 185 0 +-19 35 174 0 +25 -148 154 0 +-106 116 141 0 +114 132 -196 0 +21 51 183 0 +21 51 -183 0 +-77 -128 -159 0 +49 136 190 0 +8 138 192 0 +-8 59 138 0 +138 -154 192 0 +18 93 -178 0 +57 168 178 0 +119 178 197 0 +2 67 166 0 +155 163 169 0 +-84 163 -169 0 +-18 -69 -167 0 +4 -25 145 0 +48 106 174 0 +13 -113 149 0 +-35 -117 -196 0 +-91 103 137 0 +103 -137 -184 0 +93 96 -103 0 +-91 -96 -103 0 +-69 92 134 0 +70 -132 -173 0 +-11 18 -58 0 +5 80 -110 0 +5 18 -110 0 +-52 -57 197 0 +-49 140 185 0 +-14 46 -145 0 +-25 -63 129 0 +25 -159 -164 0 +-57 -60 151 0 +115 118 -187 0 +-10 -123 -132 0 +-111 -145 178 0 +61 -66 -123 0 +14 39 159 0 +-37 124 -141 0 +11 -50 -148 0 +-54 -198 -199 0 +43 61 85 0 +119 -181 -195 0 +36 -152 -199 0 +-81 87 102 0 +-51 -81 -102 0 +16 -36 -43 0 +-43 67 148 0 +76 102 -118 0 +77 -157 167 0 +-77 -157 167 0 +-108 -109 -160 0 +-79 -135 199 0 +38 131 148 0 +-58 95 115 0 +5 -99 149 0 +36 92 166 0 +-5 -19 -135 0 +-30 35 164 0 +-26 29 180 0 +129 131 -133 0 +58 -95 -129 0 +79 -135 161 0 +22 159 -172 0 +-11 76 -162 0 +25 45 -160 0 +-43 -194 -195 0 +-19 -39 -40 0 +116 -140 172 0 +90 92 -146 0 +8 81 94 0 +103 -109 -194 0 +12 53 191 0 +-35 -109 -145 0 +-32 97 -185 0 +-124 -160 -180 0 +11 131 -139 0 +108 -144 -180 0 +57 -67 146 0 +82 141 -182 0 +-30 53 -175 0 +-52 71 -93 0 +-36 46 -151 0 +-1 14 114 0 +19 -41 -85 0 +-10 90 -182 0 +11 42 -144 0 +-21 58 -163 0 +38 109 -124 0 +76 109 161 0 +42 -46 -68 0 +-74 -103 122 0 +-21 -35 114 0 +68 91 -138 0 +-68 109 -111 0 +-24 41 135 0 +40 -85 152 0 +15 -138 167 0 +-31 -142 -185 0 +2 -58 190 0 +-16 -46 -190 0 +-38 96 146 0 +-93 101 -189 0 +-133 161 180 0 +16 -92 122 0 +20 26 0 +-17 74 96 0 +-76 -158 -185 0 +-38 87 159 0 +-21 -42 0 +43 83 141 0 +-12 73 -76 0 +-44 101 -172 0 +-38 -175 184 0 +19 -41 -94 0 +42 44 -155 0 +-14 26 -166 0 +-16 -111 -149 0 +74 83 -113 0 +69 -115 -173 0 +71 91 -114 0 +43 -44 77 0 +-12 83 -166 0 +101 106 -173 0 +-13 -42 -149 0 +-56 135 -155 0 +53 191 -192 0 +-5 33 110 0 +8 69 130 0 +-31 91 157 0 +-74 97 -142 0 +69 -162 -190 0 +20 124 -124 0 +44 -93 110 0 +-26 74 -181 0 +-1 41 -92 0 +-8 44 -198 0 +147 148 192 0 +-139 171 172 0 +-41 -44 180 0 +-39 -131 -166 0 +-12 118 -133 0 +15 -183 -195 0 +-56 -119 -131 0 +-5 118 140 0 +-57 -95 -118 0 +-29 -30 -31 0 +38 -46 184 0 +14 68 77 0 +12 33 124 0 +-14 -25 -29 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-200-2_0-no-4.cnf b/tests/sat/unsat/aim-200-2_0-no-4.cnf new file mode 100644 index 00000000..97902c37 --- /dev/null +++ b/tests/sat/unsat/aim-200-2_0-no-4.cnf @@ -0,0 +1,411 @@ +c FILE: aim-200-2_0-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 200 400 +59 72 155 0 +-72 96 185 0 +59 -96 155 0 +57 58 -59 0 +-57 -59 185 0 +28 -58 185 0 +28 76 140 0 +-76 106 140 0 +-76 -106 -185 0 +24 81 175 0 +44 81 -175 0 +-19 44 81 0 +24 28 -81 0 +-24 51 158 0 +-51 137 158 0 +-24 137 -158 0 +44 63 -137 0 +-24 -63 -137 0 +-44 58 -140 0 +-44 -58 -185 0 +-44 -169 -185 0 +-28 140 155 0 +73 -140 173 0 +-28 -73 173 0 +-28 137 167 0 +-137 167 -173 0 +-140 -167 -173 0 +9 49 -155 0 +9 -49 90 0 +-49 -90 192 0 +-9 107 192 0 +106 -107 144 0 +34 132 -144 0 +-107 -132 -144 0 +34 -35 80 0 +-35 -80 106 0 +-9 -34 65 0 +-34 -61 65 0 +-34 -65 -107 0 +-106 169 192 0 +-9 -106 -169 0 +3 96 -192 0 +-3 96 -192 0 +-96 149 -192 0 +45 -149 -155 0 +-45 -149 194 0 +-96 -155 194 0 +-45 -149 -194 0 +-133 150 -182 0 +79 142 187 0 +40 -142 174 0 +-126 174 -187 0 +34 79 -174 0 +-42 79 -174 0 +68 -79 145 0 +88 182 193 0 +-79 -88 193 0 +40 -68 145 0 +40 -68 -193 0 +10 98 160 0 +10 -98 -145 0 +-10 -42 -145 0 +92 -126 -145 0 +-92 128 -160 0 +-92 -126 -128 0 +-13 84 -176 0 +-13 20 -84 0 +-20 61 171 0 +61 -84 -171 0 +-20 61 87 0 +-20 30 87 0 +-30 -61 87 0 +59 -109 145 0 +93 163 -177 0 +-93 113 -177 0 +141 168 181 0 +168 175 181 0 +-168 175 181 0 +-57 71 -175 0 +-40 -71 -175 0 +39 116 -123 0 +1 104 -152 0 +1 -104 151 0 +41 -135 154 0 +41 176 196 0 +41 -135 -176 0 +102 156 157 0 +22 102 -157 0 +-102 156 187 0 +12 22 -102 0 +-12 -102 156 0 +21 -159 200 0 +-98 -159 200 0 +21 146 -200 0 +21 -146 -200 0 +-21 43 -159 0 +19 -43 127 0 +-21 -43 -127 0 +142 163 193 0 +86 95 190 0 +36 95 154 0 +36 86 -154 0 +-61 -121 188 0 +-33 -55 94 0 +3 -173 186 0 +-3 -178 186 0 +25 29 129 0 +29 62 -129 0 +-39 -168 183 0 +67 -144 182 0 +49 111 188 0 +19 95 99 0 +50 134 197 0 +127 134 -178 0 +-85 -133 -147 0 +-30 62 -170 0 +35 67 187 0 +51 67 -184 0 +35 -51 -187 0 +-51 -101 -184 0 +-54 73 107 0 +-53 -141 150 0 +-56 -69 130 0 +-56 -69 -130 0 +2 -7 100 0 +-7 100 148 0 +-100 148 153 0 +-148 153 -186 0 +20 22 -154 0 +-22 -154 -186 0 +-71 148 -163 0 +-71 -148 -163 0 +23 74 -118 0 +74 -118 -150 0 +1 -64 -190 0 +-1 113 -190 0 +31 -64 -113 0 +-1 -31 -113 0 +-1 -64 -67 0 +23 149 -170 0 +-8 -46 91 0 +27 85 136 0 +-49 -85 114 0 +-85 -114 136 0 +-53 74 -162 0 +9 -25 -164 0 +-68 90 104 0 +143 -151 -182 0 +-143 -151 -182 0 +-5 -164 196 0 +7 -17 42 0 +-17 -42 128 0 +48 -141 166 0 +-47 48 -166 0 +-33 -40 160 0 +-33 -40 -65 0 +48 -74 -132 0 +151 167 174 0 +-119 165 179 0 +-119 -129 179 0 +15 33 -127 0 +-4 77 -82 0 +-2 -77 -82 0 +78 139 196 0 +139 -147 -196 0 +-11 -78 139 0 +99 129 158 0 +99 -134 -158 0 +-99 129 -134 0 +118 180 183 0 +-26 118 -180 0 +72 -118 183 0 +-26 57 -75 0 +-26 -75 -183 0 +-147 -171 -178 0 +-39 112 131 0 +-39 -58 -112 0 +-11 -67 119 0 +84 177 198 0 +-127 -134 184 0 +108 -133 177 0 +-101 108 -177 0 +37 53 86 0 +120 -183 -197 0 +56 -94 138 0 +56 -94 -138 0 +64 89 -181 0 +36 64 -89 0 +-15 49 -195 0 +-36 -97 182 0 +-116 -122 195 0 +20 -110 -172 0 +7 165 188 0 +-7 -121 165 0 +65 105 172 0 +-160 189 -190 0 +6 -74 75 0 +-23 26 -97 0 +82 -108 154 0 +16 157 -181 0 +110 -157 -181 0 +92 -98 -123 0 +6 57 -158 0 +6 -57 -74 0 +151 189 -193 0 +30 189 -193 0 +69 -101 128 0 +52 -124 -148 0 +-121 131 -174 0 +13 85 111 0 +31 90 150 0 +-13 31 -150 0 +-21 -162 191 0 +52 -56 77 0 +-5 83 125 0 +-167 170 -194 0 +77 -167 -194 0 +98 110 198 0 +-2 -17 -19 0 +-31 -41 -136 0 +-4 16 146 0 +-113 135 -146 0 +75 -99 159 0 +80 -168 190 0 +7 -108 115 0 +78 144 -198 0 +78 -170 -198 0 +-78 -84 -198 0 +2 -53 199 0 +58 -65 149 0 +15 76 105 0 +104 120 -164 0 +43 51 -115 0 +-111 142 -195 0 +-48 -97 -189 0 +-59 124 141 0 +-6 25 -55 0 +27 -197 200 0 +27 138 179 0 +-138 -197 -200 0 +63 83 -156 0 +37 161 -165 0 +-8 -161 -165 0 +-8 -37 127 0 +-43 -111 169 0 +15 92 132 0 +54 -90 198 0 +54 -79 -90 0 +-31 110 114 0 +-119 -176 -189 0 +30 -41 -104 0 +26 47 93 0 +47 -55 -93 0 +18 -123 162 0 +-60 122 171 0 +25 98 131 0 +-62 -91 191 0 +-62 -67 -91 0 +-23 -48 143 0 +-130 152 164 0 +62 -152 164 0 +-99 135 -179 0 +-10 -72 178 0 +-54 123 -125 0 +8 -25 -30 0 +26 -109 -115 0 +11 -29 43 0 +-29 47 -122 0 +75 -87 93 0 +-89 -132 -162 0 +-15 45 162 0 +38 45 64 0 +147 -179 -183 0 +14 -47 -131 0 +-66 -120 135 0 +88 103 -125 0 +42 153 -157 0 +73 -77 -93 0 +38 133 147 0 +-52 -151 160 0 +-32 -92 136 0 +94 -108 -199 0 +-36 -91 194 0 +-3 -69 -78 0 +17 -35 161 0 +39 69 105 0 +63 82 -180 0 +68 108 157 0 +23 72 109 0 +32 68 199 0 +13 32 -199 0 +3 -171 -195 0 +-18 130 191 0 +83 184 190 0 +11 89 124 0 +-11 84 89 0 +-37 -83 113 0 +-37 -83 -135 0 +-6 100 119 0 +14 -88 -143 0 +-6 162 195 0 +53 -110 117 0 +-25 88 -104 0 +46 -62 166 0 +-60 -130 -165 0 +-27 133 171 0 +-48 124 180 0 +32 39 -80 0 +186 -188 199 0 +38 -45 94 0 +97 103 -152 0 +66 118 121 0 +-16 -114 147 0 +117 -128 195 0 +71 111 -156 0 +-36 -83 -180 0 +42 -111 169 0 +55 -110 121 0 +-16 159 163 0 +12 18 180 0 +-46 103 -146 0 +12 107 -109 0 +24 -86 -120 0 +-23 -52 -66 0 +71 82 -117 0 +13 -70 166 0 +-128 -161 -179 0 +-15 -73 -156 0 +55 -103 -172 0 +-18 -66 -150 0 +52 91 109 0 +-73 -105 -125 0 +-12 -89 132 0 +116 -153 172 0 +76 119 123 0 +11 18 -88 0 +37 -120 121 0 +-52 -115 -139 0 +2 141 -172 0 +-47 70 -189 0 +-16 55 -80 0 +-27 53 -116 0 +46 -63 -105 0 +70 -87 -138 0 +29 -50 -199 0 +8 -94 184 0 +-50 123 138 0 +125 126 -191 0 +69 -82 -86 0 +-12 70 -114 0 +-14 97 101 0 +-19 -142 152 0 +-10 -143 164 0 +17 -41 -188 0 +5 91 97 0 +-60 112 161 0 +-14 -77 168 0 +-70 -87 143 0 +8 -38 46 0 +-18 -54 176 0 +-95 125 -139 0 +-27 66 -166 0 +101 -116 -117 0 +16 114 120 0 +-32 -105 -166 0 +-50 -112 -131 0 +4 -131 133 0 +-112 144 177 0 +4 -184 0 +-22 -38 0 +56 60 -136 0 +-5 178 -191 0 +80 102 -187 0 +-63 116 -153 0 +-100 130 -161 0 +5 54 -136 0 +19 122 176 0 +-2 -46 -81 0 +85 -86 -100 0 +50 146 0 +33 -72 -124 0 +-4 14 -169 0 +-95 117 -142 0 +17 159 172 0 +-95 -117 -129 0 +-139 -141 -188 0 +33 -186 197 0 +-103 152 -191 0 +10 35 101 0 +-81 -122 -160 0 +-75 112 -124 0 +126 170 -196 0 +5 -22 173 0 +60 134 170 0 +-29 -70 126 0 +109 115 122 0 +-14 -163 197 0 +-76 -103 178 0 +66 -153 -196 0 +-32 60 115 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-1_6-no-1.cnf b/tests/sat/unsat/aim-50-1_6-no-1.cnf new file mode 100644 index 00000000..0e308929 --- /dev/null +++ b/tests/sat/unsat/aim-50-1_6-no-1.cnf @@ -0,0 +1,91 @@ +c FILE: aim-50-1_6-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 80 +16 23 42 0 +-16 23 42 0 +26 41 -42 0 +-26 41 -42 0 +32 -41 -42 0 +6 15 -41 0 +-6 15 -32 0 +1 -32 46 0 +-1 -32 46 0 +-15 -41 -46 0 +-15 -21 -46 0 +-23 33 38 0 +-23 -33 38 0 +8 22 33 0 +8 22 -33 0 +-22 37 -38 0 +13 36 -37 0 +13 -22 -36 0 +-13 -22 -37 0 +11 -23 47 0 +-8 11 -47 0 +-8 -11 39 0 +-11 27 -39 0 +-8 -11 -39 0 +-7 26 29 0 +-7 -26 29 0 +-13 20 36 0 +-13 17 20 0 +5 -17 20 0 +5 -19 -45 0 +-5 -10 -45 0 +6 25 47 0 +-6 -10 25 0 +-2 -27 37 0 +-27 -36 40 0 +18 39 -40 0 +-2 -19 31 0 +5 18 -30 0 +-31 -43 -50 0 +10 -30 43 0 +10 -41 43 0 +19 21 29 0 +37 42 45 0 +-20 27 40 0 +-21 -36 48 0 +31 -36 -48 0 +3 -9 -18 0 +16 -40 -47 0 +1 -18 21 0 +2 28 32 0 +-1 -24 -50 0 +-12 35 49 0 +-6 -36 45 0 +7 12 -43 0 +7 30 -43 0 +-5 9 -17 0 +3 14 50 0 +-12 17 -49 0 +24 34 49 0 +14 -20 24 0 +-9 35 -49 0 +-4 -47 50 0 +4 44 -44 0 +28 -28 -38 0 +2 4 -48 0 +-20 35 -44 0 +30 -31 -43 0 +-14 -29 35 0 +-20 35 -35 0 +19 -22 -24 0 +-25 -28 48 0 +-14 -34 44 0 +9 20 44 0 +-3 9 -29 0 +17 34 -34 0 +12 48 0 +-12 -25 -43 0 +-25 -31 48 0 +14 -16 49 0 +-3 -4 -35 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-1_6-no-2.cnf b/tests/sat/unsat/aim-50-1_6-no-2.cnf new file mode 100644 index 00000000..17bc8ff3 --- /dev/null +++ b/tests/sat/unsat/aim-50-1_6-no-2.cnf @@ -0,0 +1,91 @@ +c FILE: aim-50-1_6-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 80 +5 17 37 0 +24 28 37 0 +24 -28 40 0 +4 -28 -40 0 +4 -24 29 0 +13 -24 -29 0 +-13 -24 -29 0 +-4 10 -17 0 +-4 -10 -17 0 +26 33 -37 0 +5 -26 34 0 +33 -34 48 0 +33 -37 -48 0 +5 -33 -37 0 +2 -5 10 0 +2 -5 -10 0 +-2 15 47 0 +15 30 -47 0 +-2 -15 30 0 +20 -30 42 0 +-2 20 -30 0 +13 -20 29 0 +13 16 -20 0 +-13 -20 31 0 +-13 16 -31 0 +-16 23 38 0 +-16 19 -38 0 +-19 23 -38 0 +14 -23 34 0 +1 14 -34 0 +-1 9 14 0 +-1 -9 -23 0 +-14 21 -23 0 +-14 -16 -21 0 +25 -35 41 0 +-25 41 50 0 +-35 49 -50 0 +-25 -49 -50 0 +-19 -48 -49 0 +3 -39 44 0 +1 3 -44 0 +9 35 44 0 +-9 -31 44 0 +22 25 -44 0 +-12 -43 46 0 +-12 -28 -46 0 +6 35 48 0 +11 18 -48 0 +22 38 -42 0 +22 -35 -42 0 +-3 11 41 0 +27 28 -43 0 +-15 -21 31 0 +-33 39 50 0 +-8 -22 -47 0 +-22 -40 -47 0 +39 44 -46 0 +-25 -26 47 0 +38 43 45 0 +-6 -14 -45 0 +-7 12 36 0 +8 -11 45 0 +27 -38 -50 0 +7 -11 -36 0 +-7 -41 42 0 +7 21 23 0 +-18 32 46 0 +8 19 -36 0 +-32 -45 -50 0 +7 17 21 0 +6 18 43 0 +-6 24 -27 0 +40 -41 49 0 +-11 12 26 0 +-3 32 -36 0 +-6 36 -44 0 +-3 36 42 0 +-8 -11 -32 0 +-18 -27 -38 0 +-18 -27 -39 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-1_6-no-3.cnf b/tests/sat/unsat/aim-50-1_6-no-3.cnf new file mode 100644 index 00000000..8d6af780 --- /dev/null +++ b/tests/sat/unsat/aim-50-1_6-no-3.cnf @@ -0,0 +1,91 @@ +c FILE: aim-50-1_6-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 80 +15 20 41 0 +-15 20 41 0 +7 8 -41 0 +7 -8 -41 0 +-7 42 50 0 +-7 -42 50 0 +22 35 -50 0 +22 -35 45 0 +18 -22 45 0 +-18 -22 45 0 +33 -45 -50 0 +-7 -33 -50 0 +19 -20 21 0 +-20 21 -41 0 +19 -20 -21 0 +1 14 36 0 +-1 14 36 0 +13 -14 36 0 +3 13 -36 0 +-3 5 -36 0 +-3 -5 13 0 +4 44 49 0 +-4 17 49 0 +-4 -17 44 0 +-13 31 -44 0 +-13 -31 -44 0 +23 33 -49 0 +23 -33 -49 0 +-19 37 42 0 +-19 37 -42 0 +-23 29 -37 0 +-23 -29 -37 0 +-24 -26 32 0 +2 -12 -31 0 +17 28 40 0 +-15 -17 40 0 +2 28 47 0 +26 -28 -39 0 +21 -26 -28 0 +16 24 29 0 +12 -34 -39 0 +10 31 40 0 +-6 -32 35 0 +16 -24 34 0 +-24 -31 38 0 +-16 -24 -38 0 +-2 -10 -47 0 +4 -16 27 0 +-1 24 -30 0 +-18 26 -46 0 +27 30 -45 0 +4 -14 -44 0 +-29 43 47 0 +-8 -10 -46 0 +-11 39 -43 0 +-11 -40 -43 0 +6 -21 26 0 +8 -25 46 0 +-25 -38 46 0 +10 -46 -47 0 +25 -32 -40 0 +5 6 -40 0 +11 15 16 0 +12 39 43 0 +5 11 32 0 +-5 17 32 0 +-12 -40 -48 0 +-2 18 -30 0 +3 10 -34 0 +-2 -9 30 0 +-3 -5 -28 0 +-9 26 48 0 +22 -27 -48 0 +1 9 38 0 +3 -6 48 0 +1 -6 34 0 +15 -35 48 0 +15 26 -27 0 +-9 -27 0 +1 9 25 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-1_6-no-4.cnf b/tests/sat/unsat/aim-50-1_6-no-4.cnf new file mode 100644 index 00000000..f49386d0 --- /dev/null +++ b/tests/sat/unsat/aim-50-1_6-no-4.cnf @@ -0,0 +1,91 @@ +c FILE: aim-50-1_6-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 80 +1 32 34 0 +4 5 32 0 +-4 5 -34 0 +-5 32 -34 0 +29 -32 43 0 +29 36 -43 0 +29 -32 -36 0 +1 3 -29 0 +-3 -29 -32 0 +-1 24 39 0 +-1 24 -39 0 +7 18 -24 0 +-7 18 28 0 +-7 -21 28 0 +-7 17 -28 0 +18 -24 -28 0 +2 17 40 0 +-17 -18 40 0 +2 39 -40 0 +2 -39 -40 0 +-2 -18 35 0 +-2 -18 -35 0 +9 -32 41 0 +-9 41 45 0 +-1 -9 -45 0 +-5 27 43 0 +14 16 26 0 +14 -16 49 0 +12 -14 26 0 +-12 26 35 0 +26 30 -35 0 +-26 30 49 0 +9 13 25 0 +5 -17 25 0 +15 30 47 0 +-20 27 -49 0 +13 -20 -27 0 +-13 -30 -49 0 +3 8 37 0 +8 23 -43 0 +10 19 22 0 +10 -19 22 0 +-10 -19 36 0 +4 21 38 0 +-4 38 46 0 +21 -38 -47 0 +-21 45 46 0 +-14 -33 -38 0 +-10 11 -26 0 +-14 16 -50 0 +-14 -16 -23 0 +-2 -23 -50 0 +12 -47 50 0 +7 10 48 0 +-6 -13 -41 0 +11 -41 -48 0 +23 -41 -48 0 +-15 42 48 0 +-15 -21 -42 0 +11 34 44 0 +-27 -34 -46 0 +19 28 50 0 +-3 6 -35 0 +-22 -40 -44 0 +-25 -37 -42 0 +-26 -30 -37 0 +6 -31 42 0 +6 -31 -33 0 +-44 -45 47 0 +4 20 47 0 +-6 44 -46 0 +-11 12 20 0 +-8 10 28 0 +-22 31 -36 0 +7 -25 37 0 +-11 31 47 0 +-4 10 -12 0 +-30 -31 44 0 +7 15 33 0 +-8 -11 33 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-2_0-no-1.cnf b/tests/sat/unsat/aim-50-2_0-no-1.cnf new file mode 100644 index 00000000..d01ccdac --- /dev/null +++ b/tests/sat/unsat/aim-50-2_0-no-1.cnf @@ -0,0 +1,111 @@ +c FILE: aim-50-2_0-no-1.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 100 +7 11 19 0 +7 -11 27 0 +7 16 -27 0 +-11 25 48 0 +-16 17 -48 0 +-17 25 -48 0 +-16 -25 -27 0 +19 36 49 0 +-7 -36 49 0 +-7 19 -49 0 +4 12 44 0 +4 -12 44 0 +1 -44 47 0 +-1 4 47 0 +20 34 48 0 +-19 20 34 0 +24 -34 -44 0 +-24 -34 -44 0 +-24 -32 41 0 +-34 -41 -47 0 +-4 -19 20 0 +30 39 41 0 +-30 39 50 0 +-20 -30 -50 0 +-20 -39 41 0 +-19 32 -41 0 +-20 -32 -41 0 +1 18 -35 0 +-14 18 -35 0 +-14 -18 27 0 +-1 25 -46 0 +-4 16 -47 0 +11 16 -25 0 +-4 11 -25 0 +-27 -35 -47 0 +15 31 40 0 +10 39 -49 0 +-8 -10 21 0 +-21 -26 30 0 +6 -11 29 0 +6 31 50 0 +45 49 -50 0 +31 -45 -50 0 +21 30 33 0 +2 37 -49 0 +-2 17 37 0 +-8 14 32 0 +-14 -15 32 0 +-1 37 47 0 +6 -38 45 0 +-21 -38 45 0 +-13 -18 -42 0 +2 -6 22 0 +-2 -6 22 0 +9 -28 -36 0 +8 29 -39 0 +-8 -38 -39 0 +-12 17 38 0 +1 -15 -26 0 +-7 -15 -26 0 +-9 36 42 0 +12 -16 21 0 +-10 -23 -46 0 +-9 -29 34 0 +-9 -21 42 0 +-12 -23 38 0 +-30 38 40 0 +18 23 33 0 +-6 15 33 0 +9 27 -43 0 +22 40 -48 0 +8 -22 26 0 +-5 -33 -36 0 +2 -33 46 0 +5 10 -42 0 +14 -29 -31 0 +12 -23 26 0 +8 35 36 0 +-10 -17 -18 0 +10 -22 -28 0 +15 -17 -43 0 +23 -29 -37 0 +13 -33 35 0 +-2 23 42 0 +9 43 46 0 +5 -24 -45 0 +-5 43 46 0 +-3 -13 -40 0 +3 -28 -42 0 +24 -31 43 0 +14 -22 -32 0 +3 24 26 0 +-13 -43 44 0 +-3 -31 -40 0 +-5 -40 50 0 +35 -37 -45 0 +-3 5 28 0 +13 28 -46 0 +3 28 -37 0 +13 29 48 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-2_0-no-2.cnf b/tests/sat/unsat/aim-50-2_0-no-2.cnf new file mode 100644 index 00000000..c82bd20f --- /dev/null +++ b/tests/sat/unsat/aim-50-2_0-no-2.cnf @@ -0,0 +1,111 @@ +c FILE: aim-50-2_0-no-2.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 100 +4 21 34 0 +21 -34 40 0 +1 -21 40 0 +-21 39 40 0 +20 29 41 0 +-20 39 41 0 +39 -40 41 0 +-40 -41 42 0 +-40 -41 -42 0 +1 25 -39 0 +2 -25 -39 0 +-2 5 -39 0 +-1 4 5 0 +15 26 33 0 +15 26 -33 0 +-5 -15 26 0 +-5 -26 31 0 +-5 -26 -31 0 +6 9 47 0 +9 37 38 0 +9 14 -38 0 +-14 -38 -47 0 +-9 11 37 0 +-9 -11 37 0 +24 -37 48 0 +24 46 -48 0 +-24 -37 46 0 +16 18 -46 0 +-16 18 -46 0 +-18 -37 -46 0 +-4 -6 15 0 +-4 13 -15 0 +-4 -13 -15 0 +-1 -6 38 0 +3 -9 35 0 +7 43 44 0 +7 29 43 0 +-8 -29 44 0 +-29 -32 48 0 +-14 30 46 0 +-1 -14 -30 0 +-11 20 49 0 +20 -44 -49 0 +16 22 -27 0 +13 -19 -35 0 +2 19 -33 0 +2 19 -28 0 +33 -34 -44 0 +-33 -44 50 0 +5 30 -48 0 +10 22 -50 0 +-10 22 -34 0 +1 10 -47 0 +-10 -25 -47 0 +-25 -27 50 0 +11 21 23 0 +-3 11 23 0 +-3 6 -50 0 +-6 23 -50 0 +-31 -43 44 0 +-7 16 -26 0 +-23 28 -38 0 +19 28 50 0 +-18 45 49 0 +-2 -16 -48 0 +7 14 -42 0 +12 25 -36 0 +10 -24 -45 0 +-21 32 -42 0 +12 -18 -27 0 +-13 -23 -24 0 +25 29 38 0 +-8 43 -45 0 +-2 -12 13 0 +-7 14 30 0 +-8 -17 -19 0 +8 -22 49 0 +-12 -17 33 0 +27 -29 32 0 +8 -12 -13 0 +24 -31 47 0 +-3 36 47 0 +3 12 34 0 +-7 -16 36 0 +-22 31 48 0 +17 -22 -49 0 +-17 -19 32 0 +-20 27 36 0 +18 -32 -35 0 +3 -28 -30 0 +17 34 42 0 +-32 -43 -49 0 +17 -28 -43 0 +-23 35 -45 0 +-10 31 -36 0 +27 -41 42 0 +35 -36 45 0 +8 -30 45 0 +4 28 -35 0 +6 -11 -20 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-2_0-no-3.cnf b/tests/sat/unsat/aim-50-2_0-no-3.cnf new file mode 100644 index 00000000..4d0f186e --- /dev/null +++ b/tests/sat/unsat/aim-50-2_0-no-3.cnf @@ -0,0 +1,111 @@ +c FILE: aim-50-2_0-no-3.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 100 +33 37 43 0 +21 -37 43 0 +-21 -37 39 0 +23 39 -43 0 +13 -23 31 0 +-13 -23 31 0 +-23 -31 -43 0 +6 9 25 0 +-6 9 25 0 +9 33 -38 0 +-9 25 -39 0 +24 -25 -39 0 +-24 -25 33 0 +6 27 41 0 +-6 14 41 0 +14 -41 43 0 +14 -41 -43 0 +1 20 27 0 +1 12 -20 0 +1 -12 -14 0 +-1 27 28 0 +-1 -14 -28 0 +-1 -11 -14 0 +-27 -33 39 0 +5 20 28 0 +19 29 -33 0 +-19 -20 29 0 +-20 28 -29 0 +5 -28 37 0 +5 -28 -37 0 +-5 -33 -39 0 +7 17 22 0 +-5 7 17 0 +-7 18 22 0 +22 -24 41 0 +-7 12 18 0 +-12 18 34 0 +-12 34 -42 0 +-7 -34 -41 0 +-16 -29 35 0 +-3 13 -29 0 +-21 -30 37 0 +-15 -21 47 0 +-8 24 40 0 +-3 -8 42 0 +-3 -8 -42 0 +-2 30 36 0 +-2 -30 36 0 +-4 -35 44 0 +42 -45 -50 0 +-42 -45 -50 0 +-11 15 -40 0 +3 46 48 0 +3 -46 48 0 +-11 30 50 0 +-16 30 50 0 +4 -36 -40 0 +8 46 47 0 +24 -40 44 0 +12 16 -46 0 +2 6 -36 0 +-6 -44 46 0 +-22 32 -36 0 +3 32 38 0 +-27 -35 38 0 +11 16 -47 0 +31 -45 -46 0 +19 -24 32 0 +-15 23 -31 0 +4 -34 -49 0 +11 -22 -49 0 +23 -26 50 0 +-9 -31 -32 0 +-2 -27 35 0 +26 34 45 0 +7 36 47 0 +-4 -30 49 0 +-26 -44 -50 0 +2 40 48 0 +26 -44 -47 0 +-18 19 -25 0 +-38 42 49 0 +13 -22 49 0 +-10 -32 -48 0 +2 -19 29 0 +-13 -15 26 0 +-10 -17 20 0 +-17 21 45 0 +-4 -13 -26 0 +-9 21 -48 0 +-10 35 44 0 +-32 -48 -49 0 +4 -16 -19 0 +-5 8 40 0 +15 -18 -35 0 +8 10 -47 0 +10 15 45 0 +10 -18 -34 0 +16 17 38 0 +11 -17 -38 0 \ No newline at end of file diff --git a/tests/sat/unsat/aim-50-2_0-no-4.cnf b/tests/sat/unsat/aim-50-2_0-no-4.cnf new file mode 100644 index 00000000..567c0ec7 --- /dev/null +++ b/tests/sat/unsat/aim-50-2_0-no-4.cnf @@ -0,0 +1,111 @@ +c FILE: aim-50-2_0-no-4.cnf +c +c SOURCE: Kazuo Iwama, Eiji Miyano (miyano@cscu.kyushu-u.ac.jp), +c and Yuichi Asahiro +c +c DESCRIPTION: Artifical instances from generator by source. Generators +c and more information in sat/contributed/iwama. +c +c NOTE: Not Satisfiable +c +p cnf 50 100 +2 26 32 0 +2 -21 32 0 +2 3 -26 0 +-2 22 44 0 +-2 -22 44 0 +-2 23 -44 0 +3 -23 41 0 +3 -41 -44 0 +-3 9 20 0 +-3 -20 32 0 +7 9 -32 0 +-7 16 -32 0 +9 -16 -32 0 +1 16 37 0 +-1 16 26 0 +-16 26 37 0 +-9 -26 37 0 +5 -9 46 0 +11 21 -46 0 +5 21 -46 0 +-5 21 39 0 +-5 -37 -39 0 +-9 -21 -37 0 +10 -19 -48 0 +10 -13 -19 0 +5 -36 47 0 +-5 -36 47 0 +-16 42 -43 0 +-1 13 -39 0 +8 -27 30 0 +13 18 -30 0 +8 13 -18 0 +-13 15 -17 0 +-13 -15 -30 0 +-17 -27 -45 0 +-12 -27 -45 0 +-18 25 40 0 +-18 34 -40 0 +25 -34 48 0 +-19 -25 48 0 +-1 -12 -34 0 +20 -25 -43 0 +8 19 -45 0 +17 29 34 0 +-17 29 41 0 +15 -31 -35 0 +-15 -31 -35 0 +34 39 -43 0 +-11 -14 45 0 +-11 -12 -14 0 +-24 28 -39 0 +-8 -24 -30 0 +7 -25 45 0 +-7 -44 45 0 +-20 36 50 0 +-8 36 50 0 +-8 -20 -50 0 +20 -41 44 0 +28 -33 39 0 +28 -33 47 0 +10 27 38 0 +-10 27 30 0 +4 -10 38 0 +-6 -35 41 0 +12 18 22 0 +17 22 30 0 +12 29 42 0 +-4 23 31 0 +1 -4 -31 0 +-4 -6 -22 0 +-22 40 50 0 +4 -33 43 0 +-6 -21 42 0 +7 -24 -47 0 +-3 31 -46 0 +4 12 -36 0 +-11 -29 36 0 +-14 -23 -48 0 +-23 -37 -48 0 +15 -42 43 0 +-7 24 -50 0 +-10 33 46 0 +40 -42 46 0 +14 24 -49 0 +11 17 -38 0 +19 -28 -47 0 +14 24 27 0 +6 -15 43 0 +11 18 -41 0 +1 6 49 0 +-29 -47 -50 0 +25 -34 -38 0 +6 31 -49 0 +33 35 0 +33 35 48 0 +49 -49 0 +23 -29 -40 0 +19 -26 -42 0 +14 38 -38 0 +-28 -40 0 \ No newline at end of file diff --git a/tests/sat/unsat/bf0432-007.cnf b/tests/sat/unsat/bf0432-007.cnf new file mode 100644 index 00000000..fecb5f45 --- /dev/null +++ b/tests/sat/unsat/bf0432-007.cnf @@ -0,0 +1,3681 @@ +c FILE: bf0432-007.cnf +c +c SOURCE: Allen Van Gelder (avg@cs.ucsd.edu) and Yumi Tsuji +c (tsuji@cse.ucsc.edu) +c +c Nemesis formula in 6CNF in accordance with DIMACS CNF format: +c Filename: MCNC/c432/c432.tdl +c Formula number 7 +c 1317 variables (range: 2 - 1318) +c 3668 clauses +c +c p cnf 1318 3668 +p cnf 1040 3668 +700 0 +-985 0 +1039 0 +700 0 +-701 0 +699 0 +663 -664 0 +-663 664 0 +699 701 0 +-699 -701 0 +-667 -706 0 +-665 -706 0 +-669 -706 0 +699 663 0 +-699 -663 0 +985 -701 0 +-985 701 0 +985 -664 0 +-985 664 0 +701 -664 0 +-701 664 0 +-39 -988 0 +37 -988 0 +39 -989 0 +-37 -989 0 +-989 987 0 +-988 987 0 +201 37 0 +-201 -37 0 +-202 38 0 +203 39 0 +-203 -39 0 +207 201 0 +-207 -201 0 +-208 202 0 +209 203 0 +-209 -203 0 +62 -204 0 +-62 204 0 +62 -207 0 +-62 207 0 +62 -214 0 +-62 214 0 +62 -259 0 +-62 259 0 +62 -288 0 +-62 288 0 +62 -436 0 +-62 436 0 +62 -495 0 +-62 495 0 +62 -544 0 +-62 544 0 +62 -597 0 +-62 597 0 +62 -639 0 +-62 639 0 +62 -708 0 +-62 708 0 +62 -736 0 +-62 736 0 +62 -762 0 +-62 762 0 +62 -778 0 +-62 778 0 +62 -827 0 +-62 827 0 +62 -838 0 +-62 838 0 +62 -854 0 +-62 854 0 +62 -914 0 +-62 914 0 +62 -949 0 +-62 949 0 +63 -205 0 +63 -208 0 +63 -215 0 +63 -260 0 +63 -289 0 +63 -437 0 +63 -496 0 +63 -545 0 +63 -598 0 +63 -640 0 +63 -709 0 +63 -737 0 +63 -763 0 +63 -779 0 +63 -828 0 +63 -839 0 +63 -855 0 +63 -915 0 +63 -950 0 +64 -206 0 +-64 206 0 +64 -209 0 +-64 209 0 +64 -216 0 +-64 216 0 +64 -261 0 +-64 261 0 +64 -290 0 +-64 290 0 +64 -438 0 +-64 438 0 +64 -497 0 +-64 497 0 +64 -546 0 +-64 546 0 +64 -599 0 +-64 599 0 +64 -641 0 +-64 641 0 +64 -710 0 +-64 710 0 +64 -738 0 +-64 738 0 +64 -764 0 +-64 764 0 +64 -780 0 +-64 780 0 +64 -829 0 +-64 829 0 +64 -840 0 +-64 840 0 +64 -856 0 +-64 856 0 +64 -916 0 +-64 916 0 +64 -951 0 +-64 951 0 +699 62 0 +663 62 0 +65 62 0 +685 62 0 +701 64 0 +663 64 0 +65 64 0 +685 64 0 +836 685 0 +-836 -685 0 +686 -836 0 +-686 836 0 +686 -837 0 +-686 837 0 +-884 -686 0 +-885 -686 0 +690 -697 0 +-690 697 0 +690 -698 0 +-690 698 0 +690 -730 0 +-690 730 0 +690 -885 0 +-690 885 0 +26 690 0 +-26 -690 0 +7 -881 0 +-7 881 0 +7 -884 0 +-7 884 0 +-286 -65 0 +-68 -65 0 +61 -67 0 +-61 67 0 +61 -68 0 +-61 68 0 +-547 -61 0 +-533 -61 0 +514 -533 0 +-514 533 0 +514 -534 0 +-514 534 0 +536 514 0 +-536 -514 0 +32 -536 0 +-32 536 0 +32 -537 0 +-32 537 0 +32 -568 0 +-32 568 0 +5 -547 0 +-5 547 0 +5 -548 0 +-5 548 0 +66 -286 0 +-66 286 0 +66 -287 0 +-66 287 0 +-857 -66 0 +-850 -66 0 +841 -848 0 +-841 848 0 +841 -849 0 +-841 849 0 +841 -850 0 +-841 850 0 +841 -878 0 +-841 878 0 +9 841 0 +-9 -841 0 +21 -857 0 +-21 857 0 +21 -858 0 +-21 858 0 +-667 -663 0 +-665 -663 0 +-669 -663 0 +494 -668 0 +-494 668 0 +494 -669 0 +-494 669 0 +-512 -494 0 +-513 -494 0 +470 -490 0 +-470 490 0 +470 -493 0 +-470 493 0 +470 -508 0 +-470 508 0 +470 -513 0 +-470 513 0 +34 470 0 +-34 -470 0 +25 -509 0 +-25 509 0 +25 -512 0 +-25 512 0 +796 665 0 +781 665 0 +797 665 0 +947 797 0 +-947 -797 0 +926 -947 0 +-926 947 0 +926 -948 0 +-926 948 0 +-945 -926 0 +-946 -926 0 +927 -938 0 +-927 938 0 +927 -941 0 +-927 941 0 +927 -946 0 +-927 946 0 +927 -962 0 +-927 962 0 +19 927 0 +-19 -927 0 +17 -942 0 +-17 942 0 +17 -945 0 +-17 945 0 +783 781 0 +-783 -781 0 +777 -782 0 +-777 782 0 +777 -783 0 +-777 783 0 +-924 -777 0 +-925 -777 0 +587 -917 0 +-587 917 0 +587 -918 0 +-587 918 0 +587 -925 0 +-587 925 0 +910 587 0 +-910 -587 0 +35 -909 0 +-35 909 0 +35 -910 0 +-35 910 0 +30 -921 0 +-30 921 0 +30 -924 0 +-30 924 0 +799 796 0 +-799 -796 0 +213 -798 0 +-213 798 0 +213 -799 0 +-213 799 0 +-775 -213 0 +-776 -213 0 +220 -233 0 +-220 233 0 +220 -234 0 +-220 234 0 +220 -424 0 +-220 424 0 +220 -776 0 +-220 776 0 +28 220 0 +-28 -220 0 +4 -772 0 +-4 772 0 +4 -775 0 +-4 775 0 +591 -666 0 +-591 666 0 +591 -667 0 +-591 667 0 +-600 -591 0 +-593 -591 0 +580 -592 0 +-580 592 0 +580 -593 0 +-580 593 0 +627 580 0 +-627 -580 0 +6 -627 0 +-6 627 0 +6 -628 0 +-6 628 0 +6 -638 0 +-6 638 0 +10 -600 0 +-10 600 0 +10 -601 0 +-10 601 0 +706 699 0 +-706 -699 0 +702 -706 0 +-702 706 0 +702 -707 0 +-702 707 0 +-889 -702 0 +-890 -702 0 +711 -718 0 +-711 718 0 +711 -719 0 +-711 719 0 +711 -756 0 +-711 756 0 +711 -890 0 +-711 890 0 +27 711 0 +-27 -711 0 +11 -886 0 +-11 886 0 +11 -889 0 +-11 889 0 +-42 -995 0 +40 -995 0 +42 -996 0 +-40 -996 0 +-996 994 0 +-995 994 0 +657 40 0 +-657 -40 0 +-658 41 0 +659 42 0 +-659 -42 0 +195 -657 0 +-195 657 0 +195 -660 0 +-195 660 0 +195 -676 0 +-195 676 0 +196 -658 0 +196 -661 0 +196 -677 0 +197 -659 0 +-197 659 0 +197 -662 0 +-197 662 0 +197 -678 0 +-197 678 0 +250 195 0 +-250 -195 0 +-251 196 0 +252 197 0 +-252 -197 0 +87 -235 0 +-87 235 0 +87 -238 0 +-87 238 0 +87 -250 0 +-87 250 0 +87 -262 0 +-87 262 0 +87 -271 0 +-87 271 0 +87 -309 0 +-87 309 0 +87 -315 0 +-87 315 0 +87 -324 0 +-87 324 0 +87 -339 0 +-87 339 0 +87 -439 0 +-87 439 0 +87 -521 0 +-87 521 0 +87 -551 0 +-87 551 0 +87 -604 0 +-87 604 0 +87 -620 0 +-87 620 0 +87 -739 0 +-87 739 0 +87 -765 0 +-87 765 0 +87 -793 0 +-87 793 0 +87 -824 0 +-87 824 0 +87 -830 0 +-87 830 0 +87 -861 0 +-87 861 0 +87 -901 0 +-87 901 0 +88 -236 0 +88 -239 0 +88 -251 0 +88 -263 0 +88 -272 0 +88 -310 0 +88 -316 0 +88 -325 0 +88 -340 0 +88 -440 0 +88 -522 0 +88 -552 0 +88 -605 0 +88 -621 0 +88 -740 0 +88 -766 0 +88 -794 0 +88 -825 0 +88 -831 0 +88 -862 0 +88 -902 0 +89 -237 0 +-89 237 0 +89 -240 0 +-89 240 0 +89 -252 0 +-89 252 0 +89 -264 0 +-89 264 0 +89 -273 0 +-89 273 0 +89 -311 0 +-89 311 0 +89 -317 0 +-89 317 0 +89 -326 0 +-89 326 0 +89 -341 0 +-89 341 0 +89 -441 0 +-89 441 0 +89 -523 0 +-89 523 0 +89 -553 0 +-89 553 0 +89 -606 0 +-89 606 0 +89 -622 0 +-89 622 0 +89 -741 0 +-89 741 0 +89 -767 0 +-89 767 0 +89 -795 0 +-89 795 0 +89 -826 0 +-89 826 0 +89 -832 0 +-89 832 0 +89 -863 0 +-89 863 0 +89 -903 0 +-89 903 0 +108 87 0 +651 87 0 +446 87 0 +464 87 0 +-109 88 0 +-652 88 0 +-447 88 0 +-465 88 0 +110 89 0 +653 89 0 +448 89 0 +466 89 0 +480 464 0 +-480 -464 0 +-481 465 0 +482 466 0 +-482 -466 0 +268 -477 0 +-268 477 0 +268 -480 0 +-268 480 0 +269 -478 0 +269 -481 0 +270 -479 0 +-270 479 0 +270 -482 0 +-270 482 0 +-498 -268 0 +-489 -268 0 +-493 -268 0 +-499 269 0 +-499 -493 0 +-499 -489 0 +-500 -270 0 +-489 -270 0 +-493 -270 0 +12 -486 0 +-12 486 0 +12 -489 0 +-12 489 0 +483 -498 0 +-483 498 0 +483 -501 0 +-483 501 0 +484 -499 0 +484 -502 0 +485 -500 0 +-485 500 0 +485 -503 0 +-485 503 0 +-668 -975 0 +495 -975 0 +668 -976 0 +-495 -976 0 +-976 483 0 +-975 483 0 +-496 484 0 +-668 -1001 0 +497 -1001 0 +668 -1002 0 +-497 -1002 0 +-1002 485 0 +-1001 485 0 +-458 -446 0 +-787 -446 0 +-679 -446 0 +-459 447 0 +-788 447 0 +-680 447 0 +-460 -448 0 +-789 -448 0 +-681 -448 0 +452 -679 0 +-452 679 0 +452 -682 0 +-452 682 0 +452 -821 0 +-452 821 0 +453 -680 0 +453 -683 0 +453 -822 0 +454 -681 0 +-454 681 0 +454 -684 0 +-454 684 0 +454 -823 0 +-454 823 0 +-952 -452 0 +-937 -452 0 +-941 -452 0 +-953 453 0 +-953 -941 0 +-953 -937 0 +-954 -454 0 +-937 -454 0 +-941 -454 0 +18 -934 0 +-18 934 0 +18 -937 0 +-18 937 0 +931 -952 0 +-931 952 0 +931 -955 0 +-931 955 0 +932 -953 0 +932 -956 0 +933 -954 0 +-933 954 0 +933 -957 0 +-933 957 0 +-948 -963 0 +949 -963 0 +948 -964 0 +-949 -964 0 +-964 931 0 +-963 931 0 +-950 932 0 +-948 -1003 0 +951 -1003 0 +948 -1004 0 +-951 -1004 0 +-1004 933 0 +-1003 933 0 +449 -787 0 +-449 787 0 +449 -790 0 +-449 790 0 +450 -788 0 +450 -791 0 +451 -789 0 +-451 789 0 +451 -792 0 +-451 792 0 +-806 -449 0 +-897 -449 0 +-917 -449 0 +-807 450 0 +-807 -917 0 +-807 -897 0 +-808 -451 0 +-897 -451 0 +-917 -451 0 +22 -897 0 +-22 897 0 +22 -898 0 +-22 898 0 +584 -806 0 +-584 806 0 +584 -809 0 +-584 809 0 +585 -807 0 +585 -810 0 +586 -808 0 +-586 808 0 +586 -811 0 +-586 811 0 +-782 -969 0 +778 -969 0 +782 -970 0 +-778 -970 0 +-970 584 0 +-969 584 0 +-779 585 0 +-782 -1005 0 +780 -1005 0 +782 -1006 0 +-780 -1006 0 +-1006 586 0 +-1005 586 0 +217 -455 0 +-217 455 0 +217 -458 0 +-217 458 0 +218 -456 0 +218 -459 0 +219 -457 0 +-219 457 0 +219 -460 0 +-219 460 0 +-227 -217 0 +-442 -217 0 +-233 -217 0 +-228 218 0 +-228 -233 0 +-228 -442 0 +-229 -219 0 +-442 -219 0 +-233 -219 0 +23 -442 0 +-23 442 0 +23 -443 0 +-23 443 0 +210 -227 0 +-210 227 0 +210 -230 0 +-210 230 0 +211 -228 0 +211 -231 0 +212 -229 0 +-212 229 0 +212 -232 0 +-212 232 0 +-798 -981 0 +214 -981 0 +798 -982 0 +-214 -982 0 +-982 210 0 +-981 210 0 +-215 211 0 +-798 -1007 0 +216 -1007 0 +798 -1008 0 +-216 -1008 0 +-1008 212 0 +-1007 212 0 +461 -651 0 +-461 651 0 +461 -654 0 +-461 654 0 +462 -652 0 +462 -655 0 +463 -653 0 +-463 653 0 +463 -656 0 +-463 656 0 +614 461 0 +-614 -461 0 +-615 462 0 +616 463 0 +-616 -463 0 +581 -614 0 +-581 614 0 +581 -617 0 +-581 617 0 +582 -615 0 +582 -618 0 +583 -616 0 +-583 616 0 +583 -619 0 +-583 619 0 +-645 -581 0 +-607 -581 0 +-592 -581 0 +-646 582 0 +-646 -592 0 +-646 -607 0 +-647 -583 0 +-607 -583 0 +-592 -583 0 +33 -607 0 +-33 607 0 +33 -608 0 +-33 608 0 +588 -645 0 +-588 645 0 +588 -648 0 +-588 648 0 +589 -646 0 +589 -649 0 +590 -647 0 +-590 647 0 +590 -650 0 +-590 650 0 +-666 -973 0 +639 -973 0 +666 -974 0 +-639 -974 0 +-974 588 0 +-973 588 0 +-640 589 0 +-666 -1009 0 +641 -1009 0 +666 -1010 0 +-641 -1010 0 +-1010 590 0 +-1009 590 0 +-123 -108 0 +-318 -108 0 +-303 -108 0 +-333 -108 0 +-124 109 0 +-319 109 0 +-304 109 0 +-334 109 0 +-125 -110 0 +-320 -110 0 +-305 -110 0 +-335 -110 0 +117 -333 0 +-117 333 0 +117 -336 0 +-117 336 0 +117 -518 0 +-117 518 0 +118 -334 0 +118 -337 0 +118 -519 0 +119 -335 0 +-119 335 0 +119 -338 0 +-119 338 0 +119 -520 0 +-119 520 0 +-530 -117 0 +-554 -117 0 +-534 -117 0 +-531 118 0 +-531 -534 0 +-531 -554 0 +-532 -119 0 +-554 -119 0 +-534 -119 0 +29 -554 0 +-29 554 0 +29 -555 0 +-29 555 0 +58 -527 0 +-58 527 0 +58 -530 0 +-58 530 0 +59 -528 0 +59 -531 0 +60 -529 0 +-60 529 0 +60 -532 0 +-60 532 0 +-67 -983 0 +204 -983 0 +67 -984 0 +-204 -984 0 +-984 58 0 +-983 58 0 +-205 59 0 +-67 -1011 0 +206 -1011 0 +67 -1012 0 +-206 -1012 0 +-1012 60 0 +-1011 60 0 +114 -303 0 +-114 303 0 +114 -306 0 +-114 306 0 +114 -312 0 +-114 312 0 +115 -304 0 +115 -307 0 +115 -313 0 +116 -305 0 +-116 305 0 +116 -308 0 +-116 308 0 +116 -314 0 +-116 314 0 +-694 -114 0 +-742 -114 0 +-698 -114 0 +-695 115 0 +-695 -698 0 +-695 -742 0 +-696 -116 0 +-742 -116 0 +-698 -116 0 +31 -742 0 +-31 742 0 +31 -743 0 +-31 743 0 +687 -691 0 +-687 691 0 +687 -694 0 +-687 694 0 +688 -692 0 +688 -695 0 +689 -693 0 +-689 693 0 +689 -696 0 +-689 696 0 +-837 -965 0 +838 -965 0 +837 -966 0 +-838 -966 0 +-966 687 0 +-965 687 0 +-839 688 0 +-837 -1013 0 +840 -1013 0 +837 -1014 0 +-840 -1014 0 +-1014 689 0 +-1013 689 0 +111 -318 0 +-111 318 0 +111 -321 0 +-111 321 0 +112 -319 0 +112 -322 0 +113 -320 0 +-113 320 0 +113 -323 0 +-113 323 0 +-842 -111 0 +-864 -111 0 +-848 -111 0 +-843 112 0 +-843 -848 0 +-843 -864 0 +-844 -113 0 +-864 -113 0 +-848 -113 0 +20 -864 0 +-20 864 0 +20 -865 0 +-20 865 0 +283 -842 0 +-283 842 0 +283 -845 0 +-283 845 0 +284 -843 0 +284 -846 0 +285 -844 0 +-285 844 0 +285 -847 0 +-285 847 0 +-287 -977 0 +288 -977 0 +287 -978 0 +-288 -978 0 +-978 283 0 +-977 283 0 +-289 284 0 +-287 -1015 0 +290 -1015 0 +287 -1016 0 +-290 -1016 0 +-1016 285 0 +-1015 285 0 +84 -120 0 +-84 120 0 +84 -123 0 +-84 123 0 +85 -121 0 +85 -124 0 +86 -122 0 +-86 122 0 +86 -125 0 +-86 125 0 +-712 -84 0 +-768 -84 0 +-718 -84 0 +-713 85 0 +-713 -718 0 +-713 -768 0 +-714 -86 0 +-768 -86 0 +-718 -86 0 +15 -768 0 +-15 768 0 +15 -769 0 +-15 769 0 +703 -712 0 +-703 712 0 +703 -715 0 +-703 715 0 +704 -713 0 +704 -716 0 +705 -714 0 +-705 714 0 +705 -717 0 +-705 717 0 +-707 -971 0 +708 -971 0 +707 -972 0 +-708 -972 0 +-972 703 0 +-971 703 0 +-709 704 0 +-707 -1017 0 +710 -1017 0 +707 -1018 0 +-710 -1018 0 +-1018 705 0 +-1017 705 0 +-45 -1020 0 +43 -1020 0 +45 -1021 0 +-43 -1021 0 +-1021 1019 0 +-1020 1019 0 +558 43 0 +-558 -43 0 +-559 44 0 +560 45 0 +-560 -45 0 +247 -558 0 +-247 558 0 +247 -561 0 +-247 561 0 +247 -624 0 +-247 624 0 +248 -559 0 +248 -562 0 +248 -625 0 +249 -560 0 +-249 560 0 +249 -563 0 +-249 563 0 +249 -626 0 +-249 626 0 +577 247 0 +-577 -247 0 +-578 248 0 +579 249 0 +-579 -249 0 +102 -471 0 +-102 471 0 +102 -474 0 +-102 474 0 +102 -577 0 +-102 577 0 +102 -723 0 +-102 723 0 +102 -749 0 +-102 749 0 +102 -871 0 +-102 871 0 +102 -894 0 +-102 894 0 +102 -928 0 +-102 928 0 +103 -472 0 +103 -475 0 +103 -578 0 +103 -724 0 +103 -750 0 +103 -872 0 +103 -895 0 +103 -929 0 +104 -473 0 +-104 473 0 +104 -476 0 +-104 476 0 +104 -579 0 +-104 579 0 +104 -725 0 +-104 725 0 +104 -751 0 +-104 751 0 +104 -873 0 +-104 873 0 +104 -896 0 +-104 896 0 +104 -930 0 +-104 930 0 +75 102 0 +105 102 0 +90 102 0 +-76 103 0 +-106 103 0 +-91 103 0 +77 104 0 +107 104 0 +92 104 0 +-99 -90 0 +-94 91 0 +-97 91 0 +-100 91 0 +-101 -92 0 +-527 -99 0 +-524 -99 0 +-516 100 0 +-328 100 0 +-528 100 0 +-528 -524 0 +-328 -524 0 +-516 -524 0 +-529 -101 0 +-524 -101 0 +564 524 0 +537 524 0 +535 -564 0 +-535 564 0 +535 -565 0 +-535 565 0 +14 535 0 +-14 -535 0 +330 327 0 +-330 -327 0 +-331 328 0 +332 329 0 +-332 -329 0 +-336 -330 0 +-339 -330 0 +-337 331 0 +-340 331 0 +-338 -332 0 +-341 -332 0 +518 515 0 +521 515 0 +-519 516 0 +-522 516 0 +520 517 0 +523 517 0 +-845 -96 0 +-874 -96 0 +-849 -96 0 +-846 97 0 +-846 -849 0 +-846 -874 0 +-847 -98 0 +-874 -98 0 +-849 -98 0 +8 -874 0 +-8 874 0 +8 -875 0 +-8 875 0 +-322 94 0 +-325 94 0 +-241 -105 0 +-221 -105 0 +-244 -105 0 +-242 106 0 +-222 106 0 +-245 106 0 +-243 -107 0 +-223 -107 0 +-246 -107 0 +803 244 0 +-785 245 0 +-810 245 0 +-804 245 0 +-810 -800 0 +-785 -800 0 +805 246 0 +833 803 0 +-671 804 0 +-819 804 0 +-834 804 0 +835 805 0 +-955 -833 0 +-961 -833 0 +-962 -833 0 +-956 834 0 +-956 -962 0 +-956 -961 0 +-957 -835 0 +-961 -835 0 +-962 -835 0 +3 -958 0 +-3 958 0 +3 -961 0 +-3 961 0 +-821 -818 0 +-824 -818 0 +-822 819 0 +-825 819 0 +-823 -820 0 +-826 -820 0 +-673 -670 0 +-676 -670 0 +-674 671 0 +-677 671 0 +-675 -672 0 +-678 -672 0 +682 673 0 +-682 -673 0 +-683 674 0 +684 675 0 +-684 -675 0 +904 800 0 +909 800 0 +908 904 0 +-908 -904 0 +1 -905 0 +-1 905 0 +1 -908 0 +-1 908 0 +-790 -967 0 +793 -967 0 +790 -968 0 +-793 -968 0 +-968 784 0 +-967 784 0 +-791 785 0 +-794 785 0 +-792 -1023 0 +795 -1023 0 +792 -1024 0 +-795 -1024 0 +-1024 786 0 +-1023 786 0 +-224 -221 0 +-230 -221 0 +-420 -221 0 +-234 -221 0 +-225 222 0 +-231 222 0 +-231 -234 0 +-231 -420 0 +-225 -234 0 +-225 -420 0 +-226 -223 0 +-232 -223 0 +-420 -223 0 +-234 -223 0 +16 -420 0 +-16 420 0 +16 -421 0 +-16 421 0 +-455 -979 0 +238 -979 0 +455 -980 0 +-238 -980 0 +-980 224 0 +-979 224 0 +-456 225 0 +-239 225 0 +-457 -1025 0 +240 -1025 0 +457 -1026 0 +-240 -1026 0 +-1026 226 0 +-1025 226 0 +274 241 0 +-274 -241 0 +-275 242 0 +276 243 0 +-276 -243 0 +-280 -274 0 +-266 275 0 +-278 275 0 +-281 275 0 +-282 -276 0 +-648 -280 0 +-631 -280 0 +-612 281 0 +-643 281 0 +-649 281 0 +-649 -631 0 +-643 -631 0 +-612 -631 0 +-650 -282 0 +-631 -282 0 +637 631 0 +638 631 0 +623 -634 0 +-623 634 0 +623 -637 0 +-623 637 0 +13 623 0 +-13 -623 0 +654 642 0 +660 642 0 +-655 643 0 +-661 643 0 +656 644 0 +662 644 0 +617 611 0 +620 611 0 +-618 612 0 +-621 612 0 +619 613 0 +622 613 0 +-501 -277 0 +-507 -277 0 +-508 -277 0 +-502 278 0 +-502 -508 0 +-502 -507 0 +-503 -279 0 +-507 -279 0 +-508 -279 0 +36 -504 0 +-36 504 0 +36 -507 0 +-36 507 0 +-478 266 0 +-272 266 0 +-69 -75 0 +-79 76 0 +-82 76 0 +-70 76 0 +-71 -77 0 +72 69 0 +-72 -69 0 +-73 70 0 +74 71 0 +-74 -71 0 +297 72 0 +-292 73 0 +-295 73 0 +-298 73 0 +299 74 0 +-691 -297 0 +-726 -297 0 +-697 -297 0 +-692 298 0 +-692 -697 0 +-692 -726 0 +-693 -299 0 +-726 -299 0 +-697 -299 0 +24 -726 0 +-24 726 0 +24 -727 0 +-24 727 0 +-312 -294 0 +-315 -294 0 +-313 295 0 +-316 295 0 +-314 -296 0 +-317 -296 0 +300 291 0 +-300 -291 0 +-301 292 0 +302 293 0 +-302 -293 0 +306 300 0 +309 300 0 +-307 301 0 +-310 301 0 +308 302 0 +311 302 0 +-715 -81 0 +-752 -81 0 +-719 -81 0 +-716 82 0 +-716 -719 0 +-716 -752 0 +-717 -83 0 +-752 -83 0 +-719 -83 0 +2 -752 0 +-2 752 0 +2 -753 0 +-2 753 0 +-121 79 0 +-236 79 0 +-57 -1028 0 +55 -1028 0 +57 -1029 0 +-55 -1029 0 +-1029 1027 0 +-1028 1027 0 +-198 -55 0 +-174 -55 0 +-199 56 0 +-175 56 0 +-200 -57 0 +-176 -57 0 +-189 -174 0 +-180 -174 0 +-183 -174 0 +-375 -174 0 +-190 175 0 +-181 175 0 +-184 175 0 +-376 175 0 +-191 -176 0 +-182 -176 0 +-185 -176 0 +-377 -176 0 +186 -375 0 +-186 375 0 +186 -378 0 +-186 378 0 +186 -396 0 +-186 396 0 +187 -376 0 +187 -379 0 +187 -397 0 +188 -377 0 +-188 377 0 +188 -380 0 +-188 380 0 +188 -398 0 +-188 398 0 +-756 -186 0 +-746 -186 0 +-750 187 0 +-747 187 0 +-747 -756 0 +-750 753 0 +-754 -756 0 +-750 -756 0 +-756 -188 0 +-748 -188 0 +759 746 0 +-759 -746 0 +-760 747 0 +761 748 0 +-761 -748 0 +-763 760 0 +-766 760 0 +-766 769 0 +-763 886 0 +571 183 0 +574 183 0 +-572 184 0 +-575 184 0 +573 185 0 +576 185 0 +138 -354 0 +-138 354 0 +138 -357 0 +-138 357 0 +138 -363 0 +-138 363 0 +138 -574 0 +-138 574 0 +139 -355 0 +139 -358 0 +139 -364 0 +139 -575 0 +140 -356 0 +-140 356 0 +140 -359 0 +-140 359 0 +140 -365 0 +-140 365 0 +140 -576 0 +-140 576 0 +538 138 0 +-538 -138 0 +-539 139 0 +540 140 0 +-540 -140 0 +-851 -538 0 +-855 539 0 +-862 539 0 +-852 539 0 +-862 865 0 +-855 858 0 +-853 -540 0 +868 851 0 +-868 -851 0 +-869 852 0 +870 853 0 +-870 -853 0 +-878 -868 0 +-872 869 0 +-872 875 0 +-876 -878 0 +-872 -878 0 +-878 -870 0 +348 -366 0 +-348 366 0 +348 -369 0 +-348 369 0 +348 -381 0 +-348 381 0 +348 -402 0 +-348 402 0 +348 -571 0 +-348 571 0 +349 -367 0 +349 -370 0 +349 -382 0 +349 -403 0 +349 -572 0 +350 -368 0 +-350 368 0 +350 -371 0 +-350 371 0 +350 -383 0 +-350 383 0 +350 -404 0 +-350 404 0 +350 -573 0 +-350 573 0 +733 348 0 +720 348 0 +-734 349 0 +-721 349 0 +735 350 0 +722 350 0 +-730 -720 0 +-724 721 0 +-724 727 0 +-728 -730 0 +-724 -730 0 +-730 -722 0 +-737 734 0 +-740 734 0 +-740 743 0 +-737 881 0 +393 180 0 +384 180 0 +405 180 0 +-394 181 0 +-385 181 0 +-406 181 0 +395 182 0 +386 182 0 +407 182 0 +387 -405 0 +-387 405 0 +387 -408 0 +-387 408 0 +388 -406 0 +388 -409 0 +389 -407 0 +-389 407 0 +389 -410 0 +-389 410 0 +414 387 0 +-414 -387 0 +-415 388 0 +416 389 0 +-416 -389 0 +360 -411 0 +-360 411 0 +360 -414 0 +-360 414 0 +361 -412 0 +361 -415 0 +362 -413 0 +-362 413 0 +362 -416 0 +-362 416 0 +-594 -360 0 +-598 361 0 +-605 361 0 +-595 361 0 +-605 608 0 +-598 601 0 +-596 -362 0 +628 594 0 +-625 595 0 +-625 -634 0 +-635 628 0 +-625 628 0 +628 596 0 +-433 -384 0 +-428 385 0 +-418 385 0 +-434 385 0 +-435 -386 0 +253 -430 0 +-253 430 0 +253 -433 0 +-253 433 0 +254 -431 0 +254 -434 0 +255 -432 0 +-255 432 0 +255 -435 0 +-255 435 0 +-256 -253 0 +-260 254 0 +-263 254 0 +-257 254 0 +-263 486 0 +-260 509 0 +-258 -255 0 +467 256 0 +-467 -256 0 +-468 257 0 +469 258 0 +-469 -258 0 +-490 -467 0 +-475 468 0 +-475 504 0 +-505 -490 0 +-475 -490 0 +-490 -469 0 +-424 -417 0 +-472 418 0 +-472 421 0 +-422 -424 0 +-472 -424 0 +-424 -419 0 +-437 428 0 +-440 428 0 +-440 443 0 +-437 772 0 +345 -390 0 +-345 390 0 +345 -393 0 +-345 393 0 +346 -391 0 +346 -394 0 +347 -392 0 +-347 392 0 +347 -395 0 +-347 395 0 +568 345 0 +541 345 0 +-562 346 0 +-542 346 0 +-542 568 0 +-562 -565 0 +-566 568 0 +-562 568 0 +568 347 0 +543 347 0 +-545 542 0 +-552 542 0 +-552 555 0 +-545 548 0 +177 -189 0 +-177 189 0 +177 -192 0 +-177 192 0 +178 -190 0 +178 -193 0 +179 -191 0 +-179 191 0 +179 -194 0 +-179 194 0 +-812 -177 0 +-828 178 0 +-831 178 0 +-813 178 0 +-831 934 0 +-828 942 0 +-814 -179 0 +815 812 0 +-815 -812 0 +-816 813 0 +817 814 0 +-817 -814 0 +-938 -815 0 +-929 816 0 +-929 958 0 +-959 -938 0 +-929 -938 0 +-938 -817 0 +-911 -198 0 +-918 -198 0 +-915 199 0 +-912 199 0 +-912 -918 0 +-915 921 0 +-915 -918 0 +-922 -918 0 +-913 -200 0 +-918 -200 0 +891 911 0 +-891 -911 0 +-892 912 0 +893 913 0 +-893 -913 0 +-895 892 0 +-902 892 0 +-902 898 0 +-895 905 0 +-51 -1031 0 +49 -1031 0 +51 -1032 0 +-49 -1032 0 +-1032 1030 0 +-1031 1030 0 +150 49 0 +159 49 0 +132 49 0 +144 49 0 +-151 50 0 +-160 50 0 +-133 50 0 +-145 50 0 +152 51 0 +161 51 0 +134 51 0 +146 51 0 +135 -144 0 +-135 144 0 +135 -147 0 +-135 147 0 +135 -351 0 +-135 351 0 +135 -399 0 +-135 399 0 +136 -145 0 +136 -148 0 +136 -352 0 +136 -400 0 +137 -146 0 +-137 146 0 +137 -149 0 +-137 149 0 +137 -353 0 +-137 353 0 +137 -401 0 +-137 401 0 +396 135 0 +-396 -135 0 +-397 136 0 +398 137 0 +-398 -137 0 +363 132 0 +411 132 0 +369 132 0 +-364 133 0 +-412 133 0 +-370 133 0 +365 134 0 +413 134 0 +371 134 0 +129 -159 0 +-129 159 0 +129 -162 0 +-129 162 0 +130 -160 0 +130 -163 0 +131 -161 0 +-131 161 0 +131 -164 0 +-131 164 0 +351 129 0 +357 129 0 +366 129 0 +342 129 0 +-352 130 0 +-358 130 0 +-367 130 0 +-343 130 0 +353 131 0 +359 131 0 +368 131 0 +344 131 0 +390 342 0 +-390 -342 0 +-391 343 0 +392 344 0 +-392 -344 0 +126 -150 0 +-126 150 0 +126 -153 0 +-126 153 0 +126 -171 0 +-126 171 0 +127 -151 0 +127 -154 0 +127 -172 0 +128 -152 0 +-128 152 0 +128 -155 0 +-128 155 0 +128 -173 0 +-128 173 0 +192 126 0 +-192 -126 0 +-193 127 0 +194 128 0 +-194 -128 0 +-48 -1034 0 +46 -1034 0 +48 -1035 0 +-46 -1035 0 +-1035 1033 0 +-1034 1033 0 +354 46 0 +165 46 0 +147 46 0 +153 46 0 +-355 47 0 +-166 47 0 +-148 47 0 +-154 47 0 +356 48 0 +167 48 0 +149 48 0 +155 48 0 +141 -165 0 +-141 165 0 +141 -168 0 +-141 168 0 +142 -166 0 +142 -169 0 +143 -167 0 +-143 167 0 +143 -170 0 +-143 170 0 +372 141 0 +-372 -141 0 +-373 142 0 +374 143 0 +-374 -143 0 +-378 -372 0 +-381 -372 0 +-379 373 0 +-382 373 0 +-380 -374 0 +-383 -374 0 +-54 -1037 0 +52 -1037 0 +54 -1038 0 +-52 -1038 0 +-1038 1036 0 +-1037 1036 0 +162 52 0 +168 52 0 +156 52 0 +171 52 0 +-163 53 0 +-169 53 0 +-157 53 0 +-172 53 0 +164 54 0 +170 54 0 +158 54 0 +173 54 0 +399 156 0 +430 156 0 +402 156 0 +408 156 0 +-400 157 0 +-431 157 0 +-403 157 0 +-409 157 0 +401 158 0 +432 158 0 +404 158 0 +410 158 0 +-1036 1039 0 +-1033 1039 0 +-1030 1039 0 +-1027 1039 0 +-1019 1039 0 +-994 1039 0 +-987 1039 0 +-986 41 38 0 +988 39 -37 0 +989 -39 37 0 +-987 989 988 0 +-38 37 39 0 +-38 -37 -39 0 +-202 201 203 0 +-202 -201 -203 0 +-950 949 951 0 +-950 -949 -951 0 +-915 914 916 0 +-915 -914 -916 0 +-855 854 856 0 +-855 -854 -856 0 +-839 838 840 0 +-839 -838 -840 0 +-828 827 829 0 +-828 -827 -829 0 +-779 778 780 0 +-779 -778 -780 0 +-763 762 764 0 +-763 -762 -764 0 +-737 736 738 0 +-737 -736 -738 0 +-709 708 710 0 +-709 -708 -710 0 +-640 639 641 0 +-640 -639 -641 0 +-598 597 599 0 +-598 -597 -599 0 +-545 544 546 0 +-545 -544 -546 0 +-496 495 497 0 +-496 -495 -497 0 +-437 436 438 0 +-437 -436 -438 0 +-289 288 290 0 +-289 -288 -290 0 +-260 259 261 0 +-260 -259 -261 0 +-215 214 216 0 +-215 -214 -216 0 +-208 207 209 0 +-208 -207 -209 0 +-205 204 206 0 +-205 -204 -206 0 +-63 62 64 0 +-63 -62 -64 0 +686 884 885 0 +65 286 68 0 +61 547 533 0 +66 857 850 0 +494 512 513 0 +926 945 946 0 +777 924 925 0 +213 775 776 0 +591 600 593 0 +702 889 890 0 +995 42 -40 0 +996 -42 40 0 +-994 996 995 0 +-41 40 42 0 +-41 -40 -42 0 +-677 676 678 0 +-677 -676 -678 0 +-661 660 662 0 +-661 -660 -662 0 +-658 657 659 0 +-658 -657 -659 0 +-196 195 197 0 +-196 -195 -197 0 +-902 901 903 0 +-902 -901 -903 0 +-862 861 863 0 +-862 -861 -863 0 +-831 830 832 0 +-831 -830 -832 0 +-825 824 826 0 +-825 -824 -826 0 +-794 793 795 0 +-794 -793 -795 0 +-766 765 767 0 +-766 -765 -767 0 +-740 739 741 0 +-740 -739 -741 0 +-621 620 622 0 +-621 -620 -622 0 +-605 604 606 0 +-605 -604 -606 0 +-552 551 553 0 +-552 -551 -553 0 +-522 521 523 0 +-522 -521 -523 0 +-440 439 441 0 +-440 -439 -441 0 +-340 339 341 0 +-340 -339 -341 0 +-325 324 326 0 +-325 -324 -326 0 +-316 315 317 0 +-316 -315 -317 0 +-310 309 311 0 +-310 -309 -311 0 +-272 271 273 0 +-272 -271 -273 0 +-263 262 264 0 +-263 -262 -264 0 +-251 250 252 0 +-251 -250 -252 0 +-239 238 240 0 +-239 -238 -240 0 +-236 235 237 0 +-236 -235 -237 0 +-465 -466 448 0 +-465 -464 446 0 +-465 446 448 0 +-465 -466 653 0 +-465 -464 651 0 +-465 651 653 0 +-465 -466 110 0 +-465 -464 108 0 +-465 108 110 0 +-447 -448 466 0 +-447 -446 464 0 +-447 464 466 0 +-447 -448 653 0 +-447 -446 651 0 +-447 651 653 0 +-447 -448 110 0 +-447 -446 108 0 +-447 108 110 0 +-652 -653 466 0 +-652 -651 464 0 +-652 464 466 0 +-652 -653 448 0 +-652 -651 446 0 +-652 446 448 0 +-652 -653 110 0 +-652 -651 108 0 +-652 108 110 0 +-109 -110 466 0 +-109 -108 464 0 +-109 464 466 0 +-109 -110 448 0 +-109 -108 446 0 +-109 446 448 0 +-109 -110 653 0 +-109 -108 651 0 +-109 651 653 0 +-88 87 89 0 +-88 -87 -89 0 +-465 464 466 0 +-465 -464 -466 0 +-269 478 481 0 +-481 480 482 0 +-481 -480 -482 0 +-478 477 479 0 +-478 -477 -479 0 +-269 268 270 0 +-269 -268 -270 0 +-484 499 502 0 +-502 501 503 0 +-502 -501 -503 0 +-499 498 500 0 +-499 -498 -500 0 +975 668 -495 0 +976 -668 495 0 +-483 976 975 0 +-484 483 485 0 +-484 -483 -485 0 +1001 668 -497 0 +1002 -668 497 0 +-485 1002 1001 0 +-680 -681 -787 0 +-680 -679 -789 0 +-680 -787 -789 0 +-680 -681 -458 0 +-680 -679 -460 0 +-680 -458 -460 0 +-788 -789 -679 0 +-788 -787 -681 0 +-788 -679 -681 0 +-788 -789 -458 0 +-788 -787 -460 0 +-788 -458 -460 0 +-459 -460 -679 0 +-459 -458 -681 0 +-459 -679 -681 0 +-459 -460 -787 0 +-459 -458 -789 0 +-459 -787 -789 0 +-447 446 448 0 +-447 -446 -448 0 +-822 821 823 0 +-822 -821 -823 0 +-683 682 684 0 +-683 -682 -684 0 +-680 679 681 0 +-680 -679 -681 0 +-453 452 454 0 +-453 -452 -454 0 +-932 953 956 0 +-956 955 957 0 +-956 -955 -957 0 +-953 952 954 0 +-953 -952 -954 0 +963 948 -949 0 +964 -948 949 0 +-931 964 963 0 +-932 931 933 0 +-932 -931 -933 0 +1003 948 -951 0 +1004 -948 951 0 +-933 1004 1003 0 +-450 788 791 0 +-791 790 792 0 +-791 -790 -792 0 +-788 787 789 0 +-788 -787 -789 0 +-450 449 451 0 +-450 -449 -451 0 +-585 807 810 0 +-810 809 811 0 +-810 -809 -811 0 +-807 806 808 0 +-807 -806 -808 0 +969 782 -778 0 +970 -782 778 0 +-584 970 969 0 +-585 584 586 0 +-585 -584 -586 0 +1005 782 -780 0 +1006 -782 780 0 +-586 1006 1005 0 +-218 456 459 0 +-459 458 460 0 +-459 -458 -460 0 +-456 455 457 0 +-456 -455 -457 0 +-218 217 219 0 +-218 -217 -219 0 +-211 228 231 0 +-231 230 232 0 +-231 -230 -232 0 +-228 227 229 0 +-228 -227 -229 0 +981 798 -214 0 +982 -798 214 0 +-210 982 981 0 +-211 210 212 0 +-211 -210 -212 0 +1007 798 -216 0 +1008 -798 216 0 +-212 1008 1007 0 +-462 652 655 0 +-655 654 656 0 +-655 -654 -656 0 +-652 651 653 0 +-652 -651 -653 0 +-462 461 463 0 +-462 -461 -463 0 +-582 615 618 0 +-618 617 619 0 +-618 -617 -619 0 +-615 614 616 0 +-615 -614 -616 0 +-582 581 583 0 +-582 -581 -583 0 +-589 646 649 0 +-649 648 650 0 +-649 -648 -650 0 +-646 645 647 0 +-646 -645 -647 0 +973 666 -639 0 +974 -666 639 0 +-588 974 973 0 +-589 588 590 0 +-589 -588 -590 0 +1009 666 -641 0 +1010 -666 641 0 +-590 1010 1009 0 +-334 -335 -303 0 +-334 -333 -305 0 +-334 -303 -305 0 +-334 -335 -318 0 +-334 -333 -320 0 +-334 -318 -320 0 +-334 -335 -123 0 +-334 -333 -125 0 +-334 -123 -125 0 +-304 -305 -333 0 +-304 -303 -335 0 +-304 -333 -335 0 +-304 -305 -318 0 +-304 -303 -320 0 +-304 -318 -320 0 +-304 -305 -123 0 +-304 -303 -125 0 +-304 -123 -125 0 +-319 -320 -333 0 +-319 -318 -335 0 +-319 -333 -335 0 +-319 -320 -303 0 +-319 -318 -305 0 +-319 -303 -305 0 +-319 -320 -123 0 +-319 -318 -125 0 +-319 -123 -125 0 +-124 -125 -333 0 +-124 -123 -335 0 +-124 -333 -335 0 +-124 -125 -303 0 +-124 -123 -305 0 +-124 -303 -305 0 +-124 -125 -318 0 +-124 -123 -320 0 +-124 -318 -320 0 +-109 108 110 0 +-109 -108 -110 0 +-519 518 520 0 +-519 -518 -520 0 +-337 336 338 0 +-337 -336 -338 0 +-334 333 335 0 +-334 -333 -335 0 +-118 117 119 0 +-118 -117 -119 0 +-59 528 531 0 +-531 530 532 0 +-531 -530 -532 0 +-528 527 529 0 +-528 -527 -529 0 +983 67 -204 0 +984 -67 204 0 +-58 984 983 0 +-59 58 60 0 +-59 -58 -60 0 +1011 67 -206 0 +1012 -67 206 0 +-60 1012 1011 0 +-313 312 314 0 +-313 -312 -314 0 +-307 306 308 0 +-307 -306 -308 0 +-304 303 305 0 +-304 -303 -305 0 +-115 114 116 0 +-115 -114 -116 0 +-688 692 695 0 +-695 694 696 0 +-695 -694 -696 0 +-692 691 693 0 +-692 -691 -693 0 +965 837 -838 0 +966 -837 838 0 +-687 966 965 0 +-688 687 689 0 +-688 -687 -689 0 +1013 837 -840 0 +1014 -837 840 0 +-689 1014 1013 0 +-112 319 322 0 +-322 321 323 0 +-322 -321 -323 0 +-319 318 320 0 +-319 -318 -320 0 +-112 111 113 0 +-112 -111 -113 0 +-284 843 846 0 +-846 845 847 0 +-846 -845 -847 0 +-843 842 844 0 +-843 -842 -844 0 +977 287 -288 0 +978 -287 288 0 +-283 978 977 0 +-284 283 285 0 +-284 -283 -285 0 +1015 287 -290 0 +1016 -287 290 0 +-285 1016 1015 0 +-85 121 124 0 +-124 123 125 0 +-124 -123 -125 0 +-121 120 122 0 +-121 -120 -122 0 +-85 84 86 0 +-85 -84 -86 0 +-704 713 716 0 +-716 715 717 0 +-716 -715 -717 0 +-713 712 714 0 +-713 -712 -714 0 +971 707 -708 0 +972 -707 708 0 +-703 972 971 0 +-704 703 705 0 +-704 -703 -705 0 +1017 707 -710 0 +1018 -707 710 0 +-705 1018 1017 0 +1020 45 -43 0 +1021 -45 43 0 +-1019 1021 1020 0 +-44 43 45 0 +-44 -43 -45 0 +-625 624 626 0 +-625 -624 -626 0 +-562 561 563 0 +-562 -561 -563 0 +-559 558 560 0 +-559 -558 -560 0 +-248 247 249 0 +-248 -247 -249 0 +-929 928 930 0 +-929 -928 -930 0 +-895 894 896 0 +-895 -894 -896 0 +-872 871 873 0 +-872 -871 -873 0 +-750 749 751 0 +-750 -749 -751 0 +-724 723 725 0 +-724 -723 -725 0 +-578 577 579 0 +-578 -577 -579 0 +-475 474 476 0 +-475 -474 -476 0 +-472 471 473 0 +-472 -471 -473 0 +-91 -92 107 0 +-91 -90 105 0 +-91 105 107 0 +-91 -92 77 0 +-91 -90 75 0 +-91 75 77 0 +-106 -107 92 0 +-106 -105 90 0 +-106 90 92 0 +-106 -107 77 0 +-106 -105 75 0 +-106 75 77 0 +-76 -77 92 0 +-76 -75 90 0 +-76 90 92 0 +-76 -77 107 0 +-76 -75 105 0 +-76 105 107 0 +-103 102 104 0 +-103 -102 -104 0 +-96 -93 -90 0 +99 93 90 0 +99 96 90 0 +-97 -98 95 0 +-97 -96 93 0 +-97 93 95 0 +-94 -95 98 0 +-94 -93 96 0 +-94 96 98 0 +-97 -98 -99 0 +-97 -96 -101 0 +-97 -99 -101 0 +-94 -95 -99 0 +-94 -93 -101 0 +-94 -99 -101 0 +-91 90 92 0 +-91 -90 -92 0 +-98 -95 -92 0 +101 95 92 0 +101 98 92 0 +-327 -515 -99 0 +-525 -526 -527 0 +-525 -524 -529 0 +-525 -527 -529 0 +-328 -329 517 0 +-328 -327 515 0 +-328 515 517 0 +-516 -517 329 0 +-516 -515 327 0 +-516 327 329 0 +-328 -329 -527 0 +-328 -327 -529 0 +-328 -527 -529 0 +-516 -517 -527 0 +-516 -515 -529 0 +-516 -527 -529 0 +-100 99 101 0 +-100 -99 -101 0 +-329 -517 -101 0 +-524 -564 -537 0 +-328 327 329 0 +-328 -327 -329 0 +330 336 339 0 +-340 -341 -336 0 +-340 -339 -338 0 +-340 -336 -338 0 +-337 -338 -339 0 +-337 -336 -341 0 +-337 -339 -341 0 +-331 330 332 0 +-331 -330 -332 0 +332 338 341 0 +-515 -518 -521 0 +-522 -523 520 0 +-522 -521 518 0 +-522 518 520 0 +-519 -520 523 0 +-519 -518 521 0 +-519 521 523 0 +-516 515 517 0 +-516 -515 -517 0 +-517 -520 -523 0 +-97 96 98 0 +-97 -96 -98 0 +324 321 93 0 +-324 -321 93 0 +-324 321 -93 0 +324 -321 -93 0 +-94 93 95 0 +-94 -93 -95 0 +326 323 95 0 +-326 -323 95 0 +-326 323 -95 0 +326 -323 -95 0 +-245 -246 -221 0 +-245 -244 -223 0 +-245 -221 -223 0 +-245 -246 -241 0 +-245 -244 -243 0 +-245 -241 -243 0 +-222 -223 -244 0 +-222 -221 -246 0 +-222 -244 -246 0 +-222 -223 -241 0 +-222 -221 -243 0 +-222 -241 -243 0 +-242 -243 -244 0 +-242 -241 -246 0 +-242 -244 -246 0 +-242 -243 -221 0 +-242 -241 -223 0 +-242 -221 -223 0 +-106 105 107 0 +-106 -105 -107 0 +-803 -784 -244 0 +-803 -809 -244 0 +-803 -800 -244 0 +-801 -802 -809 0 +-801 -800 -811 0 +-801 -809 -811 0 +-801 -802 -784 0 +-801 -800 -786 0 +-801 -784 -786 0 +-810 -811 -784 0 +-810 -809 -786 0 +-810 -784 -786 0 +-785 -786 -809 0 +-785 -784 -811 0 +-785 -809 -811 0 +-801 -802 805 0 +-801 -800 803 0 +-801 803 805 0 +-810 -811 805 0 +-810 -809 803 0 +-810 803 805 0 +-785 -786 805 0 +-785 -784 803 0 +-785 803 805 0 +-245 244 246 0 +-245 -244 -246 0 +-805 -786 -246 0 +-805 -811 -246 0 +-805 -800 -246 0 +818 670 803 0 +-833 -670 -803 0 +-833 -818 -803 0 +-819 -820 -670 0 +-819 -818 -672 0 +-819 -670 -672 0 +-671 -672 -818 0 +-671 -670 -820 0 +-671 -818 -820 0 +-819 -820 835 0 +-819 -818 833 0 +-819 833 835 0 +-671 -672 835 0 +-671 -670 833 0 +-671 833 835 0 +-804 803 805 0 +-804 -803 -805 0 +820 672 805 0 +-835 -672 -805 0 +-835 -820 -805 0 +-834 833 835 0 +-834 -833 -835 0 +818 821 824 0 +-825 -826 -821 0 +-825 -824 -823 0 +-825 -821 -823 0 +-822 -823 -824 0 +-822 -821 -826 0 +-822 -824 -826 0 +-819 818 820 0 +-819 -818 -820 0 +820 823 826 0 +670 673 676 0 +-677 -678 -673 0 +-677 -676 -675 0 +-677 -673 -675 0 +-674 -675 -676 0 +-674 -673 -678 0 +-674 -676 -678 0 +-671 670 672 0 +-671 -670 -672 0 +672 675 678 0 +-674 673 675 0 +-674 -673 -675 0 +-800 -904 -909 0 +967 790 -793 0 +968 -790 793 0 +-784 968 967 0 +-785 784 786 0 +-785 -784 -786 0 +1023 792 -795 0 +1024 -792 795 0 +-786 1024 1023 0 +-231 -232 -224 0 +-231 -230 -226 0 +-231 -224 -226 0 +-225 -226 -230 0 +-225 -224 -232 0 +-225 -230 -232 0 +-222 221 223 0 +-222 -221 -223 0 +979 455 -238 0 +980 -455 238 0 +-224 980 979 0 +-225 224 226 0 +-225 -224 -226 0 +1025 457 -240 0 +1026 -457 240 0 +-226 1026 1025 0 +-242 241 243 0 +-242 -241 -243 0 +-277 -265 -274 0 +280 265 274 0 +280 277 274 0 +-278 -279 267 0 +-278 -277 265 0 +-278 265 267 0 +-266 -267 279 0 +-266 -265 277 0 +-266 277 279 0 +-278 -279 -280 0 +-278 -277 -282 0 +-278 -280 -282 0 +-266 -267 -280 0 +-266 -265 -282 0 +-266 -280 -282 0 +-275 274 276 0 +-275 -274 -276 0 +-279 -267 -276 0 +282 267 276 0 +282 279 276 0 +-642 -611 -280 0 +-632 -633 -648 0 +-632 -631 -650 0 +-632 -648 -650 0 +-643 -644 613 0 +-643 -642 611 0 +-643 611 613 0 +-612 -613 644 0 +-612 -611 642 0 +-612 642 644 0 +-643 -644 -648 0 +-643 -642 -650 0 +-643 -648 -650 0 +-612 -613 -648 0 +-612 -611 -650 0 +-612 -648 -650 0 +-281 280 282 0 +-281 -280 -282 0 +-644 -613 -282 0 +-631 -637 -638 0 +-642 -654 -660 0 +-661 -662 656 0 +-661 -660 654 0 +-661 654 656 0 +-655 -656 662 0 +-655 -654 660 0 +-655 660 662 0 +-643 642 644 0 +-643 -642 -644 0 +-644 -656 -662 0 +-611 -617 -620 0 +-621 -622 619 0 +-621 -620 617 0 +-621 617 619 0 +-618 -619 622 0 +-618 -617 620 0 +-618 620 622 0 +-612 611 613 0 +-612 -611 -613 0 +-613 -619 -622 0 +-278 277 279 0 +-278 -277 -279 0 +271 477 265 0 +-271 -477 265 0 +-271 477 -265 0 +271 -477 -265 0 +-266 265 267 0 +-266 -265 -267 0 +273 479 267 0 +-273 -479 267 0 +-273 479 -267 0 +273 -479 -267 0 +-81 -78 -75 0 +69 78 75 0 +69 81 75 0 +-82 -83 80 0 +-82 -81 78 0 +-82 78 80 0 +-79 -80 83 0 +-79 -78 81 0 +-79 81 83 0 +-82 -83 -69 0 +-82 -81 -71 0 +-82 -69 -71 0 +-79 -80 -69 0 +-79 -78 -71 0 +-79 -69 -71 0 +-76 75 77 0 +-76 -75 -77 0 +-83 -80 -77 0 +71 80 77 0 +71 83 77 0 +-70 69 71 0 +-70 -69 -71 0 +294 291 72 0 +-297 -291 -72 0 +-297 -294 -72 0 +-295 -296 -291 0 +-295 -294 -293 0 +-295 -291 -293 0 +-292 -293 -294 0 +-292 -291 -296 0 +-292 -294 -296 0 +-295 -296 299 0 +-295 -294 297 0 +-295 297 299 0 +-292 -293 299 0 +-292 -291 297 0 +-292 297 299 0 +-73 72 74 0 +-73 -72 -74 0 +296 293 74 0 +-299 -293 -74 0 +-299 -296 -74 0 +-298 297 299 0 +-298 -297 -299 0 +294 312 315 0 +-316 -317 -312 0 +-316 -315 -314 0 +-316 -312 -314 0 +-313 -314 -315 0 +-313 -312 -317 0 +-313 -315 -317 0 +-295 294 296 0 +-295 -294 -296 0 +296 314 317 0 +-292 291 293 0 +-292 -291 -293 0 +-300 -306 -309 0 +-310 -311 308 0 +-310 -309 306 0 +-310 306 308 0 +-307 -308 311 0 +-307 -306 309 0 +-307 309 311 0 +-301 300 302 0 +-301 -300 -302 0 +-302 -308 -311 0 +-82 81 83 0 +-82 -81 -83 0 +235 120 78 0 +-235 -120 78 0 +-235 120 -78 0 +235 -120 -78 0 +-79 78 80 0 +-79 -78 -80 0 +237 122 80 0 +-237 -122 80 0 +-237 122 -80 0 +237 -122 -80 0 +1028 57 -55 0 +1029 -57 55 0 +-1027 1029 1028 0 +55 198 174 0 +-175 -176 -198 0 +-175 -174 -200 0 +-175 -198 -200 0 +-199 -200 -174 0 +-199 -198 -176 0 +-199 -174 -176 0 +-56 55 57 0 +-56 -55 -57 0 +57 200 176 0 +-376 -377 -183 0 +-376 -375 -185 0 +-376 -183 -185 0 +-376 -377 -180 0 +-376 -375 -182 0 +-376 -180 -182 0 +-376 -377 -189 0 +-376 -375 -191 0 +-376 -189 -191 0 +-184 -185 -375 0 +-184 -183 -377 0 +-184 -375 -377 0 +-184 -185 -180 0 +-184 -183 -182 0 +-184 -180 -182 0 +-184 -185 -189 0 +-184 -183 -191 0 +-184 -189 -191 0 +-181 -182 -375 0 +-181 -180 -377 0 +-181 -375 -377 0 +-181 -182 -183 0 +-181 -180 -185 0 +-181 -183 -185 0 +-181 -182 -189 0 +-181 -180 -191 0 +-181 -189 -191 0 +-190 -191 -375 0 +-190 -189 -377 0 +-190 -375 -377 0 +-190 -191 -183 0 +-190 -189 -185 0 +-190 -183 -185 0 +-190 -191 -180 0 +-190 -189 -182 0 +-190 -180 -182 0 +-175 174 176 0 +-175 -174 -176 0 +-397 396 398 0 +-397 -396 -398 0 +-379 378 380 0 +-379 -378 -380 0 +-376 375 377 0 +-376 -375 -377 0 +-753 -749 -186 0 +-757 -758 -746 0 +-757 -756 -748 0 +-757 -746 -748 0 +-754 -755 751 0 +-754 -753 749 0 +-754 749 751 0 +-754 -755 -746 0 +-754 -753 -748 0 +-754 -746 -748 0 +-750 -751 -746 0 +-750 -749 -748 0 +-750 -746 -748 0 +-187 186 188 0 +-187 -186 -188 0 +-753 -751 -188 0 +-747 746 748 0 +-747 -746 -748 0 +-886 -762 -759 0 +-769 -765 -759 0 +765 762 759 0 +769 762 759 0 +765 886 759 0 +769 886 759 0 +-770 -771 767 0 +-770 -769 765 0 +-770 765 767 0 +-887 -888 764 0 +-887 -886 762 0 +-887 762 764 0 +-760 759 761 0 +-760 -759 -761 0 +-886 -764 -761 0 +-769 -767 -761 0 +767 764 761 0 +769 764 761 0 +767 886 761 0 +769 886 761 0 +-183 -571 -574 0 +-575 -576 573 0 +-575 -574 571 0 +-575 571 573 0 +-572 -573 576 0 +-572 -571 574 0 +-572 574 576 0 +-184 183 185 0 +-184 -183 -185 0 +-185 -573 -576 0 +-575 574 576 0 +-575 -574 -576 0 +-364 363 365 0 +-364 -363 -365 0 +-358 357 359 0 +-358 -357 -359 0 +-355 354 356 0 +-355 -354 -356 0 +-139 138 140 0 +-139 -138 -140 0 +-858 -854 -538 0 +-865 -861 -538 0 +-866 -867 863 0 +-866 -865 861 0 +-866 861 863 0 +-859 -860 856 0 +-859 -858 854 0 +-859 854 856 0 +-866 -867 -851 0 +-866 -865 -853 0 +-866 -851 -853 0 +-862 -863 -851 0 +-862 -861 -853 0 +-862 -851 -853 0 +-859 -860 -851 0 +-859 -858 -853 0 +-859 -851 -853 0 +-855 -856 -851 0 +-855 -854 -853 0 +-855 -851 -853 0 +-539 538 540 0 +-539 -538 -540 0 +-858 -856 -540 0 +-865 -863 -540 0 +-852 851 853 0 +-852 -851 -853 0 +-875 -871 -868 0 +878 871 868 0 +878 875 868 0 +-876 -877 873 0 +-876 -875 871 0 +-876 871 873 0 +-869 868 870 0 +-869 -868 -870 0 +-875 -873 -870 0 +878 873 870 0 +878 875 870 0 +-572 571 573 0 +-572 -571 -573 0 +-403 402 404 0 +-403 -402 -404 0 +-382 381 383 0 +-382 -381 -383 0 +-370 369 371 0 +-370 -369 -371 0 +-367 366 368 0 +-367 -366 -368 0 +-348 -733 -720 0 +-721 -722 735 0 +-721 -720 733 0 +-721 733 735 0 +-734 -735 722 0 +-734 -733 720 0 +-734 720 722 0 +-349 348 350 0 +-349 -348 -350 0 +-350 -735 -722 0 +-727 -723 -720 0 +730 723 720 0 +730 727 720 0 +-728 -729 725 0 +-728 -727 723 0 +-728 723 725 0 +-721 720 722 0 +-721 -720 -722 0 +-727 -725 -722 0 +730 725 722 0 +730 727 722 0 +-881 -736 -733 0 +-743 -739 -733 0 +739 736 733 0 +743 736 733 0 +739 881 733 0 +743 881 733 0 +-744 -745 741 0 +-744 -743 739 0 +-744 739 741 0 +-882 -883 738 0 +-882 -881 736 0 +-882 736 738 0 +-734 733 735 0 +-734 -733 -735 0 +-881 -738 -735 0 +-743 -741 -735 0 +741 738 735 0 +743 738 735 0 +741 881 735 0 +743 881 735 0 +-406 -407 386 0 +-406 -405 384 0 +-406 384 386 0 +-406 -407 395 0 +-406 -405 393 0 +-406 393 395 0 +-385 -386 407 0 +-385 -384 405 0 +-385 405 407 0 +-385 -386 395 0 +-385 -384 393 0 +-385 393 395 0 +-394 -395 407 0 +-394 -393 405 0 +-394 405 407 0 +-394 -395 386 0 +-394 -393 384 0 +-394 384 386 0 +-181 180 182 0 +-181 -180 -182 0 +-388 406 409 0 +-409 408 410 0 +-409 -408 -410 0 +-406 405 407 0 +-406 -405 -407 0 +-388 387 389 0 +-388 -387 -389 0 +-361 412 415 0 +-415 414 416 0 +-415 -414 -416 0 +-412 411 413 0 +-412 -411 -413 0 +-601 -597 -360 0 +-608 -604 -360 0 +-609 -610 606 0 +-609 -608 604 0 +-609 604 606 0 +-602 -603 599 0 +-602 -601 597 0 +-602 597 599 0 +-609 -610 -594 0 +-609 -608 -596 0 +-609 -594 -596 0 +-605 -606 -594 0 +-605 -604 -596 0 +-605 -594 -596 0 +-602 -603 -594 0 +-602 -601 -596 0 +-602 -594 -596 0 +-598 -599 -594 0 +-598 -597 -596 0 +-598 -594 -596 0 +-361 360 362 0 +-361 -360 -362 0 +-601 -599 -362 0 +-608 -606 -362 0 +634 624 594 0 +-628 -624 -594 0 +-628 -634 -594 0 +-635 -636 -624 0 +-635 -634 -626 0 +-635 -624 -626 0 +-595 594 596 0 +-595 -594 -596 0 +634 626 596 0 +-628 -626 -596 0 +-628 -634 -596 0 +-417 -427 -384 0 +433 427 384 0 +433 417 384 0 +-418 -419 429 0 +-418 -417 427 0 +-418 427 429 0 +-428 -429 419 0 +-428 -427 417 0 +-428 417 419 0 +-418 -419 -433 0 +-418 -417 -435 0 +-418 -433 -435 0 +-428 -429 -433 0 +-428 -427 -435 0 +-428 -433 -435 0 +-385 384 386 0 +-385 -384 -386 0 +-419 -429 -386 0 +435 429 386 0 +435 419 386 0 +-254 431 434 0 +-434 433 435 0 +-434 -433 -435 0 +-431 430 432 0 +-431 -430 -432 0 +-509 -259 -253 0 +-486 -262 -253 0 +-487 -488 264 0 +-487 -486 262 0 +-487 262 264 0 +-510 -511 261 0 +-510 -509 259 0 +-510 259 261 0 +-487 -488 -256 0 +-487 -486 -258 0 +-487 -256 -258 0 +-263 -264 -256 0 +-263 -262 -258 0 +-263 -256 -258 0 +-510 -511 -256 0 +-510 -509 -258 0 +-510 -256 -258 0 +-260 -261 -256 0 +-260 -259 -258 0 +-260 -256 -258 0 +-254 253 255 0 +-254 -253 -255 0 +-509 -261 -255 0 +-486 -264 -255 0 +-257 256 258 0 +-257 -256 -258 0 +-504 -474 -467 0 +490 474 467 0 +490 504 467 0 +-505 -506 476 0 +-505 -504 474 0 +-505 474 476 0 +-468 467 469 0 +-468 -467 -469 0 +-504 -476 -469 0 +490 476 469 0 +490 504 469 0 +-421 -471 -417 0 +424 471 417 0 +424 421 417 0 +-422 -423 473 0 +-422 -421 471 0 +-422 471 473 0 +-418 417 419 0 +-418 -417 -419 0 +-421 -473 -419 0 +424 473 419 0 +424 421 419 0 +-772 -436 -427 0 +-443 -439 -427 0 +439 436 427 0 +443 436 427 0 +439 772 427 0 +443 772 427 0 +-444 -445 441 0 +-444 -443 439 0 +-444 439 441 0 +-773 -774 438 0 +-773 -772 436 0 +-773 436 438 0 +-428 427 429 0 +-428 -427 -429 0 +-772 -438 -429 0 +-443 -441 -429 0 +441 438 429 0 +443 438 429 0 +441 772 429 0 +443 772 429 0 +-346 391 394 0 +-394 393 395 0 +-394 -393 -395 0 +-391 390 392 0 +-391 -390 -392 0 +565 561 345 0 +-569 -570 543 0 +-569 -568 541 0 +-569 541 543 0 +-566 -567 -561 0 +-566 -565 -563 0 +-566 -561 -563 0 +-566 -567 543 0 +-566 -565 541 0 +-566 541 543 0 +-562 -563 543 0 +-562 -561 541 0 +-562 541 543 0 +-346 345 347 0 +-346 -345 -347 0 +565 563 347 0 +-548 -544 -541 0 +-555 -551 -541 0 +551 544 541 0 +555 544 541 0 +551 548 541 0 +555 548 541 0 +-556 -557 553 0 +-556 -555 551 0 +-556 551 553 0 +-549 -550 546 0 +-549 -548 544 0 +-549 544 546 0 +-542 541 543 0 +-542 -541 -543 0 +-548 -546 -543 0 +-555 -553 -543 0 +553 546 543 0 +555 546 543 0 +553 548 543 0 +555 548 543 0 +-178 190 193 0 +-193 192 194 0 +-193 -192 -194 0 +-190 189 191 0 +-190 -189 -191 0 +-942 -827 -177 0 +-934 -830 -177 0 +-935 -936 832 0 +-935 -934 830 0 +-935 830 832 0 +-943 -944 829 0 +-943 -942 827 0 +-943 827 829 0 +-935 -936 -812 0 +-935 -934 -814 0 +-935 -812 -814 0 +-831 -832 -812 0 +-831 -830 -814 0 +-831 -812 -814 0 +-943 -944 -812 0 +-943 -942 -814 0 +-943 -812 -814 0 +-828 -829 -812 0 +-828 -827 -814 0 +-828 -812 -814 0 +-178 177 179 0 +-178 -177 -179 0 +-942 -829 -179 0 +-934 -832 -179 0 +-813 812 814 0 +-813 -812 -814 0 +-958 -928 -815 0 +938 928 815 0 +938 958 815 0 +-959 -960 930 0 +-959 -958 928 0 +-959 928 930 0 +-816 815 817 0 +-816 -815 -817 0 +-958 -930 -817 0 +938 930 817 0 +938 958 817 0 +-914 -921 -198 0 +-919 -920 -911 0 +-919 -918 -913 0 +-919 -911 -913 0 +-922 -923 916 0 +-922 -921 914 0 +-922 914 916 0 +-915 -916 -911 0 +-915 -914 -913 0 +-915 -911 -913 0 +-922 -923 -911 0 +-922 -921 -913 0 +-922 -911 -913 0 +-199 198 200 0 +-199 -198 -200 0 +-916 -921 -200 0 +-912 911 913 0 +-912 -911 -913 0 +-894 -905 -891 0 +-901 -898 -891 0 +898 905 891 0 +901 905 891 0 +898 894 891 0 +901 894 891 0 +-899 -900 903 0 +-899 -898 901 0 +-899 901 903 0 +-906 -907 896 0 +-906 -905 894 0 +-906 894 896 0 +-892 891 893 0 +-892 -891 -893 0 +-896 -905 -893 0 +-903 -898 -893 0 +898 905 893 0 +903 905 893 0 +898 896 893 0 +903 896 893 0 +1031 51 -49 0 +1032 -51 49 0 +-1030 1032 1031 0 +-145 -146 134 0 +-145 -144 132 0 +-145 132 134 0 +-145 -146 161 0 +-145 -144 159 0 +-145 159 161 0 +-145 -146 152 0 +-145 -144 150 0 +-145 150 152 0 +-133 -134 146 0 +-133 -132 144 0 +-133 144 146 0 +-133 -134 161 0 +-133 -132 159 0 +-133 159 161 0 +-133 -134 152 0 +-133 -132 150 0 +-133 150 152 0 +-160 -161 146 0 +-160 -159 144 0 +-160 144 146 0 +-160 -161 134 0 +-160 -159 132 0 +-160 132 134 0 +-160 -161 152 0 +-160 -159 150 0 +-160 150 152 0 +-151 -152 146 0 +-151 -150 144 0 +-151 144 146 0 +-151 -152 134 0 +-151 -150 132 0 +-151 132 134 0 +-151 -152 161 0 +-151 -150 159 0 +-151 159 161 0 +-50 49 51 0 +-50 -49 -51 0 +-400 399 401 0 +-400 -399 -401 0 +-352 351 353 0 +-352 -351 -353 0 +-148 147 149 0 +-148 -147 -149 0 +-145 144 146 0 +-145 -144 -146 0 +-136 135 137 0 +-136 -135 -137 0 +-370 -371 413 0 +-370 -369 411 0 +-370 411 413 0 +-370 -371 365 0 +-370 -369 363 0 +-370 363 365 0 +-412 -413 371 0 +-412 -411 369 0 +-412 369 371 0 +-412 -413 365 0 +-412 -411 363 0 +-412 363 365 0 +-364 -365 371 0 +-364 -363 369 0 +-364 369 371 0 +-364 -365 413 0 +-364 -363 411 0 +-364 411 413 0 +-133 132 134 0 +-133 -132 -134 0 +-130 160 163 0 +-163 162 164 0 +-163 -162 -164 0 +-160 159 161 0 +-160 -159 -161 0 +-343 -344 368 0 +-343 -342 366 0 +-343 366 368 0 +-343 -344 359 0 +-343 -342 357 0 +-343 357 359 0 +-343 -344 353 0 +-343 -342 351 0 +-343 351 353 0 +-367 -368 344 0 +-367 -366 342 0 +-367 342 344 0 +-367 -368 359 0 +-367 -366 357 0 +-367 357 359 0 +-367 -368 353 0 +-367 -366 351 0 +-367 351 353 0 +-358 -359 344 0 +-358 -357 342 0 +-358 342 344 0 +-358 -359 368 0 +-358 -357 366 0 +-358 366 368 0 +-358 -359 353 0 +-358 -357 351 0 +-358 351 353 0 +-352 -353 344 0 +-352 -351 342 0 +-352 342 344 0 +-352 -353 368 0 +-352 -351 366 0 +-352 366 368 0 +-352 -353 359 0 +-352 -351 357 0 +-352 357 359 0 +-130 129 131 0 +-130 -129 -131 0 +-343 342 344 0 +-343 -342 -344 0 +-172 171 173 0 +-172 -171 -173 0 +-154 153 155 0 +-154 -153 -155 0 +-151 150 152 0 +-151 -150 -152 0 +-127 126 128 0 +-127 -126 -128 0 +1034 48 -46 0 +1035 -48 46 0 +-1033 1035 1034 0 +-154 -155 149 0 +-154 -153 147 0 +-154 147 149 0 +-154 -155 167 0 +-154 -153 165 0 +-154 165 167 0 +-154 -155 356 0 +-154 -153 354 0 +-154 354 356 0 +-148 -149 155 0 +-148 -147 153 0 +-148 153 155 0 +-148 -149 167 0 +-148 -147 165 0 +-148 165 167 0 +-148 -149 356 0 +-148 -147 354 0 +-148 354 356 0 +-166 -167 155 0 +-166 -165 153 0 +-166 153 155 0 +-166 -167 149 0 +-166 -165 147 0 +-166 147 149 0 +-166 -167 356 0 +-166 -165 354 0 +-166 354 356 0 +-355 -356 155 0 +-355 -354 153 0 +-355 153 155 0 +-355 -356 149 0 +-355 -354 147 0 +-355 147 149 0 +-355 -356 167 0 +-355 -354 165 0 +-355 165 167 0 +-47 46 48 0 +-47 -46 -48 0 +-142 166 169 0 +-169 168 170 0 +-169 -168 -170 0 +-166 165 167 0 +-166 -165 -167 0 +-142 141 143 0 +-142 -141 -143 0 +372 378 381 0 +-382 -383 -378 0 +-382 -381 -380 0 +-382 -378 -380 0 +-379 -380 -381 0 +-379 -378 -383 0 +-379 -381 -383 0 +-373 372 374 0 +-373 -372 -374 0 +374 380 383 0 +1037 54 -52 0 +1038 -54 52 0 +-1036 1038 1037 0 +-172 -173 158 0 +-172 -171 156 0 +-172 156 158 0 +-172 -173 170 0 +-172 -171 168 0 +-172 168 170 0 +-172 -173 164 0 +-172 -171 162 0 +-172 162 164 0 +-157 -158 173 0 +-157 -156 171 0 +-157 171 173 0 +-157 -158 170 0 +-157 -156 168 0 +-157 168 170 0 +-157 -158 164 0 +-157 -156 162 0 +-157 162 164 0 +-169 -170 173 0 +-169 -168 171 0 +-169 171 173 0 +-169 -170 158 0 +-169 -168 156 0 +-169 156 158 0 +-169 -170 164 0 +-169 -168 162 0 +-169 162 164 0 +-163 -164 173 0 +-163 -162 171 0 +-163 171 173 0 +-163 -164 158 0 +-163 -162 156 0 +-163 156 158 0 +-163 -164 170 0 +-163 -162 168 0 +-163 168 170 0 +-53 52 54 0 +-53 -52 -54 0 +-409 -410 404 0 +-409 -408 402 0 +-409 402 404 0 +-409 -410 432 0 +-409 -408 430 0 +-409 430 432 0 +-409 -410 401 0 +-409 -408 399 0 +-409 399 401 0 +-403 -404 410 0 +-403 -402 408 0 +-403 408 410 0 +-403 -404 432 0 +-403 -402 430 0 +-403 430 432 0 +-403 -404 401 0 +-403 -402 399 0 +-403 399 401 0 +-431 -432 410 0 +-431 -430 408 0 +-431 408 410 0 +-431 -432 404 0 +-431 -430 402 0 +-431 402 404 0 +-431 -432 401 0 +-431 -430 399 0 +-431 399 401 0 +-400 -401 410 0 +-400 -399 408 0 +-400 408 410 0 +-400 -401 404 0 +-400 -399 402 0 +-400 402 404 0 +-400 -401 432 0 +-400 -399 430 0 +-400 430 432 0 +-157 156 158 0 +-157 -156 -158 0 +669 665 667 706 0 +-993 855 915 950 0 +663 667 665 669 0 +-665 -796 -781 -797 0 +-196 658 661 677 0 +268 498 489 493 0 +270 500 489 493 0 +446 458 787 679 0 +448 460 789 681 0 +-453 680 683 822 0 +452 952 937 941 0 +454 954 937 941 0 +449 806 897 917 0 +451 808 897 917 0 +217 227 442 233 0 +219 229 442 233 0 +581 645 607 592 0 +583 647 607 592 0 +-118 334 337 519 0 +117 530 554 534 0 +119 532 554 534 0 +-115 304 307 313 0 +114 694 742 698 0 +116 696 742 698 0 +111 842 864 848 0 +113 844 864 848 0 +84 712 768 718 0 +86 714 768 718 0 +-248 559 562 625 0 +-102 -75 -105 -90 0 +-104 -77 -107 -92 0 +-100 99 -96 -93 0 +-100 101 -98 -95 0 +524 527 515 99 0 +524 527 327 99 0 +-525 524 -327 -515 0 +-525 526 -329 -517 0 +-528 527 -327 -515 0 +-528 529 -329 -517 0 +524 529 517 101 0 +524 529 329 101 0 +96 845 874 849 0 +98 847 874 849 0 +105 241 221 244 0 +107 243 223 246 0 +800 809 784 244 0 +800 811 786 246 0 +-834 -833 818 670 0 +-834 -835 820 672 0 +833 955 961 962 0 +835 957 961 962 0 +-281 280 -277 -265 0 +-281 282 -279 -267 0 +631 648 611 280 0 +631 648 642 280 0 +-632 631 -642 -611 0 +-632 633 -644 -613 0 +-649 648 -642 -611 0 +-649 650 -644 -613 0 +631 650 613 282 0 +631 650 644 282 0 +277 501 507 508 0 +279 503 507 508 0 +-70 69 -81 -78 0 +-70 71 -83 -80 0 +-298 -297 294 291 0 +-298 -299 296 293 0 +297 691 726 697 0 +299 693 726 697 0 +81 715 752 719 0 +83 717 752 719 0 +-187 376 379 397 0 +746 756 749 186 0 +746 756 753 186 0 +-747 -753 -748 -749 0 +-747 -753 -746 -751 0 +-747 -753 -749 -751 0 +-757 -753 -758 -749 0 +-757 -753 -756 -751 0 +-757 -753 -749 -751 0 +748 756 751 188 0 +748 756 753 188 0 +-770 -886 -771 -762 0 +-770 -886 -769 -764 0 +-770 -886 -762 -764 0 +-766 -886 -767 -762 0 +-766 -886 -765 -764 0 +-766 -886 -762 -764 0 +-887 -769 -888 -765 0 +-887 -769 -886 -767 0 +-887 -769 -765 -767 0 +-763 -769 -764 -765 0 +-763 -769 -762 -767 0 +-763 -769 -765 -767 0 +851 861 854 538 0 +851 865 854 538 0 +851 861 858 538 0 +851 865 858 538 0 +-852 -865 -853 -861 0 +-852 -865 -851 -863 0 +-852 -865 -861 -863 0 +-852 -858 -853 -854 0 +-852 -858 -851 -856 0 +-852 -858 -854 -856 0 +-866 -858 -867 -854 0 +-866 -858 -865 -856 0 +-866 -858 -854 -856 0 +-862 -858 -863 -854 0 +-862 -858 -861 -856 0 +-862 -858 -854 -856 0 +-859 -865 -860 -861 0 +-859 -865 -858 -863 0 +-859 -865 -861 -863 0 +-855 -865 -856 -861 0 +-855 -865 -854 -863 0 +-855 -865 -861 -863 0 +853 863 856 540 0 +853 865 856 540 0 +853 863 858 540 0 +853 865 858 540 0 +-879 -875 -880 -871 0 +-879 -875 -878 -873 0 +-879 -875 -871 -873 0 +-731 -727 -732 -723 0 +-731 -727 -730 -725 0 +-731 -727 -723 -725 0 +-744 -881 -745 -736 0 +-744 -881 -743 -738 0 +-744 -881 -736 -738 0 +-740 -881 -741 -736 0 +-740 -881 -739 -738 0 +-740 -881 -736 -738 0 +-882 -743 -883 -739 0 +-882 -743 -881 -741 0 +-882 -743 -739 -741 0 +-737 -743 -738 -739 0 +-737 -743 -736 -741 0 +-737 -743 -739 -741 0 +-180 -393 -384 -405 0 +-182 -395 -386 -407 0 +594 604 597 360 0 +594 608 597 360 0 +594 604 601 360 0 +594 608 601 360 0 +-595 -608 -596 -604 0 +-595 -608 -594 -606 0 +-595 -608 -604 -606 0 +-595 -601 -596 -597 0 +-595 -601 -594 -599 0 +-595 -601 -597 -599 0 +-609 -601 -610 -597 0 +-609 -601 -608 -599 0 +-609 -601 -597 -599 0 +-605 -601 -606 -597 0 +-605 -601 -604 -599 0 +-605 -601 -597 -599 0 +-602 -608 -603 -604 0 +-602 -608 -601 -606 0 +-602 -608 -604 -606 0 +-598 -608 -599 -604 0 +-598 -608 -597 -606 0 +-598 -608 -604 -606 0 +596 606 599 362 0 +596 608 599 362 0 +596 606 601 362 0 +596 608 601 362 0 +-629 634 -630 626 0 +-629 634 -628 624 0 +-629 634 624 626 0 +-434 433 -417 -427 0 +-434 435 -419 -429 0 +256 262 259 253 0 +256 486 259 253 0 +256 262 509 253 0 +256 486 509 253 0 +-257 -486 -258 -262 0 +-257 -486 -256 -264 0 +-257 -486 -262 -264 0 +-257 -509 -258 -259 0 +-257 -509 -256 -261 0 +-257 -509 -259 -261 0 +-487 -509 -488 -259 0 +-487 -509 -486 -261 0 +-487 -509 -259 -261 0 +-263 -509 -264 -259 0 +-263 -509 -262 -261 0 +-263 -509 -259 -261 0 +-510 -486 -511 -262 0 +-510 -486 -509 -264 0 +-510 -486 -262 -264 0 +-260 -486 -261 -262 0 +-260 -486 -259 -264 0 +-260 -486 -262 -264 0 +258 264 261 255 0 +258 486 261 255 0 +258 264 509 255 0 +258 486 509 255 0 +-491 -504 -492 -474 0 +-491 -504 -490 -476 0 +-491 -504 -474 -476 0 +-425 -421 -426 -471 0 +-425 -421 -424 -473 0 +-425 -421 -471 -473 0 +-444 -772 -445 -436 0 +-444 -772 -443 -438 0 +-444 -772 -436 -438 0 +-440 -772 -441 -436 0 +-440 -772 -439 -438 0 +-440 -772 -436 -438 0 +-773 -443 -774 -439 0 +-773 -443 -772 -441 0 +-773 -443 -439 -441 0 +-437 -443 -438 -439 0 +-437 -443 -436 -441 0 +-437 -443 -439 -441 0 +-541 -568 -561 -345 0 +-541 -568 -565 -345 0 +-542 565 -543 563 0 +-542 565 -541 561 0 +-542 565 561 563 0 +-569 565 -570 563 0 +-569 565 -568 561 0 +-569 565 561 563 0 +-543 -568 -563 -347 0 +-543 -568 -565 -347 0 +-556 -548 -557 -544 0 +-556 -548 -555 -546 0 +-556 -548 -544 -546 0 +-552 -548 -553 -544 0 +-552 -548 -551 -546 0 +-552 -548 -544 -546 0 +-549 -555 -550 -551 0 +-549 -555 -548 -553 0 +-549 -555 -551 -553 0 +-545 -555 -546 -551 0 +-545 -555 -544 -553 0 +-545 -555 -551 -553 0 +812 830 827 177 0 +812 934 827 177 0 +812 830 942 177 0 +812 934 942 177 0 +-813 -934 -814 -830 0 +-813 -934 -812 -832 0 +-813 -934 -830 -832 0 +-813 -942 -814 -827 0 +-813 -942 -812 -829 0 +-813 -942 -827 -829 0 +-935 -942 -936 -827 0 +-935 -942 -934 -829 0 +-935 -942 -827 -829 0 +-831 -942 -832 -827 0 +-831 -942 -830 -829 0 +-831 -942 -827 -829 0 +-943 -934 -944 -830 0 +-943 -934 -942 -832 0 +-943 -934 -830 -832 0 +-828 -934 -829 -830 0 +-828 -934 -827 -832 0 +-828 -934 -830 -832 0 +814 832 829 179 0 +814 934 829 179 0 +814 832 942 179 0 +814 934 942 179 0 +-939 -958 -940 -928 0 +-939 -958 -938 -930 0 +-939 -958 -928 -930 0 +918 911 921 198 0 +918 911 914 198 0 +-919 -921 -920 -914 0 +-919 -921 -918 -916 0 +-919 -921 -914 -916 0 +-912 -921 -913 -914 0 +-912 -921 -911 -916 0 +-912 -921 -914 -916 0 +918 913 921 200 0 +918 913 916 200 0 +-902 -905 -903 -894 0 +-902 -905 -901 -896 0 +-902 -905 -894 -896 0 +-899 -905 -900 -894 0 +-899 -905 -898 -896 0 +-899 -905 -894 -896 0 +-895 -898 -896 -901 0 +-895 -898 -894 -903 0 +-895 -898 -901 -903 0 +-906 -898 -907 -901 0 +-906 -898 -905 -903 0 +-906 -898 -901 -903 0 +-132 -363 -411 -369 0 +-134 -365 -413 -371 0 +-127 151 154 172 0 +-1040 1019 994 987 0 +-62 -699 -663 -65 -685 0 +-64 -701 -663 -65 -685 0 +-87 -108 -651 -446 -464 0 +-89 -110 -653 -448 -466 0 +108 123 318 303 333 0 +110 125 320 305 335 0 +-1022 750 872 895 929 0 +221 224 230 420 234 0 +223 226 232 420 234 0 +174 189 180 183 375 0 +176 191 182 185 377 0 +-139 355 358 364 575 0 +-49 -150 -159 -132 -144 0 +-51 -152 -161 -134 -146 0 +-136 145 148 352 400 0 +-129 -351 -357 -366 -342 0 +-131 -353 -359 -368 -344 0 +-46 -354 -165 -147 -153 0 +-48 -356 -167 -149 -155 0 +-52 -162 -168 -156 -171 0 +-54 -164 -170 -158 -173 0 +-156 -399 -430 -402 -408 0 +-158 -401 -432 -404 -410 0 +53 47 50 56 44 986 0 +-63 205 208 215 260 990 0 +-990 289 437 496 545 991 0 +-991 598 640 709 737 992 0 +-992 763 779 828 839 993 0 +-88 236 239 251 263 997 0 +-997 272 310 316 325 998 0 +-998 340 440 522 552 999 0 +-999 605 621 740 766 1000 0 +-1000 794 825 831 862 902 0 +-103 472 475 578 724 1022 0 +-349 367 370 382 403 572 0 +-1039 1036 1033 1030 1027 1040 0 diff --git a/tests/sat/unsat/bf1355-075.cnf b/tests/sat/unsat/bf1355-075.cnf new file mode 100644 index 00000000..bee1512b --- /dev/null +++ b/tests/sat/unsat/bf1355-075.cnf @@ -0,0 +1,6791 @@ +c FILE: bf1355-075.cnf +c +c SOURCE: Allen Van Gelder (avg@cs.ucsd.edu) and Yumi Tsuji +c (tsuji@cse.ucsc.edu) +c +c Nemesis formula in 6CNF in accordance with DIMACS CNF format: +c Filename: MCNC/c1355/c1355.tdl +c Formula number 75 +c 3760 variables (range: 2 - 3761) +c 6778 clauses +c +c p cnf 3761 6778 +p cnf 2180 6778 +1214 0 +2173 0 +1214 0 +-1215 0 +1213 0 +396 -398 0 +-396 398 0 +1213 1215 0 +-1213 -1215 0 +2066 -2018 0 +-2066 2018 0 +2066 -2018 0 +-2066 2018 0 +1213 396 0 +-1213 -396 0 +2066 -1215 0 +-2066 1215 0 +2066 -398 0 +-2066 398 0 +1215 -398 0 +-1215 398 0 +-56 -2075 0 +54 -2075 0 +56 -2076 0 +-54 -2076 0 +-2076 2074 0 +-2075 2074 0 +-1456 55 0 +-1466 55 0 +-1459 55 0 +-1456 -1461 0 +1449 -1455 0 +-1449 1455 0 +1449 -1458 0 +-1449 1458 0 +1450 -1456 0 +1450 -1459 0 +1451 -1457 0 +-1451 1457 0 +1451 -1460 0 +-1451 1460 0 +-1464 -1449 0 +-1468 -1449 0 +-1469 1450 0 +-1469 -1464 0 +-1464 -1451 0 +-1470 -1451 0 +1452 -1465 0 +-1452 1465 0 +1452 -1468 0 +-1452 1468 0 +1453 -1466 0 +1453 -1469 0 +1454 -1467 0 +-1454 1467 0 +1454 -1470 0 +-1454 1470 0 +1471 1452 0 +1715 1452 0 +-1716 1453 0 +-1716 1471 0 +1471 1454 0 +1717 1454 0 +721 -1715 0 +-721 1715 0 +721 -1718 0 +-721 1718 0 +721 -1722 0 +-721 1722 0 +721 -1728 0 +-721 1728 0 +722 -1716 0 +722 -1719 0 +722 -1723 0 +722 -1729 0 +723 -1717 0 +-723 1717 0 +723 -1720 0 +-723 1720 0 +723 -1724 0 +-723 1724 0 +723 -1730 0 +-723 1730 0 +-724 -721 0 +-726 -721 0 +-378 -721 0 +-727 -721 0 +-379 722 0 +-728 722 0 +-728 -726 0 +-728 -724 0 +-379 -726 0 +-379 -724 0 +-724 -723 0 +-726 -723 0 +-380 -723 0 +-729 -723 0 +396 -407 0 +-396 407 0 +396 -410 0 +-396 410 0 +396 -450 0 +-396 450 0 +396 -617 0 +-396 617 0 +396 -698 0 +-396 698 0 +396 -710 0 +-396 710 0 +396 -727 0 +-396 727 0 +396 -912 0 +-396 912 0 +397 -408 0 +397 -411 0 +397 -451 0 +397 -618 0 +397 -699 0 +397 -711 0 +397 -728 0 +397 -913 0 +398 -409 0 +-398 409 0 +398 -412 0 +-398 412 0 +398 -452 0 +-398 452 0 +398 -619 0 +-398 619 0 +398 -700 0 +-398 700 0 +398 -712 0 +-398 712 0 +398 -729 0 +-398 729 0 +398 -914 0 +-398 914 0 +-1292 397 0 +-1289 397 0 +-1295 397 0 +-1292 -1282 0 +1277 -1291 0 +-1277 1291 0 +1277 -1294 0 +-1277 1294 0 +1278 -1292 0 +1278 -1295 0 +1279 -1293 0 +-1279 1293 0 +1279 -1296 0 +-1279 1296 0 +-1281 -1277 0 +-1285 -1277 0 +-1286 1278 0 +-1286 -1281 0 +-1281 -1279 0 +-1287 -1279 0 +1271 -1285 0 +-1271 1285 0 +1271 -1288 0 +-1271 1288 0 +1272 -1286 0 +1272 -1289 0 +1273 -1287 0 +-1273 1287 0 +1273 -1290 0 +-1273 1290 0 +1274 1271 0 +-1274 -1271 0 +-1275 1272 0 +1276 1273 0 +-1276 -1273 0 +-1514 1275 0 +-1511 1275 0 +-1517 1275 0 +-1514 -1504 0 +1496 -1513 0 +-1496 1513 0 +1496 -1516 0 +-1496 1516 0 +1497 -1514 0 +1497 -1517 0 +1498 -1515 0 +-1498 1515 0 +1498 -1518 0 +-1498 1518 0 +-1503 -1496 0 +-1507 -1496 0 +-1508 1497 0 +-1508 -1503 0 +-1503 -1498 0 +-1509 -1498 0 +1500 -1507 0 +-1500 1507 0 +1500 -1510 0 +-1500 1510 0 +1501 -1508 0 +1501 -1511 0 +1502 -1509 0 +-1502 1509 0 +1502 -1512 0 +-1502 1512 0 +-1527 1501 0 +-1537 1501 0 +-1530 1501 0 +-1527 1532 0 +1520 -1526 0 +-1520 1526 0 +1520 -1529 0 +-1520 1529 0 +1521 -1527 0 +1521 -1530 0 +1522 -1528 0 +-1522 1528 0 +1522 -1531 0 +-1522 1531 0 +1535 1520 0 +1539 1520 0 +-1540 1521 0 +-1540 1535 0 +1535 1522 0 +1541 1522 0 +1523 -1536 0 +-1523 1536 0 +1523 -1539 0 +-1523 1539 0 +1523 -1546 0 +-1523 1546 0 +1523 -1553 0 +-1523 1553 0 +1524 -1537 0 +1524 -1540 0 +1524 -1547 0 +1524 -1554 0 +1525 -1538 0 +-1525 1538 0 +1525 -1541 0 +-1525 1541 0 +1525 -1548 0 +-1525 1548 0 +1525 -1555 0 +-1525 1555 0 +1562 1523 0 +-1562 -1523 0 +-1563 1524 0 +1564 1525 0 +-1564 -1525 0 +-1576 1563 0 +-1570 1563 0 +-1573 1563 0 +-1573 1581 0 +1565 -1569 0 +-1565 1569 0 +1565 -1572 0 +-1565 1572 0 +1566 -1570 0 +1566 -1573 0 +1567 -1571 0 +-1567 1571 0 +1567 -1574 0 +-1567 1574 0 +1578 1565 0 +1584 1565 0 +-1579 1566 0 +-1579 1584 0 +1580 1567 0 +1584 1567 0 +1568 -1581 0 +-1568 1581 0 +1568 -1584 0 +-1568 1584 0 +1643 -1646 0 +-1643 1646 0 +1643 -1647 0 +-1643 1647 0 +-1648 -1643 0 +-1649 -1643 0 +953 -957 0 +-953 957 0 +953 -958 0 +-953 958 0 +953 -1645 0 +-953 1645 0 +953 -1649 0 +-953 1649 0 +953 -2006 0 +-953 2006 0 +953 -2010 0 +-953 2010 0 +21 953 0 +-21 -953 0 +924 -937 0 +-924 937 0 +924 -940 0 +-924 940 0 +924 -1644 0 +-924 1644 0 +924 -1648 0 +-924 1648 0 +1642 924 0 +-1642 -924 0 +22 -1367 0 +-22 1367 0 +22 -1368 0 +-22 1368 0 +22 -1642 0 +-22 1642 0 +1402 -1575 0 +-1402 1575 0 +1402 -1578 0 +-1402 1578 0 +1403 -1576 0 +1403 -1579 0 +1404 -1577 0 +-1404 1577 0 +1404 -1580 0 +-1404 1580 0 +-1415 1403 0 +-1412 1403 0 +-1418 1403 0 +-1415 -1408 0 +1405 -1414 0 +-1405 1414 0 +1405 -1417 0 +-1405 1417 0 +1406 -1415 0 +1406 -1418 0 +1407 -1416 0 +-1407 1416 0 +1407 -1419 0 +-1407 1419 0 +-1420 -1405 0 +-1421 -1405 0 +-1422 1406 0 +-1422 -1420 0 +-1420 -1407 0 +-1423 -1407 0 +1213 -1216 0 +-1213 1216 0 +1213 -1219 0 +-1213 1219 0 +1213 -1411 0 +-1213 1411 0 +1213 -1421 0 +-1213 1421 0 +1214 -1217 0 +1214 -1220 0 +1214 -1412 0 +1214 -1422 0 +1215 -1218 0 +-1215 1218 0 +1215 -1221 0 +-1215 1221 0 +1215 -1413 0 +-1215 1413 0 +1215 -1423 0 +-1215 1423 0 +2018 1213 0 +-2018 -1213 0 +25 -2016 0 +-25 2016 0 +25 -2017 0 +-25 2017 0 +25 -2018 0 +-25 2018 0 +1152 -1165 0 +-1152 1165 0 +1152 -1168 0 +-1152 1168 0 +1152 -1408 0 +-1152 1408 0 +1152 -1420 0 +-1152 1420 0 +1427 1152 0 +-1427 -1152 0 +1 -1427 0 +-1 1427 0 +1 -1428 0 +-1 1428 0 +1 -1432 0 +-1 1432 0 +1519 -1532 0 +-1519 1532 0 +1519 -1535 0 +-1519 1535 0 +1519 -1937 0 +-1519 1937 0 +1773 -1774 0 +-1773 1774 0 +1773 -1775 0 +-1773 1775 0 +-1777 -1773 0 +-1779 -1773 0 +1585 -1778 0 +-1585 1778 0 +1585 -1779 0 +-1585 1779 0 +1586 1585 0 +-1586 -1585 0 +1673 -1676 0 +-1673 1676 0 +1673 -1677 0 +-1673 1677 0 +-1678 -1673 0 +-1679 -1673 0 +666 -670 0 +-666 670 0 +666 -671 0 +-666 671 0 +666 -1675 0 +-666 1675 0 +666 -1679 0 +-666 1679 0 +666 -2005 0 +-666 2005 0 +666 -2009 0 +-666 2009 0 +40 666 0 +-40 -666 0 +1178 -1182 0 +-1178 1182 0 +1178 -1183 0 +-1178 1183 0 +1178 -1674 0 +-1178 1674 0 +1178 -1678 0 +-1178 1678 0 +1839 1178 0 +-1839 -1178 0 +12 -1365 0 +-12 1365 0 +12 -1366 0 +-12 1366 0 +12 -1839 0 +-12 1839 0 +1680 -1776 0 +-1680 1776 0 +1680 -1777 0 +-1680 1777 0 +1681 -1684 0 +-1681 1684 0 +1681 -1685 0 +-1681 1685 0 +1686 1681 0 +1687 1681 0 +18 -997 0 +-18 997 0 +18 -1000 0 +-18 1000 0 +18 -1683 0 +-18 1683 0 +18 -1687 0 +-18 1687 0 +18 -2012 0 +-18 2012 0 +18 -2015 0 +-18 2015 0 +10 -1425 0 +-10 1425 0 +10 -1426 0 +-10 1426 0 +10 -1431 0 +-10 1431 0 +10 -1433 0 +-10 1433 0 +10 -1682 0 +-10 1682 0 +10 -1686 0 +-10 1686 0 +1499 -1503 0 +-1499 1503 0 +1499 -1504 0 +-1499 1504 0 +2 1499 0 +1860 1499 0 +35 -1858 0 +-35 1858 0 +35 -1859 0 +-35 1859 0 +35 -1860 0 +-35 1860 0 +35 -2019 0 +-35 2019 0 +35 -2020 0 +-35 2020 0 +35 -2021 0 +-35 2021 0 +35 -2022 0 +-35 2022 0 +35 -2045 0 +-35 2045 0 +1280 -1281 0 +-1280 1281 0 +1280 -1282 0 +-1280 1282 0 +1298 -1300 0 +-1298 1300 0 +1298 -1301 0 +-1298 1301 0 +1303 1298 0 +1305 1298 0 +1299 -1304 0 +-1299 1304 0 +1299 -1305 0 +-1299 1305 0 +1306 1299 0 +-1306 -1299 0 +1394 -1396 0 +-1394 1396 0 +1394 -1397 0 +-1394 1397 0 +1399 1394 0 +1400 1394 0 +37 -813 0 +-37 813 0 +37 -814 0 +-37 814 0 +37 -830 0 +-37 830 0 +37 -834 0 +-37 834 0 +37 -1395 0 +-37 1395 0 +37 -1400 0 +-37 1400 0 +14 -1398 0 +-14 1398 0 +14 -1399 0 +-14 1399 0 +14 -1401 0 +-14 1401 0 +1297 -1302 0 +-1297 1302 0 +1297 -1303 0 +-1297 1303 0 +541 1297 0 +-541 -1297 0 +542 -543 0 +-542 543 0 +542 -544 0 +-542 544 0 +546 542 0 +548 542 0 +39 -547 0 +-39 547 0 +39 -548 0 +-39 548 0 +39 -549 0 +-39 549 0 +39 -638 0 +-39 638 0 +39 -647 0 +-39 647 0 +5 -545 0 +-5 545 0 +5 -546 0 +-5 546 0 +5 -551 0 +-5 551 0 +382 378 0 +383 378 0 +-384 379 0 +-384 382 0 +382 380 0 +385 380 0 +245 -350 0 +-245 350 0 +245 -353 0 +-245 353 0 +245 -383 0 +-245 383 0 +245 -390 0 +-245 390 0 +245 -401 0 +-245 401 0 +245 -1107 0 +-245 1107 0 +246 -351 0 +246 -354 0 +246 -384 0 +246 -391 0 +246 -402 0 +246 -1108 0 +247 -352 0 +-247 352 0 +247 -355 0 +-247 355 0 +247 -385 0 +-247 385 0 +247 -392 0 +-247 392 0 +247 -403 0 +-247 403 0 +247 -1109 0 +-247 1109 0 +419 245 0 +-419 -245 0 +-420 246 0 +421 247 0 +-421 -247 0 +248 -419 0 +-248 419 0 +248 -422 0 +-248 422 0 +248 -439 0 +-248 439 0 +248 -453 0 +-248 453 0 +248 -626 0 +-248 626 0 +248 -690 0 +-248 690 0 +248 -701 0 +-248 701 0 +249 -420 0 +249 -423 0 +249 -440 0 +249 -454 0 +249 -627 0 +249 -691 0 +249 -702 0 +250 -421 0 +-250 421 0 +250 -424 0 +-250 424 0 +250 -441 0 +-250 441 0 +250 -455 0 +-250 455 0 +250 -628 0 +-250 628 0 +250 -692 0 +-250 692 0 +250 -703 0 +-250 703 0 +-521 249 0 +-518 249 0 +-524 249 0 +-521 511 0 +504 -520 0 +-504 520 0 +504 -523 0 +-504 523 0 +505 -521 0 +505 -524 0 +506 -522 0 +-506 522 0 +506 -525 0 +-506 525 0 +510 504 0 +514 504 0 +-515 505 0 +-515 510 0 +510 506 0 +516 506 0 +507 -514 0 +-507 514 0 +507 -517 0 +-507 517 0 +508 -515 0 +508 -518 0 +509 -516 0 +-509 516 0 +509 -519 0 +-509 519 0 +-1328 508 0 +-1325 508 0 +-1331 508 0 +-1328 -1318 0 +1310 -1327 0 +-1310 1327 0 +1310 -1330 0 +-1310 1330 0 +1311 -1328 0 +1311 -1331 0 +1312 -1329 0 +-1312 1329 0 +1312 -1332 0 +-1312 1332 0 +-1317 -1310 0 +-1321 -1310 0 +-1322 1311 0 +-1322 -1317 0 +-1317 -1312 0 +-1323 -1312 0 +1314 -1321 0 +-1314 1321 0 +1314 -1324 0 +-1314 1324 0 +1315 -1322 0 +1315 -1325 0 +1316 -1323 0 +-1316 1323 0 +1316 -1326 0 +-1316 1326 0 +-1557 1315 0 +-1554 1315 0 +-1560 1315 0 +-1557 1550 0 +1542 -1556 0 +-1542 1556 0 +1542 -1559 0 +-1542 1559 0 +1543 -1557 0 +1543 -1560 0 +1544 -1558 0 +-1544 1558 0 +1544 -1561 0 +-1544 1561 0 +1549 1542 0 +1546 1542 0 +-1547 1543 0 +-1547 1549 0 +1549 1544 0 +1548 1544 0 +1545 -1549 0 +-1545 1549 0 +1545 -1550 0 +-1545 1550 0 +1940 1545 0 +-1940 -1545 0 +1772 -1940 0 +-1772 1940 0 +1772 -1941 0 +-1772 1941 0 +1772 -1943 0 +-1772 1943 0 +1781 -1783 0 +-1781 1783 0 +1781 -1784 0 +-1781 1784 0 +1786 1781 0 +1788 1781 0 +1782 -1787 0 +-1782 1787 0 +1782 -1788 0 +-1782 1788 0 +1963 1782 0 +-1963 -1782 0 +1976 -1980 0 +-1976 1980 0 +1976 -1981 0 +-1976 1981 0 +1982 1976 0 +1983 1976 0 +16 -1978 0 +-16 1978 0 +16 -1979 0 +-16 1979 0 +16 -1983 0 +-16 1983 0 +16 -1988 0 +-16 1988 0 +16 -1991 0 +-16 1991 0 +13 -1378 0 +-13 1378 0 +13 -1379 0 +-13 1379 0 +13 -1964 0 +-13 1964 0 +13 -1977 0 +-13 1977 0 +13 -1982 0 +-13 1982 0 +1780 -1785 0 +-1780 1785 0 +1780 -1786 0 +-1780 1786 0 +1832 -1835 0 +-1832 1835 0 +1832 -1836 0 +-1832 1836 0 +-1837 -1832 0 +-1838 -1832 0 +1650 -1663 0 +-1650 1663 0 +1650 -1666 0 +-1650 1666 0 +1650 -1834 0 +-1650 1834 0 +1650 -1838 0 +-1650 1838 0 +1995 1650 0 +-1995 -1650 0 +32 -1821 0 +-32 1821 0 +32 -1822 0 +-32 1822 0 +32 -1995 0 +-32 1995 0 +1691 -1695 0 +-1691 1695 0 +1691 -1696 0 +-1691 1696 0 +1691 -1833 0 +-1691 1833 0 +1691 -1837 0 +-1691 1837 0 +1691 -1842 0 +-1691 1842 0 +1691 -1847 0 +-1691 1847 0 +15 1691 0 +-15 -1691 0 +1313 -1317 0 +-1313 1317 0 +1313 -1318 0 +-1313 1318 0 +4 1313 0 +1859 1313 0 +503 -510 0 +-503 510 0 +503 -511 0 +-503 511 0 +496 503 0 +-496 -503 0 +495 -501 0 +-495 501 0 +495 -502 0 +-495 502 0 +497 495 0 +499 495 0 +196 -499 0 +-196 499 0 +196 -500 0 +-196 500 0 +197 196 0 +-197 -196 0 +214 -217 0 +-214 217 0 +214 -218 0 +-214 218 0 +219 214 0 +221 214 0 +3 -220 0 +-3 220 0 +3 -221 0 +-3 221 0 +3 -1064 0 +-3 1064 0 +3 -1069 0 +-3 1069 0 +3 -1081 0 +-3 1081 0 +30 -215 0 +-30 215 0 +30 -216 0 +-30 216 0 +30 -219 0 +-30 219 0 +30 -327 0 +-30 327 0 +30 -336 0 +-30 336 0 +183 -497 0 +-183 497 0 +183 -498 0 +-183 498 0 +180 -187 0 +-180 187 0 +180 -188 0 +-180 188 0 +-184 -180 0 +-182 -180 0 +140 -144 0 +-140 144 0 +140 -145 0 +-140 145 0 +140 -182 0 +-140 182 0 +140 -186 0 +-140 186 0 +140 -349 0 +-140 349 0 +140 -362 0 +-140 362 0 +11 140 0 +-11 -140 0 +181 -184 0 +-181 184 0 +181 -185 0 +-181 185 0 +181 -195 0 +-181 195 0 +181 -199 0 +-181 199 0 +756 181 0 +-756 -181 0 +28 -744 0 +-28 744 0 +28 -745 0 +-28 745 0 +28 -756 0 +-28 756 0 +377 -381 0 +-377 381 0 +377 -382 0 +-377 382 0 +377 -389 0 +-377 389 0 +377 -400 0 +-377 400 0 +377 -689 0 +-377 689 0 +377 -697 0 +-377 697 0 +377 -883 0 +-377 883 0 +377 -1126 0 +-377 1126 0 +1749 -1751 0 +-1749 1751 0 +1749 -1752 0 +-1749 1752 0 +1915 1749 0 +1917 1749 0 +1750 -1916 0 +-1750 1916 0 +1750 -1917 0 +-1750 1917 0 +1919 -1921 0 +-1919 1921 0 +1919 -1922 0 +-1919 1922 0 +-1924 -1919 0 +-1926 -1919 0 +1920 -1925 0 +-1920 1925 0 +1920 -1926 0 +-1920 1926 0 +1927 1920 0 +-1927 -1920 0 +1929 -1931 0 +-1929 1931 0 +1929 -1932 0 +-1929 1932 0 +-1934 -1929 0 +-1936 -1929 0 +1930 -1935 0 +-1930 1935 0 +1930 -1936 0 +-1930 1936 0 +1937 1930 0 +-1937 -1930 0 +1928 -1933 0 +-1928 1933 0 +1928 -1934 0 +-1928 1934 0 +1928 -1939 0 +-1928 1939 0 +1928 -1942 0 +-1928 1942 0 +1789 1928 0 +-1789 -1928 0 +1791 -1793 0 +-1791 1793 0 +1791 -1794 0 +-1791 1794 0 +-1796 -1791 0 +-1798 -1791 0 +1792 -1797 0 +-1792 1797 0 +1792 -1798 0 +-1792 1798 0 +1965 1792 0 +-1965 -1792 0 +1966 -1969 0 +-1966 1969 0 +1966 -1970 0 +-1966 1970 0 +-1971 -1966 0 +-1972 -1966 0 +1596 -1609 0 +-1596 1609 0 +1596 -1612 0 +-1596 1612 0 +1596 -1968 0 +-1596 1968 0 +1596 -1972 0 +-1596 1972 0 +1986 1596 0 +-1986 -1596 0 +17 -1986 0 +-17 1986 0 +17 -1987 0 +-17 1987 0 +17 -1990 0 +-17 1990 0 +1637 -1959 0 +-1637 1959 0 +1637 -1960 0 +-1637 1960 0 +1637 -1967 0 +-1637 1967 0 +1637 -1971 0 +-1637 1971 0 +2049 1637 0 +-2049 -1637 0 +23 -2049 0 +-23 2049 0 +23 -2050 0 +-23 2050 0 +23 -2059 0 +-23 2059 0 +1790 -1795 0 +-1790 1795 0 +1790 -1796 0 +-1790 1796 0 +1848 -1850 0 +-1848 1850 0 +1848 -1851 0 +-1848 1851 0 +1854 1848 0 +1855 1848 0 +38 -1819 0 +-38 1819 0 +38 -1820 0 +-38 1820 0 +38 -1849 0 +-38 1849 0 +38 -1855 0 +-38 1855 0 +38 -1857 0 +-38 1857 0 +6 -1852 0 +-6 1852 0 +6 -1853 0 +-6 1853 0 +6 -1854 0 +-6 1854 0 +6 -2029 0 +-6 2029 0 +6 -2038 0 +-6 2038 0 +1918 -1923 0 +-1918 1923 0 +1918 -1924 0 +-1918 1924 0 +29 1918 0 +2020 1918 0 +1748 -1914 0 +-1748 1914 0 +1748 -1915 0 +-1748 1915 0 +1753 1748 0 +-1753 -1748 0 +1754 -1756 0 +-1754 1756 0 +1754 -1757 0 +-1754 1757 0 +1759 1754 0 +1761 1754 0 +1755 -1760 0 +-1755 1760 0 +1755 -1761 0 +-1755 1761 0 +1587 1755 0 +-1587 -1755 0 +1588 -1592 0 +-1588 1592 0 +1588 -1593 0 +-1588 1593 0 +1594 1588 0 +1595 1588 0 +34 -1067 0 +-34 1067 0 +34 -1068 0 +-34 1068 0 +34 -1133 0 +-34 1133 0 +34 -1137 0 +-34 1137 0 +34 -1591 0 +-34 1591 0 +34 -1595 0 +-34 1595 0 +26 -1589 0 +-26 1589 0 +26 -1590 0 +-26 1590 0 +26 -1594 0 +-26 1594 0 +1307 -1758 0 +-1307 1758 0 +1307 -1759 0 +-1307 1759 0 +761 1307 0 +-761 -1307 0 +757 -764 0 +-757 764 0 +757 -765 0 +-757 765 0 +758 757 0 +760 757 0 +8 -759 0 +-8 759 0 +8 -760 0 +-8 760 0 +8 -763 0 +-8 763 0 +19 -742 0 +-19 742 0 +19 -743 0 +-19 743 0 +19 -758 0 +-19 758 0 +19 -762 0 +-19 762 0 +19 -861 0 +-19 861 0 +19 -865 0 +-19 865 0 +716 -725 0 +-716 725 0 +716 -726 0 +-716 726 0 +716 -736 0 +-716 736 0 +716 -1735 0 +-716 1735 0 +-1736 -716 0 +-1747 -716 0 +-1741 -716 0 +-1742 -1741 0 +-1743 -1741 0 +-1744 -1741 0 +-1745 -1741 0 +973 -980 0 +-973 980 0 +973 -981 0 +-973 981 0 +973 -1256 0 +-973 1256 0 +973 -1260 0 +-973 1260 0 +973 -1471 0 +-973 1471 0 +973 -1487 0 +-973 1487 0 +973 -1495 0 +-973 1495 0 +973 -1641 0 +-973 1641 0 +973 -1726 0 +-973 1726 0 +973 -1745 0 +-973 1745 0 +1072 -1078 0 +-1072 1078 0 +1072 -1079 0 +-1072 1079 0 +-1074 -1072 0 +-1076 -1072 0 +1070 -1076 0 +-1070 1076 0 +1070 -1077 0 +-1070 1077 0 +1056 1070 0 +-1056 -1070 0 +1054 -1061 0 +-1054 1061 0 +1054 -1062 0 +-1054 1062 0 +-1057 -1054 0 +-1059 -1054 0 +789 -1059 0 +-789 1059 0 +789 -1060 0 +-789 1060 0 +790 -792 0 +-790 792 0 +790 -793 0 +-790 793 0 +795 790 0 +797 790 0 +791 -796 0 +-791 796 0 +791 -797 0 +-791 797 0 +791 -798 0 +-791 798 0 +800 -802 0 +-800 802 0 +800 -803 0 +-800 803 0 +-805 -800 0 +-807 -800 0 +801 -806 0 +-801 806 0 +801 -807 0 +-801 807 0 +1063 -1065 0 +-1063 1065 0 +1063 -1066 0 +-1063 1066 0 +1068 1063 0 +1069 1063 0 +799 -804 0 +-799 804 0 +799 -805 0 +-799 805 0 +808 -809 0 +-808 809 0 +808 -810 0 +-808 810 0 +812 808 0 +814 808 0 +33 -811 0 +-33 811 0 +33 -812 0 +-33 812 0 +33 -1359 0 +-33 1359 0 +151 -794 0 +-151 794 0 +151 -795 0 +-151 795 0 +151 -1029 0 +-151 1029 0 +151 -1032 0 +-151 1032 0 +149 -156 0 +-149 156 0 +149 -157 0 +-149 157 0 +-152 -149 0 +-154 -149 0 +148 -154 0 +-148 154 0 +148 -155 0 +-148 155 0 +141 148 0 +-141 -148 0 +138 -146 0 +-138 146 0 +138 -147 0 +-138 147 0 +-142 -138 0 +-144 -138 0 +139 -142 0 +-139 142 0 +139 -143 0 +-139 143 0 +139 -164 0 +-139 164 0 +139 -173 0 +-139 173 0 +759 139 0 +-759 -139 0 +150 -152 0 +-150 152 0 +150 -153 0 +-150 153 0 +225 150 0 +-225 -150 0 +237 -239 0 +-237 239 0 +237 -240 0 +-237 240 0 +-242 -237 0 +-244 -237 0 +238 -243 0 +-238 243 0 +238 -244 0 +-238 244 0 +549 238 0 +-549 -238 0 +236 -241 0 +-236 241 0 +236 -242 0 +-236 242 0 +236 -260 0 +-236 260 0 +236 -261 0 +-236 261 0 +1824 236 0 +-1824 -236 0 +27 -1824 0 +-27 1824 0 +27 -1825 0 +-27 1825 0 +27 -1830 0 +-27 1830 0 +1055 -1057 0 +-1055 1057 0 +1055 -1058 0 +-1055 1058 0 +9 1055 0 +1858 1055 0 +1073 -1074 0 +-1073 1074 0 +1073 -1075 0 +-1073 1075 0 +1996 -1998 0 +-1996 1998 0 +1996 -1999 0 +-1996 1999 0 +2001 1996 0 +2003 1996 0 +1997 -2002 0 +-1997 2002 0 +1997 -2003 0 +-1997 2003 0 +2004 -2007 0 +-2004 2007 0 +2004 -2008 0 +-2004 2008 0 +-2009 -2004 0 +-2010 -2004 0 +1994 -2000 0 +-1994 2000 0 +1994 -2001 0 +-1994 2001 0 +1989 1994 0 +-1989 -1994 0 +1985 -1992 0 +-1985 1992 0 +1985 -1993 0 +-1985 1993 0 +1987 1985 0 +1988 1985 0 +229 -1245 0 +-229 1245 0 +229 -1246 0 +-229 1246 0 +229 -1472 0 +-229 1472 0 +229 -1484 0 +-229 1484 0 +229 -1727 0 +-229 1727 0 +229 -1739 0 +-229 1739 0 +229 -1744 0 +-229 1744 0 +229 -1883 0 +-229 1883 0 +226 -234 0 +-226 234 0 +226 -235 0 +-226 235 0 +-230 -226 0 +-232 -226 0 +228 -232 0 +-228 232 0 +228 -233 0 +-228 233 0 +526 -533 0 +-526 533 0 +526 -534 0 +-526 534 0 +529 526 0 +531 526 0 +528 -531 0 +-528 531 0 +528 -532 0 +-528 532 0 +222 -539 0 +-222 539 0 +222 -540 0 +-222 540 0 +-535 -222 0 +-537 -222 0 +224 -537 0 +-224 537 0 +224 -538 0 +-224 538 0 +798 224 0 +-798 -224 0 +223 -535 0 +-223 535 0 +223 -536 0 +-223 536 0 +223 -1026 0 +-223 1026 0 +465 -471 0 +-465 471 0 +465 -472 0 +-465 472 0 +467 465 0 +469 465 0 +458 -469 0 +-458 469 0 +458 -470 0 +-458 470 0 +456 -463 0 +-456 463 0 +456 -464 0 +-456 464 0 +-459 -456 0 +-461 -456 0 +198 -461 0 +-198 461 0 +198 -462 0 +-198 462 0 +215 198 0 +-215 -198 0 +457 -459 0 +-457 459 0 +457 -460 0 +-457 460 0 +457 -479 0 +-457 479 0 +457 -488 0 +-457 488 0 +1589 457 0 +-1589 -457 0 +466 -467 0 +-466 467 0 +466 -468 0 +-466 468 0 +815 -818 0 +-815 818 0 +815 -819 0 +-815 819 0 +-820 -815 0 +-822 -815 0 +816 -821 0 +-816 821 0 +816 -822 0 +-816 822 0 +816 -896 0 +-816 896 0 +816 -897 0 +-816 897 0 +1401 816 0 +-1401 -816 0 +578 -579 0 +-578 579 0 +578 -580 0 +-578 580 0 +578 -817 0 +-578 817 0 +578 -820 0 +-578 820 0 +578 -1353 0 +-578 1353 0 +578 -1357 0 +-578 1357 0 +20 578 0 +-20 -578 0 +527 -529 0 +-527 529 0 +527 -530 0 +-527 530 0 +1071 527 0 +-1071 -527 0 +31 1071 0 +2022 1071 0 +227 -230 0 +-227 230 0 +227 -231 0 +-227 231 0 +1807 -1809 0 +-1807 1809 0 +1807 -1810 0 +-1807 1810 0 +1812 1807 0 +1814 1807 0 +1808 -1813 0 +-1808 1813 0 +1808 -1814 0 +-1808 1814 0 +1984 1808 0 +-1984 -1808 0 +2011 -2013 0 +-2011 2013 0 +2011 -2014 0 +-2011 2014 0 +2015 2011 0 +2017 2011 0 +1806 -1811 0 +-1806 1811 0 +1806 -1812 0 +-1806 1812 0 +1815 1806 0 +-1815 -1806 0 +1816 -1817 0 +-1816 1817 0 +1816 -1818 0 +-1816 1818 0 +1820 1816 0 +1822 1816 0 +1255 -1258 0 +-1255 1258 0 +1255 -1259 0 +-1255 1259 0 +1255 -1743 0 +-1255 1743 0 +1255 -1907 0 +-1255 1907 0 +1746 1255 0 +-1746 -1255 0 +1047 -1238 0 +-1047 1238 0 +1047 -1239 0 +-1047 1239 0 +1047 -1486 0 +-1047 1486 0 +1047 -1493 0 +-1047 1493 0 +1047 -1714 0 +-1047 1714 0 +1047 -1731 0 +-1047 1731 0 +1047 -1732 0 +-1047 1732 0 +1047 -1738 0 +-1047 1738 0 +1047 -1746 0 +-1047 1746 0 +1045 -1052 0 +-1045 1052 0 +1045 -1053 0 +-1045 1053 0 +-1048 -1045 0 +-1050 -1045 0 +1044 -1050 0 +-1044 1050 0 +1044 -1051 0 +-1044 1051 0 +1037 1044 0 +-1037 -1044 0 +1035 -1042 0 +-1035 1042 0 +1035 -1043 0 +-1035 1043 0 +-1038 -1035 0 +-1040 -1035 0 +1019 -1040 0 +-1019 1040 0 +1019 -1041 0 +-1019 1041 0 +1017 -1024 0 +-1017 1024 0 +1017 -1025 0 +-1017 1025 0 +1020 1017 0 +1022 1017 0 +1018 -1022 0 +-1018 1022 0 +1018 -1023 0 +-1018 1023 0 +1026 1018 0 +-1026 -1018 0 +748 -1020 0 +-748 1020 0 +748 -1021 0 +-748 1021 0 +748 -1028 0 +-748 1028 0 +748 -1031 0 +-748 1031 0 +749 -750 0 +-749 750 0 +749 -751 0 +-749 751 0 +-753 -749 0 +-755 -749 0 +741 -754 0 +-741 754 0 +741 -755 0 +-741 755 0 +740 -746 0 +-740 746 0 +740 -747 0 +-740 747 0 +742 740 0 +744 740 0 +552 -752 0 +-552 752 0 +552 -753 0 +-552 753 0 +553 552 0 +-553 -552 0 +554 -556 0 +-554 556 0 +554 -557 0 +-554 557 0 +-562 -554 0 +-564 -554 0 +550 -563 0 +-550 563 0 +550 -564 0 +-550 564 0 +550 -601 0 +-550 601 0 +550 -602 0 +-550 602 0 +551 550 0 +-551 -550 0 +301 -302 0 +-301 302 0 +301 -303 0 +-301 303 0 +301 -555 0 +-301 555 0 +301 -562 0 +-301 562 0 +1831 301 0 +-1831 -301 0 +24 -1828 0 +-24 1828 0 +24 -1829 0 +-24 1829 0 +24 -1831 0 +-24 1831 0 +1036 -1038 0 +-1036 1038 0 +1036 -1039 0 +-1036 1039 0 +7 1036 0 +2019 1036 0 +1046 -1048 0 +-1046 1048 0 +1046 -1049 0 +-1046 1049 0 +1947 -1953 0 +-1947 1953 0 +1947 -1954 0 +-1947 1954 0 +1949 1947 0 +1951 1947 0 +1308 -1951 0 +-1308 1951 0 +1308 -1952 0 +-1308 1952 0 +1309 1308 0 +-1309 -1308 0 +1362 -1363 0 +-1362 1363 0 +1362 -1364 0 +-1362 1364 0 +1366 1362 0 +1368 1362 0 +1948 -1949 0 +-1948 1949 0 +1948 -1950 0 +-1948 1950 0 +1955 -1957 0 +-1955 1957 0 +1955 -1958 0 +-1955 1958 0 +-1960 -1955 0 +-1962 -1955 0 +1956 -1961 0 +-1956 1961 0 +1956 -1962 0 +-1956 1962 0 +1964 1956 0 +-1964 -1956 0 +1234 -1261 0 +-1234 1261 0 +1234 -1262 0 +-1234 1262 0 +1234 -1474 0 +-1234 1474 0 +1234 -1490 0 +-1234 1490 0 +1234 -1492 0 +-1234 1492 0 +1234 -1721 0 +-1234 1721 0 +1234 -1737 0 +-1234 1737 0 +1234 -1742 0 +-1234 1742 0 +1234 -1903 0 +-1234 1903 0 +1621 -1627 0 +-1621 1627 0 +1621 -1628 0 +-1621 1628 0 +-1623 -1621 0 +-1625 -1621 0 +1619 -1625 0 +-1619 1625 0 +1619 -1626 0 +-1619 1626 0 +1620 1619 0 +-1620 -1619 0 +1800 -1801 0 +-1800 1801 0 +1800 -1802 0 +-1800 1802 0 +-1803 -1800 0 +-1805 -1800 0 +1030 -1804 0 +-1030 1804 0 +1030 -1805 0 +-1030 1805 0 +1027 -1033 0 +-1027 1033 0 +1027 -1034 0 +-1027 1034 0 +1028 1027 0 +1029 1027 0 +1973 1803 0 +-1973 -1803 0 +1975 1973 0 +-1975 -1973 0 +1799 -1974 0 +-1799 1974 0 +1799 -1975 0 +-1799 1975 0 +36 1799 0 +2021 1799 0 +1622 -1623 0 +-1622 1623 0 +1622 -1624 0 +-1622 1624 0 +1630 -1631 0 +-1630 1631 0 +1630 -1632 0 +-1630 1632 0 +1634 1630 0 +1636 1630 0 +1360 -1635 0 +-1360 1635 0 +1360 -1636 0 +-1360 1636 0 +1361 1360 0 +-1361 -1360 0 +1424 -1429 0 +-1424 1429 0 +1424 -1430 0 +-1424 1430 0 +1431 1424 0 +1432 1424 0 +1629 -1633 0 +-1629 1633 0 +1629 -1634 0 +-1629 1634 0 +1841 -1843 0 +-1841 1843 0 +1841 -1844 0 +-1841 1844 0 +-1846 -1841 0 +-1847 -1841 0 +1840 -1845 0 +-1840 1845 0 +1840 -1846 0 +-1840 1846 0 +1853 1840 0 +-1853 -1840 0 +1488 1747 0 +-1488 -1747 0 +-1489 -1488 0 +-1492 -1489 0 +-1493 -1489 0 +-1494 -1489 0 +-1495 -1489 0 +1016 -1269 0 +-1016 1269 0 +1016 -1270 0 +-1016 1270 0 +1016 -1478 0 +-1016 1478 0 +1016 -1491 0 +-1016 1491 0 +1016 -1494 0 +-1016 1494 0 +1472 1016 0 +-1472 -1016 0 +-1486 -1485 0 +-1487 -1485 0 +-1737 -1736 0 +-1738 -1736 0 +-1739 -1736 0 +-1740 -1736 0 +1725 -1733 0 +-1725 1733 0 +1725 -1734 0 +-1725 1734 0 +1725 -1740 0 +-1725 1740 0 +1726 1725 0 +-1726 -1725 0 +428 -445 0 +-428 445 0 +428 -448 0 +-428 448 0 +428 -696 0 +-428 696 0 +428 -707 0 +-428 707 0 +428 -724 0 +-428 724 0 +428 -823 0 +-428 823 0 +1333 -1340 0 +-1333 1340 0 +1333 -1341 0 +-1333 1341 0 +1336 1333 0 +1338 1333 0 +1335 -1338 0 +-1335 1338 0 +1335 -1339 0 +-1335 1339 0 +1762 1335 0 +-1762 -1335 0 +1764 -1766 0 +-1764 1766 0 +1764 -1767 0 +-1764 1767 0 +1769 1764 0 +1771 1764 0 +1765 -1770 0 +-1765 1770 0 +1765 -1771 0 +-1765 1771 0 +1938 -1944 0 +-1938 1944 0 +1938 -1945 0 +-1938 1945 0 +-1939 -1938 0 +-1941 -1938 0 +1763 -1768 0 +-1763 1768 0 +1763 -1769 0 +-1763 1769 0 +1946 1763 0 +-1946 -1763 0 +41 1946 0 +2045 1946 0 +1334 -1336 0 +-1334 1336 0 +1334 -1337 0 +-1334 1337 0 +1343 -1345 0 +-1343 1345 0 +1343 -1346 0 +-1343 1346 0 +-1348 -1343 0 +-1350 -1343 0 +1344 -1349 0 +-1344 1349 0 +1344 -1350 0 +-1344 1350 0 +1351 1344 0 +-1351 -1344 0 +1352 -1355 0 +-1352 1355 0 +1352 -1356 0 +-1352 1356 0 +-1357 -1352 0 +-1358 -1352 0 +766 -779 0 +-766 779 0 +766 -782 0 +-766 782 0 +766 -1354 0 +-766 1354 0 +766 -1358 0 +-766 1358 0 +1359 766 0 +-1359 -766 0 +1342 -1347 0 +-1342 1347 0 +1342 -1348 0 +-1342 1348 0 +1823 -1826 0 +-1823 1826 0 +1823 -1827 0 +-1823 1827 0 +1829 1823 0 +1830 1823 0 +1448 -1461 0 +-1448 1461 0 +1448 -1464 0 +-1448 1464 0 +1978 1448 0 +-1978 -1448 0 +-83 -2081 0 +81 -2081 0 +83 -2082 0 +-81 -2082 0 +-2082 2080 0 +-2081 2080 0 +1375 81 0 +-1375 -81 0 +-1376 82 0 +1377 83 0 +-1377 -83 0 +-1389 1376 0 +-1386 1376 0 +-1392 1376 0 +-1389 1379 0 +1369 -1388 0 +-1369 1388 0 +1369 -1391 0 +-1369 1391 0 +1370 -1389 0 +1370 -1392 0 +1371 -1390 0 +-1371 1390 0 +1371 -1393 0 +-1371 1393 0 +1378 1369 0 +1382 1369 0 +-1383 1370 0 +-1383 1378 0 +1378 1371 0 +1384 1371 0 +1372 -1382 0 +-1372 1382 0 +1372 -1385 0 +-1372 1385 0 +1373 -1383 0 +1373 -1386 0 +1374 -1384 0 +-1374 1384 0 +1374 -1387 0 +-1374 1387 0 +1711 1372 0 +-1711 -1372 0 +-1712 1373 0 +1713 1374 0 +-1713 -1374 0 +1714 1711 0 +1718 1711 0 +-1719 1712 0 +-1719 1714 0 +1714 1713 0 +1720 1713 0 +-50 -2084 0 +48 -2084 0 +50 -2085 0 +-48 -2085 0 +-2085 2083 0 +-2084 2083 0 +-1706 49 0 +-1703 49 0 +-1709 49 0 +-1706 -1696 0 +1688 -1705 0 +-1688 1705 0 +1688 -1708 0 +-1688 1708 0 +1689 -1706 0 +1689 -1709 0 +1690 -1707 0 +-1690 1707 0 +1690 -1710 0 +-1690 1710 0 +-1695 -1688 0 +-1699 -1688 0 +-1700 1689 0 +-1700 -1695 0 +-1695 -1690 0 +-1701 -1690 0 +1692 -1699 0 +-1692 1699 0 +1692 -1702 0 +-1692 1702 0 +1693 -1700 0 +1693 -1703 0 +1694 -1701 0 +-1694 1701 0 +1694 -1704 0 +-1694 1704 0 +1721 1692 0 +1722 1692 0 +-1723 1693 0 +-1723 1721 0 +1721 1694 0 +1724 1694 0 +-53 -2087 0 +51 -2087 0 +53 -2088 0 +-51 -2088 0 +-2088 2086 0 +-2087 2086 0 +-1658 52 0 +-1668 52 0 +-1661 52 0 +-1658 -1663 0 +1651 -1657 0 +-1651 1657 0 +1651 -1660 0 +-1651 1660 0 +1652 -1658 0 +1652 -1661 0 +1653 -1659 0 +-1653 1659 0 +1653 -1662 0 +-1653 1662 0 +-1666 -1651 0 +-1670 -1651 0 +-1671 1652 0 +-1671 -1666 0 +-1666 -1653 0 +-1672 -1653 0 +1654 -1667 0 +-1654 1667 0 +1654 -1670 0 +-1654 1670 0 +1655 -1668 0 +1655 -1671 0 +1656 -1669 0 +-1656 1669 0 +1656 -1672 0 +-1656 1672 0 +1727 1654 0 +1728 1654 0 +-1729 1655 0 +-1729 1727 0 +1727 1656 0 +1730 1656 0 +-68 -2090 0 +66 -2090 0 +68 -2091 0 +-66 -2091 0 +-2091 2089 0 +-2090 2089 0 +-1220 67 0 +-1229 67 0 +-1226 67 0 +-1232 67 0 +1210 -1228 0 +-1210 1228 0 +1210 -1231 0 +-1210 1231 0 +1211 -1229 0 +1211 -1232 0 +1212 -1230 0 +-1212 1230 0 +1212 -1233 0 +-1212 1233 0 +-1216 -1210 0 +-1222 -1210 0 +-1217 1211 0 +-1223 1211 0 +-1218 -1212 0 +-1224 -1212 0 +947 -1222 0 +-947 1222 0 +947 -1225 0 +-947 1225 0 +948 -1223 0 +948 -1226 0 +949 -1224 0 +-949 1224 0 +949 -1227 0 +-949 1227 0 +1245 947 0 +974 947 0 +-975 948 0 +-975 1245 0 +1245 949 0 +976 949 0 +713 -974 0 +-713 974 0 +713 -977 0 +-713 977 0 +713 -1198 0 +-713 1198 0 +713 -1235 0 +-713 1235 0 +714 -975 0 +714 -978 0 +714 -1199 0 +714 -1236 0 +715 -976 0 +-715 976 0 +715 -979 0 +-715 979 0 +715 -1200 0 +-715 1200 0 +715 -1237 0 +-715 1237 0 +-717 -713 0 +-725 -713 0 +-386 -713 0 +-718 -713 0 +-387 714 0 +-719 714 0 +-719 -725 0 +-719 -717 0 +-387 -725 0 +-387 -717 0 +-717 -715 0 +-725 -715 0 +-388 -715 0 +-720 -715 0 +404 -432 0 +-404 432 0 +404 -435 0 +-404 435 0 +404 -654 0 +-404 654 0 +404 -718 0 +-404 718 0 +404 -852 0 +-404 852 0 +405 -433 0 +405 -436 0 +405 -655 0 +405 -719 0 +405 -853 0 +406 -434 0 +-406 434 0 +406 -437 0 +-406 437 0 +406 -656 0 +-406 656 0 +406 -720 0 +-406 720 0 +406 -854 0 +-406 854 0 +410 404 0 +-410 -404 0 +-411 405 0 +412 406 0 +-412 -406 0 +389 386 0 +390 386 0 +-391 387 0 +-391 389 0 +389 388 0 +392 388 0 +280 -290 0 +-280 290 0 +280 -291 0 +-280 291 0 +280 -399 0 +-280 399 0 +280 -416 0 +-280 416 0 +280 -568 0 +-280 568 0 +280 -717 0 +-280 717 0 +280 -1110 0 +-280 1110 0 +823 280 0 +-823 -280 0 +-74 -2093 0 +72 -2093 0 +74 -2094 0 +-72 -2094 0 +-2094 2092 0 +-2093 2092 0 +-968 73 0 +-965 73 0 +-971 73 0 +-968 -958 0 +950 -967 0 +-950 967 0 +950 -970 0 +-950 970 0 +951 -968 0 +951 -971 0 +952 -969 0 +-952 969 0 +952 -972 0 +-952 972 0 +-957 -950 0 +-961 -950 0 +-962 951 0 +-962 -957 0 +-957 -952 0 +-963 -952 0 +954 -961 0 +-954 961 0 +954 -964 0 +-954 964 0 +955 -962 0 +955 -965 0 +956 -963 0 +-956 963 0 +956 -966 0 +-956 966 0 +980 954 0 +977 954 0 +-978 955 0 +-978 980 0 +980 956 0 +979 956 0 +-71 -2096 0 +69 -2096 0 +71 -2097 0 +-69 -2097 0 +-2097 2095 0 +-2096 2095 0 +-932 70 0 +-942 70 0 +-935 70 0 +-932 -937 0 +925 -931 0 +-925 931 0 +925 -934 0 +-925 934 0 +926 -932 0 +926 -935 0 +927 -933 0 +-927 933 0 +927 -936 0 +-927 936 0 +-940 -925 0 +-944 -925 0 +-945 926 0 +-945 -940 0 +-940 -927 0 +-946 -927 0 +928 -941 0 +-928 941 0 +928 -944 0 +-928 944 0 +929 -942 0 +929 -945 0 +930 -943 0 +-930 943 0 +930 -946 0 +-930 946 0 +1238 928 0 +1198 928 0 +-1199 929 0 +-1199 1238 0 +1238 930 0 +1200 930 0 +-65 -2099 0 +63 -2099 0 +65 -2100 0 +-63 -2100 0 +-2100 2098 0 +-2099 2098 0 +-1160 64 0 +-1170 64 0 +-1163 64 0 +-1160 -1165 0 +1153 -1159 0 +-1153 1159 0 +1153 -1162 0 +-1153 1162 0 +1154 -1160 0 +1154 -1163 0 +1155 -1161 0 +-1155 1161 0 +1155 -1164 0 +-1155 1164 0 +-1168 -1153 0 +-1172 -1153 0 +-1173 1154 0 +-1173 -1168 0 +-1168 -1155 0 +-1174 -1155 0 +1156 -1169 0 +-1156 1169 0 +1156 -1172 0 +-1156 1172 0 +1157 -1170 0 +1157 -1173 0 +1158 -1171 0 +-1158 1171 0 +1158 -1174 0 +-1158 1174 0 +1261 1156 0 +1235 1156 0 +-1236 1157 0 +-1236 1261 0 +1261 1158 0 +1237 1158 0 +-47 -2102 0 +45 -2102 0 +47 -2103 0 +-45 -2103 0 +-2103 2101 0 +-2102 2101 0 +-1604 46 0 +-1614 46 0 +-1607 46 0 +-1604 -1609 0 +1597 -1603 0 +-1597 1603 0 +1597 -1606 0 +-1597 1606 0 +1598 -1604 0 +1598 -1607 0 +1599 -1605 0 +-1599 1605 0 +1599 -1608 0 +-1599 1608 0 +-1612 -1597 0 +-1616 -1597 0 +-1617 1598 0 +-1617 -1612 0 +-1612 -1599 0 +-1618 -1599 0 +1600 -1613 0 +-1600 1613 0 +1600 -1616 0 +-1600 1616 0 +1601 -1614 0 +1601 -1617 0 +1602 -1615 0 +-1602 1615 0 +1602 -1618 0 +-1602 1618 0 +1641 1600 0 +1884 1600 0 +-1885 1601 0 +-1885 1641 0 +1641 1602 0 +1886 1602 0 +1638 -1884 0 +-1638 1884 0 +1638 -1887 0 +-1638 1887 0 +1638 -1893 0 +-1638 1893 0 +1639 -1885 0 +1639 -1888 0 +1639 -1894 0 +1640 -1886 0 +-1640 1886 0 +1640 -1889 0 +-1640 1889 0 +1640 -1895 0 +-1640 1895 0 +-413 -1638 0 +-1735 -1638 0 +-414 1639 0 +-414 -1735 0 +-415 -1640 0 +-1735 -1640 0 +416 413 0 +418 413 0 +432 413 0 +422 413 0 +-433 414 0 +-423 414 0 +-423 418 0 +-423 416 0 +-433 418 0 +-433 416 0 +416 415 0 +418 415 0 +434 415 0 +424 415 0 +276 -417 0 +-276 417 0 +276 -418 0 +-276 418 0 +276 -438 0 +-276 438 0 +276 -449 0 +-276 449 0 +276 -561 0 +-276 561 0 +381 276 0 +-381 -276 0 +-44 -2105 0 +42 -2105 0 +44 -2106 0 +-42 -2106 0 +-2106 2104 0 +-2105 2104 0 +-1868 43 0 +-1878 43 0 +-1871 43 0 +-1868 -1873 0 +1861 -1867 0 +-1861 1867 0 +1861 -1870 0 +-1861 1870 0 +1862 -1868 0 +1862 -1871 0 +1863 -1869 0 +-1863 1869 0 +1863 -1872 0 +-1863 1872 0 +-1876 -1861 0 +-1880 -1861 0 +-1881 1862 0 +-1881 -1876 0 +-1876 -1863 0 +-1882 -1863 0 +1864 -1877 0 +-1864 1877 0 +1864 -1880 0 +-1864 1880 0 +1865 -1878 0 +1865 -1881 0 +1866 -1879 0 +-1866 1879 0 +1866 -1882 0 +-1866 1882 0 +1883 1864 0 +1887 1864 0 +-1888 1865 0 +-1888 1883 0 +1883 1866 0 +1889 1866 0 +1856 -1873 0 +-1856 1873 0 +1856 -1876 0 +-1856 1876 0 +1857 1856 0 +-1857 -1856 0 +-77 -2108 0 +75 -2108 0 +77 -2109 0 +-75 -2109 0 +-2109 2107 0 +-2108 2107 0 +2023 75 0 +-2023 -75 0 +-2024 76 0 +2025 77 0 +-2025 -77 0 +-2033 2024 0 +-2040 2024 0 +-2036 2024 0 +-2033 2029 0 +2026 -2032 0 +-2026 2032 0 +2026 -2035 0 +-2026 2035 0 +2027 -2033 0 +2027 -2036 0 +2028 -2034 0 +-2028 2034 0 +2028 -2037 0 +-2028 2037 0 +2038 2026 0 +2042 2026 0 +-2043 2027 0 +-2043 2038 0 +2038 2028 0 +2044 2028 0 +1896 -2039 0 +-1896 2039 0 +1896 -2042 0 +-1896 2042 0 +1897 -2040 0 +1897 -2043 0 +1898 -2041 0 +-1898 2041 0 +1898 -2044 0 +-1898 2044 0 +-1899 -1896 0 +-1908 -1896 0 +-1909 1897 0 +-1909 -1899 0 +-1899 -1898 0 +-1910 -1898 0 +1890 -1908 0 +-1890 1908 0 +1890 -1911 0 +-1890 1911 0 +1891 -1909 0 +1891 -1912 0 +1892 -1910 0 +-1892 1910 0 +1892 -1913 0 +-1892 1913 0 +1893 1890 0 +-1893 -1890 0 +-1894 1891 0 +1895 1892 0 +-1895 -1892 0 +1243 -1247 0 +-1243 1247 0 +1243 -1248 0 +-1243 1248 0 +1243 -1480 0 +-1243 1480 0 +1243 -1899 0 +-1243 1899 0 +1903 1243 0 +-1903 -1243 0 +-80 -2111 0 +78 -2111 0 +80 -2112 0 +-78 -2112 0 +-2112 2110 0 +-2111 2110 0 +1900 78 0 +-1900 -78 0 +-1901 79 0 +1902 80 0 +-1902 -80 0 +-2054 1901 0 +-2061 1901 0 +-2057 1901 0 +-2054 2050 0 +2046 -2053 0 +-2046 2053 0 +2046 -2056 0 +-2046 2056 0 +2047 -2054 0 +2047 -2057 0 +2048 -2055 0 +-2048 2055 0 +2048 -2058 0 +-2048 2058 0 +2059 2046 0 +2063 2046 0 +-2064 2047 0 +-2064 2059 0 +2059 2048 0 +2065 2048 0 +1904 -2060 0 +-1904 2060 0 +1904 -2063 0 +-1904 2063 0 +1905 -2061 0 +1905 -2064 0 +1906 -2062 0 +-1906 2062 0 +1906 -2065 0 +-1906 2065 0 +-1907 -1904 0 +-1911 -1904 0 +-1912 1905 0 +-1912 -1907 0 +-1907 -1906 0 +-1913 -1906 0 +-62 -2114 0 +60 -2114 0 +62 -2115 0 +-60 -2115 0 +-2115 2113 0 +-2114 2113 0 +-681 61 0 +-678 61 0 +-684 61 0 +-681 -671 0 +663 -680 0 +-663 680 0 +663 -683 0 +-663 683 0 +664 -681 0 +664 -684 0 +665 -682 0 +-665 682 0 +665 -685 0 +-665 685 0 +-670 -663 0 +-674 -663 0 +-675 664 0 +-675 -670 0 +-670 -665 0 +-676 -665 0 +667 -674 0 +-667 674 0 +667 -677 0 +-667 677 0 +668 -675 0 +668 -678 0 +669 -676 0 +-669 676 0 +669 -679 0 +-669 679 0 +981 667 0 +1010 667 0 +-1011 668 0 +-1011 981 0 +981 669 0 +1012 669 0 +733 -1010 0 +-733 1010 0 +733 -1013 0 +-733 1013 0 +733 -1240 0 +-733 1240 0 +734 -1011 0 +734 -1014 0 +734 -1241 0 +735 -1012 0 +-735 1012 0 +735 -1015 0 +-735 1015 0 +735 -1242 0 +-735 1242 0 +-442 -733 0 +-736 -733 0 +-443 734 0 +-443 -736 0 +-444 -735 0 +-736 -735 0 +448 442 0 +449 442 0 +450 442 0 +453 442 0 +-451 443 0 +-454 443 0 +-454 449 0 +-454 448 0 +-451 449 0 +-451 448 0 +448 444 0 +449 444 0 +452 444 0 +455 444 0 +-89 -2117 0 +87 -2117 0 +89 -2118 0 +-87 -2118 0 +-2118 2116 0 +-2117 2116 0 +982 87 0 +-982 -87 0 +-983 88 0 +984 89 0 +-984 -89 0 +-992 983 0 +-1002 983 0 +-995 983 0 +-992 997 0 +985 -991 0 +-985 991 0 +985 -994 0 +-985 994 0 +986 -992 0 +986 -995 0 +987 -993 0 +-987 993 0 +987 -996 0 +-987 996 0 +1000 985 0 +1004 985 0 +-1005 986 0 +-1005 1000 0 +1000 987 0 +1006 987 0 +988 -1001 0 +-988 1001 0 +988 -1004 0 +-988 1004 0 +989 -1002 0 +989 -1005 0 +990 -1003 0 +-990 1003 0 +990 -1006 0 +-990 1006 0 +-1269 -988 0 +-1249 -988 0 +-1250 989 0 +-1250 -1269 0 +-1269 -990 0 +-1251 -990 0 +1007 -1249 0 +-1007 1249 0 +1007 -1252 0 +-1007 1252 0 +1008 -1250 0 +1008 -1253 0 +1009 -1251 0 +-1009 1251 0 +1009 -1254 0 +-1009 1254 0 +1013 1007 0 +-1013 -1007 0 +-1014 1008 0 +1015 1009 0 +-1015 -1009 0 +-86 -2120 0 +84 -2120 0 +86 -2121 0 +-84 -2121 0 +-2121 2119 0 +-2120 2119 0 +1201 84 0 +-1201 -84 0 +-1202 85 0 +1203 86 0 +-1203 -86 0 +-1443 1202 0 +-1440 1202 0 +-1446 1202 0 +-1443 1433 0 +1204 -1442 0 +-1204 1442 0 +1204 -1445 0 +-1204 1445 0 +1205 -1443 0 +1205 -1446 0 +1206 -1444 0 +-1206 1444 0 +1206 -1447 0 +-1206 1447 0 +1425 1204 0 +1436 1204 0 +-1437 1205 0 +-1437 1425 0 +1425 1206 0 +1438 1206 0 +1207 -1436 0 +-1207 1436 0 +1207 -1439 0 +-1207 1439 0 +1208 -1437 0 +1208 -1440 0 +1209 -1438 0 +-1209 1438 0 +1209 -1441 0 +-1209 1441 0 +-1248 -1207 0 +-1252 -1207 0 +-1253 1208 0 +-1253 -1248 0 +-1248 -1209 0 +-1254 -1209 0 +-59 -2123 0 +57 -2123 0 +59 -2124 0 +-57 -2124 0 +-2124 2122 0 +-2123 2122 0 +-1193 58 0 +-1190 58 0 +-1196 58 0 +-1193 -1183 0 +1175 -1192 0 +-1175 1192 0 +1175 -1195 0 +-1175 1195 0 +1176 -1193 0 +1176 -1196 0 +1177 -1194 0 +-1177 1194 0 +1177 -1197 0 +-1177 1197 0 +-1182 -1175 0 +-1186 -1175 0 +-1187 1176 0 +-1187 -1182 0 +-1182 -1177 0 +-1188 -1177 0 +1179 -1186 0 +-1179 1186 0 +1179 -1189 0 +-1179 1189 0 +1180 -1187 0 +1180 -1190 0 +1181 -1188 0 +-1181 1188 0 +1181 -1191 0 +-1181 1191 0 +1239 1179 0 +1240 1179 0 +-1241 1180 0 +-1241 1239 0 +1239 1181 0 +1242 1181 0 +-116 -2126 0 +114 -2126 0 +116 -2127 0 +-114 -2127 0 +-2127 2125 0 +-2126 2125 0 +318 114 0 +-318 -114 0 +-319 115 0 +320 116 0 +-320 -116 0 +-331 319 0 +-338 319 0 +-334 319 0 +-331 327 0 +321 -330 0 +-321 330 0 +321 -333 0 +-321 333 0 +322 -331 0 +322 -334 0 +323 -332 0 +-323 332 0 +323 -335 0 +-323 335 0 +336 321 0 +340 321 0 +-341 322 0 +-341 336 0 +336 323 0 +342 323 0 +324 -337 0 +-324 337 0 +324 -340 0 +-324 340 0 +325 -338 0 +325 -341 0 +326 -339 0 +-326 339 0 +326 -342 0 +-326 342 0 +-626 -324 0 +-918 -324 0 +-627 325 0 +-919 325 0 +-628 -326 0 +-920 -326 0 +623 -918 0 +-623 918 0 +623 -921 0 +-623 921 0 +624 -919 0 +624 -922 0 +625 -920 0 +-625 920 0 +625 -923 0 +-625 923 0 +1247 623 0 +1263 623 0 +1244 623 0 +1246 623 0 +-1264 624 0 +-1264 1246 0 +-1264 1244 0 +-1264 1247 0 +1247 625 0 +1265 625 0 +1244 625 0 +1246 625 0 +-1258 -1244 0 +-1256 -1244 0 +737 -1263 0 +-737 1263 0 +737 -1266 0 +-737 1266 0 +737 -1475 0 +-737 1475 0 +737 -1481 0 +-737 1481 0 +738 -1264 0 +738 -1267 0 +738 -1476 0 +738 -1482 0 +739 -1265 0 +-739 1265 0 +739 -1268 0 +-739 1268 0 +739 -1477 0 +-739 1477 0 +739 -1483 0 +-739 1483 0 +425 737 0 +730 737 0 +-426 738 0 +-731 738 0 +427 739 0 +732 739 0 +704 730 0 +-704 -730 0 +-705 731 0 +706 732 0 +-706 -732 0 +693 704 0 +-687 705 0 +-711 705 0 +-694 705 0 +-711 -707 0 +-687 -707 0 +695 706 0 +696 693 0 +697 693 0 +698 693 0 +701 693 0 +-699 694 0 +-702 694 0 +-702 697 0 +-702 696 0 +-699 697 0 +-699 696 0 +696 695 0 +697 695 0 +700 695 0 +703 695 0 +689 686 0 +690 686 0 +-691 687 0 +-691 689 0 +689 688 0 +692 688 0 +-393 -425 0 +-430 426 0 +-436 426 0 +-394 426 0 +-436 445 0 +-430 445 0 +-395 -427 0 +-399 -393 0 +-400 -393 0 +-407 -393 0 +-401 -393 0 +-408 394 0 +-402 394 0 +-402 -400 0 +-402 -399 0 +-408 -400 0 +-408 -399 0 +-399 -395 0 +-400 -395 0 +-409 -395 0 +-403 -395 0 +-438 -429 0 +-439 -429 0 +-440 430 0 +-440 -438 0 +-438 -431 0 +-441 -431 0 +-125 -2129 0 +123 -2129 0 +125 -2130 0 +-123 -2130 0 +-2130 2128 0 +-2129 2128 0 +-483 124 0 +-490 124 0 +-486 124 0 +-483 -479 0 +473 -482 0 +-473 482 0 +473 -485 0 +-473 485 0 +474 -483 0 +474 -486 0 +475 -484 0 +-475 484 0 +475 -487 0 +-475 487 0 +-488 -473 0 +-492 -473 0 +-493 474 0 +-493 -488 0 +-488 -475 0 +-494 -475 0 +476 -489 0 +-476 489 0 +476 -492 0 +-476 492 0 +477 -490 0 +477 -493 0 +478 -491 0 +-478 491 0 +478 -494 0 +-478 494 0 +561 476 0 +569 476 0 +-570 477 0 +-570 561 0 +561 478 0 +571 478 0 +558 -569 0 +-558 569 0 +558 -572 0 +-558 572 0 +558 -915 0 +-558 915 0 +559 -570 0 +559 -573 0 +559 -916 0 +560 -571 0 +-560 571 0 +560 -574 0 +-560 574 0 +560 -917 0 +-560 917 0 +921 558 0 +-921 -558 0 +-922 559 0 +923 560 0 +-923 -560 0 +-119 -2132 0 +117 -2132 0 +119 -2133 0 +-117 -2133 0 +-2133 2131 0 +-2132 2131 0 +-590 118 0 +-587 118 0 +-593 118 0 +-590 -580 0 +575 -589 0 +-575 589 0 +575 -592 0 +-575 592 0 +576 -590 0 +576 -593 0 +577 -591 0 +-577 591 0 +577 -594 0 +-577 594 0 +-579 -575 0 +-583 -575 0 +-584 576 0 +-584 -579 0 +-579 -577 0 +-585 -577 0 +565 -583 0 +-565 583 0 +565 -586 0 +-565 586 0 +566 -584 0 +566 -587 0 +567 -585 0 +-567 585 0 +567 -588 0 +-567 588 0 +568 565 0 +572 565 0 +-573 566 0 +-573 568 0 +568 567 0 +574 567 0 +-122 -2135 0 +120 -2135 0 +122 -2136 0 +-120 -2136 0 +-2136 2134 0 +-2135 2134 0 +-907 121 0 +-904 121 0 +-910 121 0 +-907 -897 0 +890 -906 0 +-890 906 0 +890 -909 0 +-890 909 0 +891 -907 0 +891 -910 0 +892 -908 0 +-892 908 0 +892 -911 0 +-892 911 0 +-896 -890 0 +-900 -890 0 +-901 891 0 +-901 -896 0 +-896 -892 0 +-902 -892 0 +893 -900 0 +-893 900 0 +893 -903 0 +-893 903 0 +894 -901 0 +894 -904 0 +895 -902 0 +-895 902 0 +895 -905 0 +-895 905 0 +912 893 0 +915 893 0 +-913 894 0 +-916 894 0 +914 895 0 +917 895 0 +-92 -2138 0 +90 -2138 0 +92 -2139 0 +-90 -2139 0 +-2139 2137 0 +-2138 2137 0 +862 90 0 +-862 -90 0 +-863 91 0 +864 92 0 +-864 -92 0 +-875 863 0 +-872 863 0 +-878 863 0 +-875 865 0 +855 -874 0 +-855 874 0 +855 -877 0 +-855 877 0 +856 -875 0 +856 -878 0 +857 -876 0 +-857 876 0 +857 -879 0 +-857 879 0 +861 855 0 +868 855 0 +-869 856 0 +-869 861 0 +861 857 0 +870 857 0 +858 -868 0 +-858 868 0 +858 -871 0 +-858 871 0 +859 -869 0 +859 -872 0 +860 -870 0 +-860 870 0 +860 -873 0 +-860 873 0 +-883 -858 0 +-884 -858 0 +-885 859 0 +-885 -883 0 +-883 -860 0 +-886 -860 0 +880 -884 0 +-880 884 0 +880 -887 0 +-880 887 0 +881 -885 0 +881 -888 0 +882 -886 0 +-882 886 0 +882 -889 0 +-882 889 0 +1262 880 0 +1266 880 0 +1257 880 0 +1270 880 0 +-1267 881 0 +-1267 1270 0 +-1267 1257 0 +-1267 1262 0 +1262 882 0 +1268 882 0 +1257 882 0 +1270 882 0 +-1259 -1257 0 +-1260 -1257 0 +-101 -2141 0 +99 -2141 0 +101 -2142 0 +-99 -2142 0 +-2142 2140 0 +-2141 2140 0 +-209 100 0 +-206 100 0 +-212 100 0 +-209 -199 0 +189 -208 0 +-189 208 0 +189 -211 0 +-189 211 0 +190 -209 0 +190 -212 0 +191 -210 0 +-191 210 0 +191 -213 0 +-191 213 0 +-195 -189 0 +-202 -189 0 +-203 190 0 +-203 -195 0 +-195 -191 0 +-204 -191 0 +192 -202 0 +-192 202 0 +192 -205 0 +-192 205 0 +193 -203 0 +193 -206 0 +194 -204 0 +-194 204 0 +194 -207 0 +-194 207 0 +350 192 0 +292 192 0 +-351 193 0 +-293 193 0 +352 194 0 +294 194 0 +251 -292 0 +-251 292 0 +251 -295 0 +-251 295 0 +251 -620 0 +-251 620 0 +252 -293 0 +252 -296 0 +252 -621 0 +253 -294 0 +-253 294 0 +253 -297 0 +-253 297 0 +253 -622 0 +-253 622 0 +887 251 0 +-887 -251 0 +-888 252 0 +889 253 0 +-889 -253 0 +-95 -2144 0 +93 -2144 0 +95 -2145 0 +-93 -2145 0 +-2145 2143 0 +-2144 2143 0 +-313 94 0 +-310 94 0 +-316 94 0 +-313 -303 0 +298 -312 0 +-298 312 0 +298 -315 0 +-298 315 0 +299 -313 0 +299 -316 0 +300 -314 0 +-300 314 0 +300 -317 0 +-300 317 0 +-302 -298 0 +-306 -298 0 +-307 299 0 +-307 -302 0 +-302 -300 0 +-308 -300 0 +287 -306 0 +-287 306 0 +287 -309 0 +-287 309 0 +288 -307 0 +288 -310 0 +289 -308 0 +-289 308 0 +289 -311 0 +-289 311 0 +291 287 0 +295 287 0 +-296 288 0 +-296 291 0 +291 289 0 +297 289 0 +-98 -2147 0 +96 -2147 0 +98 -2148 0 +-96 -2148 0 +-2148 2146 0 +-2147 2146 0 +-612 97 0 +-609 97 0 +-615 97 0 +-612 -602 0 +595 -611 0 +-595 611 0 +595 -614 0 +-595 614 0 +596 -612 0 +596 -615 0 +597 -613 0 +-597 613 0 +597 -616 0 +-597 616 0 +-601 -595 0 +-605 -595 0 +-606 596 0 +-606 -601 0 +-601 -597 0 +-607 -597 0 +598 -605 0 +-598 605 0 +598 -608 0 +-598 608 0 +599 -606 0 +599 -609 0 +600 -607 0 +-600 607 0 +600 -610 0 +-600 610 0 +617 598 0 +620 598 0 +-618 599 0 +-621 599 0 +619 600 0 +622 600 0 +-110 -2150 0 +108 -2150 0 +110 -2151 0 +-108 -2151 0 +-2151 2149 0 +-2150 2149 0 +-168 109 0 +-175 109 0 +-171 109 0 +-168 -164 0 +158 -167 0 +-158 167 0 +158 -170 0 +-158 170 0 +159 -168 0 +159 -171 0 +160 -169 0 +-160 169 0 +160 -172 0 +-160 172 0 +-173 -158 0 +-177 -158 0 +-178 159 0 +-178 -173 0 +-173 -160 0 +-179 -160 0 +161 -174 0 +-161 174 0 +161 -177 0 +-161 177 0 +162 -175 0 +162 -178 0 +163 -176 0 +-163 176 0 +163 -179 0 +-163 179 0 +417 161 0 +281 161 0 +-282 162 0 +-282 417 0 +417 163 0 +283 163 0 +277 -281 0 +-277 281 0 +277 -284 0 +-277 284 0 +277 -356 0 +-277 356 0 +278 -282 0 +278 -285 0 +278 -357 0 +279 -283 0 +-279 283 0 +279 -286 0 +-279 286 0 +279 -358 0 +-279 358 0 +657 277 0 +-657 -277 0 +-658 278 0 +659 279 0 +-659 -279 0 +359 -657 0 +-359 657 0 +359 -660 0 +-359 660 0 +360 -658 0 +360 -661 0 +361 -659 0 +-361 659 0 +361 -662 0 +-361 662 0 +1474 359 0 +1475 359 0 +1473 359 0 +1478 359 0 +-1476 360 0 +-1476 1478 0 +-1476 1473 0 +-1476 1474 0 +1474 361 0 +1477 361 0 +1473 361 0 +1478 361 0 +-1732 -1473 0 +-1734 -1473 0 +-107 -2153 0 +105 -2153 0 +107 -2154 0 +-105 -2154 0 +-2154 2152 0 +-2153 2152 0 +-271 106 0 +-268 106 0 +-274 106 0 +-271 -261 0 +254 -270 0 +-254 270 0 +254 -273 0 +-254 273 0 +255 -271 0 +255 -274 0 +256 -272 0 +-256 272 0 +256 -275 0 +-256 275 0 +-260 -254 0 +-264 -254 0 +-265 255 0 +-265 -260 0 +-260 -256 0 +-266 -256 0 +257 -264 0 +-257 264 0 +257 -267 0 +-257 267 0 +258 -265 0 +258 -268 0 +259 -266 0 +-259 266 0 +259 -269 0 +-259 269 0 +290 257 0 +284 257 0 +-285 258 0 +-285 290 0 +290 259 0 +286 259 0 +-113 -2156 0 +111 -2156 0 +113 -2157 0 +-111 -2157 0 +-2157 2155 0 +-2156 2155 0 +-372 112 0 +-369 112 0 +-375 112 0 +-372 -362 0 +343 -371 0 +-343 371 0 +343 -374 0 +-343 374 0 +344 -372 0 +344 -375 0 +345 -373 0 +-345 373 0 +345 -376 0 +-345 376 0 +-349 -343 0 +-365 -343 0 +-366 344 0 +-366 -349 0 +-349 -345 0 +-367 -345 0 +346 -365 0 +-346 365 0 +346 -368 0 +-346 368 0 +347 -366 0 +347 -369 0 +348 -367 0 +-348 367 0 +348 -370 0 +-348 370 0 +353 346 0 +356 346 0 +-354 347 0 +-357 347 0 +355 348 0 +358 348 0 +-104 -2159 0 +102 -2159 0 +104 -2160 0 +-102 -2160 0 +-2160 2158 0 +-2159 2158 0 +629 102 0 +-629 -102 0 +-630 103 0 +631 104 0 +-631 -104 0 +-642 630 0 +-649 630 0 +-645 630 0 +-642 638 0 +632 -641 0 +-632 641 0 +632 -644 0 +-632 644 0 +633 -642 0 +633 -645 0 +634 -643 0 +-634 643 0 +634 -646 0 +-634 646 0 +647 632 0 +651 632 0 +-652 633 0 +-652 647 0 +647 634 0 +653 634 0 +635 -648 0 +-635 648 0 +635 -651 0 +-635 651 0 +636 -649 0 +636 -652 0 +637 -650 0 +-637 650 0 +637 -653 0 +-637 653 0 +-654 -635 0 +-660 -635 0 +-655 636 0 +-661 636 0 +-656 -637 0 +-662 -637 0 +-128 -2162 0 +126 -2162 0 +128 -2163 0 +-126 -2163 0 +-2163 2161 0 +-2162 2161 0 +831 126 0 +-831 -126 0 +-832 127 0 +833 128 0 +-833 -128 0 +-844 832 0 +-841 832 0 +-847 832 0 +-844 834 0 +824 -843 0 +-824 843 0 +824 -846 0 +-824 846 0 +825 -844 0 +825 -847 0 +826 -845 0 +-826 845 0 +826 -848 0 +-826 848 0 +830 824 0 +837 824 0 +-838 825 0 +-838 830 0 +830 826 0 +839 826 0 +827 -837 0 +-827 837 0 +827 -840 0 +-827 840 0 +828 -838 0 +828 -841 0 +829 -839 0 +-829 839 0 +829 -842 0 +-829 842 0 +-852 -827 0 +-1117 -827 0 +-853 828 0 +-1118 828 0 +-854 -829 0 +-1119 -829 0 +849 -1117 0 +-849 1117 0 +849 -1120 0 +-849 1120 0 +849 -1127 0 +-849 1127 0 +850 -1118 0 +850 -1121 0 +850 -1128 0 +851 -1119 0 +-851 1119 0 +851 -1122 0 +-851 1122 0 +851 -1129 0 +-851 1129 0 +1480 849 0 +1481 849 0 +1479 849 0 +1484 849 0 +-1482 850 0 +-1482 1484 0 +-1482 1479 0 +-1482 1480 0 +1480 851 0 +1483 851 0 +1479 851 0 +1484 851 0 +-1731 -1479 0 +-1733 -1479 0 +-137 -2165 0 +135 -2165 0 +137 -2166 0 +-135 -2166 0 +-2166 2164 0 +-2165 2164 0 +-1089 136 0 +-1099 136 0 +-1092 136 0 +-1089 -1094 0 +1082 -1088 0 +-1082 1088 0 +1082 -1091 0 +-1082 1091 0 +1083 -1089 0 +1083 -1092 0 +1084 -1090 0 +-1084 1090 0 +1084 -1093 0 +-1084 1093 0 +-1097 -1082 0 +-1101 -1082 0 +-1102 1083 0 +-1102 -1097 0 +-1097 -1084 0 +-1103 -1084 0 +1085 -1098 0 +-1085 1098 0 +1085 -1101 0 +-1085 1101 0 +1086 -1099 0 +1086 -1102 0 +1087 -1100 0 +-1087 1100 0 +1087 -1103 0 +-1087 1103 0 +1107 1085 0 +1111 1085 0 +-1108 1086 0 +-1112 1086 0 +1109 1087 0 +1113 1087 0 +1104 -1111 0 +-1104 1111 0 +1104 -1114 0 +-1104 1114 0 +1105 -1112 0 +1105 -1115 0 +1106 -1113 0 +-1106 1113 0 +1106 -1116 0 +-1106 1116 0 +1120 1104 0 +-1120 -1104 0 +-1121 1105 0 +1122 1106 0 +-1122 -1106 0 +1080 -1094 0 +-1080 1094 0 +1080 -1097 0 +-1080 1097 0 +1081 1080 0 +-1081 -1080 0 +-134 -2168 0 +132 -2168 0 +134 -2169 0 +-132 -2169 0 +-2169 2167 0 +-2168 2167 0 +-774 133 0 +-784 133 0 +-777 133 0 +-774 -779 0 +767 -773 0 +-767 773 0 +767 -776 0 +-767 776 0 +768 -774 0 +768 -777 0 +769 -775 0 +-769 775 0 +769 -778 0 +-769 778 0 +-782 -767 0 +-786 -767 0 +-787 768 0 +-787 -782 0 +-782 -769 0 +-788 -769 0 +770 -783 0 +-770 783 0 +770 -786 0 +-770 786 0 +771 -784 0 +771 -787 0 +772 -785 0 +-772 785 0 +772 -788 0 +-772 788 0 +1110 770 0 +1114 770 0 +-1115 771 0 +-1115 1110 0 +1110 772 0 +1116 772 0 +-131 -2171 0 +129 -2171 0 +131 -2172 0 +-129 -2172 0 +-2172 2170 0 +-2171 2170 0 +1134 129 0 +-1134 -129 0 +-1135 130 0 +1136 131 0 +-1136 -131 0 +-1147 1135 0 +-1144 1135 0 +-1150 1135 0 +-1147 1137 0 +1130 -1146 0 +-1130 1146 0 +1130 -1149 0 +-1130 1149 0 +1131 -1147 0 +1131 -1150 0 +1132 -1148 0 +-1132 1148 0 +1132 -1151 0 +-1132 1151 0 +1133 1130 0 +1140 1130 0 +-1141 1131 0 +-1141 1133 0 +1133 1132 0 +1142 1132 0 +1123 -1140 0 +-1123 1140 0 +1123 -1143 0 +-1123 1143 0 +1124 -1141 0 +1124 -1144 0 +1125 -1142 0 +-1125 1142 0 +1125 -1145 0 +-1125 1145 0 +-1126 -1123 0 +-1127 -1123 0 +-1128 1124 0 +-1128 -1126 0 +-1126 -1125 0 +-1129 -1125 0 +-2170 2173 0 +-2167 2173 0 +-2164 2173 0 +-2161 2173 0 +-2158 2173 0 +-2155 2173 0 +-2152 2173 0 +-2149 2173 0 +-2146 2173 0 +-2143 2173 0 +-2140 2173 0 +-2137 2173 0 +-2134 2173 0 +-2131 2173 0 +-2128 2173 0 +-2125 2173 0 +-2122 2173 0 +-2119 2173 0 +-2116 2173 0 +-2113 2173 0 +-2110 2173 0 +-2107 2173 0 +-2104 2173 0 +-2101 2173 0 +-2098 2173 0 +-2095 2173 0 +-2092 2173 0 +-2089 2173 0 +-2086 2173 0 +-2083 2173 0 +-2080 2173 0 +-2074 2173 0 +-2066 -1288 -1282 0 +-2066 -1294 -1282 0 +2066 1291 1282 0 +-2066 -1288 -1291 0 +-2066 -1294 -1291 0 +2066 1294 1288 0 +-2066 -1290 -1282 0 +-2066 -1296 -1282 0 +2066 1293 1282 0 +-2066 -1290 -1293 0 +-2066 -1296 -1293 0 +2066 1296 1290 0 +2075 56 -54 0 +2076 -56 54 0 +-2074 2076 2075 0 +1455 1461 54 0 +1458 1465 54 0 +-1465 -1461 -54 0 +-1458 -1461 -54 0 +-1465 -1455 -54 0 +-1458 -1455 -54 0 +-1459 -1460 -1465 0 +-1459 -1458 -1467 0 +-1459 -1465 -1467 0 +-1466 -1467 -1458 0 +-1466 -1465 -1460 0 +-1466 -1458 -1460 0 +-1462 -1463 -1455 0 +-1462 -1461 -1457 0 +-1462 -1455 -1457 0 +-55 54 56 0 +-55 -54 -56 0 +1457 1461 56 0 +1460 1467 56 0 +-1467 -1461 -56 0 +-1460 -1461 -56 0 +-1467 -1457 -56 0 +-1460 -1457 -56 0 +-1450 1456 1459 0 +-1459 1458 1460 0 +-1459 -1458 -1460 0 +-1456 1455 1457 0 +-1456 -1455 -1457 0 +1449 1464 1468 0 +-1450 1449 1451 0 +-1450 -1449 -1451 0 +1451 1464 1470 0 +-1453 1466 1469 0 +-1469 1468 1470 0 +-1469 -1468 -1470 0 +-1466 1465 1467 0 +-1466 -1465 -1467 0 +-1452 -1471 -1715 0 +-1453 1452 1454 0 +-1453 -1452 -1454 0 +-1454 -1471 -1717 0 +-1729 1728 1730 0 +-1729 -1728 -1730 0 +-1723 1722 1724 0 +-1723 -1722 -1724 0 +-1719 1718 1720 0 +-1719 -1718 -1720 0 +-1716 1715 1717 0 +-1716 -1715 -1717 0 +-728 -729 -378 0 +-728 -727 -380 0 +-728 -378 -380 0 +-379 -380 -727 0 +-379 -378 -729 0 +-379 -727 -729 0 +-722 721 723 0 +-722 -721 -723 0 +-913 912 914 0 +-913 -912 -914 0 +-728 727 729 0 +-728 -727 -729 0 +-711 710 712 0 +-711 -710 -712 0 +-699 698 700 0 +-699 -698 -700 0 +-618 617 619 0 +-618 -617 -619 0 +-451 450 452 0 +-451 -450 -452 0 +-411 410 412 0 +-411 -410 -412 0 +-408 407 409 0 +-408 -407 -409 0 +1291 1282 396 0 +1294 1288 396 0 +-1288 -1282 -396 0 +-1294 -1282 -396 0 +-1288 -1291 -396 0 +-1294 -1291 -396 0 +-1295 -1296 -1288 0 +-1295 -1294 -1290 0 +-1295 -1288 -1290 0 +-1289 -1290 -1294 0 +-1289 -1288 -1296 0 +-1289 -1294 -1296 0 +-1283 -1284 -1291 0 +-1283 -1282 -1293 0 +-1283 -1291 -1293 0 +-397 396 398 0 +-397 -396 -398 0 +1293 1282 398 0 +1296 1290 398 0 +-1290 -1282 -398 0 +-1296 -1282 -398 0 +-1290 -1293 -398 0 +-1296 -1293 -398 0 +-1278 1292 1295 0 +-1295 1294 1296 0 +-1295 -1294 -1296 0 +-1292 1291 1293 0 +-1292 -1291 -1293 0 +1277 1281 1285 0 +-1278 1277 1279 0 +-1278 -1277 -1279 0 +1279 1281 1287 0 +-1272 1286 1289 0 +-1289 1288 1290 0 +-1289 -1288 -1290 0 +-1286 1285 1287 0 +-1286 -1285 -1287 0 +-1272 1271 1273 0 +-1272 -1271 -1273 0 +1513 1504 1274 0 +1516 1510 1274 0 +-1510 -1504 -1274 0 +-1516 -1504 -1274 0 +-1510 -1513 -1274 0 +-1516 -1513 -1274 0 +-1517 -1518 -1510 0 +-1517 -1516 -1512 0 +-1517 -1510 -1512 0 +-1511 -1512 -1516 0 +-1511 -1510 -1518 0 +-1511 -1516 -1518 0 +-1505 -1506 -1513 0 +-1505 -1504 -1515 0 +-1505 -1513 -1515 0 +-1275 1274 1276 0 +-1275 -1274 -1276 0 +1515 1504 1276 0 +1518 1512 1276 0 +-1512 -1504 -1276 0 +-1518 -1504 -1276 0 +-1512 -1515 -1276 0 +-1518 -1515 -1276 0 +-1497 1514 1517 0 +-1517 1516 1518 0 +-1517 -1516 -1518 0 +-1514 1513 1515 0 +-1514 -1513 -1515 0 +1496 1503 1507 0 +-1497 1496 1498 0 +-1497 -1496 -1498 0 +1498 1503 1509 0 +-1501 1508 1511 0 +-1511 1510 1512 0 +-1511 -1510 -1512 0 +-1508 1507 1509 0 +-1508 -1507 -1509 0 +-1526 -1532 -1500 0 +-1529 -1536 -1500 0 +1536 1532 1500 0 +1529 1532 1500 0 +1536 1526 1500 0 +1529 1526 1500 0 +-1530 -1531 1538 0 +-1530 -1529 1536 0 +-1530 1536 1538 0 +-1537 -1538 1531 0 +-1537 -1536 1529 0 +-1537 1529 1531 0 +-1533 -1534 1528 0 +-1533 -1532 1526 0 +-1533 1526 1528 0 +-1501 1500 1502 0 +-1501 -1500 -1502 0 +-1528 -1532 -1502 0 +-1531 -1538 -1502 0 +1538 1532 1502 0 +1531 1532 1502 0 +1538 1528 1502 0 +1531 1528 1502 0 +-1521 1527 1530 0 +-1530 1529 1531 0 +-1530 -1529 -1531 0 +-1527 1526 1528 0 +-1527 -1526 -1528 0 +-1520 -1535 -1539 0 +-1521 1520 1522 0 +-1521 -1520 -1522 0 +-1522 -1535 -1541 0 +-1554 1553 1555 0 +-1554 -1553 -1555 0 +-1547 1546 1548 0 +-1547 -1546 -1548 0 +-1540 1539 1541 0 +-1540 -1539 -1541 0 +-1537 1536 1538 0 +-1537 -1536 -1538 0 +-1524 1523 1525 0 +-1524 -1523 -1525 0 +-1569 -1575 -1562 0 +-1572 -1581 -1562 0 +1581 1575 1562 0 +1572 1575 1562 0 +1581 1569 1562 0 +1572 1569 1562 0 +-1582 -1583 1574 0 +-1582 -1581 1572 0 +-1582 1572 1574 0 +-1570 -1571 1577 0 +-1570 -1569 1575 0 +-1570 1575 1577 0 +-1576 -1577 1571 0 +-1576 -1575 1569 0 +-1576 1569 1571 0 +-1563 1562 1564 0 +-1563 -1562 -1564 0 +-1571 -1577 -1564 0 +-1574 -1581 -1564 0 +1581 1577 1564 0 +1574 1577 1564 0 +1581 1571 1564 0 +1574 1571 1564 0 +-1566 1570 1573 0 +-1573 1572 1574 0 +-1573 -1572 -1574 0 +-1570 1569 1571 0 +-1570 -1569 -1571 0 +-1565 -1578 -1584 0 +-1566 1565 1567 0 +-1566 -1565 -1567 0 +-1567 -1580 -1584 0 +1646 1644 1568 0 +1647 1645 1568 0 +-1645 -1644 -1568 0 +-1647 -1644 -1568 0 +-1645 -1646 -1568 0 +-1647 -1646 -1568 0 +1643 1648 1649 0 +-1403 1576 1579 0 +-1579 1578 1580 0 +-1579 -1578 -1580 0 +-1576 1575 1577 0 +-1576 -1575 -1577 0 +1414 1408 1402 0 +1417 1411 1402 0 +-1411 -1408 -1402 0 +-1417 -1408 -1402 0 +-1411 -1414 -1402 0 +-1417 -1414 -1402 0 +-1418 -1419 -1411 0 +-1418 -1417 -1413 0 +-1418 -1411 -1413 0 +-1412 -1413 -1417 0 +-1412 -1411 -1419 0 +-1412 -1417 -1419 0 +-1409 -1410 -1414 0 +-1409 -1408 -1416 0 +-1409 -1414 -1416 0 +-1403 1402 1404 0 +-1403 -1402 -1404 0 +1416 1408 1404 0 +1419 1413 1404 0 +-1413 -1408 -1404 0 +-1419 -1408 -1404 0 +-1413 -1416 -1404 0 +-1419 -1416 -1404 0 +-1406 1415 1418 0 +-1418 1417 1419 0 +-1418 -1417 -1419 0 +-1415 1414 1416 0 +-1415 -1414 -1416 0 +1405 1420 1421 0 +-1406 1405 1407 0 +-1406 -1405 -1407 0 +1407 1420 1423 0 +-1422 1421 1423 0 +-1422 -1421 -1423 0 +-1412 1411 1413 0 +-1412 -1411 -1413 0 +-1220 1219 1221 0 +-1220 -1219 -1221 0 +-1217 1216 1218 0 +-1217 -1216 -1218 0 +1774 1776 1519 0 +1775 1778 1519 0 +-1778 -1776 -1519 0 +-1775 -1776 -1519 0 +-1778 -1774 -1519 0 +-1775 -1774 -1519 0 +1773 1777 1779 0 +1676 1674 1586 0 +1677 1675 1586 0 +-1675 -1674 -1586 0 +-1677 -1674 -1586 0 +-1675 -1676 -1586 0 +-1677 -1676 -1586 0 +1673 1678 1679 0 +-1684 -1682 -1680 0 +-1685 -1683 -1680 0 +1683 1682 1680 0 +1685 1682 1680 0 +1683 1684 1680 0 +1685 1684 1680 0 +-1681 -1686 -1687 0 +-1499 -2 -1860 0 +-1300 -1302 -1280 0 +-1301 -1304 -1280 0 +1304 1302 1280 0 +1301 1302 1280 0 +1304 1300 1280 0 +1301 1300 1280 0 +-1298 -1303 -1305 0 +-1396 -1398 -1306 0 +-1397 -1395 -1306 0 +1395 1398 1306 0 +1397 1398 1306 0 +1395 1396 1306 0 +1397 1396 1306 0 +-1394 -1399 -1400 0 +-543 -545 -541 0 +-544 -547 -541 0 +547 545 541 0 +544 545 541 0 +547 543 541 0 +544 543 541 0 +-542 -546 -548 0 +-378 -382 -383 0 +-379 378 380 0 +-379 -378 -380 0 +-380 -382 -385 0 +-2078 402 1108 0 +-1108 1107 1109 0 +-1108 -1107 -1109 0 +-402 401 403 0 +-402 -401 -403 0 +-391 390 392 0 +-391 -390 -392 0 +-384 383 385 0 +-384 -383 -385 0 +-354 353 355 0 +-354 -353 -355 0 +-351 350 352 0 +-351 -350 -352 0 +-246 245 247 0 +-246 -245 -247 0 +-702 701 703 0 +-702 -701 -703 0 +-691 690 692 0 +-691 -690 -692 0 +-627 626 628 0 +-627 -626 -628 0 +-454 453 455 0 +-454 -453 -455 0 +-440 439 441 0 +-440 -439 -441 0 +-423 422 424 0 +-423 -422 -424 0 +-420 419 421 0 +-420 -419 -421 0 +-520 -511 -248 0 +-523 -517 -248 0 +517 511 248 0 +523 511 248 0 +517 520 248 0 +523 520 248 0 +-524 -525 519 0 +-524 -523 517 0 +-524 517 519 0 +-518 -519 525 0 +-518 -517 523 0 +-518 523 525 0 +-512 -513 522 0 +-512 -511 520 0 +-512 520 522 0 +-249 248 250 0 +-249 -248 -250 0 +-522 -511 -250 0 +-525 -519 -250 0 +519 511 250 0 +525 511 250 0 +519 522 250 0 +525 522 250 0 +-505 521 524 0 +-524 523 525 0 +-524 -523 -525 0 +-521 520 522 0 +-521 -520 -522 0 +-504 -510 -514 0 +-505 504 506 0 +-505 -504 -506 0 +-506 -510 -516 0 +-508 515 518 0 +-518 517 519 0 +-518 -517 -519 0 +-515 514 516 0 +-515 -514 -516 0 +1327 1318 507 0 +1330 1324 507 0 +-1324 -1318 -507 0 +-1330 -1318 -507 0 +-1324 -1327 -507 0 +-1330 -1327 -507 0 +-1331 -1332 -1324 0 +-1331 -1330 -1326 0 +-1331 -1324 -1326 0 +-1325 -1326 -1330 0 +-1325 -1324 -1332 0 +-1325 -1330 -1332 0 +-1319 -1320 -1327 0 +-1319 -1318 -1329 0 +-1319 -1327 -1329 0 +-508 507 509 0 +-508 -507 -509 0 +1329 1318 509 0 +1332 1326 509 0 +-1326 -1318 -509 0 +-1332 -1318 -509 0 +-1326 -1329 -509 0 +-1332 -1329 -509 0 +-1311 1328 1331 0 +-1331 1330 1332 0 +-1331 -1330 -1332 0 +-1328 1327 1329 0 +-1328 -1327 -1329 0 +1310 1317 1321 0 +-1311 1310 1312 0 +-1311 -1310 -1312 0 +1312 1317 1323 0 +-1315 1322 1325 0 +-1325 1324 1326 0 +-1325 -1324 -1326 0 +-1322 1321 1323 0 +-1322 -1321 -1323 0 +-1556 -1550 -1314 0 +-1559 -1553 -1314 0 +1553 1550 1314 0 +1559 1550 1314 0 +1553 1556 1314 0 +1559 1556 1314 0 +-1560 -1561 1555 0 +-1560 -1559 1553 0 +-1560 1553 1555 0 +-1554 -1555 1561 0 +-1554 -1553 1559 0 +-1554 1559 1561 0 +-1551 -1552 1558 0 +-1551 -1550 1556 0 +-1551 1556 1558 0 +-1315 1314 1316 0 +-1315 -1314 -1316 0 +-1558 -1550 -1316 0 +-1561 -1555 -1316 0 +1555 1550 1316 0 +1561 1550 1316 0 +1555 1558 1316 0 +1561 1558 1316 0 +-1543 1557 1560 0 +-1560 1559 1561 0 +-1560 -1559 -1561 0 +-1557 1556 1558 0 +-1557 -1556 -1558 0 +-1542 -1549 -1546 0 +-1543 1542 1544 0 +-1543 -1542 -1544 0 +-1544 -1549 -1548 0 +-1783 -1785 -1772 0 +-1784 -1787 -1772 0 +1787 1785 1772 0 +1784 1785 1772 0 +1787 1783 1772 0 +1784 1783 1772 0 +-1781 -1786 -1788 0 +-1980 -1977 -1963 0 +-1981 -1979 -1963 0 +1979 1977 1963 0 +1981 1977 1963 0 +1979 1980 1963 0 +1981 1980 1963 0 +-1976 -1982 -1983 0 +1835 1833 1780 0 +1836 1834 1780 0 +-1834 -1833 -1780 0 +-1836 -1833 -1780 0 +-1834 -1835 -1780 0 +-1836 -1835 -1780 0 +1832 1837 1838 0 +-1313 -4 -1859 0 +-501 -498 -496 0 +-502 -500 -496 0 +500 498 496 0 +502 498 496 0 +500 501 496 0 +502 501 496 0 +-495 -497 -499 0 +-217 -216 -197 0 +-218 -220 -197 0 +220 216 197 0 +218 216 197 0 +220 217 197 0 +218 217 197 0 +-214 -219 -221 0 +187 185 183 0 +188 186 183 0 +-186 -185 -183 0 +-188 -185 -183 0 +-186 -187 -183 0 +-188 -187 -183 0 +180 184 182 0 +-1751 -1914 -377 0 +-1752 -1916 -377 0 +1916 1914 377 0 +1752 1914 377 0 +1916 1751 377 0 +1752 1751 377 0 +-1749 -1915 -1917 0 +1921 1923 1750 0 +1922 1925 1750 0 +-1925 -1923 -1750 0 +-1922 -1923 -1750 0 +-1925 -1921 -1750 0 +-1922 -1921 -1750 0 +1919 1924 1926 0 +1931 1933 1927 0 +1932 1935 1927 0 +-1935 -1933 -1927 0 +-1932 -1933 -1927 0 +-1935 -1931 -1927 0 +-1932 -1931 -1927 0 +1929 1934 1936 0 +1793 1795 1789 0 +1794 1797 1789 0 +-1797 -1795 -1789 0 +-1794 -1795 -1789 0 +-1797 -1793 -1789 0 +-1794 -1793 -1789 0 +1791 1796 1798 0 +1969 1967 1965 0 +1970 1968 1965 0 +-1968 -1967 -1965 0 +-1970 -1967 -1965 0 +-1968 -1969 -1965 0 +-1970 -1969 -1965 0 +1966 1971 1972 0 +-1850 -1852 -1790 0 +-1851 -1849 -1790 0 +1849 1852 1790 0 +1851 1852 1790 0 +1849 1850 1790 0 +1851 1850 1790 0 +-1848 -1854 -1855 0 +-1918 -29 -2020 0 +-1756 -1758 -1753 0 +-1757 -1760 -1753 0 +1760 1758 1753 0 +1757 1758 1753 0 +1760 1756 1753 0 +1757 1756 1753 0 +-1754 -1759 -1761 0 +-1592 -1590 -1587 0 +-1593 -1591 -1587 0 +1591 1590 1587 0 +1593 1590 1587 0 +1591 1592 1587 0 +1593 1592 1587 0 +-1588 -1594 -1595 0 +-764 -762 -761 0 +-765 -763 -761 0 +763 762 761 0 +765 762 761 0 +763 764 761 0 +765 764 761 0 +-757 -758 -760 0 +1078 1075 973 0 +1079 1077 973 0 +-1077 -1075 -973 0 +-1079 -1075 -973 0 +-1077 -1078 -973 0 +-1079 -1078 -973 0 +1072 1074 1076 0 +1061 1058 1056 0 +1062 1060 1056 0 +-1060 -1058 -1056 0 +-1062 -1058 -1056 0 +-1060 -1061 -1056 0 +-1062 -1061 -1056 0 +1054 1057 1059 0 +-792 -794 -789 0 +-793 -796 -789 0 +796 794 789 0 +793 794 789 0 +796 792 789 0 +793 792 789 0 +-790 -795 -797 0 +802 804 791 0 +803 806 791 0 +-806 -804 -791 0 +-803 -804 -791 0 +-806 -802 -791 0 +-803 -802 -791 0 +800 805 807 0 +-1065 -1067 -801 0 +-1066 -1064 -801 0 +1064 1067 801 0 +1066 1067 801 0 +1064 1065 801 0 +1066 1065 801 0 +-1063 -1068 -1069 0 +-809 -811 -799 0 +-810 -813 -799 0 +813 811 799 0 +810 811 799 0 +813 809 799 0 +810 809 799 0 +-808 -812 -814 0 +156 153 151 0 +157 155 151 0 +-155 -153 -151 0 +-157 -153 -151 0 +-155 -156 -151 0 +-157 -156 -151 0 +149 152 154 0 +146 143 141 0 +147 145 141 0 +-145 -143 -141 0 +-147 -143 -141 0 +-145 -146 -141 0 +-147 -146 -141 0 +138 142 144 0 +239 241 225 0 +240 243 225 0 +-243 -241 -225 0 +-240 -241 -225 0 +-243 -239 -225 0 +-240 -239 -225 0 +237 242 244 0 +-1055 -9 -1858 0 +-1998 -2000 -1073 0 +-1999 -2002 -1073 0 +2002 2000 1073 0 +1999 2000 1073 0 +2002 1998 1073 0 +1999 1998 1073 0 +-1996 -2001 -2003 0 +2007 2005 1997 0 +2008 2006 1997 0 +-2006 -2005 -1997 0 +-2008 -2005 -1997 0 +-2006 -2007 -1997 0 +-2008 -2007 -1997 0 +2004 2009 2010 0 +-1992 -1990 -1989 0 +-1993 -1991 -1989 0 +1991 1990 1989 0 +1993 1990 1989 0 +1991 1992 1989 0 +1993 1992 1989 0 +-1985 -1987 -1988 0 +234 231 229 0 +235 233 229 0 +-233 -231 -229 0 +-235 -231 -229 0 +-233 -234 -229 0 +-235 -234 -229 0 +226 230 232 0 +-533 -530 -228 0 +-534 -532 -228 0 +532 530 228 0 +534 530 228 0 +532 533 228 0 +534 533 228 0 +-526 -529 -531 0 +539 536 528 0 +540 538 528 0 +-538 -536 -528 0 +-540 -536 -528 0 +-538 -539 -528 0 +-540 -539 -528 0 +222 535 537 0 +-471 -468 -223 0 +-472 -470 -223 0 +470 468 223 0 +472 468 223 0 +470 471 223 0 +472 471 223 0 +-465 -467 -469 0 +463 460 458 0 +464 462 458 0 +-462 -460 -458 0 +-464 -460 -458 0 +-462 -463 -458 0 +-464 -463 -458 0 +456 459 461 0 +818 817 466 0 +819 821 466 0 +-821 -817 -466 0 +-819 -817 -466 0 +-821 -818 -466 0 +-819 -818 -466 0 +815 820 822 0 +-1071 -31 -2022 0 +-1809 -1811 -227 0 +-1810 -1813 -227 0 +1813 1811 227 0 +1810 1811 227 0 +1813 1809 227 0 +1810 1809 227 0 +-1807 -1812 -1814 0 +-2013 -2012 -1984 0 +-2014 -2016 -1984 0 +2016 2012 1984 0 +2014 2012 1984 0 +2016 2013 1984 0 +2014 2013 1984 0 +-2011 -2015 -2017 0 +-1817 -1819 -1815 0 +-1818 -1821 -1815 0 +1821 1819 1815 0 +1818 1819 1815 0 +1821 1817 1815 0 +1818 1817 1815 0 +-1816 -1820 -1822 0 +1052 1049 1047 0 +1053 1051 1047 0 +-1051 -1049 -1047 0 +-1053 -1049 -1047 0 +-1051 -1052 -1047 0 +-1053 -1052 -1047 0 +1045 1048 1050 0 +1042 1039 1037 0 +1043 1041 1037 0 +-1041 -1039 -1037 0 +-1043 -1039 -1037 0 +-1041 -1042 -1037 0 +-1043 -1042 -1037 0 +1035 1038 1040 0 +-1024 -1021 -1019 0 +-1025 -1023 -1019 0 +1023 1021 1019 0 +1025 1021 1019 0 +1023 1024 1019 0 +1025 1024 1019 0 +-1017 -1020 -1022 0 +750 752 748 0 +751 754 748 0 +-754 -752 -748 0 +-751 -752 -748 0 +-754 -750 -748 0 +-751 -750 -748 0 +749 753 755 0 +-746 -743 -741 0 +-747 -745 -741 0 +745 743 741 0 +747 743 741 0 +745 746 741 0 +747 746 741 0 +-740 -742 -744 0 +556 555 553 0 +557 563 553 0 +-563 -555 -553 0 +-557 -555 -553 0 +-563 -556 -553 0 +-557 -556 -553 0 +554 562 564 0 +-1036 -7 -2019 0 +-1953 -1950 -1046 0 +-1954 -1952 -1046 0 +1952 1950 1046 0 +1954 1950 1046 0 +1952 1953 1046 0 +1954 1953 1046 0 +-1947 -1949 -1951 0 +-1363 -1365 -1309 0 +-1364 -1367 -1309 0 +1367 1365 1309 0 +1364 1365 1309 0 +1367 1363 1309 0 +1364 1363 1309 0 +-1362 -1366 -1368 0 +1957 1959 1948 0 +1958 1961 1948 0 +-1961 -1959 -1948 0 +-1958 -1959 -1948 0 +-1961 -1957 -1948 0 +-1958 -1957 -1948 0 +1955 1960 1962 0 +1627 1624 1234 0 +1628 1626 1234 0 +-1626 -1624 -1234 0 +-1628 -1624 -1234 0 +-1626 -1627 -1234 0 +-1628 -1627 -1234 0 +1621 1623 1625 0 +1801 1974 1620 0 +1802 1804 1620 0 +-1804 -1974 -1620 0 +-1802 -1974 -1620 0 +-1804 -1801 -1620 0 +-1802 -1801 -1620 0 +1800 1803 1805 0 +-1033 -1031 -1030 0 +-1034 -1032 -1030 0 +1032 1031 1030 0 +1034 1031 1030 0 +1032 1033 1030 0 +1034 1033 1030 0 +-1027 -1028 -1029 0 +-1799 -36 -2021 0 +-1631 -1633 -1622 0 +-1632 -1635 -1622 0 +1635 1633 1622 0 +1632 1633 1622 0 +1635 1631 1622 0 +1632 1631 1622 0 +-1630 -1634 -1636 0 +-1429 -1426 -1361 0 +-1430 -1428 -1361 0 +1428 1426 1361 0 +1430 1426 1361 0 +1428 1429 1361 0 +1430 1429 1361 0 +-1424 -1431 -1432 0 +1843 1845 1629 0 +1844 1842 1629 0 +-1842 -1845 -1629 0 +-1844 -1845 -1629 0 +-1842 -1843 -1629 0 +-1844 -1843 -1629 0 +1841 1846 1847 0 +1489 1490 1488 0 +1489 1485 1488 0 +1489 1491 1488 0 +1485 1486 1487 0 +-1340 -1337 -428 0 +-1341 -1339 -428 0 +1339 1337 428 0 +1341 1337 428 0 +1339 1340 428 0 +1341 1340 428 0 +-1333 -1336 -1338 0 +-1766 -1768 -1762 0 +-1767 -1770 -1762 0 +1770 1768 1762 0 +1767 1768 1762 0 +1770 1766 1762 0 +1767 1766 1762 0 +-1764 -1769 -1771 0 +1944 1942 1765 0 +1945 1943 1765 0 +-1943 -1942 -1765 0 +-1945 -1942 -1765 0 +-1943 -1944 -1765 0 +-1945 -1944 -1765 0 +1938 1939 1941 0 +-1946 -41 -2045 0 +1345 1347 1334 0 +1346 1349 1334 0 +-1349 -1347 -1334 0 +-1346 -1347 -1334 0 +-1349 -1345 -1334 0 +-1346 -1345 -1334 0 +1343 1348 1350 0 +1355 1353 1351 0 +1356 1354 1351 0 +-1354 -1353 -1351 0 +-1356 -1353 -1351 0 +-1354 -1355 -1351 0 +-1356 -1355 -1351 0 +1352 1357 1358 0 +-1826 -1828 -1342 0 +-1827 -1825 -1342 0 +1825 1828 1342 0 +1827 1828 1342 0 +1825 1826 1342 0 +1827 1826 1342 0 +-1823 -1829 -1830 0 +2081 83 -81 0 +2082 -83 81 0 +-2080 2082 2081 0 +-82 81 83 0 +-82 -81 -83 0 +-1388 -1379 -1375 0 +-1391 -1385 -1375 0 +1385 1379 1375 0 +1391 1379 1375 0 +1385 1388 1375 0 +1391 1388 1375 0 +-1392 -1393 1387 0 +-1392 -1391 1385 0 +-1392 1385 1387 0 +-1386 -1387 1393 0 +-1386 -1385 1391 0 +-1386 1391 1393 0 +-1380 -1381 1390 0 +-1380 -1379 1388 0 +-1380 1388 1390 0 +-1376 1375 1377 0 +-1376 -1375 -1377 0 +-1390 -1379 -1377 0 +-1393 -1387 -1377 0 +1387 1379 1377 0 +1393 1379 1377 0 +1387 1390 1377 0 +1393 1390 1377 0 +-1370 1389 1392 0 +-1392 1391 1393 0 +-1392 -1391 -1393 0 +-1389 1388 1390 0 +-1389 -1388 -1390 0 +-1369 -1378 -1382 0 +-1370 1369 1371 0 +-1370 -1369 -1371 0 +-1371 -1378 -1384 0 +-1373 1383 1386 0 +-1386 1385 1387 0 +-1386 -1385 -1387 0 +-1383 1382 1384 0 +-1383 -1382 -1384 0 +-1373 1372 1374 0 +-1373 -1372 -1374 0 +-1711 -1714 -1718 0 +-1712 1711 1713 0 +-1712 -1711 -1713 0 +-1713 -1714 -1720 0 +2084 50 -48 0 +2085 -50 48 0 +-2083 2085 2084 0 +1705 1696 48 0 +1708 1702 48 0 +-1702 -1696 -48 0 +-1708 -1696 -48 0 +-1702 -1705 -48 0 +-1708 -1705 -48 0 +-1709 -1710 -1702 0 +-1709 -1708 -1704 0 +-1709 -1702 -1704 0 +-1703 -1704 -1708 0 +-1703 -1702 -1710 0 +-1703 -1708 -1710 0 +-1697 -1698 -1705 0 +-1697 -1696 -1707 0 +-1697 -1705 -1707 0 +-49 48 50 0 +-49 -48 -50 0 +1707 1696 50 0 +1710 1704 50 0 +-1704 -1696 -50 0 +-1710 -1696 -50 0 +-1704 -1707 -50 0 +-1710 -1707 -50 0 +-1689 1706 1709 0 +-1709 1708 1710 0 +-1709 -1708 -1710 0 +-1706 1705 1707 0 +-1706 -1705 -1707 0 +1688 1695 1699 0 +-1689 1688 1690 0 +-1689 -1688 -1690 0 +1690 1695 1701 0 +-1693 1700 1703 0 +-1703 1702 1704 0 +-1703 -1702 -1704 0 +-1700 1699 1701 0 +-1700 -1699 -1701 0 +-1692 -1721 -1722 0 +-1693 1692 1694 0 +-1693 -1692 -1694 0 +-1694 -1721 -1724 0 +2087 53 -51 0 +2088 -53 51 0 +-2086 2088 2087 0 +1657 1663 51 0 +1660 1667 51 0 +-1667 -1663 -51 0 +-1660 -1663 -51 0 +-1667 -1657 -51 0 +-1660 -1657 -51 0 +-1661 -1662 -1667 0 +-1661 -1660 -1669 0 +-1661 -1667 -1669 0 +-1668 -1669 -1660 0 +-1668 -1667 -1662 0 +-1668 -1660 -1662 0 +-1664 -1665 -1657 0 +-1664 -1663 -1659 0 +-1664 -1657 -1659 0 +-52 51 53 0 +-52 -51 -53 0 +1659 1663 53 0 +1662 1669 53 0 +-1669 -1663 -53 0 +-1662 -1663 -53 0 +-1669 -1659 -53 0 +-1662 -1659 -53 0 +-1652 1658 1661 0 +-1661 1660 1662 0 +-1661 -1660 -1662 0 +-1658 1657 1659 0 +-1658 -1657 -1659 0 +1651 1666 1670 0 +-1652 1651 1653 0 +-1652 -1651 -1653 0 +1653 1666 1672 0 +-1655 1668 1671 0 +-1671 1670 1672 0 +-1671 -1670 -1672 0 +-1668 1667 1669 0 +-1668 -1667 -1669 0 +-1654 -1727 -1728 0 +-1655 1654 1656 0 +-1655 -1654 -1656 0 +-1656 -1727 -1730 0 +2090 68 -66 0 +2091 -68 66 0 +-2089 2091 2090 0 +1228 1219 66 0 +1231 1225 66 0 +-1225 -1219 -66 0 +-1231 -1219 -66 0 +-1225 -1228 -66 0 +-1231 -1228 -66 0 +-1232 -1233 -1225 0 +-1232 -1231 -1227 0 +-1232 -1225 -1227 0 +-1226 -1227 -1231 0 +-1226 -1225 -1233 0 +-1226 -1231 -1233 0 +-1229 -1230 -1219 0 +-1229 -1228 -1221 0 +-1229 -1219 -1221 0 +-1220 -1221 -1228 0 +-1220 -1219 -1230 0 +-1220 -1228 -1230 0 +-67 66 68 0 +-67 -66 -68 0 +1230 1221 68 0 +1233 1227 68 0 +-1227 -1221 -68 0 +-1233 -1221 -68 0 +-1227 -1230 -68 0 +-1233 -1230 -68 0 +-1211 1229 1232 0 +-1232 1231 1233 0 +-1232 -1231 -1233 0 +-1229 1228 1230 0 +-1229 -1228 -1230 0 +1210 1216 1222 0 +-1223 -1224 -1216 0 +-1223 -1222 -1218 0 +-1223 -1216 -1218 0 +-1217 -1218 -1222 0 +-1217 -1216 -1224 0 +-1217 -1222 -1224 0 +-1211 1210 1212 0 +-1211 -1210 -1212 0 +1212 1218 1224 0 +-948 1223 1226 0 +-1226 1225 1227 0 +-1226 -1225 -1227 0 +-1223 1222 1224 0 +-1223 -1222 -1224 0 +-947 -1245 -974 0 +-948 947 949 0 +-948 -947 -949 0 +-949 -1245 -976 0 +-1236 1235 1237 0 +-1236 -1235 -1237 0 +-1199 1198 1200 0 +-1199 -1198 -1200 0 +-978 977 979 0 +-978 -977 -979 0 +-975 974 976 0 +-975 -974 -976 0 +-719 -720 -386 0 +-719 -718 -388 0 +-719 -386 -388 0 +-387 -388 -718 0 +-387 -386 -720 0 +-387 -718 -720 0 +-714 713 715 0 +-714 -713 -715 0 +-853 852 854 0 +-853 -852 -854 0 +-719 718 720 0 +-719 -718 -720 0 +-655 654 656 0 +-655 -654 -656 0 +-436 435 437 0 +-436 -435 -437 0 +-433 432 434 0 +-433 -432 -434 0 +-405 404 406 0 +-405 -404 -406 0 +-386 -389 -390 0 +-387 386 388 0 +-387 -386 -388 0 +-388 -389 -392 0 +2093 74 -72 0 +2094 -74 72 0 +-2092 2094 2093 0 +967 958 72 0 +970 964 72 0 +-964 -958 -72 0 +-970 -958 -72 0 +-964 -967 -72 0 +-970 -967 -72 0 +-971 -972 -964 0 +-971 -970 -966 0 +-971 -964 -966 0 +-965 -966 -970 0 +-965 -964 -972 0 +-965 -970 -972 0 +-959 -960 -967 0 +-959 -958 -969 0 +-959 -967 -969 0 +-73 72 74 0 +-73 -72 -74 0 +969 958 74 0 +972 966 74 0 +-966 -958 -74 0 +-972 -958 -74 0 +-966 -969 -74 0 +-972 -969 -74 0 +-951 968 971 0 +-971 970 972 0 +-971 -970 -972 0 +-968 967 969 0 +-968 -967 -969 0 +950 957 961 0 +-951 950 952 0 +-951 -950 -952 0 +952 957 963 0 +-955 962 965 0 +-965 964 966 0 +-965 -964 -966 0 +-962 961 963 0 +-962 -961 -963 0 +-954 -980 -977 0 +-955 954 956 0 +-955 -954 -956 0 +-956 -980 -979 0 +2096 71 -69 0 +2097 -71 69 0 +-2095 2097 2096 0 +931 937 69 0 +934 941 69 0 +-941 -937 -69 0 +-934 -937 -69 0 +-941 -931 -69 0 +-934 -931 -69 0 +-935 -936 -941 0 +-935 -934 -943 0 +-935 -941 -943 0 +-942 -943 -934 0 +-942 -941 -936 0 +-942 -934 -936 0 +-938 -939 -931 0 +-938 -937 -933 0 +-938 -931 -933 0 +-70 69 71 0 +-70 -69 -71 0 +933 937 71 0 +936 943 71 0 +-943 -937 -71 0 +-936 -937 -71 0 +-943 -933 -71 0 +-936 -933 -71 0 +-926 932 935 0 +-935 934 936 0 +-935 -934 -936 0 +-932 931 933 0 +-932 -931 -933 0 +925 940 944 0 +-926 925 927 0 +-926 -925 -927 0 +927 940 946 0 +-929 942 945 0 +-945 944 946 0 +-945 -944 -946 0 +-942 941 943 0 +-942 -941 -943 0 +-928 -1238 -1198 0 +-929 928 930 0 +-929 -928 -930 0 +-930 -1238 -1200 0 +2099 65 -63 0 +2100 -65 63 0 +-2098 2100 2099 0 +1159 1165 63 0 +1162 1169 63 0 +-1169 -1165 -63 0 +-1162 -1165 -63 0 +-1169 -1159 -63 0 +-1162 -1159 -63 0 +-1163 -1164 -1169 0 +-1163 -1162 -1171 0 +-1163 -1169 -1171 0 +-1170 -1171 -1162 0 +-1170 -1169 -1164 0 +-1170 -1162 -1164 0 +-1166 -1167 -1159 0 +-1166 -1165 -1161 0 +-1166 -1159 -1161 0 +-64 63 65 0 +-64 -63 -65 0 +1161 1165 65 0 +1164 1171 65 0 +-1171 -1165 -65 0 +-1164 -1165 -65 0 +-1171 -1161 -65 0 +-1164 -1161 -65 0 +-1154 1160 1163 0 +-1163 1162 1164 0 +-1163 -1162 -1164 0 +-1160 1159 1161 0 +-1160 -1159 -1161 0 +1153 1168 1172 0 +-1154 1153 1155 0 +-1154 -1153 -1155 0 +1155 1168 1174 0 +-1157 1170 1173 0 +-1173 1172 1174 0 +-1173 -1172 -1174 0 +-1170 1169 1171 0 +-1170 -1169 -1171 0 +-1156 -1261 -1235 0 +-1157 1156 1158 0 +-1157 -1156 -1158 0 +-1158 -1261 -1237 0 +2102 47 -45 0 +2103 -47 45 0 +-2101 2103 2102 0 +1603 1609 45 0 +1606 1613 45 0 +-1613 -1609 -45 0 +-1606 -1609 -45 0 +-1613 -1603 -45 0 +-1606 -1603 -45 0 +-1607 -1608 -1613 0 +-1607 -1606 -1615 0 +-1607 -1613 -1615 0 +-1614 -1615 -1606 0 +-1614 -1613 -1608 0 +-1614 -1606 -1608 0 +-1610 -1611 -1603 0 +-1610 -1609 -1605 0 +-1610 -1603 -1605 0 +-46 45 47 0 +-46 -45 -47 0 +1605 1609 47 0 +1608 1615 47 0 +-1615 -1609 -47 0 +-1608 -1609 -47 0 +-1615 -1605 -47 0 +-1608 -1605 -47 0 +-1598 1604 1607 0 +-1607 1606 1608 0 +-1607 -1606 -1608 0 +-1604 1603 1605 0 +-1604 -1603 -1605 0 +1597 1612 1616 0 +-1598 1597 1599 0 +-1598 -1597 -1599 0 +1599 1612 1618 0 +-1601 1614 1617 0 +-1617 1616 1618 0 +-1617 -1616 -1618 0 +-1614 1613 1615 0 +-1614 -1613 -1615 0 +-1600 -1641 -1884 0 +-1601 1600 1602 0 +-1601 -1600 -1602 0 +-1602 -1641 -1886 0 +-1894 1893 1895 0 +-1894 -1893 -1895 0 +-1888 1887 1889 0 +-1888 -1887 -1889 0 +-1885 1884 1886 0 +-1885 -1884 -1886 0 +1638 413 1735 0 +-1639 1638 1640 0 +-1639 -1638 -1640 0 +1640 415 1735 0 +-423 -424 434 0 +-423 -422 432 0 +-423 432 434 0 +-433 -434 424 0 +-433 -432 422 0 +-433 422 424 0 +-414 413 415 0 +-414 -413 -415 0 +2105 44 -42 0 +2106 -44 42 0 +-2104 2106 2105 0 +1867 1873 42 0 +1870 1877 42 0 +-1877 -1873 -42 0 +-1870 -1873 -42 0 +-1877 -1867 -42 0 +-1870 -1867 -42 0 +-1871 -1872 -1877 0 +-1871 -1870 -1879 0 +-1871 -1877 -1879 0 +-1878 -1879 -1870 0 +-1878 -1877 -1872 0 +-1878 -1870 -1872 0 +-1874 -1875 -1867 0 +-1874 -1873 -1869 0 +-1874 -1867 -1869 0 +-43 42 44 0 +-43 -42 -44 0 +1869 1873 44 0 +1872 1879 44 0 +-1879 -1873 -44 0 +-1872 -1873 -44 0 +-1879 -1869 -44 0 +-1872 -1869 -44 0 +-1862 1868 1871 0 +-1871 1870 1872 0 +-1871 -1870 -1872 0 +-1868 1867 1869 0 +-1868 -1867 -1869 0 +1861 1876 1880 0 +-1862 1861 1863 0 +-1862 -1861 -1863 0 +1863 1876 1882 0 +-1865 1878 1881 0 +-1881 1880 1882 0 +-1881 -1880 -1882 0 +-1878 1877 1879 0 +-1878 -1877 -1879 0 +-1864 -1883 -1887 0 +-1865 1864 1866 0 +-1865 -1864 -1866 0 +-1866 -1883 -1889 0 +2108 77 -75 0 +2109 -77 75 0 +-2107 2109 2108 0 +-76 75 77 0 +-76 -75 -77 0 +-2032 -2029 -2023 0 +-2035 -2039 -2023 0 +2039 2029 2023 0 +2035 2029 2023 0 +2039 2032 2023 0 +2035 2032 2023 0 +-2036 -2037 2041 0 +-2036 -2035 2039 0 +-2036 2039 2041 0 +-2040 -2041 2037 0 +-2040 -2039 2035 0 +-2040 2035 2037 0 +-2030 -2031 2034 0 +-2030 -2029 2032 0 +-2030 2032 2034 0 +-2024 2023 2025 0 +-2024 -2023 -2025 0 +-2034 -2029 -2025 0 +-2037 -2041 -2025 0 +2041 2029 2025 0 +2037 2029 2025 0 +2041 2034 2025 0 +2037 2034 2025 0 +-2027 2033 2036 0 +-2036 2035 2037 0 +-2036 -2035 -2037 0 +-2033 2032 2034 0 +-2033 -2032 -2034 0 +-2026 -2038 -2042 0 +-2027 2026 2028 0 +-2027 -2026 -2028 0 +-2028 -2038 -2044 0 +-1897 2040 2043 0 +-2043 2042 2044 0 +-2043 -2042 -2044 0 +-2040 2039 2041 0 +-2040 -2039 -2041 0 +1896 1899 1908 0 +-1897 1896 1898 0 +-1897 -1896 -1898 0 +1898 1899 1910 0 +-1891 1909 1912 0 +-1912 1911 1913 0 +-1912 -1911 -1913 0 +-1909 1908 1910 0 +-1909 -1908 -1910 0 +-1891 1890 1892 0 +-1891 -1890 -1892 0 +2111 80 -78 0 +2112 -80 78 0 +-2110 2112 2111 0 +-79 78 80 0 +-79 -78 -80 0 +-2053 -2050 -1900 0 +-2056 -2060 -1900 0 +2060 2050 1900 0 +2056 2050 1900 0 +2060 2053 1900 0 +2056 2053 1900 0 +-2057 -2058 2062 0 +-2057 -2056 2060 0 +-2057 2060 2062 0 +-2061 -2062 2058 0 +-2061 -2060 2056 0 +-2061 2056 2058 0 +-2051 -2052 2055 0 +-2051 -2050 2053 0 +-2051 2053 2055 0 +-1901 1900 1902 0 +-1901 -1900 -1902 0 +-2055 -2050 -1902 0 +-2058 -2062 -1902 0 +2062 2050 1902 0 +2058 2050 1902 0 +2062 2055 1902 0 +2058 2055 1902 0 +-2047 2054 2057 0 +-2057 2056 2058 0 +-2057 -2056 -2058 0 +-2054 2053 2055 0 +-2054 -2053 -2055 0 +-2046 -2059 -2063 0 +-2047 2046 2048 0 +-2047 -2046 -2048 0 +-2048 -2059 -2065 0 +-1905 2061 2064 0 +-2064 2063 2065 0 +-2064 -2063 -2065 0 +-2061 2060 2062 0 +-2061 -2060 -2062 0 +1904 1907 1911 0 +-1905 1904 1906 0 +-1905 -1904 -1906 0 +1906 1907 1913 0 +2114 62 -60 0 +2115 -62 60 0 +-2113 2115 2114 0 +680 671 60 0 +683 677 60 0 +-677 -671 -60 0 +-683 -671 -60 0 +-677 -680 -60 0 +-683 -680 -60 0 +-684 -685 -677 0 +-684 -683 -679 0 +-684 -677 -679 0 +-678 -679 -683 0 +-678 -677 -685 0 +-678 -683 -685 0 +-672 -673 -680 0 +-672 -671 -682 0 +-672 -680 -682 0 +-61 60 62 0 +-61 -60 -62 0 +682 671 62 0 +685 679 62 0 +-679 -671 -62 0 +-685 -671 -62 0 +-679 -682 -62 0 +-685 -682 -62 0 +-664 681 684 0 +-684 683 685 0 +-684 -683 -685 0 +-681 680 682 0 +-681 -680 -682 0 +663 670 674 0 +-664 663 665 0 +-664 -663 -665 0 +665 670 676 0 +-668 675 678 0 +-678 677 679 0 +-678 -677 -679 0 +-675 674 676 0 +-675 -674 -676 0 +-667 -981 -1010 0 +-668 667 669 0 +-668 -667 -669 0 +-669 -981 -1012 0 +-1241 1240 1242 0 +-1241 -1240 -1242 0 +-1014 1013 1015 0 +-1014 -1013 -1015 0 +-1011 1010 1012 0 +-1011 -1010 -1012 0 +733 442 736 0 +-734 733 735 0 +-734 -733 -735 0 +735 444 736 0 +-454 -455 452 0 +-454 -453 450 0 +-454 450 452 0 +-451 -452 455 0 +-451 -450 453 0 +-451 453 455 0 +-443 442 444 0 +-443 -442 -444 0 +2117 89 -87 0 +2118 -89 87 0 +-2116 2118 2117 0 +-88 87 89 0 +-88 -87 -89 0 +-991 -997 -982 0 +-994 -1001 -982 0 +1001 997 982 0 +994 997 982 0 +1001 991 982 0 +994 991 982 0 +-995 -996 1003 0 +-995 -994 1001 0 +-995 1001 1003 0 +-1002 -1003 996 0 +-1002 -1001 994 0 +-1002 994 996 0 +-998 -999 993 0 +-998 -997 991 0 +-998 991 993 0 +-983 982 984 0 +-983 -982 -984 0 +-993 -997 -984 0 +-996 -1003 -984 0 +1003 997 984 0 +996 997 984 0 +1003 993 984 0 +996 993 984 0 +-986 992 995 0 +-995 994 996 0 +-995 -994 -996 0 +-992 991 993 0 +-992 -991 -993 0 +-985 -1000 -1004 0 +-986 985 987 0 +-986 -985 -987 0 +-987 -1000 -1006 0 +-989 1002 1005 0 +-1005 1004 1006 0 +-1005 -1004 -1006 0 +-1002 1001 1003 0 +-1002 -1001 -1003 0 +988 1269 1249 0 +-989 988 990 0 +-989 -988 -990 0 +990 1269 1251 0 +-1008 1250 1253 0 +-1253 1252 1254 0 +-1253 -1252 -1254 0 +-1250 1249 1251 0 +-1250 -1249 -1251 0 +-1008 1007 1009 0 +-1008 -1007 -1009 0 +2120 86 -84 0 +2121 -86 84 0 +-2119 2121 2120 0 +-85 84 86 0 +-85 -84 -86 0 +-1442 -1433 -1201 0 +-1445 -1439 -1201 0 +1439 1433 1201 0 +1445 1433 1201 0 +1439 1442 1201 0 +1445 1442 1201 0 +-1446 -1447 1441 0 +-1446 -1445 1439 0 +-1446 1439 1441 0 +-1440 -1441 1447 0 +-1440 -1439 1445 0 +-1440 1445 1447 0 +-1434 -1435 1444 0 +-1434 -1433 1442 0 +-1434 1442 1444 0 +-1202 1201 1203 0 +-1202 -1201 -1203 0 +-1444 -1433 -1203 0 +-1447 -1441 -1203 0 +1441 1433 1203 0 +1447 1433 1203 0 +1441 1444 1203 0 +1447 1444 1203 0 +-1205 1443 1446 0 +-1446 1445 1447 0 +-1446 -1445 -1447 0 +-1443 1442 1444 0 +-1443 -1442 -1444 0 +-1204 -1425 -1436 0 +-1205 1204 1206 0 +-1205 -1204 -1206 0 +-1206 -1425 -1438 0 +-1208 1437 1440 0 +-1440 1439 1441 0 +-1440 -1439 -1441 0 +-1437 1436 1438 0 +-1437 -1436 -1438 0 +1207 1248 1252 0 +-1208 1207 1209 0 +-1208 -1207 -1209 0 +1209 1248 1254 0 +2123 59 -57 0 +2124 -59 57 0 +-2122 2124 2123 0 +1192 1183 57 0 +1195 1189 57 0 +-1189 -1183 -57 0 +-1195 -1183 -57 0 +-1189 -1192 -57 0 +-1195 -1192 -57 0 +-1196 -1197 -1189 0 +-1196 -1195 -1191 0 +-1196 -1189 -1191 0 +-1190 -1191 -1195 0 +-1190 -1189 -1197 0 +-1190 -1195 -1197 0 +-1184 -1185 -1192 0 +-1184 -1183 -1194 0 +-1184 -1192 -1194 0 +-58 57 59 0 +-58 -57 -59 0 +1194 1183 59 0 +1197 1191 59 0 +-1191 -1183 -59 0 +-1197 -1183 -59 0 +-1191 -1194 -59 0 +-1197 -1194 -59 0 +-1176 1193 1196 0 +-1196 1195 1197 0 +-1196 -1195 -1197 0 +-1193 1192 1194 0 +-1193 -1192 -1194 0 +1175 1182 1186 0 +-1176 1175 1177 0 +-1176 -1175 -1177 0 +1177 1182 1188 0 +-1180 1187 1190 0 +-1190 1189 1191 0 +-1190 -1189 -1191 0 +-1187 1186 1188 0 +-1187 -1186 -1188 0 +-1179 -1239 -1240 0 +-1180 1179 1181 0 +-1180 -1179 -1181 0 +-1181 -1239 -1242 0 +2126 116 -114 0 +2127 -116 114 0 +-2125 2127 2126 0 +-115 114 116 0 +-115 -114 -116 0 +-330 -327 -318 0 +-333 -337 -318 0 +337 327 318 0 +333 327 318 0 +337 330 318 0 +333 330 318 0 +-334 -335 339 0 +-334 -333 337 0 +-334 337 339 0 +-338 -339 335 0 +-338 -337 333 0 +-338 333 335 0 +-328 -329 332 0 +-328 -327 330 0 +-328 330 332 0 +-319 318 320 0 +-319 -318 -320 0 +-332 -327 -320 0 +-335 -339 -320 0 +339 327 320 0 +335 327 320 0 +339 332 320 0 +335 332 320 0 +-322 331 334 0 +-334 333 335 0 +-334 -333 -335 0 +-331 330 332 0 +-331 -330 -332 0 +-321 -336 -340 0 +-322 321 323 0 +-322 -321 -323 0 +-323 -336 -342 0 +-325 338 341 0 +-341 340 342 0 +-341 -340 -342 0 +-338 337 339 0 +-338 -337 -339 0 +324 626 918 0 +-919 -920 -626 0 +-919 -918 -628 0 +-919 -626 -628 0 +-627 -628 -918 0 +-627 -626 -920 0 +-627 -918 -920 0 +-325 324 326 0 +-325 -324 -326 0 +326 628 920 0 +-624 919 922 0 +-922 921 923 0 +-922 -921 -923 0 +-919 918 920 0 +-919 -918 -920 0 +-624 623 625 0 +-624 -623 -625 0 +1244 1258 1256 0 +-1482 1481 1483 0 +-1482 -1481 -1483 0 +-1476 1475 1477 0 +-1476 -1475 -1477 0 +-1267 1266 1268 0 +-1267 -1266 -1268 0 +-1264 1263 1265 0 +-1264 -1263 -1265 0 +-737 -425 -730 0 +-731 -732 427 0 +-731 -730 425 0 +-731 425 427 0 +-426 -427 732 0 +-426 -425 730 0 +-426 730 732 0 +-738 737 739 0 +-738 -737 -739 0 +-739 -427 -732 0 +-731 730 732 0 +-731 -730 -732 0 +-693 -707 -704 0 +-693 -686 -704 0 +-693 -710 -704 0 +-711 -712 -686 0 +-711 -710 -688 0 +-711 -686 -688 0 +-687 -688 -710 0 +-687 -686 -712 0 +-687 -710 -712 0 +-708 -709 -710 0 +-708 -707 -712 0 +-708 -710 -712 0 +-708 -709 -686 0 +-708 -707 -688 0 +-708 -686 -688 0 +-711 -712 695 0 +-711 -710 693 0 +-711 693 695 0 +-687 -688 695 0 +-687 -686 693 0 +-687 693 695 0 +-708 -709 695 0 +-708 -707 693 0 +-708 693 695 0 +-705 704 706 0 +-705 -704 -706 0 +-695 -707 -706 0 +-695 -688 -706 0 +-695 -712 -706 0 +-702 -703 700 0 +-702 -701 698 0 +-702 698 700 0 +-699 -700 703 0 +-699 -698 701 0 +-699 701 703 0 +-694 693 695 0 +-694 -693 -695 0 +-686 -689 -690 0 +-687 686 688 0 +-687 -686 -688 0 +-688 -689 -692 0 +393 445 425 0 +393 429 425 0 +393 435 425 0 +-436 -437 431 0 +-436 -435 429 0 +-436 429 431 0 +-430 -431 437 0 +-430 -429 435 0 +-430 435 437 0 +-446 -447 437 0 +-446 -445 435 0 +-446 435 437 0 +-446 -447 431 0 +-446 -445 429 0 +-446 429 431 0 +-436 -437 -393 0 +-436 -435 -395 0 +-436 -393 -395 0 +-430 -431 -393 0 +-430 -429 -395 0 +-430 -393 -395 0 +-446 -447 -393 0 +-446 -445 -395 0 +-446 -393 -395 0 +-426 425 427 0 +-426 -425 -427 0 +395 445 427 0 +395 431 427 0 +395 437 427 0 +-402 -403 -407 0 +-402 -401 -409 0 +-402 -407 -409 0 +-408 -409 -401 0 +-408 -407 -403 0 +-408 -401 -403 0 +-394 393 395 0 +-394 -393 -395 0 +429 438 439 0 +-430 429 431 0 +-430 -429 -431 0 +431 438 441 0 +2129 125 -123 0 +2130 -125 123 0 +-2128 2130 2129 0 +482 479 123 0 +485 489 123 0 +-489 -479 -123 0 +-485 -479 -123 0 +-489 -482 -123 0 +-485 -482 -123 0 +-486 -487 -489 0 +-486 -485 -491 0 +-486 -489 -491 0 +-490 -491 -485 0 +-490 -489 -487 0 +-490 -485 -487 0 +-480 -481 -482 0 +-480 -479 -484 0 +-480 -482 -484 0 +-124 123 125 0 +-124 -123 -125 0 +484 479 125 0 +487 491 125 0 +-491 -479 -125 0 +-487 -479 -125 0 +-491 -484 -125 0 +-487 -484 -125 0 +-474 483 486 0 +-486 485 487 0 +-486 -485 -487 0 +-483 482 484 0 +-483 -482 -484 0 +473 488 492 0 +-474 473 475 0 +-474 -473 -475 0 +475 488 494 0 +-477 490 493 0 +-493 492 494 0 +-493 -492 -494 0 +-490 489 491 0 +-490 -489 -491 0 +-476 -561 -569 0 +-477 476 478 0 +-477 -476 -478 0 +-478 -561 -571 0 +-916 915 917 0 +-916 -915 -917 0 +-573 572 574 0 +-573 -572 -574 0 +-570 569 571 0 +-570 -569 -571 0 +-559 558 560 0 +-559 -558 -560 0 +2132 119 -117 0 +2133 -119 117 0 +-2131 2133 2132 0 +589 580 117 0 +592 586 117 0 +-586 -580 -117 0 +-592 -580 -117 0 +-586 -589 -117 0 +-592 -589 -117 0 +-593 -594 -586 0 +-593 -592 -588 0 +-593 -586 -588 0 +-587 -588 -592 0 +-587 -586 -594 0 +-587 -592 -594 0 +-581 -582 -589 0 +-581 -580 -591 0 +-581 -589 -591 0 +-118 117 119 0 +-118 -117 -119 0 +591 580 119 0 +594 588 119 0 +-588 -580 -119 0 +-594 -580 -119 0 +-588 -591 -119 0 +-594 -591 -119 0 +-576 590 593 0 +-593 592 594 0 +-593 -592 -594 0 +-590 589 591 0 +-590 -589 -591 0 +575 579 583 0 +-576 575 577 0 +-576 -575 -577 0 +577 579 585 0 +-566 584 587 0 +-587 586 588 0 +-587 -586 -588 0 +-584 583 585 0 +-584 -583 -585 0 +-565 -568 -572 0 +-566 565 567 0 +-566 -565 -567 0 +-567 -568 -574 0 +2135 122 -120 0 +2136 -122 120 0 +-2134 2136 2135 0 +906 897 120 0 +909 903 120 0 +-903 -897 -120 0 +-909 -897 -120 0 +-903 -906 -120 0 +-909 -906 -120 0 +-910 -911 -903 0 +-910 -909 -905 0 +-910 -903 -905 0 +-904 -905 -909 0 +-904 -903 -911 0 +-904 -909 -911 0 +-898 -899 -906 0 +-898 -897 -908 0 +-898 -906 -908 0 +-121 120 122 0 +-121 -120 -122 0 +908 897 122 0 +911 905 122 0 +-905 -897 -122 0 +-911 -897 -122 0 +-905 -908 -122 0 +-911 -908 -122 0 +-891 907 910 0 +-910 909 911 0 +-910 -909 -911 0 +-907 906 908 0 +-907 -906 -908 0 +890 896 900 0 +-891 890 892 0 +-891 -890 -892 0 +892 896 902 0 +-894 901 904 0 +-904 903 905 0 +-904 -903 -905 0 +-901 900 902 0 +-901 -900 -902 0 +-893 -912 -915 0 +-916 -917 914 0 +-916 -915 912 0 +-916 912 914 0 +-913 -914 917 0 +-913 -912 915 0 +-913 915 917 0 +-894 893 895 0 +-894 -893 -895 0 +-895 -914 -917 0 +2138 92 -90 0 +2139 -92 90 0 +-2137 2139 2138 0 +-91 90 92 0 +-91 -90 -92 0 +-874 -865 -862 0 +-877 -871 -862 0 +871 865 862 0 +877 865 862 0 +871 874 862 0 +877 874 862 0 +-878 -879 873 0 +-878 -877 871 0 +-878 871 873 0 +-872 -873 879 0 +-872 -871 877 0 +-872 877 879 0 +-866 -867 876 0 +-866 -865 874 0 +-866 874 876 0 +-863 862 864 0 +-863 -862 -864 0 +-876 -865 -864 0 +-879 -873 -864 0 +873 865 864 0 +879 865 864 0 +873 876 864 0 +879 876 864 0 +-856 875 878 0 +-878 877 879 0 +-878 -877 -879 0 +-875 874 876 0 +-875 -874 -876 0 +-855 -861 -868 0 +-856 855 857 0 +-856 -855 -857 0 +-857 -861 -870 0 +-859 869 872 0 +-872 871 873 0 +-872 -871 -873 0 +-869 868 870 0 +-869 -868 -870 0 +858 883 884 0 +-859 858 860 0 +-859 -858 -860 0 +860 883 886 0 +-881 885 888 0 +-888 887 889 0 +-888 -887 -889 0 +-885 884 886 0 +-885 -884 -886 0 +-881 880 882 0 +-881 -880 -882 0 +1257 1259 1260 0 +2141 101 -99 0 +2142 -101 99 0 +-2140 2142 2141 0 +208 199 99 0 +211 205 99 0 +-205 -199 -99 0 +-211 -199 -99 0 +-205 -208 -99 0 +-211 -208 -99 0 +-212 -213 -205 0 +-212 -211 -207 0 +-212 -205 -207 0 +-206 -207 -211 0 +-206 -205 -213 0 +-206 -211 -213 0 +-200 -201 -208 0 +-200 -199 -210 0 +-200 -208 -210 0 +-100 99 101 0 +-100 -99 -101 0 +210 199 101 0 +213 207 101 0 +-207 -199 -101 0 +-213 -199 -101 0 +-207 -210 -101 0 +-213 -210 -101 0 +-190 209 212 0 +-212 211 213 0 +-212 -211 -213 0 +-209 208 210 0 +-209 -208 -210 0 +189 195 202 0 +-190 189 191 0 +-190 -189 -191 0 +191 195 204 0 +-193 203 206 0 +-206 205 207 0 +-206 -205 -207 0 +-203 202 204 0 +-203 -202 -204 0 +-192 -350 -292 0 +-293 -294 352 0 +-293 -292 350 0 +-293 350 352 0 +-351 -352 294 0 +-351 -350 292 0 +-351 292 294 0 +-193 192 194 0 +-193 -192 -194 0 +-194 -352 -294 0 +-621 620 622 0 +-621 -620 -622 0 +-296 295 297 0 +-296 -295 -297 0 +-293 292 294 0 +-293 -292 -294 0 +-252 251 253 0 +-252 -251 -253 0 +2144 95 -93 0 +2145 -95 93 0 +-2143 2145 2144 0 +312 303 93 0 +315 309 93 0 +-309 -303 -93 0 +-315 -303 -93 0 +-309 -312 -93 0 +-315 -312 -93 0 +-316 -317 -309 0 +-316 -315 -311 0 +-316 -309 -311 0 +-310 -311 -315 0 +-310 -309 -317 0 +-310 -315 -317 0 +-304 -305 -312 0 +-304 -303 -314 0 +-304 -312 -314 0 +-94 93 95 0 +-94 -93 -95 0 +314 303 95 0 +317 311 95 0 +-311 -303 -95 0 +-317 -303 -95 0 +-311 -314 -95 0 +-317 -314 -95 0 +-299 313 316 0 +-316 315 317 0 +-316 -315 -317 0 +-313 312 314 0 +-313 -312 -314 0 +298 302 306 0 +-299 298 300 0 +-299 -298 -300 0 +300 302 308 0 +-288 307 310 0 +-310 309 311 0 +-310 -309 -311 0 +-307 306 308 0 +-307 -306 -308 0 +-287 -291 -295 0 +-288 287 289 0 +-288 -287 -289 0 +-289 -291 -297 0 +2147 98 -96 0 +2148 -98 96 0 +-2146 2148 2147 0 +611 602 96 0 +614 608 96 0 +-608 -602 -96 0 +-614 -602 -96 0 +-608 -611 -96 0 +-614 -611 -96 0 +-615 -616 -608 0 +-615 -614 -610 0 +-615 -608 -610 0 +-609 -610 -614 0 +-609 -608 -616 0 +-609 -614 -616 0 +-603 -604 -611 0 +-603 -602 -613 0 +-603 -611 -613 0 +-97 96 98 0 +-97 -96 -98 0 +613 602 98 0 +616 610 98 0 +-610 -602 -98 0 +-616 -602 -98 0 +-610 -613 -98 0 +-616 -613 -98 0 +-596 612 615 0 +-615 614 616 0 +-615 -614 -616 0 +-612 611 613 0 +-612 -611 -613 0 +595 601 605 0 +-596 595 597 0 +-596 -595 -597 0 +597 601 607 0 +-599 606 609 0 +-609 608 610 0 +-609 -608 -610 0 +-606 605 607 0 +-606 -605 -607 0 +-598 -617 -620 0 +-621 -622 619 0 +-621 -620 617 0 +-621 617 619 0 +-618 -619 622 0 +-618 -617 620 0 +-618 620 622 0 +-599 598 600 0 +-599 -598 -600 0 +-600 -619 -622 0 +2150 110 -108 0 +2151 -110 108 0 +-2149 2151 2150 0 +167 164 108 0 +170 174 108 0 +-174 -164 -108 0 +-170 -164 -108 0 +-174 -167 -108 0 +-170 -167 -108 0 +-171 -172 -174 0 +-171 -170 -176 0 +-171 -174 -176 0 +-175 -176 -170 0 +-175 -174 -172 0 +-175 -170 -172 0 +-165 -166 -167 0 +-165 -164 -169 0 +-165 -167 -169 0 +-109 108 110 0 +-109 -108 -110 0 +169 164 110 0 +172 176 110 0 +-176 -164 -110 0 +-172 -164 -110 0 +-176 -169 -110 0 +-172 -169 -110 0 +-159 168 171 0 +-171 170 172 0 +-171 -170 -172 0 +-168 167 169 0 +-168 -167 -169 0 +158 173 177 0 +-159 158 160 0 +-159 -158 -160 0 +160 173 179 0 +-162 175 178 0 +-178 177 179 0 +-178 -177 -179 0 +-175 174 176 0 +-175 -174 -176 0 +-161 -417 -281 0 +-162 161 163 0 +-162 -161 -163 0 +-163 -417 -283 0 +-357 356 358 0 +-357 -356 -358 0 +-285 284 286 0 +-285 -284 -286 0 +-282 281 283 0 +-282 -281 -283 0 +-278 277 279 0 +-278 -277 -279 0 +-360 658 661 0 +-661 660 662 0 +-661 -660 -662 0 +-658 657 659 0 +-658 -657 -659 0 +-360 359 361 0 +-360 -359 -361 0 +1473 1732 1734 0 +2153 107 -105 0 +2154 -107 105 0 +-2152 2154 2153 0 +270 261 105 0 +273 267 105 0 +-267 -261 -105 0 +-273 -261 -105 0 +-267 -270 -105 0 +-273 -270 -105 0 +-274 -275 -267 0 +-274 -273 -269 0 +-274 -267 -269 0 +-268 -269 -273 0 +-268 -267 -275 0 +-268 -273 -275 0 +-262 -263 -270 0 +-262 -261 -272 0 +-262 -270 -272 0 +-106 105 107 0 +-106 -105 -107 0 +272 261 107 0 +275 269 107 0 +-269 -261 -107 0 +-275 -261 -107 0 +-269 -272 -107 0 +-275 -272 -107 0 +-255 271 274 0 +-274 273 275 0 +-274 -273 -275 0 +-271 270 272 0 +-271 -270 -272 0 +254 260 264 0 +-255 254 256 0 +-255 -254 -256 0 +256 260 266 0 +-258 265 268 0 +-268 267 269 0 +-268 -267 -269 0 +-265 264 266 0 +-265 -264 -266 0 +-257 -290 -284 0 +-258 257 259 0 +-258 -257 -259 0 +-259 -290 -286 0 +2156 113 -111 0 +2157 -113 111 0 +-2155 2157 2156 0 +371 362 111 0 +374 368 111 0 +-368 -362 -111 0 +-374 -362 -111 0 +-368 -371 -111 0 +-374 -371 -111 0 +-375 -376 -368 0 +-375 -374 -370 0 +-375 -368 -370 0 +-369 -370 -374 0 +-369 -368 -376 0 +-369 -374 -376 0 +-363 -364 -371 0 +-363 -362 -373 0 +-363 -371 -373 0 +-112 111 113 0 +-112 -111 -113 0 +373 362 113 0 +376 370 113 0 +-370 -362 -113 0 +-376 -362 -113 0 +-370 -373 -113 0 +-376 -373 -113 0 +-344 372 375 0 +-375 374 376 0 +-375 -374 -376 0 +-372 371 373 0 +-372 -371 -373 0 +343 349 365 0 +-344 343 345 0 +-344 -343 -345 0 +345 349 367 0 +-347 366 369 0 +-369 368 370 0 +-369 -368 -370 0 +-366 365 367 0 +-366 -365 -367 0 +-346 -353 -356 0 +-357 -358 355 0 +-357 -356 353 0 +-357 353 355 0 +-354 -355 358 0 +-354 -353 356 0 +-354 356 358 0 +-347 346 348 0 +-347 -346 -348 0 +-348 -355 -358 0 +2159 104 -102 0 +2160 -104 102 0 +-2158 2160 2159 0 +-103 102 104 0 +-103 -102 -104 0 +-641 -638 -629 0 +-644 -648 -629 0 +648 638 629 0 +644 638 629 0 +648 641 629 0 +644 641 629 0 +-645 -646 650 0 +-645 -644 648 0 +-645 648 650 0 +-649 -650 646 0 +-649 -648 644 0 +-649 644 646 0 +-639 -640 643 0 +-639 -638 641 0 +-639 641 643 0 +-630 629 631 0 +-630 -629 -631 0 +-643 -638 -631 0 +-646 -650 -631 0 +650 638 631 0 +646 638 631 0 +650 643 631 0 +646 643 631 0 +-633 642 645 0 +-645 644 646 0 +-645 -644 -646 0 +-642 641 643 0 +-642 -641 -643 0 +-632 -647 -651 0 +-633 632 634 0 +-633 -632 -634 0 +-634 -647 -653 0 +-636 649 652 0 +-652 651 653 0 +-652 -651 -653 0 +-649 648 650 0 +-649 -648 -650 0 +635 654 660 0 +-661 -662 -654 0 +-661 -660 -656 0 +-661 -654 -656 0 +-655 -656 -660 0 +-655 -654 -662 0 +-655 -660 -662 0 +-636 635 637 0 +-636 -635 -637 0 +637 656 662 0 +2162 128 -126 0 +2163 -128 126 0 +-2161 2163 2162 0 +-127 126 128 0 +-127 -126 -128 0 +-843 -834 -831 0 +-846 -840 -831 0 +840 834 831 0 +846 834 831 0 +840 843 831 0 +846 843 831 0 +-847 -848 842 0 +-847 -846 840 0 +-847 840 842 0 +-841 -842 848 0 +-841 -840 846 0 +-841 846 848 0 +-835 -836 845 0 +-835 -834 843 0 +-835 843 845 0 +-832 831 833 0 +-832 -831 -833 0 +-845 -834 -833 0 +-848 -842 -833 0 +842 834 833 0 +848 834 833 0 +842 845 833 0 +848 845 833 0 +-825 844 847 0 +-847 846 848 0 +-847 -846 -848 0 +-844 843 845 0 +-844 -843 -845 0 +-824 -830 -837 0 +-825 824 826 0 +-825 -824 -826 0 +-826 -830 -839 0 +-828 838 841 0 +-841 840 842 0 +-841 -840 -842 0 +-838 837 839 0 +-838 -837 -839 0 +827 852 1117 0 +-1118 -1119 -852 0 +-1118 -1117 -854 0 +-1118 -852 -854 0 +-853 -854 -1117 0 +-853 -852 -1119 0 +-853 -1117 -1119 0 +-828 827 829 0 +-828 -827 -829 0 +829 854 1119 0 +-1128 1127 1129 0 +-1128 -1127 -1129 0 +-1121 1120 1122 0 +-1121 -1120 -1122 0 +-1118 1117 1119 0 +-1118 -1117 -1119 0 +-850 849 851 0 +-850 -849 -851 0 +1479 1731 1733 0 +2165 137 -135 0 +2166 -137 135 0 +-2164 2166 2165 0 +1088 1094 135 0 +1091 1098 135 0 +-1098 -1094 -135 0 +-1091 -1094 -135 0 +-1098 -1088 -135 0 +-1091 -1088 -135 0 +-1092 -1093 -1098 0 +-1092 -1091 -1100 0 +-1092 -1098 -1100 0 +-1099 -1100 -1091 0 +-1099 -1098 -1093 0 +-1099 -1091 -1093 0 +-1095 -1096 -1088 0 +-1095 -1094 -1090 0 +-1095 -1088 -1090 0 +-136 135 137 0 +-136 -135 -137 0 +1090 1094 137 0 +1093 1100 137 0 +-1100 -1094 -137 0 +-1093 -1094 -137 0 +-1100 -1090 -137 0 +-1093 -1090 -137 0 +-1083 1089 1092 0 +-1092 1091 1093 0 +-1092 -1091 -1093 0 +-1089 1088 1090 0 +-1089 -1088 -1090 0 +1082 1097 1101 0 +-1083 1082 1084 0 +-1083 -1082 -1084 0 +1084 1097 1103 0 +-1086 1099 1102 0 +-1102 1101 1103 0 +-1102 -1101 -1103 0 +-1099 1098 1100 0 +-1099 -1098 -1100 0 +-1085 -1107 -1111 0 +-1112 -1113 1109 0 +-1112 -1111 1107 0 +-1112 1107 1109 0 +-1108 -1109 1113 0 +-1108 -1107 1111 0 +-1108 1111 1113 0 +-1086 1085 1087 0 +-1086 -1085 -1087 0 +-1087 -1109 -1113 0 +-1105 1112 1115 0 +-1115 1114 1116 0 +-1115 -1114 -1116 0 +-1112 1111 1113 0 +-1112 -1111 -1113 0 +-1105 1104 1106 0 +-1105 -1104 -1106 0 +2168 134 -132 0 +2169 -134 132 0 +-2167 2169 2168 0 +773 779 132 0 +776 783 132 0 +-783 -779 -132 0 +-776 -779 -132 0 +-783 -773 -132 0 +-776 -773 -132 0 +-777 -778 -783 0 +-777 -776 -785 0 +-777 -783 -785 0 +-784 -785 -776 0 +-784 -783 -778 0 +-784 -776 -778 0 +-780 -781 -773 0 +-780 -779 -775 0 +-780 -773 -775 0 +-133 132 134 0 +-133 -132 -134 0 +775 779 134 0 +778 785 134 0 +-785 -779 -134 0 +-778 -779 -134 0 +-785 -775 -134 0 +-778 -775 -134 0 +-768 774 777 0 +-777 776 778 0 +-777 -776 -778 0 +-774 773 775 0 +-774 -773 -775 0 +767 782 786 0 +-768 767 769 0 +-768 -767 -769 0 +769 782 788 0 +-771 784 787 0 +-787 786 788 0 +-787 -786 -788 0 +-784 783 785 0 +-784 -783 -785 0 +-770 -1110 -1114 0 +-771 770 772 0 +-771 -770 -772 0 +-772 -1110 -1116 0 +2171 131 -129 0 +2172 -131 129 0 +-2170 2172 2171 0 +-130 129 131 0 +-130 -129 -131 0 +-1146 -1137 -1134 0 +-1149 -1143 -1134 0 +1143 1137 1134 0 +1149 1137 1134 0 +1143 1146 1134 0 +1149 1146 1134 0 +-1150 -1151 1145 0 +-1150 -1149 1143 0 +-1150 1143 1145 0 +-1144 -1145 1151 0 +-1144 -1143 1149 0 +-1144 1149 1151 0 +-1138 -1139 1148 0 +-1138 -1137 1146 0 +-1138 1146 1148 0 +-1135 1134 1136 0 +-1135 -1134 -1136 0 +-1148 -1137 -1136 0 +-1151 -1145 -1136 0 +1145 1137 1136 0 +1151 1137 1136 0 +1145 1148 1136 0 +1151 1148 1136 0 +-1131 1147 1150 0 +-1150 1149 1151 0 +-1150 -1149 -1151 0 +-1147 1146 1148 0 +-1147 -1146 -1148 0 +-1130 -1133 -1140 0 +-1131 1130 1132 0 +-1131 -1130 -1132 0 +-1132 -1133 -1142 0 +-1124 1141 1144 0 +-1144 1143 1145 0 +-1144 -1143 -1145 0 +-1141 1140 1142 0 +-1141 -1140 -1142 0 +1123 1126 1127 0 +-1124 1123 1125 0 +-1124 -1123 -1125 0 +1125 1126 1129 0 +-2073 49 82 55 0 +-1459 1461 -1460 1457 0 +-1459 1461 -1458 1455 0 +-1459 1461 1455 1457 0 +-1466 1461 -1467 1457 0 +-1466 1461 -1465 1455 0 +-1466 1461 1455 1457 0 +-1456 -1455 1458 1465 0 +-1456 -1457 1460 1467 0 +-1462 -1461 1458 1465 0 +-1462 -1463 1460 1467 0 +-1295 1282 -1296 1293 0 +-1295 1282 -1294 1291 0 +-1295 1282 1291 1293 0 +-1289 1282 -1290 1293 0 +-1289 1282 -1288 1291 0 +-1289 1282 1291 1293 0 +-1292 -1291 1294 1288 0 +-1292 -1293 1296 1290 0 +-1283 -1282 1294 1288 0 +-1283 -1284 1296 1290 0 +-1517 1504 -1518 1515 0 +-1517 1504 -1516 1513 0 +-1517 1504 1513 1515 0 +-1511 1504 -1512 1515 0 +-1511 1504 -1510 1513 0 +-1511 1504 1513 1515 0 +-1514 -1513 1516 1510 0 +-1514 -1515 1518 1512 0 +-1505 -1504 1516 1510 0 +-1505 -1506 1518 1512 0 +-1530 -1532 -1531 -1526 0 +-1530 -1532 -1529 -1528 0 +-1530 -1532 -1526 -1528 0 +-1537 -1532 -1538 -1526 0 +-1537 -1532 -1536 -1528 0 +-1537 -1532 -1526 -1528 0 +-1527 1526 -1529 -1536 0 +-1527 1528 -1531 -1538 0 +-1533 1532 -1529 -1536 0 +-1533 1534 -1531 -1538 0 +-1573 1572 -1569 -1575 0 +-1573 1574 -1571 -1577 0 +-1582 1581 -1569 -1575 0 +-1582 1583 -1571 -1577 0 +-1570 -1581 -1571 -1572 0 +-1570 -1581 -1569 -1574 0 +-1570 -1581 -1572 -1574 0 +-1576 -1581 -1577 -1572 0 +-1576 -1581 -1575 -1574 0 +-1576 -1581 -1572 -1574 0 +-1418 1408 -1419 1416 0 +-1418 1408 -1417 1414 0 +-1418 1408 1414 1416 0 +-1412 1408 -1413 1416 0 +-1412 1408 -1411 1414 0 +-1412 1408 1414 1416 0 +-1415 -1414 1417 1411 0 +-1415 -1416 1419 1413 0 +-1409 -1408 1417 1411 0 +-1409 -1410 1419 1413 0 +-2079 627 691 702 0 +-524 -511 -525 -520 0 +-524 -511 -523 -522 0 +-524 -511 -520 -522 0 +-518 -511 -519 -520 0 +-518 -511 -517 -522 0 +-518 -511 -520 -522 0 +-521 520 -523 -517 0 +-521 522 -525 -519 0 +-512 511 -523 -517 0 +-512 513 -525 -519 0 +-1331 1318 -1332 1329 0 +-1331 1318 -1330 1327 0 +-1331 1318 1327 1329 0 +-1325 1318 -1326 1329 0 +-1325 1318 -1324 1327 0 +-1325 1318 1327 1329 0 +-1328 -1327 1330 1324 0 +-1328 -1329 1332 1326 0 +-1319 -1318 1330 1324 0 +-1319 -1320 1332 1326 0 +-1560 -1550 -1561 -1556 0 +-1560 -1550 -1559 -1558 0 +-1560 -1550 -1556 -1558 0 +-1554 -1550 -1555 -1556 0 +-1554 -1550 -1553 -1558 0 +-1554 -1550 -1556 -1558 0 +-1557 1556 -1559 -1553 0 +-1557 1558 -1561 -1555 0 +-1551 1550 -1559 -1553 0 +-1551 1552 -1561 -1555 0 +716 1736 1747 1741 0 +-1491 -1485 -1490 -1488 0 +-1392 -1379 -1393 -1388 0 +-1392 -1379 -1391 -1390 0 +-1392 -1379 -1388 -1390 0 +-1386 -1379 -1387 -1388 0 +-1386 -1379 -1385 -1390 0 +-1386 -1379 -1388 -1390 0 +-1389 1388 -1391 -1385 0 +-1389 1390 -1393 -1387 0 +-1380 1379 -1391 -1385 0 +-1380 1381 -1393 -1387 0 +-1709 1696 -1710 1707 0 +-1709 1696 -1708 1705 0 +-1709 1696 1705 1707 0 +-1703 1696 -1704 1707 0 +-1703 1696 -1702 1705 0 +-1703 1696 1705 1707 0 +-1706 -1705 1708 1702 0 +-1706 -1707 1710 1704 0 +-1697 -1696 1708 1702 0 +-1697 -1698 1710 1704 0 +-1661 1663 -1662 1659 0 +-1661 1663 -1660 1657 0 +-1661 1663 1657 1659 0 +-1668 1663 -1669 1659 0 +-1668 1663 -1667 1657 0 +-1668 1663 1657 1659 0 +-1658 -1657 1660 1667 0 +-1658 -1659 1662 1669 0 +-1664 -1663 1660 1667 0 +-1664 -1665 1662 1669 0 +-1232 -1231 1228 1219 0 +-1232 -1233 1230 1221 0 +-1226 -1225 1228 1219 0 +-1226 -1227 1230 1221 0 +-1229 -1228 1231 1225 0 +-1229 -1230 1233 1227 0 +-1220 -1219 1231 1225 0 +-1220 -1221 1233 1227 0 +-971 958 -972 969 0 +-971 958 -970 967 0 +-971 958 967 969 0 +-965 958 -966 969 0 +-965 958 -964 967 0 +-965 958 967 969 0 +-968 -967 970 964 0 +-968 -969 972 966 0 +-959 -958 970 964 0 +-959 -960 972 966 0 +-935 937 -936 933 0 +-935 937 -934 931 0 +-935 937 931 933 0 +-942 937 -943 933 0 +-942 937 -941 931 0 +-942 937 931 933 0 +-932 -931 934 941 0 +-932 -933 936 943 0 +-938 -937 934 941 0 +-938 -939 936 943 0 +-1163 1165 -1164 1161 0 +-1163 1165 -1162 1159 0 +-1163 1165 1159 1161 0 +-1170 1165 -1171 1161 0 +-1170 1165 -1169 1159 0 +-1170 1165 1159 1161 0 +-1160 -1159 1162 1169 0 +-1160 -1161 1164 1171 0 +-1166 -1165 1162 1169 0 +-1166 -1167 1164 1171 0 +-1607 1609 -1608 1605 0 +-1607 1609 -1606 1603 0 +-1607 1609 1603 1605 0 +-1614 1609 -1615 1605 0 +-1614 1609 -1613 1603 0 +-1614 1609 1603 1605 0 +-1604 -1603 1606 1613 0 +-1604 -1605 1608 1615 0 +-1610 -1609 1606 1613 0 +-1610 -1611 1608 1615 0 +-1639 1885 1888 1894 0 +-1871 1873 -1872 1869 0 +-1871 1873 -1870 1867 0 +-1871 1873 1867 1869 0 +-1878 1873 -1879 1869 0 +-1878 1873 -1877 1867 0 +-1878 1873 1867 1869 0 +-1868 -1867 1870 1877 0 +-1868 -1869 1872 1879 0 +-1874 -1873 1870 1877 0 +-1874 -1875 1872 1879 0 +-2036 -2029 -2037 -2032 0 +-2036 -2029 -2035 -2034 0 +-2036 -2029 -2032 -2034 0 +-2040 -2029 -2041 -2032 0 +-2040 -2029 -2039 -2034 0 +-2040 -2029 -2032 -2034 0 +-2033 2032 -2035 -2039 0 +-2033 2034 -2037 -2041 0 +-2030 2029 -2035 -2039 0 +-2030 2031 -2037 -2041 0 +-2057 -2050 -2058 -2053 0 +-2057 -2050 -2056 -2055 0 +-2057 -2050 -2053 -2055 0 +-2061 -2050 -2062 -2053 0 +-2061 -2050 -2060 -2055 0 +-2061 -2050 -2053 -2055 0 +-2054 2053 -2056 -2060 0 +-2054 2055 -2058 -2062 0 +-2051 2050 -2056 -2060 0 +-2051 2052 -2058 -2062 0 +-684 671 -685 682 0 +-684 671 -683 680 0 +-684 671 680 682 0 +-678 671 -679 682 0 +-678 671 -677 680 0 +-678 671 680 682 0 +-681 -680 683 677 0 +-681 -682 685 679 0 +-672 -671 683 677 0 +-672 -673 685 679 0 +-734 1011 1014 1241 0 +-995 -997 -996 -991 0 +-995 -997 -994 -993 0 +-995 -997 -991 -993 0 +-1002 -997 -1003 -991 0 +-1002 -997 -1001 -993 0 +-1002 -997 -991 -993 0 +-992 991 -994 -1001 0 +-992 993 -996 -1003 0 +-998 997 -994 -1001 0 +-998 999 -996 -1003 0 +-1446 -1433 -1447 -1442 0 +-1446 -1433 -1445 -1444 0 +-1446 -1433 -1442 -1444 0 +-1440 -1433 -1441 -1442 0 +-1440 -1433 -1439 -1444 0 +-1440 -1433 -1442 -1444 0 +-1443 1442 -1445 -1439 0 +-1443 1444 -1447 -1441 0 +-1434 1433 -1445 -1439 0 +-1434 1435 -1447 -1441 0 +-1196 1183 -1197 1194 0 +-1196 1183 -1195 1192 0 +-1196 1183 1192 1194 0 +-1190 1183 -1191 1194 0 +-1190 1183 -1189 1192 0 +-1190 1183 1192 1194 0 +-1193 -1192 1195 1189 0 +-1193 -1194 1197 1191 0 +-1184 -1183 1195 1189 0 +-1184 -1185 1197 1191 0 +-334 -327 -335 -330 0 +-334 -327 -333 -332 0 +-334 -327 -330 -332 0 +-338 -327 -339 -330 0 +-338 -327 -337 -332 0 +-338 -327 -330 -332 0 +-331 330 -333 -337 0 +-331 332 -335 -339 0 +-328 327 -333 -337 0 +-328 329 -335 -339 0 +710 686 707 704 0 +712 688 707 706 0 +-435 -429 -445 -425 0 +-437 -431 -445 -427 0 +-486 479 -487 484 0 +-486 479 -485 482 0 +-486 479 482 484 0 +-490 479 -491 484 0 +-490 479 -489 482 0 +-490 479 482 484 0 +-483 -482 485 489 0 +-483 -484 487 491 0 +-480 -479 485 489 0 +-480 -481 487 491 0 +-559 570 573 916 0 +-593 580 -594 591 0 +-593 580 -592 589 0 +-593 580 589 591 0 +-587 580 -588 591 0 +-587 580 -586 589 0 +-587 580 589 591 0 +-590 -589 592 586 0 +-590 -591 594 588 0 +-581 -580 592 586 0 +-581 -582 594 588 0 +-910 897 -911 908 0 +-910 897 -909 906 0 +-910 897 906 908 0 +-904 897 -905 908 0 +-904 897 -903 906 0 +-904 897 906 908 0 +-907 -906 909 903 0 +-907 -908 911 905 0 +-898 -897 909 903 0 +-898 -899 911 905 0 +-878 -865 -879 -874 0 +-878 -865 -877 -876 0 +-878 -865 -874 -876 0 +-872 -865 -873 -874 0 +-872 -865 -871 -876 0 +-872 -865 -874 -876 0 +-875 874 -877 -871 0 +-875 876 -879 -873 0 +-866 865 -877 -871 0 +-866 867 -879 -873 0 +-212 199 -213 210 0 +-212 199 -211 208 0 +-212 199 208 210 0 +-206 199 -207 210 0 +-206 199 -205 208 0 +-206 199 208 210 0 +-209 -208 211 205 0 +-209 -210 213 207 0 +-200 -199 211 205 0 +-200 -201 213 207 0 +-252 293 296 621 0 +-316 303 -317 314 0 +-316 303 -315 312 0 +-316 303 312 314 0 +-310 303 -311 314 0 +-310 303 -309 312 0 +-310 303 312 314 0 +-313 -312 315 309 0 +-313 -314 317 311 0 +-304 -303 315 309 0 +-304 -305 317 311 0 +-615 602 -616 613 0 +-615 602 -614 611 0 +-615 602 611 613 0 +-609 602 -610 613 0 +-609 602 -608 611 0 +-609 602 611 613 0 +-612 -611 614 608 0 +-612 -613 616 610 0 +-603 -602 614 608 0 +-603 -604 616 610 0 +-171 164 -172 169 0 +-171 164 -170 167 0 +-171 164 167 169 0 +-175 164 -176 169 0 +-175 164 -174 167 0 +-175 164 167 169 0 +-168 -167 170 174 0 +-168 -169 172 176 0 +-165 -164 170 174 0 +-165 -166 172 176 0 +-278 282 285 357 0 +-274 261 -275 272 0 +-274 261 -273 270 0 +-274 261 270 272 0 +-268 261 -269 272 0 +-268 261 -267 270 0 +-268 261 270 272 0 +-271 -270 273 267 0 +-271 -272 275 269 0 +-262 -261 273 267 0 +-262 -263 275 269 0 +-375 362 -376 373 0 +-375 362 -374 371 0 +-375 362 371 373 0 +-369 362 -370 373 0 +-369 362 -368 371 0 +-369 362 371 373 0 +-372 -371 374 368 0 +-372 -373 376 370 0 +-363 -362 374 368 0 +-363 -364 376 370 0 +-645 -638 -646 -641 0 +-645 -638 -644 -643 0 +-645 -638 -641 -643 0 +-649 -638 -650 -641 0 +-649 -638 -648 -643 0 +-649 -638 -641 -643 0 +-642 641 -644 -648 0 +-642 643 -646 -650 0 +-639 638 -644 -648 0 +-639 640 -646 -650 0 +-847 -834 -848 -843 0 +-847 -834 -846 -845 0 +-847 -834 -843 -845 0 +-841 -834 -842 -843 0 +-841 -834 -840 -845 0 +-841 -834 -843 -845 0 +-844 843 -846 -840 0 +-844 845 -848 -842 0 +-835 834 -846 -840 0 +-835 836 -848 -842 0 +-850 1118 1121 1128 0 +-1092 1094 -1093 1090 0 +-1092 1094 -1091 1088 0 +-1092 1094 1088 1090 0 +-1099 1094 -1100 1090 0 +-1099 1094 -1098 1088 0 +-1099 1094 1088 1090 0 +-1089 -1088 1091 1098 0 +-1089 -1090 1093 1100 0 +-1095 -1094 1091 1098 0 +-1095 -1096 1093 1100 0 +-777 779 -778 775 0 +-777 779 -776 773 0 +-777 779 773 775 0 +-784 779 -785 775 0 +-784 779 -783 773 0 +-784 779 773 775 0 +-774 -773 776 783 0 +-774 -775 778 785 0 +-780 -779 776 783 0 +-780 -781 778 785 0 +-1150 -1137 -1151 -1146 0 +-1150 -1137 -1149 -1148 0 +-1150 -1137 -1146 -1148 0 +-1144 -1137 -1145 -1146 0 +-1144 -1137 -1143 -1148 0 +-1144 -1137 -1146 -1148 0 +-1147 1146 -1149 -1143 0 +-1147 1148 -1151 -1145 0 +-1138 1137 -1149 -1143 0 +-1138 1139 -1151 -1145 0 +-722 1716 1719 1723 1729 0 +721 724 726 378 727 0 +723 724 726 380 729 0 +-2077 699 711 728 913 0 +-1524 1537 1540 1547 1554 0 +-1214 1217 1220 1412 1422 0 +1741 1742 1743 1744 1745 0 +1489 1492 1493 1494 1495 0 +1736 1737 1738 1739 1740 0 +-714 975 978 1199 1236 0 +713 717 725 386 718 0 +715 717 725 388 720 0 +-413 -416 -418 -432 -422 0 +-415 -416 -418 -434 -424 0 +-442 -448 -449 -450 -453 0 +-444 -448 -449 -452 -455 0 +-623 -1247 -1263 -1244 -1246 0 +-625 -1247 -1265 -1244 -1246 0 +-738 1264 1267 1476 1482 0 +-693 -696 -697 -698 -701 0 +-695 -696 -697 -700 -703 0 +393 399 400 407 401 0 +395 399 400 409 403 0 +-880 -1262 -1266 -1257 -1270 0 +-882 -1262 -1268 -1257 -1270 0 +-359 -1474 -1475 -1473 -1478 0 +-361 -1474 -1477 -1473 -1478 0 +-849 -1480 -1481 -1479 -1484 0 +-851 -1480 -1483 -1479 -1484 0 +-2180 2086 2083 2080 2074 0 +130 133 136 127 103 2067 0 +-2067 112 106 109 97 2068 0 +-2068 94 100 91 121 2069 0 +-2069 118 124 115 58 2070 0 +-2070 85 88 61 79 2071 0 +-2071 76 43 46 64 2072 0 +-2072 70 73 67 52 2073 0 +-397 408 411 451 618 2077 0 +-246 351 354 384 391 2078 0 +-249 420 423 440 454 2079 0 +-405 433 436 655 719 853 0 +-2173 2170 2167 2164 2161 2174 0 +-2174 2158 2155 2152 2149 2175 0 +-2175 2146 2143 2140 2137 2176 0 +-2176 2134 2131 2128 2125 2177 0 +-2177 2122 2119 2116 2113 2178 0 +-2178 2110 2107 2104 2101 2179 0 +-2179 2098 2095 2092 2089 2180 0 diff --git a/tests/sat/unsat/bf1355-638.cnf b/tests/sat/unsat/bf1355-638.cnf new file mode 100644 index 00000000..0252c9dc --- /dev/null +++ b/tests/sat/unsat/bf1355-638.cnf @@ -0,0 +1,6781 @@ +c FILE: bf1355-638.cnf +c +c SOURCE: Allen Van Gelder (avg@cs.ucsd.edu) and Yumi Tsuji +c (tsuji@cse.ucsc.edu) +c +c Nemesis formula in 6CNF in accordance with DIMACS CNF format: +c Filename: MCNC/c1355/c1355.tdl +c Formula number 638 +c 3759 variables (range: 2 - 3760) +c 6768 clauses +c +c p cnf 3760 6768 +p cnf 2177 6768 +789 0 +2170 0 +789 0 +790 0 +-788 0 +1067 -1069 0 +-1067 1069 0 +788 790 0 +-788 -790 0 +2064 -1415 0 +-2064 1415 0 +2064 -1415 0 +-2064 1415 0 +788 1067 0 +-788 -1067 0 +2064 -790 0 +-2064 790 0 +2064 -1069 0 +-2064 1069 0 +790 -1069 0 +-790 1069 0 +-128 -2073 0 +126 -2073 0 +128 -2074 0 +-126 -2074 0 +-2074 2072 0 +-2073 2072 0 +815 126 0 +-815 -126 0 +-816 127 0 +817 128 0 +-817 -128 0 +-828 816 0 +-825 816 0 +-831 816 0 +-828 818 0 +808 -827 0 +-808 827 0 +808 -830 0 +-808 830 0 +809 -828 0 +809 -831 0 +810 -829 0 +-810 829 0 +810 -832 0 +-810 832 0 +814 808 0 +821 808 0 +-822 809 0 +-822 814 0 +814 810 0 +823 810 0 +811 -821 0 +-811 821 0 +811 -824 0 +-811 824 0 +812 -822 0 +812 -825 0 +813 -823 0 +-813 823 0 +813 -826 0 +-813 826 0 +-836 -811 0 +-1147 -811 0 +-1148 812 0 +-1148 -836 0 +-836 -813 0 +-1149 -813 0 +833 -1147 0 +-833 1147 0 +833 -1150 0 +-833 1150 0 +833 -1157 0 +-833 1157 0 +834 -1148 0 +834 -1151 0 +834 -1158 0 +835 -1149 0 +-835 1149 0 +835 -1152 0 +-835 1152 0 +835 -1159 0 +-835 1159 0 +1486 833 0 +1487 833 0 +1483 833 0 +1488 833 0 +-1484 834 0 +-1489 834 0 +-1489 1487 0 +-1489 1486 0 +-1484 1487 0 +-1484 1486 0 +1486 835 0 +1487 835 0 +1485 835 0 +1490 835 0 +237 -1277 0 +-237 1277 0 +237 -1280 0 +-237 1280 0 +237 -1472 0 +-237 1472 0 +237 -1488 0 +-237 1488 0 +237 -1697 0 +-237 1697 0 +237 -1721 0 +-237 1721 0 +237 -1732 0 +-237 1732 0 +237 -1877 0 +-237 1877 0 +238 -1278 0 +238 -1281 0 +238 -1473 0 +238 -1489 0 +238 -1698 0 +238 -1722 0 +238 -1733 0 +238 -1878 0 +239 -1279 0 +-239 1279 0 +239 -1282 0 +-239 1282 0 +239 -1474 0 +-239 1474 0 +239 -1490 0 +-239 1490 0 +239 -1699 0 +-239 1699 0 +239 -1723 0 +-239 1723 0 +239 -1734 0 +-239 1734 0 +239 -1879 0 +-239 1879 0 +-251 238 0 +-248 238 0 +-254 238 0 +-251 -241 0 +230 -250 0 +-230 250 0 +230 -253 0 +-230 253 0 +231 -251 0 +231 -254 0 +232 -252 0 +-232 252 0 +232 -255 0 +-232 255 0 +-240 -230 0 +-244 -230 0 +-245 231 0 +-245 -240 0 +-240 -232 0 +-246 -232 0 +234 -244 0 +-234 244 0 +234 -247 0 +-234 247 0 +235 -245 0 +235 -248 0 +236 -246 0 +-236 246 0 +236 -249 0 +-236 249 0 +-512 235 0 +-509 235 0 +-515 235 0 +-512 502 0 +494 -511 0 +-494 511 0 +494 -514 0 +-494 514 0 +495 -512 0 +495 -515 0 +496 -513 0 +-496 513 0 +496 -516 0 +-496 516 0 +501 494 0 +505 494 0 +-506 495 0 +-506 501 0 +501 496 0 +507 496 0 +498 -505 0 +-498 505 0 +498 -508 0 +-498 508 0 +499 -506 0 +499 -509 0 +500 -507 0 +-500 507 0 +500 -510 0 +-500 510 0 +-521 499 0 +-528 499 0 +-531 499 0 +-531 -524 0 +222 -527 0 +-222 527 0 +222 -530 0 +-222 530 0 +223 -528 0 +223 -531 0 +224 -529 0 +-224 529 0 +224 -532 0 +-224 532 0 +-517 -222 0 +-523 -222 0 +-518 223 0 +-518 -523 0 +-519 -224 0 +-523 -224 0 +228 -523 0 +-228 523 0 +228 -524 0 +-228 524 0 +768 228 0 +-768 -228 0 +761 -766 0 +-761 766 0 +761 -767 0 +-761 767 0 +761 -768 0 +-761 768 0 +770 -772 0 +-770 772 0 +770 -773 0 +-770 773 0 +-775 -770 0 +-777 -770 0 +771 -776 0 +-771 776 0 +771 -777 0 +-771 777 0 +1095 -1097 0 +-1095 1097 0 +1095 -1098 0 +-1095 1098 0 +1100 1095 0 +1101 1095 0 +3 -220 0 +-3 220 0 +3 -221 0 +-3 221 0 +3 -1096 0 +-3 1096 0 +3 -1101 0 +-3 1101 0 +3 -1113 0 +-3 1113 0 +34 -1099 0 +-34 1099 0 +34 -1100 0 +-34 1100 0 +34 -1163 0 +-34 1163 0 +34 -1167 0 +-34 1167 0 +34 -1559 0 +-34 1559 0 +34 -1563 0 +-34 1563 0 +769 -774 0 +-769 774 0 +769 -775 0 +-769 775 0 +778 -779 0 +-778 779 0 +778 -780 0 +-778 780 0 +782 778 0 +784 778 0 +37 -783 0 +-37 783 0 +37 -784 0 +-37 784 0 +37 -814 0 +-37 814 0 +37 -818 0 +-37 818 0 +37 -1409 0 +-37 1409 0 +37 -1414 0 +-37 1414 0 +33 -781 0 +-33 781 0 +33 -782 0 +-33 782 0 +33 -1373 0 +-33 1373 0 +225 -517 0 +-225 517 0 +225 -520 0 +-225 520 0 +225 -1026 0 +-225 1026 0 +226 -518 0 +226 -521 0 +226 -1027 0 +227 -519 0 +-227 519 0 +227 -522 0 +-227 522 0 +227 -1028 0 +-227 1028 0 +-443 226 0 +-450 226 0 +-453 226 0 +-453 446 0 +433 -449 0 +-433 449 0 +433 -452 0 +-433 452 0 +434 -450 0 +434 -453 0 +435 -451 0 +-435 451 0 +435 -454 0 +-435 454 0 +439 433 0 +445 433 0 +-440 434 0 +-440 445 0 +441 435 0 +445 435 0 +426 -445 0 +-426 445 0 +426 -446 0 +-426 446 0 +424 -431 0 +-424 431 0 +424 -432 0 +-424 432 0 +-427 -424 0 +-429 -424 0 +198 -429 0 +-198 429 0 +198 -430 0 +-198 430 0 +215 198 0 +-215 -198 0 +30 -215 0 +-30 215 0 +30 -216 0 +-30 216 0 +30 -219 0 +-30 219 0 +30 -343 0 +-30 343 0 +30 -352 0 +-30 352 0 +425 -427 0 +-425 427 0 +425 -428 0 +-425 428 0 +425 -461 0 +-425 461 0 +425 -470 0 +-425 470 0 +1557 425 0 +-1557 -425 0 +26 -1557 0 +-26 1557 0 +26 -1558 0 +-26 1558 0 +26 -1562 0 +-26 1562 0 +436 -439 0 +-436 439 0 +436 -442 0 +-436 442 0 +437 -440 0 +437 -443 0 +438 -441 0 +-438 441 0 +438 -444 0 +-438 444 0 +-795 437 0 +-802 437 0 +-798 437 0 +-795 -791 0 +785 -794 0 +-785 794 0 +785 -797 0 +-785 797 0 +786 -795 0 +786 -798 0 +787 -796 0 +-787 796 0 +787 -799 0 +-787 799 0 +-800 -785 0 +-804 -785 0 +-805 786 0 +-805 -800 0 +-800 -787 0 +-806 -787 0 +788 -801 0 +-788 801 0 +788 -804 0 +-788 804 0 +788 -878 0 +-788 878 0 +788 -881 0 +-788 881 0 +789 -802 0 +789 -805 0 +789 -879 0 +789 -882 0 +790 -803 0 +-790 803 0 +790 -806 0 +-790 806 0 +790 -880 0 +-790 880 0 +790 -883 0 +-790 883 0 +1415 788 0 +-1415 -788 0 +14 -1412 0 +-14 1412 0 +14 -1413 0 +-14 1413 0 +14 -1415 0 +-14 1415 0 +570 -571 0 +-570 571 0 +570 -572 0 +-570 572 0 +570 -791 0 +-570 791 0 +570 -800 0 +-570 800 0 +570 -1367 0 +-570 1367 0 +570 -1371 0 +-570 1371 0 +20 570 0 +-20 -570 0 +497 -501 0 +-497 501 0 +497 -502 0 +-497 502 0 +1103 497 0 +-1103 -497 0 +31 1103 0 +2020 1103 0 +35 -1852 0 +-35 1852 0 +35 -1853 0 +-35 1853 0 +35 -1854 0 +-35 1854 0 +35 -2017 0 +-35 2017 0 +35 -2018 0 +-35 2018 0 +35 -2019 0 +-35 2019 0 +35 -2020 0 +-35 2020 0 +35 -2043 0 +-35 2043 0 +233 -240 0 +-233 240 0 +233 -241 0 +-233 241 0 +1801 -1803 0 +-1801 1803 0 +1801 -1804 0 +-1801 1804 0 +1806 1801 0 +1808 1801 0 +1802 -1807 0 +-1802 1807 0 +1802 -1808 0 +-1802 1808 0 +1982 1802 0 +-1982 -1802 0 +2009 -2011 0 +-2009 2011 0 +2009 -2012 0 +-2009 2012 0 +2013 2009 0 +2015 2009 0 +25 -2014 0 +-25 2014 0 +25 -2015 0 +-25 2015 0 +25 -2016 0 +-25 2016 0 +18 -979 0 +-18 979 0 +18 -982 0 +-18 982 0 +18 -1651 0 +-18 1651 0 +18 -1655 0 +-18 1655 0 +18 -2010 0 +-18 2010 0 +18 -2013 0 +-18 2013 0 +1800 -1805 0 +-1800 1805 0 +1800 -1806 0 +-1800 1806 0 +1809 1800 0 +-1809 -1800 0 +1810 -1811 0 +-1810 1811 0 +1810 -1812 0 +-1810 1812 0 +1814 1810 0 +1816 1810 0 +32 -1815 0 +-32 1815 0 +32 -1816 0 +-32 1816 0 +32 -1993 0 +-32 1993 0 +38 -1813 0 +-38 1813 0 +38 -1814 0 +-38 1814 0 +38 -1843 0 +-38 1843 0 +38 -1849 0 +-38 1849 0 +38 -1851 0 +-38 1851 0 +-1703 -1483 0 +-1709 -1483 0 +-1704 1484 0 +-1704 -1709 0 +-1705 -1485 0 +-1709 -1485 0 +1695 -1709 0 +-1695 1709 0 +1695 -1710 0 +-1695 1710 0 +1695 -1724 0 +-1695 1724 0 +1696 1695 0 +-1696 -1695 0 +955 -962 0 +-955 962 0 +955 -963 0 +-955 963 0 +955 -1294 0 +-955 1294 0 +955 -1304 0 +-955 1304 0 +955 -1471 0 +-955 1471 0 +955 -1497 0 +-955 1497 0 +955 -1517 0 +-955 1517 0 +955 -1609 0 +-955 1609 0 +955 -1696 0 +-955 1696 0 +955 -1735 0 +-955 1735 0 +1104 -1110 0 +-1104 1110 0 +1104 -1111 0 +-1104 1111 0 +-1106 -1104 0 +-1108 -1104 0 +1102 -1108 0 +-1102 1108 0 +1102 -1109 0 +-1102 1109 0 +1088 1102 0 +-1088 -1102 0 +1086 -1093 0 +-1086 1093 0 +1086 -1094 0 +-1086 1094 0 +-1089 -1086 0 +-1091 -1086 0 +759 -1091 0 +-759 1091 0 +759 -1092 0 +-759 1092 0 +760 -762 0 +-760 762 0 +760 -763 0 +-760 763 0 +765 760 0 +767 760 0 +151 -764 0 +-151 764 0 +151 -765 0 +-151 765 0 +151 -1031 0 +-151 1031 0 +151 -1034 0 +-151 1034 0 +149 -156 0 +-149 156 0 +149 -157 0 +-149 157 0 +-152 -149 0 +-154 -149 0 +148 -154 0 +-148 154 0 +148 -155 0 +-148 155 0 +141 148 0 +-141 -148 0 +138 -146 0 +-138 146 0 +138 -147 0 +-138 147 0 +-142 -138 0 +-144 -138 0 +140 -144 0 +-140 144 0 +140 -145 0 +-140 145 0 +140 -182 0 +-140 182 0 +140 -186 0 +-140 186 0 +140 -365 0 +-140 365 0 +140 -374 0 +-140 374 0 +11 140 0 +-11 -140 0 +139 -142 0 +-139 142 0 +139 -143 0 +-139 143 0 +139 -164 0 +-139 164 0 +139 -173 0 +-139 173 0 +729 139 0 +-729 -139 0 +8 -729 0 +-8 729 0 +8 -730 0 +-8 730 0 +8 -733 0 +-8 733 0 +150 -152 0 +-150 152 0 +150 -153 0 +-150 153 0 +229 150 0 +-229 -150 0 +257 -259 0 +-257 259 0 +257 -260 0 +-257 260 0 +-262 -257 0 +-264 -257 0 +258 -263 0 +-258 263 0 +258 -264 0 +-258 264 0 +541 258 0 +-541 -258 0 +39 -539 0 +-39 539 0 +39 -540 0 +-39 540 0 +39 -541 0 +-39 541 0 +39 -626 0 +-39 626 0 +39 -635 0 +-39 635 0 +256 -261 0 +-256 261 0 +256 -262 0 +-256 262 0 +256 -276 0 +-256 276 0 +256 -277 0 +-256 277 0 +1818 256 0 +-1818 -256 0 +27 -1818 0 +-27 1818 0 +27 -1819 0 +-27 1819 0 +27 -1824 0 +-27 1824 0 +1087 -1089 0 +-1087 1089 0 +1087 -1090 0 +-1087 1090 0 +9 1087 0 +1852 1087 0 +1105 -1106 0 +-1105 1106 0 +1105 -1107 0 +-1105 1107 0 +1994 -1996 0 +-1994 1996 0 +1994 -1997 0 +-1994 1997 0 +1999 1994 0 +2001 1994 0 +1995 -2000 0 +-1995 2000 0 +1995 -2001 0 +-1995 2001 0 +2002 -2005 0 +-2002 2005 0 +2002 -2006 0 +-2002 2006 0 +-2007 -2002 0 +-2008 -2002 0 +935 -939 0 +-935 939 0 +935 -940 0 +-935 940 0 +935 -1613 0 +-935 1613 0 +935 -1617 0 +-935 1617 0 +935 -2004 0 +-935 2004 0 +935 -2008 0 +-935 2008 0 +21 935 0 +-21 -935 0 +652 -656 0 +-652 656 0 +652 -657 0 +-652 657 0 +652 -1643 0 +-652 1643 0 +652 -1647 0 +-652 1647 0 +652 -2003 0 +-652 2003 0 +652 -2007 0 +-652 2007 0 +40 652 0 +-40 -652 0 +1992 -1998 0 +-1992 1998 0 +1992 -1999 0 +-1992 1999 0 +1987 1992 0 +-1987 -1992 0 +1983 -1990 0 +-1983 1990 0 +1983 -1991 0 +-1983 1991 0 +1985 1983 0 +1986 1983 0 +16 -1976 0 +-16 1976 0 +16 -1977 0 +-16 1977 0 +16 -1981 0 +-16 1981 0 +16 -1986 0 +-16 1986 0 +16 -1989 0 +-16 1989 0 +17 -1984 0 +-17 1984 0 +17 -1985 0 +-17 1985 0 +17 -1988 0 +-17 1988 0 +1067 -1264 0 +-1067 1264 0 +1067 -1267 0 +-1067 1267 0 +1067 -1494 0 +-1067 1494 0 +1067 -1511 0 +-1067 1511 0 +1067 -1682 0 +-1067 1682 0 +1067 -1703 0 +-1067 1703 0 +1067 -1706 0 +-1067 1706 0 +1067 -1718 0 +-1067 1718 0 +1067 -1736 0 +-1067 1736 0 +1068 -1265 0 +1068 -1268 0 +1068 -1495 0 +1068 -1512 0 +1068 -1683 0 +1068 -1704 0 +1068 -1707 0 +1068 -1719 0 +1068 -1737 0 +1069 -1266 0 +-1069 1266 0 +1069 -1269 0 +-1069 1269 0 +1069 -1496 0 +-1069 1496 0 +1069 -1513 0 +-1069 1513 0 +1069 -1684 0 +-1069 1684 0 +1069 -1705 0 +-1069 1705 0 +1069 -1708 0 +-1069 1708 0 +1069 -1720 0 +-1069 1720 0 +1069 -1738 0 +-1069 1738 0 +-1081 1068 0 +-1078 1068 0 +-1084 1068 0 +-1081 -1071 0 +1063 -1080 0 +-1063 1080 0 +1063 -1083 0 +-1063 1083 0 +1064 -1081 0 +1064 -1084 0 +1065 -1082 0 +-1065 1082 0 +1065 -1085 0 +-1065 1085 0 +-1070 -1063 0 +-1074 -1063 0 +-1075 1064 0 +-1075 -1070 0 +-1070 -1065 0 +-1076 -1065 0 +1060 -1074 0 +-1060 1074 0 +1060 -1077 0 +-1060 1077 0 +1061 -1075 0 +1061 -1078 0 +1062 -1076 0 +-1062 1076 0 +1062 -1079 0 +-1062 1079 0 +1041 1060 0 +-1041 -1060 0 +-1042 1061 0 +1043 1062 0 +-1043 -1062 0 +-1055 1042 0 +-1052 1042 0 +-1058 1042 0 +-1055 -1045 0 +1037 -1054 0 +-1037 1054 0 +1037 -1057 0 +-1037 1057 0 +1038 -1055 0 +1038 -1058 0 +1039 -1056 0 +-1039 1056 0 +1039 -1059 0 +-1039 1059 0 +-1044 -1037 0 +-1048 -1037 0 +-1049 1038 0 +-1049 -1044 0 +-1044 -1039 0 +-1050 -1039 0 +1007 -1048 0 +-1007 1048 0 +1007 -1051 0 +-1007 1051 0 +1008 -1049 0 +1008 -1052 0 +1009 -1050 0 +-1009 1050 0 +1009 -1053 0 +-1009 1053 0 +-1021 1008 0 +-1018 1008 0 +-1024 1008 0 +-1021 1011 0 +1001 -1020 0 +-1001 1020 0 +1001 -1023 0 +-1001 1023 0 +1002 -1021 0 +1002 -1024 0 +1003 -1022 0 +-1003 1022 0 +1003 -1025 0 +-1003 1025 0 +1010 1001 0 +1014 1001 0 +-1015 1002 0 +-1015 1010 0 +1010 1003 0 +1016 1003 0 +1004 -1014 0 +-1004 1014 0 +1004 -1017 0 +-1004 1017 0 +1005 -1015 0 +1005 -1018 0 +1006 -1016 0 +-1006 1016 0 +1006 -1019 0 +-1006 1019 0 +1026 1004 0 +-1026 -1004 0 +-1027 1005 0 +1028 1006 0 +-1028 -1006 0 +718 -1010 0 +-718 1010 0 +718 -1011 0 +-718 1011 0 +718 -1030 0 +-718 1030 0 +718 -1033 0 +-718 1033 0 +719 -720 0 +-719 720 0 +719 -721 0 +-719 721 0 +-723 -719 0 +-725 -719 0 +711 -724 0 +-711 724 0 +711 -725 0 +-711 725 0 +710 -716 0 +-710 716 0 +710 -717 0 +-710 717 0 +712 710 0 +714 710 0 +28 -714 0 +-28 714 0 +28 -715 0 +-28 715 0 +28 -726 0 +-28 726 0 +19 -712 0 +-19 712 0 +19 -713 0 +-19 713 0 +19 -728 0 +-19 728 0 +19 -732 0 +-19 732 0 +19 -843 0 +-19 843 0 +19 -847 0 +-19 847 0 +544 -722 0 +-544 722 0 +544 -723 0 +-544 723 0 +545 544 0 +-545 -544 0 +546 -548 0 +-546 548 0 +546 -549 0 +-546 549 0 +-554 -546 0 +-556 -546 0 +542 -555 0 +-542 555 0 +542 -556 0 +-542 556 0 +542 -593 0 +-542 593 0 +542 -594 0 +-542 594 0 +543 542 0 +-543 -542 0 +5 -537 0 +-5 537 0 +5 -538 0 +-5 538 0 +5 -543 0 +-5 543 0 +317 -318 0 +-317 318 0 +317 -319 0 +-317 319 0 +317 -547 0 +-317 547 0 +317 -554 0 +-317 554 0 +1825 317 0 +-1825 -317 0 +24 -1822 0 +-24 1822 0 +24 -1823 0 +-24 1823 0 +24 -1825 0 +-24 1825 0 +1040 -1044 0 +-1040 1044 0 +1040 -1045 0 +-1040 1045 0 +7 1040 0 +2017 1040 0 +1066 -1070 0 +-1066 1070 0 +1066 -1071 0 +-1066 1071 0 +1945 -1951 0 +-1945 1951 0 +1945 -1952 0 +-1945 1952 0 +1947 1945 0 +1949 1945 0 +1336 -1949 0 +-1336 1949 0 +1336 -1950 0 +-1336 1950 0 +1337 1336 0 +-1337 -1336 0 +1376 -1377 0 +-1376 1377 0 +1376 -1378 0 +-1376 1378 0 +1380 1376 0 +1382 1376 0 +22 -1381 0 +-22 1381 0 +22 -1382 0 +-22 1382 0 +22 -1610 0 +-22 1610 0 +12 -1379 0 +-12 1379 0 +12 -1380 0 +-12 1380 0 +12 -1833 0 +-12 1833 0 +1946 -1947 0 +-1946 1947 0 +1946 -1948 0 +-1946 1948 0 +1953 -1955 0 +-1953 1955 0 +1953 -1956 0 +-1953 1956 0 +-1958 -1953 0 +-1960 -1953 0 +1954 -1959 0 +-1954 1959 0 +1954 -1960 0 +-1954 1960 0 +1962 1954 0 +-1962 -1954 0 +13 -1392 0 +-13 1392 0 +13 -1393 0 +-13 1393 0 +13 -1962 0 +-13 1962 0 +13 -1975 0 +-13 1975 0 +13 -1980 0 +-13 1980 0 +1605 -1957 0 +-1605 1957 0 +1605 -1958 0 +-1605 1958 0 +1605 -1965 0 +-1605 1965 0 +1605 -1969 0 +-1605 1969 0 +2047 1605 0 +-2047 -1605 0 +23 -2047 0 +-23 2047 0 +23 -2048 0 +-23 2048 0 +23 -2057 0 +-23 2057 0 +709 -1307 0 +-709 1307 0 +709 -1308 0 +-709 1308 0 +709 -1479 0 +-709 1479 0 +709 -1487 0 +-709 1487 0 +411 709 0 +702 709 0 +680 702 0 +-680 -702 0 +675 680 0 +676 675 0 +677 675 0 +678 675 0 +679 675 0 +266 -409 0 +-266 409 0 +266 -410 0 +-266 410 0 +266 -417 0 +-266 417 0 +266 -423 0 +-266 423 0 +266 -616 0 +-266 616 0 +266 -674 0 +-266 674 0 +266 -679 0 +-266 679 0 +486 -492 0 +-486 492 0 +486 -493 0 +-486 493 0 +488 486 0 +490 486 0 +487 -490 0 +-487 490 0 +487 -491 0 +-487 491 0 +1338 -1345 0 +-1338 1345 0 +1338 -1346 0 +-1338 1346 0 +-1341 -1338 0 +-1343 -1338 0 +1340 -1343 0 +-1340 1343 0 +1340 -1344 0 +-1340 1344 0 +1536 -1542 0 +-1536 1542 0 +1536 -1543 0 +-1536 1543 0 +1539 1536 0 +1538 1536 0 +1529 -1534 0 +-1529 1534 0 +1529 -1535 0 +-1529 1535 0 +1529 -1538 0 +-1529 1538 0 +1529 -1541 0 +-1529 1541 0 +1544 1529 0 +-1544 -1529 0 +1545 -1547 0 +-1545 1547 0 +1545 -1548 0 +-1545 1548 0 +1550 1545 0 +1552 1545 0 +1546 -1551 0 +-1546 1551 0 +1546 -1552 0 +-1546 1552 0 +1611 -1614 0 +-1611 1614 0 +1611 -1615 0 +-1611 1615 0 +-1616 -1611 0 +-1617 -1611 0 +906 -919 0 +-906 919 0 +906 -922 0 +-906 922 0 +906 -1612 0 +-906 1612 0 +906 -1616 0 +-906 1616 0 +1610 906 0 +-1610 -906 0 +1416 -1549 0 +-1416 1549 0 +1416 -1550 0 +-1416 1550 0 +1417 -1420 0 +-1417 1420 0 +1417 -1421 0 +-1417 1421 0 +-1422 -1417 0 +-1423 -1417 0 +1243 -1244 0 +-1243 1244 0 +1243 -1245 0 +-1243 1245 0 +1243 -1419 0 +-1243 1419 0 +1243 -1423 0 +-1243 1423 0 +2016 1243 0 +-2016 -1243 0 +1182 -1195 0 +-1182 1195 0 +1182 -1198 0 +-1182 1198 0 +1182 -1418 0 +-1182 1418 0 +1182 -1422 0 +-1182 1422 0 +1427 1182 0 +-1427 -1182 0 +1 -1427 0 +-1 1427 0 +1 -1428 0 +-1 1428 0 +1 -1432 0 +-1 1432 0 +1537 -1539 0 +-1537 1539 0 +1537 -1540 0 +-1537 1540 0 +1938 1537 0 +-1938 -1537 0 +1766 -1938 0 +-1766 1938 0 +1766 -1939 0 +-1766 1939 0 +1766 -1941 0 +-1766 1941 0 +1775 -1777 0 +-1775 1777 0 +1775 -1778 0 +-1775 1778 0 +1780 1775 0 +1782 1775 0 +1776 -1781 0 +-1776 1781 0 +1776 -1782 0 +-1776 1782 0 +1961 1776 0 +-1961 -1776 0 +1974 -1978 0 +-1974 1978 0 +1974 -1979 0 +-1974 1979 0 +1980 1974 0 +1981 1974 0 +1774 -1779 0 +-1774 1779 0 +1774 -1780 0 +-1774 1780 0 +1826 -1829 0 +-1826 1829 0 +1826 -1830 0 +-1826 1830 0 +-1831 -1826 0 +-1832 -1826 0 +1618 -1631 0 +-1618 1631 0 +1618 -1634 0 +-1618 1634 0 +1618 -1828 0 +-1618 1828 0 +1618 -1832 0 +-1618 1832 0 +1993 1618 0 +-1993 -1618 0 +1659 -1663 0 +-1659 1663 0 +1659 -1664 0 +-1659 1664 0 +1659 -1827 0 +-1659 1827 0 +1659 -1831 0 +-1659 1831 0 +1659 -1836 0 +-1659 1836 0 +1659 -1841 0 +-1659 1841 0 +15 1659 0 +-15 -1659 0 +1339 -1341 0 +-1339 1341 0 +1339 -1342 0 +-1339 1342 0 +4 1339 0 +1853 1339 0 +485 -488 0 +-485 488 0 +485 -489 0 +-485 489 0 +478 485 0 +-478 -485 0 +477 -483 0 +-477 483 0 +477 -484 0 +-477 484 0 +479 477 0 +481 477 0 +196 -481 0 +-196 481 0 +196 -482 0 +-196 482 0 +197 196 0 +-197 -196 0 +214 -217 0 +-214 217 0 +214 -218 0 +-214 218 0 +219 214 0 +221 214 0 +183 -479 0 +-183 479 0 +183 -480 0 +-183 480 0 +180 -187 0 +-180 187 0 +180 -188 0 +-180 188 0 +-184 -180 0 +-182 -180 0 +181 -184 0 +-181 184 0 +181 -185 0 +-181 185 0 +181 -195 0 +-181 195 0 +181 -199 0 +-181 199 0 +726 181 0 +-726 -181 0 +398 -403 0 +-398 403 0 +398 -404 0 +-398 404 0 +398 -422 0 +-398 422 0 +398 -609 0 +-398 609 0 +398 -678 0 +-398 678 0 +398 -682 0 +-398 682 0 +398 -701 0 +-398 701 0 +398 -896 0 +-398 896 0 +1317 -1323 0 +-1317 1323 0 +1317 -1324 0 +-1317 1324 0 +-1319 -1317 0 +-1321 -1317 0 +1315 -1321 0 +-1315 1321 0 +1315 -1322 0 +-1315 1322 0 +1316 1315 0 +-1316 -1315 0 +1518 -1525 0 +-1518 1525 0 +1518 -1526 0 +-1518 1526 0 +-1521 -1518 0 +-1523 -1518 0 +1520 -1523 0 +-1520 1523 0 +1520 -1524 0 +-1520 1524 0 +1528 -1530 0 +-1528 1530 0 +1528 -1531 0 +-1528 1531 0 +1533 1528 0 +1535 1528 0 +1527 -1532 0 +-1527 1532 0 +1527 -1533 0 +-1527 1533 0 +1527 -1935 0 +-1527 1935 0 +1767 -1768 0 +-1767 1768 0 +1767 -1769 0 +-1767 1769 0 +-1771 -1767 0 +-1773 -1767 0 +1553 -1772 0 +-1553 1772 0 +1553 -1773 0 +-1553 1773 0 +1554 1553 0 +-1554 -1553 0 +1641 -1644 0 +-1641 1644 0 +1641 -1645 0 +-1641 1645 0 +-1646 -1641 0 +-1647 -1641 0 +1208 -1212 0 +-1208 1212 0 +1208 -1213 0 +-1208 1213 0 +1208 -1642 0 +-1208 1642 0 +1208 -1646 0 +-1208 1646 0 +1833 1208 0 +-1833 -1208 0 +1648 -1770 0 +-1648 1770 0 +1648 -1771 0 +-1648 1771 0 +1649 -1652 0 +-1649 1652 0 +1649 -1653 0 +-1649 1653 0 +1654 1649 0 +1655 1649 0 +10 -1425 0 +-10 1425 0 +10 -1426 0 +-10 1426 0 +10 -1431 0 +-10 1431 0 +10 -1433 0 +-10 1433 0 +10 -1650 0 +-10 1650 0 +10 -1654 0 +-10 1654 0 +1519 -1521 0 +-1519 1521 0 +1519 -1522 0 +-1519 1522 0 +2 1519 0 +1854 1519 0 +1318 -1319 0 +-1318 1319 0 +1318 -1320 0 +-1318 1320 0 +1326 -1328 0 +-1326 1328 0 +1326 -1329 0 +-1326 1329 0 +1331 1326 0 +1333 1326 0 +1327 -1332 0 +-1327 1332 0 +1327 -1333 0 +-1327 1333 0 +1334 1327 0 +-1334 -1327 0 +1408 -1410 0 +-1408 1410 0 +1408 -1411 0 +-1408 1411 0 +1413 1408 0 +1414 1408 0 +1325 -1330 0 +-1325 1330 0 +1325 -1331 0 +-1325 1331 0 +533 1325 0 +-533 -1325 0 +534 -535 0 +-534 535 0 +534 -536 0 +-534 536 0 +538 534 0 +540 534 0 +389 -391 0 +-389 391 0 +389 -392 0 +-389 392 0 +389 -395 0 +-389 395 0 +389 -400 0 +-389 400 0 +389 -673 0 +-389 673 0 +389 -677 0 +-389 677 0 +389 -865 0 +-389 865 0 +389 -1156 0 +-389 1156 0 +1743 -1745 0 +-1743 1745 0 +1743 -1746 0 +-1743 1746 0 +1913 1743 0 +1915 1743 0 +1744 -1914 0 +-1744 1914 0 +1744 -1915 0 +-1744 1915 0 +1917 -1919 0 +-1917 1919 0 +1917 -1920 0 +-1917 1920 0 +-1922 -1917 0 +-1924 -1917 0 +1918 -1923 0 +-1918 1923 0 +1918 -1924 0 +-1918 1924 0 +1925 1918 0 +-1925 -1918 0 +1927 -1929 0 +-1927 1929 0 +1927 -1930 0 +-1927 1930 0 +-1932 -1927 0 +-1934 -1927 0 +1928 -1933 0 +-1928 1933 0 +1928 -1934 0 +-1928 1934 0 +1935 1928 0 +-1935 -1928 0 +1926 -1931 0 +-1926 1931 0 +1926 -1932 0 +-1926 1932 0 +1926 -1937 0 +-1926 1937 0 +1926 -1940 0 +-1926 1940 0 +1783 1926 0 +-1783 -1926 0 +1785 -1787 0 +-1785 1787 0 +1785 -1788 0 +-1785 1788 0 +-1790 -1785 0 +-1792 -1785 0 +1786 -1791 0 +-1786 1791 0 +1786 -1792 0 +-1786 1792 0 +1963 1786 0 +-1963 -1786 0 +1964 -1967 0 +-1964 1967 0 +1964 -1968 0 +-1964 1968 0 +-1969 -1964 0 +-1970 -1964 0 +1564 -1577 0 +-1564 1577 0 +1564 -1580 0 +-1564 1580 0 +1564 -1966 0 +-1564 1966 0 +1564 -1970 0 +-1564 1970 0 +1984 1564 0 +-1984 -1564 0 +1784 -1789 0 +-1784 1789 0 +1784 -1790 0 +-1784 1790 0 +1842 -1844 0 +-1842 1844 0 +1842 -1845 0 +-1842 1845 0 +1848 1842 0 +1849 1842 0 +6 -1846 0 +-6 1846 0 +6 -1847 0 +-6 1847 0 +6 -1848 0 +-6 1848 0 +6 -2027 0 +-6 2027 0 +6 -2036 0 +-6 2036 0 +1916 -1921 0 +-1916 1921 0 +1916 -1922 0 +-1916 1922 0 +29 1916 0 +2018 1916 0 +1742 -1912 0 +-1742 1912 0 +1742 -1913 0 +-1742 1913 0 +1747 1742 0 +-1747 -1742 0 +1748 -1750 0 +-1748 1750 0 +1748 -1751 0 +-1748 1751 0 +1753 1748 0 +1755 1748 0 +1749 -1754 0 +-1749 1754 0 +1749 -1755 0 +-1749 1755 0 +1555 1749 0 +-1555 -1749 0 +1556 -1560 0 +-1556 1560 0 +1556 -1561 0 +-1556 1561 0 +1562 1556 0 +1563 1556 0 +1335 -1752 0 +-1335 1752 0 +1335 -1753 0 +-1335 1753 0 +731 1335 0 +-731 -1335 0 +727 -734 0 +-727 734 0 +727 -735 0 +-727 735 0 +728 727 0 +730 727 0 +412 -419 0 +-412 419 0 +412 -420 0 +-412 420 0 +412 -676 0 +-412 676 0 +412 -681 0 +-412 681 0 +412 -694 0 +-412 694 0 +412 -807 0 +-412 807 0 +1347 -1354 0 +-1347 1354 0 +1347 -1355 0 +-1347 1355 0 +1350 1347 0 +1352 1347 0 +1349 -1352 0 +-1349 1352 0 +1349 -1353 0 +-1349 1353 0 +1756 1349 0 +-1756 -1349 0 +1758 -1760 0 +-1758 1760 0 +1758 -1761 0 +-1758 1761 0 +1763 1758 0 +1765 1758 0 +1759 -1764 0 +-1759 1764 0 +1759 -1765 0 +-1759 1765 0 +1936 -1942 0 +-1936 1942 0 +1936 -1943 0 +-1936 1943 0 +-1937 -1936 0 +-1939 -1936 0 +1757 -1762 0 +-1757 1762 0 +1757 -1763 0 +-1757 1763 0 +1944 1757 0 +-1944 -1757 0 +41 1944 0 +2043 1944 0 +1348 -1350 0 +-1348 1350 0 +1348 -1351 0 +-1348 1351 0 +1357 -1359 0 +-1357 1359 0 +1357 -1360 0 +-1357 1360 0 +-1362 -1357 0 +-1364 -1357 0 +1358 -1363 0 +-1358 1363 0 +1358 -1364 0 +-1358 1364 0 +1365 1358 0 +-1365 -1358 0 +1366 -1369 0 +-1366 1369 0 +1366 -1370 0 +-1366 1370 0 +-1371 -1366 0 +-1372 -1366 0 +736 -749 0 +-736 749 0 +736 -752 0 +-736 752 0 +736 -1368 0 +-736 1368 0 +736 -1372 0 +-736 1372 0 +1373 736 0 +-1373 -736 0 +1356 -1361 0 +-1356 1361 0 +1356 -1362 0 +-1356 1362 0 +1817 -1820 0 +-1817 1820 0 +1817 -1821 0 +-1817 1821 0 +1823 1817 0 +1824 1817 0 +673 672 0 +674 672 0 +-397 -411 0 +-399 -397 0 +-400 -397 0 +-403 -397 0 +-401 -397 0 +265 -366 0 +-265 366 0 +265 -367 0 +-265 367 0 +265 -393 0 +-265 393 0 +265 -396 0 +-265 396 0 +265 -401 0 +-265 401 0 +265 -1139 0 +-265 1139 0 +409 265 0 +-409 -265 0 +296 -306 0 +-296 306 0 +296 -307 0 +-296 307 0 +296 -399 0 +-296 399 0 +296 -406 0 +-296 406 0 +296 -560 0 +-296 560 0 +296 -689 0 +-296 689 0 +296 -1140 0 +-296 1140 0 +807 296 0 +-807 -296 0 +402 -414 0 +-402 414 0 +402 -415 0 +-402 415 0 +402 -642 0 +-402 642 0 +402 -690 0 +-402 690 0 +402 -836 0 +-402 836 0 +404 402 0 +-404 -402 0 +-416 -413 0 +-417 -413 0 +292 -407 0 +-292 407 0 +292 -408 0 +-292 408 0 +292 -416 0 +-292 416 0 +292 -421 0 +-292 421 0 +292 -553 0 +-292 553 0 +391 292 0 +-391 -292 0 +1273 -1283 0 +-1273 1283 0 +1273 -1284 0 +-1273 1284 0 +1273 -1486 0 +-1273 1486 0 +1273 -1895 0 +-1273 1895 0 +1899 1273 0 +-1899 -1273 0 +1260 -1305 0 +-1260 1305 0 +1260 -1306 0 +-1260 1306 0 +1260 -1478 0 +-1260 1478 0 +1260 -1504 0 +-1260 1504 0 +1260 -1510 0 +-1260 1510 0 +1260 -1691 0 +-1260 1691 0 +1260 -1717 0 +-1260 1717 0 +1260 -1728 0 +-1260 1728 0 +1260 -1899 0 +-1260 1899 0 +1589 -1595 0 +-1589 1595 0 +1589 -1596 0 +-1589 1596 0 +-1591 -1589 0 +-1593 -1589 0 +1587 -1593 0 +-1587 1593 0 +1587 -1594 0 +-1587 1594 0 +1588 1587 0 +-1588 -1587 0 +1794 -1795 0 +-1794 1795 0 +1794 -1796 0 +-1794 1796 0 +-1797 -1794 0 +-1799 -1794 0 +1032 -1798 0 +-1032 1798 0 +1032 -1799 0 +-1032 1799 0 +1029 -1035 0 +-1029 1035 0 +1029 -1036 0 +-1029 1036 0 +1030 1029 0 +1031 1029 0 +1971 1797 0 +-1971 -1797 0 +1973 1971 0 +-1973 -1971 0 +1793 -1972 0 +-1793 1972 0 +1793 -1973 0 +-1793 1973 0 +36 1793 0 +2019 1793 0 +1590 -1591 0 +-1590 1591 0 +1590 -1592 0 +-1590 1592 0 +1598 -1599 0 +-1598 1599 0 +1598 -1600 0 +-1598 1600 0 +1602 1598 0 +1604 1598 0 +1374 -1603 0 +-1374 1603 0 +1374 -1604 0 +-1374 1604 0 +1375 1374 0 +-1375 -1374 0 +1424 -1429 0 +-1424 1429 0 +1424 -1430 0 +-1424 1430 0 +1431 1424 0 +1432 1424 0 +1597 -1601 0 +-1597 1601 0 +1597 -1602 0 +-1597 1602 0 +1835 -1837 0 +-1835 1837 0 +1835 -1838 0 +-1835 1838 0 +-1840 -1835 0 +-1841 -1835 0 +1834 -1839 0 +-1834 1839 0 +1834 -1840 0 +-1834 1840 0 +1847 1834 0 +-1847 -1834 0 +-137 -2078 0 +135 -2078 0 +137 -2079 0 +-135 -2079 0 +-2079 2077 0 +-2078 2077 0 +-1121 136 0 +-1131 136 0 +-1124 136 0 +-1121 -1126 0 +1114 -1120 0 +-1114 1120 0 +1114 -1123 0 +-1114 1123 0 +1115 -1121 0 +1115 -1124 0 +1116 -1122 0 +-1116 1122 0 +1116 -1125 0 +-1116 1125 0 +-1129 -1114 0 +-1133 -1114 0 +-1134 1115 0 +-1134 -1129 0 +-1129 -1116 0 +-1135 -1116 0 +1117 -1130 0 +-1117 1130 0 +1117 -1133 0 +-1117 1133 0 +1118 -1131 0 +1118 -1134 0 +1119 -1132 0 +-1119 1132 0 +1119 -1135 0 +-1119 1135 0 +1139 1117 0 +1141 1117 0 +-1142 1118 0 +-1142 1139 0 +1139 1119 0 +1143 1119 0 +1136 -1141 0 +-1136 1141 0 +1136 -1144 0 +-1136 1144 0 +1137 -1142 0 +1137 -1145 0 +1138 -1143 0 +-1138 1143 0 +1138 -1146 0 +-1138 1146 0 +1150 1136 0 +-1150 -1136 0 +-1151 1137 0 +1152 1138 0 +-1152 -1138 0 +1112 -1126 0 +-1112 1126 0 +1112 -1129 0 +-1112 1129 0 +1113 1112 0 +-1113 -1112 0 +-134 -2081 0 +132 -2081 0 +134 -2082 0 +-132 -2082 0 +-2082 2080 0 +-2081 2080 0 +-744 133 0 +-754 133 0 +-747 133 0 +-744 -749 0 +737 -743 0 +-737 743 0 +737 -746 0 +-737 746 0 +738 -744 0 +738 -747 0 +739 -745 0 +-739 745 0 +739 -748 0 +-739 748 0 +-752 -737 0 +-756 -737 0 +-757 738 0 +-757 -752 0 +-752 -739 0 +-758 -739 0 +740 -753 0 +-740 753 0 +740 -756 0 +-740 756 0 +741 -754 0 +741 -757 0 +742 -755 0 +-742 755 0 +742 -758 0 +-742 758 0 +1140 740 0 +1144 740 0 +-1145 741 0 +-1145 1140 0 +1140 742 0 +1146 742 0 +-131 -2084 0 +129 -2084 0 +131 -2085 0 +-129 -2085 0 +-2085 2083 0 +-2084 2083 0 +1164 129 0 +-1164 -129 0 +-1165 130 0 +1166 131 0 +-1166 -131 0 +-1177 1165 0 +-1174 1165 0 +-1180 1165 0 +-1177 1167 0 +1160 -1176 0 +-1160 1176 0 +1160 -1179 0 +-1160 1179 0 +1161 -1177 0 +1161 -1180 0 +1162 -1178 0 +-1162 1178 0 +1162 -1181 0 +-1162 1181 0 +1163 1160 0 +1170 1160 0 +-1171 1161 0 +-1171 1163 0 +1163 1162 0 +1172 1162 0 +1153 -1170 0 +-1153 1170 0 +1153 -1173 0 +-1153 1173 0 +1154 -1171 0 +1154 -1174 0 +1155 -1172 0 +-1155 1172 0 +1155 -1175 0 +-1155 1175 0 +-1156 -1153 0 +-1157 -1153 0 +-1158 1154 0 +-1158 -1156 0 +-1156 -1155 0 +-1159 -1155 0 +-110 -2087 0 +108 -2087 0 +110 -2088 0 +-108 -2088 0 +-2088 2086 0 +-2087 2086 0 +-168 109 0 +-175 109 0 +-171 109 0 +-168 -164 0 +158 -167 0 +-158 167 0 +158 -170 0 +-158 170 0 +159 -168 0 +159 -171 0 +160 -169 0 +-160 169 0 +160 -172 0 +-160 172 0 +-173 -158 0 +-177 -158 0 +-178 159 0 +-178 -173 0 +-173 -160 0 +-179 -160 0 +161 -174 0 +-161 174 0 +161 -177 0 +-161 177 0 +162 -175 0 +162 -178 0 +163 -176 0 +-163 176 0 +163 -179 0 +-163 179 0 +407 161 0 +297 161 0 +-298 162 0 +-298 407 0 +407 163 0 +299 163 0 +293 -297 0 +-293 297 0 +293 -300 0 +-293 300 0 +293 -368 0 +-293 368 0 +294 -298 0 +294 -301 0 +294 -369 0 +295 -299 0 +-295 299 0 +295 -302 0 +-295 302 0 +295 -370 0 +-295 370 0 +643 293 0 +-643 -293 0 +-644 294 0 +645 295 0 +-645 -295 0 +371 -643 0 +-371 643 0 +371 -646 0 +-371 646 0 +372 -644 0 +372 -647 0 +373 -645 0 +-373 645 0 +373 -648 0 +-373 648 0 +1478 371 0 +1479 371 0 +1475 371 0 +1480 371 0 +-1476 372 0 +-1481 372 0 +-1481 1479 0 +-1481 1478 0 +-1476 1479 0 +-1476 1478 0 +1478 373 0 +1479 373 0 +1477 373 0 +1482 373 0 +998 -1309 0 +-998 1309 0 +998 -1312 0 +-998 1312 0 +998 -1480 0 +-998 1480 0 +998 -1507 0 +-998 1507 0 +998 -1514 0 +-998 1514 0 +999 -1310 0 +999 -1313 0 +999 -1481 0 +999 -1508 0 +999 -1515 0 +1000 -1311 0 +-1000 1311 0 +1000 -1314 0 +-1000 1314 0 +1000 -1482 0 +-1000 1482 0 +1000 -1509 0 +-1000 1509 0 +1000 -1516 0 +-1000 1516 0 +1472 998 0 +-1472 -998 0 +-1473 999 0 +1474 1000 0 +-1474 -1000 0 +-1706 -1475 0 +-1710 -1475 0 +-1707 1476 0 +-1707 -1710 0 +-1708 -1477 0 +-1710 -1477 0 +-107 -2090 0 +105 -2090 0 +107 -2091 0 +-105 -2091 0 +-2091 2089 0 +-2090 2089 0 +-287 106 0 +-284 106 0 +-290 106 0 +-287 -277 0 +270 -286 0 +-270 286 0 +270 -289 0 +-270 289 0 +271 -287 0 +271 -290 0 +272 -288 0 +-272 288 0 +272 -291 0 +-272 291 0 +-276 -270 0 +-280 -270 0 +-281 271 0 +-281 -276 0 +-276 -272 0 +-282 -272 0 +273 -280 0 +-273 280 0 +273 -283 0 +-273 283 0 +274 -281 0 +274 -284 0 +275 -282 0 +-275 282 0 +275 -285 0 +-275 285 0 +306 273 0 +300 273 0 +-301 274 0 +-301 306 0 +306 275 0 +302 275 0 +-113 -2093 0 +111 -2093 0 +113 -2094 0 +-111 -2094 0 +-2094 2092 0 +-2093 2092 0 +-384 112 0 +-381 112 0 +-387 112 0 +-384 -374 0 +359 -383 0 +-359 383 0 +359 -386 0 +-359 386 0 +360 -384 0 +360 -387 0 +361 -385 0 +-361 385 0 +361 -388 0 +-361 388 0 +-365 -359 0 +-377 -359 0 +-378 360 0 +-378 -365 0 +-365 -361 0 +-379 -361 0 +362 -377 0 +-362 377 0 +362 -380 0 +-362 380 0 +363 -378 0 +363 -381 0 +364 -379 0 +-364 379 0 +364 -382 0 +-364 382 0 +367 362 0 +368 362 0 +-369 363 0 +-369 367 0 +367 364 0 +370 364 0 +-104 -2096 0 +102 -2096 0 +104 -2097 0 +-102 -2097 0 +-2097 2095 0 +-2096 2095 0 +617 102 0 +-617 -102 0 +-618 103 0 +619 104 0 +-619 -104 0 +-630 618 0 +-637 618 0 +-633 618 0 +-630 626 0 +620 -629 0 +-620 629 0 +620 -632 0 +-620 632 0 +621 -630 0 +621 -633 0 +622 -631 0 +-622 631 0 +622 -634 0 +-622 634 0 +635 620 0 +639 620 0 +-640 621 0 +-640 635 0 +635 622 0 +641 622 0 +623 -636 0 +-623 636 0 +623 -639 0 +-623 639 0 +624 -637 0 +624 -640 0 +625 -638 0 +-625 638 0 +625 -641 0 +-625 641 0 +-642 -623 0 +-646 -623 0 +-647 624 0 +-647 -642 0 +-642 -625 0 +-648 -625 0 +-116 -2099 0 +114 -2099 0 +116 -2100 0 +-114 -2100 0 +-2100 2098 0 +-2099 2098 0 +334 114 0 +-334 -114 0 +-335 115 0 +336 116 0 +-336 -116 0 +-347 335 0 +-354 335 0 +-350 335 0 +-347 343 0 +337 -346 0 +-337 346 0 +337 -349 0 +-337 349 0 +338 -347 0 +338 -350 0 +339 -348 0 +-339 348 0 +339 -351 0 +-339 351 0 +352 337 0 +356 337 0 +-357 338 0 +-357 352 0 +352 339 0 +358 339 0 +340 -353 0 +-340 353 0 +340 -356 0 +-340 356 0 +341 -354 0 +341 -357 0 +342 -355 0 +-342 355 0 +342 -358 0 +-342 358 0 +-616 -340 0 +-900 -340 0 +-901 341 0 +-901 -616 0 +-616 -342 0 +-902 -342 0 +613 -900 0 +-613 900 0 +613 -903 0 +-613 903 0 +614 -901 0 +614 -904 0 +615 -902 0 +-615 902 0 +615 -905 0 +-615 905 0 +1283 613 0 +1307 613 0 +1274 613 0 +1280 613 0 +-1275 614 0 +-1281 614 0 +-1281 1307 0 +-1281 1283 0 +-1275 1307 0 +-1275 1283 0 +1283 615 0 +1307 615 0 +1276 615 0 +1282 615 0 +-1298 -1274 0 +-1294 -1274 0 +-1299 1275 0 +-1299 -1294 0 +-1300 -1276 0 +-1294 -1276 0 +1291 -1298 0 +-1291 1298 0 +1291 -1301 0 +-1291 1301 0 +1291 -1729 0 +-1291 1729 0 +1291 -1903 0 +-1291 1903 0 +1292 -1299 0 +1292 -1302 0 +1292 -1730 0 +1292 -1904 0 +1293 -1300 0 +-1293 1300 0 +1293 -1303 0 +-1293 1303 0 +1293 -1731 0 +-1293 1731 0 +1293 -1905 0 +-1293 1905 0 +1736 1291 0 +-1736 -1291 0 +-1737 1292 0 +1738 1293 0 +-1738 -1293 0 +-125 -2102 0 +123 -2102 0 +125 -2103 0 +-123 -2103 0 +-2103 2101 0 +-2102 2101 0 +-465 124 0 +-472 124 0 +-468 124 0 +-465 -461 0 +455 -464 0 +-455 464 0 +455 -467 0 +-455 467 0 +456 -465 0 +456 -468 0 +457 -466 0 +-457 466 0 +457 -469 0 +-457 469 0 +-470 -455 0 +-474 -455 0 +-475 456 0 +-475 -470 0 +-470 -457 0 +-476 -457 0 +458 -471 0 +-458 471 0 +458 -474 0 +-458 474 0 +459 -472 0 +459 -475 0 +460 -473 0 +-460 473 0 +460 -476 0 +-460 476 0 +553 458 0 +561 458 0 +-562 459 0 +-562 553 0 +553 460 0 +563 460 0 +550 -561 0 +-550 561 0 +550 -564 0 +-550 564 0 +550 -897 0 +-550 897 0 +551 -562 0 +551 -565 0 +551 -898 0 +552 -563 0 +-552 563 0 +552 -566 0 +-552 566 0 +552 -899 0 +-552 899 0 +903 550 0 +-903 -550 0 +-904 551 0 +905 552 0 +-905 -552 0 +-119 -2105 0 +117 -2105 0 +119 -2106 0 +-117 -2106 0 +-2106 2104 0 +-2105 2104 0 +-582 118 0 +-579 118 0 +-585 118 0 +-582 -572 0 +567 -581 0 +-567 581 0 +567 -584 0 +-567 584 0 +568 -582 0 +568 -585 0 +569 -583 0 +-569 583 0 +569 -586 0 +-569 586 0 +-571 -567 0 +-575 -567 0 +-576 568 0 +-576 -571 0 +-571 -569 0 +-577 -569 0 +557 -575 0 +-557 575 0 +557 -578 0 +-557 578 0 +558 -576 0 +558 -579 0 +559 -577 0 +-559 577 0 +559 -580 0 +-559 580 0 +560 557 0 +564 557 0 +-565 558 0 +-565 560 0 +560 559 0 +566 559 0 +-92 -2108 0 +90 -2108 0 +92 -2109 0 +-90 -2109 0 +-2109 2107 0 +-2108 2107 0 +844 90 0 +-844 -90 0 +-845 91 0 +846 92 0 +-846 -92 0 +-857 845 0 +-854 845 0 +-860 845 0 +-857 847 0 +837 -856 0 +-837 856 0 +837 -859 0 +-837 859 0 +838 -857 0 +838 -860 0 +839 -858 0 +-839 858 0 +839 -861 0 +-839 861 0 +843 837 0 +850 837 0 +-851 838 0 +-851 843 0 +843 839 0 +852 839 0 +840 -850 0 +-840 850 0 +840 -853 0 +-840 853 0 +841 -851 0 +841 -854 0 +842 -852 0 +-842 852 0 +842 -855 0 +-842 855 0 +-865 -840 0 +-866 -840 0 +-867 841 0 +-867 -865 0 +-865 -842 0 +-868 -842 0 +862 -866 0 +-862 866 0 +862 -869 0 +-862 869 0 +863 -867 0 +863 -870 0 +864 -868 0 +-864 868 0 +864 -871 0 +-864 871 0 +1306 862 0 +1308 862 0 +1295 862 0 +1312 862 0 +-1296 863 0 +-1313 863 0 +-1313 1308 0 +-1313 1306 0 +-1296 1308 0 +-1296 1306 0 +1306 864 0 +1308 864 0 +1297 864 0 +1314 864 0 +-1301 -1295 0 +-1304 -1295 0 +-1302 1296 0 +-1302 -1304 0 +-1303 -1297 0 +-1304 -1297 0 +-101 -2111 0 +99 -2111 0 +101 -2112 0 +-99 -2112 0 +-2112 2110 0 +-2111 2110 0 +-209 100 0 +-206 100 0 +-212 100 0 +-209 -199 0 +189 -208 0 +-189 208 0 +189 -211 0 +-189 211 0 +190 -209 0 +190 -212 0 +191 -210 0 +-191 210 0 +191 -213 0 +-191 213 0 +-195 -189 0 +-202 -189 0 +-203 190 0 +-203 -195 0 +-195 -191 0 +-204 -191 0 +192 -202 0 +-192 202 0 +192 -205 0 +-192 205 0 +193 -203 0 +193 -206 0 +194 -204 0 +-194 204 0 +194 -207 0 +-194 207 0 +366 192 0 +308 192 0 +-309 193 0 +-309 366 0 +366 194 0 +310 194 0 +267 -308 0 +-267 308 0 +267 -311 0 +-267 311 0 +267 -610 0 +-267 610 0 +268 -309 0 +268 -312 0 +268 -611 0 +269 -310 0 +-269 310 0 +269 -313 0 +-269 313 0 +269 -612 0 +-269 612 0 +869 267 0 +-869 -267 0 +-870 268 0 +871 269 0 +-871 -269 0 +-95 -2114 0 +93 -2114 0 +95 -2115 0 +-93 -2115 0 +-2115 2113 0 +-2114 2113 0 +-329 94 0 +-326 94 0 +-332 94 0 +-329 -319 0 +314 -328 0 +-314 328 0 +314 -331 0 +-314 331 0 +315 -329 0 +315 -332 0 +316 -330 0 +-316 330 0 +316 -333 0 +-316 333 0 +-318 -314 0 +-322 -314 0 +-323 315 0 +-323 -318 0 +-318 -316 0 +-324 -316 0 +303 -322 0 +-303 322 0 +303 -325 0 +-303 325 0 +304 -323 0 +304 -326 0 +305 -324 0 +-305 324 0 +305 -327 0 +-305 327 0 +307 303 0 +311 303 0 +-312 304 0 +-312 307 0 +307 305 0 +313 305 0 +-98 -2117 0 +96 -2117 0 +98 -2118 0 +-96 -2118 0 +-2118 2116 0 +-2117 2116 0 +-604 97 0 +-601 97 0 +-607 97 0 +-604 -594 0 +587 -603 0 +-587 603 0 +587 -606 0 +-587 606 0 +588 -604 0 +588 -607 0 +589 -605 0 +-589 605 0 +589 -608 0 +-589 608 0 +-593 -587 0 +-597 -587 0 +-598 588 0 +-598 -593 0 +-593 -589 0 +-599 -589 0 +590 -597 0 +-590 597 0 +590 -600 0 +-590 600 0 +591 -598 0 +591 -601 0 +592 -599 0 +-592 599 0 +592 -602 0 +-592 602 0 +609 590 0 +610 590 0 +-611 591 0 +-611 609 0 +609 592 0 +612 592 0 +-68 -2120 0 +66 -2120 0 +68 -2121 0 +-66 -2121 0 +-2121 2119 0 +-2120 2119 0 +-1255 67 0 +-1252 67 0 +-1258 67 0 +-1255 -1245 0 +1240 -1254 0 +-1240 1254 0 +1240 -1257 0 +-1240 1257 0 +1241 -1255 0 +1241 -1258 0 +1242 -1256 0 +-1242 1256 0 +1242 -1259 0 +-1242 1259 0 +-1244 -1240 0 +-1248 -1240 0 +-1249 1241 0 +-1249 -1244 0 +-1244 -1242 0 +-1250 -1242 0 +929 -1248 0 +-929 1248 0 +929 -1251 0 +-929 1251 0 +930 -1249 0 +930 -1252 0 +931 -1250 0 +-931 1250 0 +931 -1253 0 +-931 1253 0 +1277 929 0 +956 929 0 +-1278 930 0 +-957 930 0 +1279 931 0 +958 931 0 +683 -956 0 +-683 956 0 +683 -959 0 +-683 959 0 +683 -1228 0 +-683 1228 0 +683 -1261 0 +-683 1261 0 +684 -957 0 +684 -960 0 +684 -1229 0 +684 -1262 0 +685 -958 0 +-685 958 0 +685 -961 0 +-685 961 0 +685 -1230 0 +-685 1230 0 +685 -1263 0 +-685 1263 0 +-689 -683 0 +-695 -683 0 +-394 -683 0 +-690 -683 0 +-696 684 0 +-696 -690 0 +-696 -394 0 +-696 -689 0 +-689 -685 0 +-697 -685 0 +-394 -685 0 +-690 -685 0 +395 394 0 +396 394 0 +686 -695 0 +-686 695 0 +686 -698 0 +-686 698 0 +686 -706 0 +-686 706 0 +686 -1711 0 +-686 1711 0 +687 -696 0 +687 -699 0 +687 -707 0 +687 -1712 0 +688 -697 0 +-688 697 0 +688 -700 0 +-688 700 0 +688 -708 0 +-688 708 0 +688 -1713 0 +-688 1713 0 +-1714 -686 0 +-1739 -686 0 +-1725 -686 0 +-1715 687 0 +-1740 687 0 +-1726 687 0 +-1716 -688 0 +-1741 -688 0 +-1727 -688 0 +-1728 -1725 0 +-1729 -1725 0 +-1732 -1725 0 +-1735 -1725 0 +-1730 1726 0 +-1733 1726 0 +-1733 -1735 0 +-1733 -1728 0 +-1730 -1735 0 +-1730 -1728 0 +-1728 -1727 0 +-1731 -1727 0 +-1734 -1727 0 +-1735 -1727 0 +1498 1739 0 +-1498 -1739 0 +-1499 1740 0 +1500 1741 0 +-1500 -1741 0 +-1501 -1498 0 +-1492 1499 0 +-1508 1499 0 +-1502 1499 0 +-1508 1504 0 +-1492 1504 0 +-1503 -1500 0 +-1510 -1501 0 +-1511 -1501 0 +-1514 -1501 0 +-1517 -1501 0 +-1512 1502 0 +-1515 1502 0 +-1515 -1517 0 +-1515 -1510 0 +-1512 -1517 0 +-1512 -1510 0 +-1510 -1503 0 +-1513 -1503 0 +-1516 -1503 0 +-1517 -1503 0 +-1494 -1491 0 +-1497 -1491 0 +-1495 1492 0 +-1495 -1497 0 +-1496 -1493 0 +-1497 -1493 0 +-1717 -1714 0 +-1718 -1714 0 +-1721 -1714 0 +-1724 -1714 0 +-1719 1715 0 +-1722 1715 0 +-1722 -1724 0 +-1722 -1717 0 +-1719 -1724 0 +-1719 -1717 0 +-1717 -1716 0 +-1720 -1716 0 +-1723 -1716 0 +-1724 -1716 0 +-74 -2123 0 +72 -2123 0 +74 -2124 0 +-72 -2124 0 +-2124 2122 0 +-2123 2122 0 +-950 73 0 +-947 73 0 +-953 73 0 +-950 -940 0 +932 -949 0 +-932 949 0 +932 -952 0 +-932 952 0 +933 -950 0 +933 -953 0 +934 -951 0 +-934 951 0 +934 -954 0 +-934 954 0 +-939 -932 0 +-943 -932 0 +-944 933 0 +-944 -939 0 +-939 -934 0 +-945 -934 0 +936 -943 0 +-936 943 0 +936 -946 0 +-936 946 0 +937 -944 0 +937 -947 0 +938 -945 0 +-938 945 0 +938 -948 0 +-938 948 0 +962 936 0 +959 936 0 +-960 937 0 +-960 962 0 +962 938 0 +961 938 0 +-71 -2126 0 +69 -2126 0 +71 -2127 0 +-69 -2127 0 +-2127 2125 0 +-2126 2125 0 +-914 70 0 +-924 70 0 +-917 70 0 +-914 -919 0 +907 -913 0 +-907 913 0 +907 -916 0 +-907 916 0 +908 -914 0 +908 -917 0 +909 -915 0 +-909 915 0 +909 -918 0 +-909 918 0 +-922 -907 0 +-926 -907 0 +-927 908 0 +-927 -922 0 +-922 -909 0 +-928 -909 0 +910 -923 0 +-910 923 0 +910 -926 0 +-910 926 0 +911 -924 0 +911 -927 0 +912 -925 0 +-912 925 0 +912 -928 0 +-912 928 0 +1264 910 0 +1228 910 0 +-1265 911 0 +-1229 911 0 +1266 912 0 +1230 912 0 +-65 -2129 0 +63 -2129 0 +65 -2130 0 +-63 -2130 0 +-2130 2128 0 +-2129 2128 0 +-1190 64 0 +-1200 64 0 +-1193 64 0 +-1190 -1195 0 +1183 -1189 0 +-1183 1189 0 +1183 -1192 0 +-1183 1192 0 +1184 -1190 0 +1184 -1193 0 +1185 -1191 0 +-1185 1191 0 +1185 -1194 0 +-1185 1194 0 +-1198 -1183 0 +-1202 -1183 0 +-1203 1184 0 +-1203 -1198 0 +-1198 -1185 0 +-1204 -1185 0 +1186 -1199 0 +-1186 1199 0 +1186 -1202 0 +-1186 1202 0 +1187 -1200 0 +1187 -1203 0 +1188 -1201 0 +-1188 1201 0 +1188 -1204 0 +-1188 1204 0 +1305 1186 0 +1261 1186 0 +-1262 1187 0 +-1262 1305 0 +1305 1188 0 +1263 1188 0 +-56 -2132 0 +54 -2132 0 +56 -2133 0 +-54 -2133 0 +-2133 2131 0 +-2132 2131 0 +-1456 55 0 +-1466 55 0 +-1459 55 0 +-1456 -1461 0 +1449 -1455 0 +-1449 1455 0 +1449 -1458 0 +-1449 1458 0 +1450 -1456 0 +1450 -1459 0 +1451 -1457 0 +-1451 1457 0 +1451 -1460 0 +-1451 1460 0 +-1464 -1449 0 +-1468 -1449 0 +-1469 1450 0 +-1469 -1464 0 +-1464 -1451 0 +-1470 -1451 0 +1452 -1465 0 +-1452 1465 0 +1452 -1468 0 +-1452 1468 0 +1453 -1466 0 +1453 -1469 0 +1454 -1467 0 +-1454 1467 0 +1454 -1470 0 +-1454 1470 0 +1471 1452 0 +1685 1452 0 +-1686 1453 0 +-1686 1471 0 +1471 1454 0 +1687 1454 0 +691 -1685 0 +-691 1685 0 +691 -1688 0 +-691 1688 0 +691 -1692 0 +-691 1692 0 +691 -1700 0 +-691 1700 0 +692 -1686 0 +692 -1689 0 +692 -1693 0 +692 -1701 0 +693 -1687 0 +-693 1687 0 +693 -1690 0 +-693 1690 0 +693 -1694 0 +-693 1694 0 +693 -1702 0 +-693 1702 0 +-694 -691 0 +-698 -691 0 +-390 -691 0 +-701 -691 0 +-699 692 0 +-699 -701 0 +-699 -390 0 +-699 -694 0 +-694 -693 0 +-700 -693 0 +-390 -693 0 +-701 -693 0 +392 390 0 +393 390 0 +1448 -1461 0 +-1448 1461 0 +1448 -1464 0 +-1448 1464 0 +1976 1448 0 +-1976 -1448 0 +-83 -2135 0 +81 -2135 0 +83 -2136 0 +-81 -2136 0 +-2136 2134 0 +-2135 2134 0 +1389 81 0 +-1389 -81 0 +-1390 82 0 +1391 83 0 +-1391 -83 0 +-1403 1390 0 +-1400 1390 0 +-1406 1390 0 +-1403 1393 0 +1383 -1402 0 +-1383 1402 0 +1383 -1405 0 +-1383 1405 0 +1384 -1403 0 +1384 -1406 0 +1385 -1404 0 +-1385 1404 0 +1385 -1407 0 +-1385 1407 0 +1392 1383 0 +1396 1383 0 +-1397 1384 0 +-1397 1392 0 +1392 1385 0 +1398 1385 0 +1386 -1396 0 +-1386 1396 0 +1386 -1399 0 +-1386 1399 0 +1387 -1397 0 +1387 -1400 0 +1388 -1398 0 +-1388 1398 0 +1388 -1401 0 +-1388 1401 0 +1679 1386 0 +-1679 -1386 0 +-1680 1387 0 +1681 1388 0 +-1681 -1388 0 +1682 1679 0 +1688 1679 0 +-1683 1680 0 +-1689 1680 0 +1684 1681 0 +1690 1681 0 +-50 -2138 0 +48 -2138 0 +50 -2139 0 +-48 -2139 0 +-2139 2137 0 +-2138 2137 0 +-1674 49 0 +-1671 49 0 +-1677 49 0 +-1674 -1664 0 +1656 -1673 0 +-1656 1673 0 +1656 -1676 0 +-1656 1676 0 +1657 -1674 0 +1657 -1677 0 +1658 -1675 0 +-1658 1675 0 +1658 -1678 0 +-1658 1678 0 +-1663 -1656 0 +-1667 -1656 0 +-1668 1657 0 +-1668 -1663 0 +-1663 -1658 0 +-1669 -1658 0 +1660 -1667 0 +-1660 1667 0 +1660 -1670 0 +-1660 1670 0 +1661 -1668 0 +1661 -1671 0 +1662 -1669 0 +-1662 1669 0 +1662 -1672 0 +-1662 1672 0 +1691 1660 0 +1692 1660 0 +-1693 1661 0 +-1693 1691 0 +1691 1662 0 +1694 1662 0 +-53 -2141 0 +51 -2141 0 +53 -2142 0 +-51 -2142 0 +-2142 2140 0 +-2141 2140 0 +-1626 52 0 +-1636 52 0 +-1629 52 0 +-1626 -1631 0 +1619 -1625 0 +-1619 1625 0 +1619 -1628 0 +-1619 1628 0 +1620 -1626 0 +1620 -1629 0 +1621 -1627 0 +-1621 1627 0 +1621 -1630 0 +-1621 1630 0 +-1634 -1619 0 +-1638 -1619 0 +-1639 1620 0 +-1639 -1634 0 +-1634 -1621 0 +-1640 -1621 0 +1622 -1635 0 +-1622 1635 0 +1622 -1638 0 +-1622 1638 0 +1623 -1636 0 +1623 -1639 0 +1624 -1637 0 +-1624 1637 0 +1624 -1640 0 +-1624 1640 0 +1697 1622 0 +1700 1622 0 +-1698 1623 0 +-1701 1623 0 +1699 1624 0 +1702 1624 0 +-62 -2144 0 +60 -2144 0 +62 -2145 0 +-60 -2145 0 +-2145 2143 0 +-2144 2143 0 +-667 61 0 +-664 61 0 +-670 61 0 +-667 -657 0 +649 -666 0 +-649 666 0 +649 -669 0 +-649 669 0 +650 -667 0 +650 -670 0 +651 -668 0 +-651 668 0 +651 -671 0 +-651 671 0 +-656 -649 0 +-660 -649 0 +-661 650 0 +-661 -656 0 +-656 -651 0 +-662 -651 0 +653 -660 0 +-653 660 0 +653 -663 0 +-653 663 0 +654 -661 0 +654 -664 0 +655 -662 0 +-655 662 0 +655 -665 0 +-655 665 0 +963 653 0 +992 653 0 +-993 654 0 +-993 963 0 +963 655 0 +994 655 0 +703 -992 0 +-703 992 0 +703 -995 0 +-703 995 0 +703 -1270 0 +-703 1270 0 +704 -993 0 +704 -996 0 +704 -1271 0 +705 -994 0 +-705 994 0 +705 -997 0 +-705 997 0 +705 -1272 0 +-705 1272 0 +-418 -703 0 +-706 -703 0 +-707 704 0 +-707 -418 0 +-418 -705 0 +-708 -705 0 +420 418 0 +421 418 0 +422 418 0 +423 418 0 +-89 -2147 0 +87 -2147 0 +89 -2148 0 +-87 -2148 0 +-2148 2146 0 +-2147 2146 0 +964 87 0 +-964 -87 0 +-965 88 0 +966 89 0 +-966 -89 0 +-974 965 0 +-984 965 0 +-977 965 0 +-974 979 0 +967 -973 0 +-967 973 0 +967 -976 0 +-967 976 0 +968 -974 0 +968 -977 0 +969 -975 0 +-969 975 0 +969 -978 0 +-969 978 0 +982 967 0 +986 967 0 +-987 968 0 +-987 982 0 +982 969 0 +988 969 0 +970 -983 0 +-970 983 0 +970 -986 0 +-970 986 0 +971 -984 0 +971 -987 0 +972 -985 0 +-972 985 0 +972 -988 0 +-972 988 0 +-1309 -970 0 +-1285 -970 0 +-1310 971 0 +-1286 971 0 +-1311 -972 0 +-1287 -972 0 +989 -1285 0 +-989 1285 0 +989 -1288 0 +-989 1288 0 +990 -1286 0 +990 -1289 0 +991 -1287 0 +-991 1287 0 +991 -1290 0 +-991 1290 0 +995 989 0 +-995 -989 0 +-996 990 0 +997 991 0 +-997 -991 0 +-86 -2150 0 +84 -2150 0 +86 -2151 0 +-84 -2151 0 +-2151 2149 0 +-2150 2149 0 +1231 84 0 +-1231 -84 0 +-1232 85 0 +1233 86 0 +-1233 -86 0 +-1443 1232 0 +-1440 1232 0 +-1446 1232 0 +-1443 1433 0 +1234 -1442 0 +-1234 1442 0 +1234 -1445 0 +-1234 1445 0 +1235 -1443 0 +1235 -1446 0 +1236 -1444 0 +-1236 1444 0 +1236 -1447 0 +-1236 1447 0 +1425 1234 0 +1436 1234 0 +-1437 1235 0 +-1437 1425 0 +1425 1236 0 +1438 1236 0 +1237 -1436 0 +-1237 1436 0 +1237 -1439 0 +-1237 1439 0 +1238 -1437 0 +1238 -1440 0 +1239 -1438 0 +-1239 1438 0 +1239 -1441 0 +-1239 1441 0 +-1284 -1237 0 +-1288 -1237 0 +-1289 1238 0 +-1289 -1284 0 +-1284 -1239 0 +-1290 -1239 0 +-59 -2153 0 +57 -2153 0 +59 -2154 0 +-57 -2154 0 +-2154 2152 0 +-2153 2152 0 +-1223 58 0 +-1220 58 0 +-1226 58 0 +-1223 -1213 0 +1205 -1222 0 +-1205 1222 0 +1205 -1225 0 +-1205 1225 0 +1206 -1223 0 +1206 -1226 0 +1207 -1224 0 +-1207 1224 0 +1207 -1227 0 +-1207 1227 0 +-1212 -1205 0 +-1216 -1205 0 +-1217 1206 0 +-1217 -1212 0 +-1212 -1207 0 +-1218 -1207 0 +1209 -1216 0 +-1209 1216 0 +1209 -1219 0 +-1209 1219 0 +1210 -1217 0 +1210 -1220 0 +1211 -1218 0 +-1211 1218 0 +1211 -1221 0 +-1211 1221 0 +1267 1209 0 +1270 1209 0 +-1268 1210 0 +-1271 1210 0 +1269 1211 0 +1272 1211 0 +-47 -2156 0 +45 -2156 0 +47 -2157 0 +-45 -2157 0 +-2157 2155 0 +-2156 2155 0 +-1572 46 0 +-1582 46 0 +-1575 46 0 +-1572 -1577 0 +1565 -1571 0 +-1565 1571 0 +1565 -1574 0 +-1565 1574 0 +1566 -1572 0 +1566 -1575 0 +1567 -1573 0 +-1567 1573 0 +1567 -1576 0 +-1567 1576 0 +-1580 -1565 0 +-1584 -1565 0 +-1585 1566 0 +-1585 -1580 0 +-1580 -1567 0 +-1586 -1567 0 +1568 -1581 0 +-1568 1581 0 +1568 -1584 0 +-1568 1584 0 +1569 -1582 0 +1569 -1585 0 +1570 -1583 0 +-1570 1583 0 +1570 -1586 0 +-1570 1586 0 +1609 1568 0 +1880 1568 0 +-1881 1569 0 +-1881 1609 0 +1609 1570 0 +1882 1570 0 +1606 -1880 0 +-1606 1880 0 +1606 -1883 0 +-1606 1883 0 +1606 -1889 0 +-1606 1889 0 +1607 -1881 0 +1607 -1884 0 +1607 -1890 0 +1608 -1882 0 +-1608 1882 0 +1608 -1885 0 +-1608 1885 0 +1608 -1891 0 +-1608 1891 0 +-405 -1606 0 +-1711 -1606 0 +-1712 1607 0 +-1712 -405 0 +-405 -1608 0 +-1713 -1608 0 +406 405 0 +408 405 0 +414 405 0 +410 405 0 +-44 -2159 0 +42 -2159 0 +44 -2160 0 +-42 -2160 0 +-2160 2158 0 +-2159 2158 0 +-1862 43 0 +-1872 43 0 +-1865 43 0 +-1862 -1867 0 +1855 -1861 0 +-1855 1861 0 +1855 -1864 0 +-1855 1864 0 +1856 -1862 0 +1856 -1865 0 +1857 -1863 0 +-1857 1863 0 +1857 -1866 0 +-1857 1866 0 +-1870 -1855 0 +-1874 -1855 0 +-1875 1856 0 +-1875 -1870 0 +-1870 -1857 0 +-1876 -1857 0 +1858 -1871 0 +-1858 1871 0 +1858 -1874 0 +-1858 1874 0 +1859 -1872 0 +1859 -1875 0 +1860 -1873 0 +-1860 1873 0 +1860 -1876 0 +-1860 1876 0 +1877 1858 0 +1883 1858 0 +-1878 1859 0 +-1884 1859 0 +1879 1860 0 +1885 1860 0 +1850 -1867 0 +-1850 1867 0 +1850 -1870 0 +-1850 1870 0 +1851 1850 0 +-1851 -1850 0 +-77 -2162 0 +75 -2162 0 +77 -2163 0 +-75 -2163 0 +-2163 2161 0 +-2162 2161 0 +2021 75 0 +-2021 -75 0 +-2022 76 0 +2023 77 0 +-2023 -77 0 +-2031 2022 0 +-2038 2022 0 +-2034 2022 0 +-2031 2027 0 +2024 -2030 0 +-2024 2030 0 +2024 -2033 0 +-2024 2033 0 +2025 -2031 0 +2025 -2034 0 +2026 -2032 0 +-2026 2032 0 +2026 -2035 0 +-2026 2035 0 +2036 2024 0 +2040 2024 0 +-2041 2025 0 +-2041 2036 0 +2036 2026 0 +2042 2026 0 +1892 -2037 0 +-1892 2037 0 +1892 -2040 0 +-1892 2040 0 +1893 -2038 0 +1893 -2041 0 +1894 -2039 0 +-1894 2039 0 +1894 -2042 0 +-1894 2042 0 +-1895 -1892 0 +-1906 -1892 0 +-1907 1893 0 +-1907 -1895 0 +-1895 -1894 0 +-1908 -1894 0 +1886 -1906 0 +-1886 1906 0 +1886 -1909 0 +-1886 1909 0 +1887 -1907 0 +1887 -1910 0 +1888 -1908 0 +-1888 1908 0 +1888 -1911 0 +-1888 1911 0 +1889 1886 0 +-1889 -1886 0 +-1890 1887 0 +1891 1888 0 +-1891 -1888 0 +-80 -2165 0 +78 -2165 0 +80 -2166 0 +-78 -2166 0 +-2166 2164 0 +-2165 2164 0 +1896 78 0 +-1896 -78 0 +-1897 79 0 +1898 80 0 +-1898 -80 0 +-2052 1897 0 +-2059 1897 0 +-2055 1897 0 +-2052 2048 0 +2044 -2051 0 +-2044 2051 0 +2044 -2054 0 +-2044 2054 0 +2045 -2052 0 +2045 -2055 0 +2046 -2053 0 +-2046 2053 0 +2046 -2056 0 +-2046 2056 0 +2057 2044 0 +2061 2044 0 +-2062 2045 0 +-2062 2057 0 +2057 2046 0 +2063 2046 0 +1900 -2058 0 +-1900 2058 0 +1900 -2061 0 +-1900 2061 0 +1901 -2059 0 +1901 -2062 0 +1902 -2060 0 +-1902 2060 0 +1902 -2063 0 +-1902 2063 0 +-1903 -1900 0 +-1909 -1900 0 +-1904 1901 0 +-1910 1901 0 +-1905 -1902 0 +-1911 -1902 0 +-122 -2168 0 +120 -2168 0 +122 -2169 0 +-120 -2169 0 +-2169 2167 0 +-2168 2167 0 +-882 121 0 +-891 121 0 +-888 121 0 +-894 121 0 +872 -890 0 +-872 890 0 +872 -893 0 +-872 893 0 +873 -891 0 +873 -894 0 +874 -892 0 +-874 892 0 +874 -895 0 +-874 895 0 +-878 -872 0 +-884 -872 0 +-879 873 0 +-885 873 0 +-880 -874 0 +-886 -874 0 +875 -884 0 +-875 884 0 +875 -887 0 +-875 887 0 +876 -885 0 +876 -888 0 +877 -886 0 +-877 886 0 +877 -889 0 +-877 889 0 +896 875 0 +897 875 0 +-898 876 0 +-898 896 0 +896 877 0 +899 877 0 +-2167 2170 0 +-2164 2170 0 +-2161 2170 0 +-2158 2170 0 +-2155 2170 0 +-2152 2170 0 +-2149 2170 0 +-2146 2170 0 +-2143 2170 0 +-2140 2170 0 +-2137 2170 0 +-2134 2170 0 +-2131 2170 0 +-2128 2170 0 +-2125 2170 0 +-2122 2170 0 +-2119 2170 0 +-2116 2170 0 +-2113 2170 0 +-2110 2170 0 +-2107 2170 0 +-2104 2170 0 +-2101 2170 0 +-2098 2170 0 +-2095 2170 0 +-2092 2170 0 +-2089 2170 0 +-2086 2170 0 +-2083 2170 0 +-2080 2170 0 +-2077 2170 0 +-2072 2170 0 +-2064 -1077 -1071 0 +-2064 -1083 -1071 0 +2064 1080 1071 0 +-2064 -1077 -1080 0 +-2064 -1083 -1080 0 +2064 1083 1077 0 +-2064 -1079 -1071 0 +-2064 -1085 -1071 0 +2064 1082 1071 0 +-2064 -1079 -1082 0 +-2064 -1085 -1082 0 +2064 1085 1079 0 +2073 128 -126 0 +2074 -128 126 0 +-2072 2074 2073 0 +-127 126 128 0 +-127 -126 -128 0 +-827 -818 -815 0 +-830 -824 -815 0 +824 818 815 0 +830 818 815 0 +824 827 815 0 +830 827 815 0 +-831 -832 826 0 +-831 -830 824 0 +-831 824 826 0 +-825 -826 832 0 +-825 -824 830 0 +-825 830 832 0 +-819 -820 829 0 +-819 -818 827 0 +-819 827 829 0 +-816 815 817 0 +-816 -815 -817 0 +-829 -818 -817 0 +-832 -826 -817 0 +826 818 817 0 +832 818 817 0 +826 829 817 0 +832 829 817 0 +-809 828 831 0 +-831 830 832 0 +-831 -830 -832 0 +-828 827 829 0 +-828 -827 -829 0 +-808 -814 -821 0 +-809 808 810 0 +-809 -808 -810 0 +-810 -814 -823 0 +-812 822 825 0 +-825 824 826 0 +-825 -824 -826 0 +-822 821 823 0 +-822 -821 -823 0 +811 836 1147 0 +-812 811 813 0 +-812 -811 -813 0 +813 836 1149 0 +-1158 1157 1159 0 +-1158 -1157 -1159 0 +-1151 1150 1152 0 +-1151 -1150 -1152 0 +-1148 1147 1149 0 +-1148 -1147 -1149 0 +-1489 -1490 1485 0 +-1489 -1488 1483 0 +-1489 1483 1485 0 +-1484 -1485 1490 0 +-1484 -1483 1488 0 +-1484 1488 1490 0 +-834 833 835 0 +-834 -833 -835 0 +-1878 1877 1879 0 +-1878 -1877 -1879 0 +-1733 1732 1734 0 +-1733 -1732 -1734 0 +-1722 1721 1723 0 +-1722 -1721 -1723 0 +-1698 1697 1699 0 +-1698 -1697 -1699 0 +-1489 1488 1490 0 +-1489 -1488 -1490 0 +-1473 1472 1474 0 +-1473 -1472 -1474 0 +-1281 1280 1282 0 +-1281 -1280 -1282 0 +-1278 1277 1279 0 +-1278 -1277 -1279 0 +250 241 237 0 +253 247 237 0 +-247 -241 -237 0 +-253 -241 -237 0 +-247 -250 -237 0 +-253 -250 -237 0 +-254 -255 -247 0 +-254 -253 -249 0 +-254 -247 -249 0 +-248 -249 -253 0 +-248 -247 -255 0 +-248 -253 -255 0 +-242 -243 -250 0 +-242 -241 -252 0 +-242 -250 -252 0 +-238 237 239 0 +-238 -237 -239 0 +252 241 239 0 +255 249 239 0 +-249 -241 -239 0 +-255 -241 -239 0 +-249 -252 -239 0 +-255 -252 -239 0 +-231 251 254 0 +-254 253 255 0 +-254 -253 -255 0 +-251 250 252 0 +-251 -250 -252 0 +230 240 244 0 +-231 230 232 0 +-231 -230 -232 0 +232 240 246 0 +-235 245 248 0 +-248 247 249 0 +-248 -247 -249 0 +-245 244 246 0 +-245 -244 -246 0 +-511 -502 -234 0 +-514 -508 -234 0 +508 502 234 0 +514 502 234 0 +508 511 234 0 +514 511 234 0 +-515 -516 510 0 +-515 -514 508 0 +-515 508 510 0 +-509 -510 516 0 +-509 -508 514 0 +-509 514 516 0 +-503 -504 513 0 +-503 -502 511 0 +-503 511 513 0 +-235 234 236 0 +-235 -234 -236 0 +-513 -502 -236 0 +-516 -510 -236 0 +510 502 236 0 +516 502 236 0 +510 513 236 0 +516 513 236 0 +-495 512 515 0 +-515 514 516 0 +-515 -514 -516 0 +-512 511 513 0 +-512 -511 -513 0 +-494 -501 -505 0 +-495 494 496 0 +-495 -494 -496 0 +-496 -501 -507 0 +-499 506 509 0 +-509 508 510 0 +-509 -508 -510 0 +-506 505 507 0 +-506 -505 -507 0 +527 520 498 0 +530 524 498 0 +-524 -520 -498 0 +-530 -520 -498 0 +-524 -527 -498 0 +-530 -527 -498 0 +-525 -526 -530 0 +-525 -524 -532 0 +-525 -530 -532 0 +-528 -529 -520 0 +-528 -527 -522 0 +-528 -520 -522 0 +-521 -522 -527 0 +-521 -520 -529 0 +-521 -527 -529 0 +-499 498 500 0 +-499 -498 -500 0 +529 522 500 0 +532 524 500 0 +-524 -522 -500 0 +-532 -522 -500 0 +-524 -529 -500 0 +-532 -529 -500 0 +-223 528 531 0 +-531 530 532 0 +-531 -530 -532 0 +-528 527 529 0 +-528 -527 -529 0 +222 517 523 0 +-223 222 224 0 +-223 -222 -224 0 +224 519 523 0 +772 774 761 0 +773 776 761 0 +-776 -774 -761 0 +-773 -774 -761 0 +-776 -772 -761 0 +-773 -772 -761 0 +770 775 777 0 +-1097 -1099 -771 0 +-1098 -1096 -771 0 +1096 1099 771 0 +1098 1099 771 0 +1096 1097 771 0 +1098 1097 771 0 +-1095 -1100 -1101 0 +-779 -781 -769 0 +-780 -783 -769 0 +783 781 769 0 +780 781 769 0 +783 779 769 0 +780 779 769 0 +-778 -782 -784 0 +-1027 1026 1028 0 +-1027 -1026 -1028 0 +-521 520 522 0 +-521 -520 -522 0 +-518 517 519 0 +-518 -517 -519 0 +-449 -442 -225 0 +-452 -446 -225 0 +446 442 225 0 +452 442 225 0 +446 449 225 0 +452 449 225 0 +-447 -448 454 0 +-447 -446 452 0 +-447 452 454 0 +-450 -451 444 0 +-450 -449 442 0 +-450 442 444 0 +-443 -444 451 0 +-443 -442 449 0 +-443 449 451 0 +-226 225 227 0 +-226 -225 -227 0 +-451 -444 -227 0 +-454 -446 -227 0 +446 444 227 0 +454 444 227 0 +446 451 227 0 +454 451 227 0 +-434 450 453 0 +-453 452 454 0 +-453 -452 -454 0 +-450 449 451 0 +-450 -449 -451 0 +-433 -439 -445 0 +-434 433 435 0 +-434 -433 -435 0 +-435 -441 -445 0 +431 428 426 0 +432 430 426 0 +-430 -428 -426 0 +-432 -428 -426 0 +-430 -431 -426 0 +-432 -431 -426 0 +424 427 429 0 +-437 440 443 0 +-443 442 444 0 +-443 -442 -444 0 +-440 439 441 0 +-440 -439 -441 0 +794 791 436 0 +797 801 436 0 +-801 -791 -436 0 +-797 -791 -436 0 +-801 -794 -436 0 +-797 -794 -436 0 +-798 -799 -801 0 +-798 -797 -803 0 +-798 -801 -803 0 +-802 -803 -797 0 +-802 -801 -799 0 +-802 -797 -799 0 +-792 -793 -794 0 +-792 -791 -796 0 +-792 -794 -796 0 +-437 436 438 0 +-437 -436 -438 0 +796 791 438 0 +799 803 438 0 +-803 -791 -438 0 +-799 -791 -438 0 +-803 -796 -438 0 +-799 -796 -438 0 +-786 795 798 0 +-798 797 799 0 +-798 -797 -799 0 +-795 794 796 0 +-795 -794 -796 0 +785 800 804 0 +-786 785 787 0 +-786 -785 -787 0 +787 800 806 0 +-882 881 883 0 +-882 -881 -883 0 +-879 878 880 0 +-879 -878 -880 0 +-805 804 806 0 +-805 -804 -806 0 +-802 801 803 0 +-802 -801 -803 0 +-1103 -31 -2020 0 +-1803 -1805 -233 0 +-1804 -1807 -233 0 +1807 1805 233 0 +1804 1805 233 0 +1807 1803 233 0 +1804 1803 233 0 +-1801 -1806 -1808 0 +-2011 -2010 -1982 0 +-2012 -2014 -1982 0 +2014 2010 1982 0 +2012 2010 1982 0 +2014 2011 1982 0 +2012 2011 1982 0 +-2009 -2013 -2015 0 +-1811 -1813 -1809 0 +-1812 -1815 -1809 0 +1815 1813 1809 0 +1812 1813 1809 0 +1815 1811 1809 0 +1812 1811 1809 0 +-1810 -1814 -1816 0 +1483 1703 1709 0 +-1484 1483 1485 0 +-1484 -1483 -1485 0 +1485 1705 1709 0 +1110 1107 955 0 +1111 1109 955 0 +-1109 -1107 -955 0 +-1111 -1107 -955 0 +-1109 -1110 -955 0 +-1111 -1110 -955 0 +1104 1106 1108 0 +1093 1090 1088 0 +1094 1092 1088 0 +-1092 -1090 -1088 0 +-1094 -1090 -1088 0 +-1092 -1093 -1088 0 +-1094 -1093 -1088 0 +1086 1089 1091 0 +-762 -764 -759 0 +-763 -766 -759 0 +766 764 759 0 +763 764 759 0 +766 762 759 0 +763 762 759 0 +-760 -765 -767 0 +156 153 151 0 +157 155 151 0 +-155 -153 -151 0 +-157 -153 -151 0 +-155 -156 -151 0 +-157 -156 -151 0 +149 152 154 0 +146 143 141 0 +147 145 141 0 +-145 -143 -141 0 +-147 -143 -141 0 +-145 -146 -141 0 +-147 -146 -141 0 +138 142 144 0 +259 261 229 0 +260 263 229 0 +-263 -261 -229 0 +-260 -261 -229 0 +-263 -259 -229 0 +-260 -259 -229 0 +257 262 264 0 +-1087 -9 -1852 0 +-1996 -1998 -1105 0 +-1997 -2000 -1105 0 +2000 1998 1105 0 +1997 1998 1105 0 +2000 1996 1105 0 +1997 1996 1105 0 +-1994 -1999 -2001 0 +2005 2003 1995 0 +2006 2004 1995 0 +-2004 -2003 -1995 0 +-2006 -2003 -1995 0 +-2004 -2005 -1995 0 +-2006 -2005 -1995 0 +2002 2007 2008 0 +-1990 -1988 -1987 0 +-1991 -1989 -1987 0 +1989 1988 1987 0 +1991 1988 1987 0 +1989 1990 1987 0 +1991 1990 1987 0 +-1983 -1985 -1986 0 +-1737 1736 1738 0 +-1737 -1736 -1738 0 +-1719 1718 1720 0 +-1719 -1718 -1720 0 +-1707 1706 1708 0 +-1707 -1706 -1708 0 +-1704 1703 1705 0 +-1704 -1703 -1705 0 +-1683 1682 1684 0 +-1683 -1682 -1684 0 +-1512 1511 1513 0 +-1512 -1511 -1513 0 +-1495 1494 1496 0 +-1495 -1494 -1496 0 +-1268 1267 1269 0 +-1268 -1267 -1269 0 +-1265 1264 1266 0 +-1265 -1264 -1266 0 +1080 1071 1067 0 +1083 1077 1067 0 +-1077 -1071 -1067 0 +-1083 -1071 -1067 0 +-1077 -1080 -1067 0 +-1083 -1080 -1067 0 +-1084 -1085 -1077 0 +-1084 -1083 -1079 0 +-1084 -1077 -1079 0 +-1078 -1079 -1083 0 +-1078 -1077 -1085 0 +-1078 -1083 -1085 0 +-1072 -1073 -1080 0 +-1072 -1071 -1082 0 +-1072 -1080 -1082 0 +-1068 1067 1069 0 +-1068 -1067 -1069 0 +1082 1071 1069 0 +1085 1079 1069 0 +-1079 -1071 -1069 0 +-1085 -1071 -1069 0 +-1079 -1082 -1069 0 +-1085 -1082 -1069 0 +-1064 1081 1084 0 +-1084 1083 1085 0 +-1084 -1083 -1085 0 +-1081 1080 1082 0 +-1081 -1080 -1082 0 +1063 1070 1074 0 +-1064 1063 1065 0 +-1064 -1063 -1065 0 +1065 1070 1076 0 +-1061 1075 1078 0 +-1078 1077 1079 0 +-1078 -1077 -1079 0 +-1075 1074 1076 0 +-1075 -1074 -1076 0 +-1061 1060 1062 0 +-1061 -1060 -1062 0 +1054 1045 1041 0 +1057 1051 1041 0 +-1051 -1045 -1041 0 +-1057 -1045 -1041 0 +-1051 -1054 -1041 0 +-1057 -1054 -1041 0 +-1058 -1059 -1051 0 +-1058 -1057 -1053 0 +-1058 -1051 -1053 0 +-1052 -1053 -1057 0 +-1052 -1051 -1059 0 +-1052 -1057 -1059 0 +-1046 -1047 -1054 0 +-1046 -1045 -1056 0 +-1046 -1054 -1056 0 +-1042 1041 1043 0 +-1042 -1041 -1043 0 +1056 1045 1043 0 +1059 1053 1043 0 +-1053 -1045 -1043 0 +-1059 -1045 -1043 0 +-1053 -1056 -1043 0 +-1059 -1056 -1043 0 +-1038 1055 1058 0 +-1058 1057 1059 0 +-1058 -1057 -1059 0 +-1055 1054 1056 0 +-1055 -1054 -1056 0 +1037 1044 1048 0 +-1038 1037 1039 0 +-1038 -1037 -1039 0 +1039 1044 1050 0 +-1008 1049 1052 0 +-1052 1051 1053 0 +-1052 -1051 -1053 0 +-1049 1048 1050 0 +-1049 -1048 -1050 0 +-1020 -1011 -1007 0 +-1023 -1017 -1007 0 +1017 1011 1007 0 +1023 1011 1007 0 +1017 1020 1007 0 +1023 1020 1007 0 +-1024 -1025 1019 0 +-1024 -1023 1017 0 +-1024 1017 1019 0 +-1018 -1019 1025 0 +-1018 -1017 1023 0 +-1018 1023 1025 0 +-1012 -1013 1022 0 +-1012 -1011 1020 0 +-1012 1020 1022 0 +-1008 1007 1009 0 +-1008 -1007 -1009 0 +-1022 -1011 -1009 0 +-1025 -1019 -1009 0 +1019 1011 1009 0 +1025 1011 1009 0 +1019 1022 1009 0 +1025 1022 1009 0 +-1002 1021 1024 0 +-1024 1023 1025 0 +-1024 -1023 -1025 0 +-1021 1020 1022 0 +-1021 -1020 -1022 0 +-1001 -1010 -1014 0 +-1002 1001 1003 0 +-1002 -1001 -1003 0 +-1003 -1010 -1016 0 +-1005 1015 1018 0 +-1018 1017 1019 0 +-1018 -1017 -1019 0 +-1015 1014 1016 0 +-1015 -1014 -1016 0 +-1005 1004 1006 0 +-1005 -1004 -1006 0 +720 722 718 0 +721 724 718 0 +-724 -722 -718 0 +-721 -722 -718 0 +-724 -720 -718 0 +-721 -720 -718 0 +719 723 725 0 +-716 -713 -711 0 +-717 -715 -711 0 +715 713 711 0 +717 713 711 0 +715 716 711 0 +717 716 711 0 +-710 -712 -714 0 +548 547 545 0 +549 555 545 0 +-555 -547 -545 0 +-549 -547 -545 0 +-555 -548 -545 0 +-549 -548 -545 0 +546 554 556 0 +-1040 -7 -2017 0 +-1951 -1948 -1066 0 +-1952 -1950 -1066 0 +1950 1948 1066 0 +1952 1948 1066 0 +1950 1951 1066 0 +1952 1951 1066 0 +-1945 -1947 -1949 0 +-1377 -1379 -1337 0 +-1378 -1381 -1337 0 +1381 1379 1337 0 +1378 1379 1337 0 +1381 1377 1337 0 +1378 1377 1337 0 +-1376 -1380 -1382 0 +1955 1957 1946 0 +1956 1959 1946 0 +-1959 -1957 -1946 0 +-1956 -1957 -1946 0 +-1959 -1955 -1946 0 +-1956 -1955 -1946 0 +1953 1958 1960 0 +-709 -411 -702 0 +-675 -681 -680 0 +-675 -672 -680 0 +-675 -682 -680 0 +-492 -489 -266 0 +-493 -491 -266 0 +491 489 266 0 +493 489 266 0 +491 492 266 0 +493 492 266 0 +-486 -488 -490 0 +1345 1342 487 0 +1346 1344 487 0 +-1344 -1342 -487 0 +-1346 -1342 -487 0 +-1344 -1345 -487 0 +-1346 -1345 -487 0 +1338 1341 1343 0 +-1542 -1540 -1340 0 +-1543 -1541 -1340 0 +1541 1540 1340 0 +1543 1540 1340 0 +1541 1542 1340 0 +1543 1542 1340 0 +-1536 -1539 -1538 0 +-1547 -1549 -1544 0 +-1548 -1551 -1544 0 +1551 1549 1544 0 +1548 1549 1544 0 +1551 1547 1544 0 +1548 1547 1544 0 +-1545 -1550 -1552 0 +1614 1612 1546 0 +1615 1613 1546 0 +-1613 -1612 -1546 0 +-1615 -1612 -1546 0 +-1613 -1614 -1546 0 +-1615 -1614 -1546 0 +1611 1616 1617 0 +1420 1418 1416 0 +1421 1419 1416 0 +-1419 -1418 -1416 0 +-1421 -1418 -1416 0 +-1419 -1420 -1416 0 +-1421 -1420 -1416 0 +1417 1422 1423 0 +-1777 -1779 -1766 0 +-1778 -1781 -1766 0 +1781 1779 1766 0 +1778 1779 1766 0 +1781 1777 1766 0 +1778 1777 1766 0 +-1775 -1780 -1782 0 +-1978 -1975 -1961 0 +-1979 -1977 -1961 0 +1977 1975 1961 0 +1979 1975 1961 0 +1977 1978 1961 0 +1979 1978 1961 0 +-1974 -1980 -1981 0 +1829 1827 1774 0 +1830 1828 1774 0 +-1828 -1827 -1774 0 +-1830 -1827 -1774 0 +-1828 -1829 -1774 0 +-1830 -1829 -1774 0 +1826 1831 1832 0 +-1339 -4 -1853 0 +-483 -480 -478 0 +-484 -482 -478 0 +482 480 478 0 +484 480 478 0 +482 483 478 0 +484 483 478 0 +-477 -479 -481 0 +-217 -216 -197 0 +-218 -220 -197 0 +220 216 197 0 +218 216 197 0 +220 217 197 0 +218 217 197 0 +-214 -219 -221 0 +187 185 183 0 +188 186 183 0 +-186 -185 -183 0 +-188 -185 -183 0 +-186 -187 -183 0 +-188 -187 -183 0 +180 184 182 0 +1323 1320 398 0 +1324 1322 398 0 +-1322 -1320 -398 0 +-1324 -1320 -398 0 +-1322 -1323 -398 0 +-1324 -1323 -398 0 +1317 1319 1321 0 +1525 1522 1316 0 +1526 1524 1316 0 +-1524 -1522 -1316 0 +-1526 -1522 -1316 0 +-1524 -1525 -1316 0 +-1526 -1525 -1316 0 +1518 1521 1523 0 +-1530 -1532 -1520 0 +-1531 -1534 -1520 0 +1534 1532 1520 0 +1531 1532 1520 0 +1534 1530 1520 0 +1531 1530 1520 0 +-1528 -1533 -1535 0 +1768 1770 1527 0 +1769 1772 1527 0 +-1772 -1770 -1527 0 +-1769 -1770 -1527 0 +-1772 -1768 -1527 0 +-1769 -1768 -1527 0 +1767 1771 1773 0 +1644 1642 1554 0 +1645 1643 1554 0 +-1643 -1642 -1554 0 +-1645 -1642 -1554 0 +-1643 -1644 -1554 0 +-1645 -1644 -1554 0 +1641 1646 1647 0 +-1652 -1650 -1648 0 +-1653 -1651 -1648 0 +1651 1650 1648 0 +1653 1650 1648 0 +1651 1652 1648 0 +1653 1652 1648 0 +-1649 -1654 -1655 0 +-1519 -2 -1854 0 +-1328 -1330 -1318 0 +-1329 -1332 -1318 0 +1332 1330 1318 0 +1329 1330 1318 0 +1332 1328 1318 0 +1329 1328 1318 0 +-1326 -1331 -1333 0 +-1410 -1412 -1334 0 +-1411 -1409 -1334 0 +1409 1412 1334 0 +1411 1412 1334 0 +1409 1410 1334 0 +1411 1410 1334 0 +-1408 -1413 -1414 0 +-535 -537 -533 0 +-536 -539 -533 0 +539 537 533 0 +536 537 533 0 +539 535 533 0 +536 535 533 0 +-534 -538 -540 0 +-1745 -1912 -389 0 +-1746 -1914 -389 0 +1914 1912 389 0 +1746 1912 389 0 +1914 1745 389 0 +1746 1745 389 0 +-1743 -1913 -1915 0 +1919 1921 1744 0 +1920 1923 1744 0 +-1923 -1921 -1744 0 +-1920 -1921 -1744 0 +-1923 -1919 -1744 0 +-1920 -1919 -1744 0 +1917 1922 1924 0 +1929 1931 1925 0 +1930 1933 1925 0 +-1933 -1931 -1925 0 +-1930 -1931 -1925 0 +-1933 -1929 -1925 0 +-1930 -1929 -1925 0 +1927 1932 1934 0 +1787 1789 1783 0 +1788 1791 1783 0 +-1791 -1789 -1783 0 +-1788 -1789 -1783 0 +-1791 -1787 -1783 0 +-1788 -1787 -1783 0 +1785 1790 1792 0 +1967 1965 1963 0 +1968 1966 1963 0 +-1966 -1965 -1963 0 +-1968 -1965 -1963 0 +-1966 -1967 -1963 0 +-1968 -1967 -1963 0 +1964 1969 1970 0 +-1844 -1846 -1784 0 +-1845 -1843 -1784 0 +1843 1846 1784 0 +1845 1846 1784 0 +1843 1844 1784 0 +1845 1844 1784 0 +-1842 -1848 -1849 0 +-1916 -29 -2018 0 +-1750 -1752 -1747 0 +-1751 -1754 -1747 0 +1754 1752 1747 0 +1751 1752 1747 0 +1754 1750 1747 0 +1751 1750 1747 0 +-1748 -1753 -1755 0 +-1560 -1558 -1555 0 +-1561 -1559 -1555 0 +1559 1558 1555 0 +1561 1558 1555 0 +1559 1560 1555 0 +1561 1560 1555 0 +-1556 -1562 -1563 0 +-734 -732 -731 0 +-735 -733 -731 0 +733 732 731 0 +735 732 731 0 +733 734 731 0 +735 734 731 0 +-727 -728 -730 0 +-1354 -1351 -412 0 +-1355 -1353 -412 0 +1353 1351 412 0 +1355 1351 412 0 +1353 1354 412 0 +1355 1354 412 0 +-1347 -1350 -1352 0 +-1760 -1762 -1756 0 +-1761 -1764 -1756 0 +1764 1762 1756 0 +1761 1762 1756 0 +1764 1760 1756 0 +1761 1760 1756 0 +-1758 -1763 -1765 0 +1942 1940 1759 0 +1943 1941 1759 0 +-1941 -1940 -1759 0 +-1943 -1940 -1759 0 +-1941 -1942 -1759 0 +-1943 -1942 -1759 0 +1936 1937 1939 0 +-1944 -41 -2043 0 +1359 1361 1348 0 +1360 1363 1348 0 +-1363 -1361 -1348 0 +-1360 -1361 -1348 0 +-1363 -1359 -1348 0 +-1360 -1359 -1348 0 +1357 1362 1364 0 +1369 1367 1365 0 +1370 1368 1365 0 +-1368 -1367 -1365 0 +-1370 -1367 -1365 0 +-1368 -1369 -1365 0 +-1370 -1369 -1365 0 +1366 1371 1372 0 +-1820 -1822 -1356 0 +-1821 -1819 -1356 0 +1819 1822 1356 0 +1821 1822 1356 0 +1819 1820 1356 0 +1821 1820 1356 0 +-1817 -1823 -1824 0 +-672 -673 -674 0 +397 419 411 0 +397 413 411 0 +397 415 411 0 +413 416 417 0 +1595 1592 1260 0 +1596 1594 1260 0 +-1594 -1592 -1260 0 +-1596 -1592 -1260 0 +-1594 -1595 -1260 0 +-1596 -1595 -1260 0 +1589 1591 1593 0 +1795 1972 1588 0 +1796 1798 1588 0 +-1798 -1972 -1588 0 +-1796 -1972 -1588 0 +-1798 -1795 -1588 0 +-1796 -1795 -1588 0 +1794 1797 1799 0 +-1035 -1033 -1032 0 +-1036 -1034 -1032 0 +1034 1033 1032 0 +1036 1033 1032 0 +1034 1035 1032 0 +1036 1035 1032 0 +-1029 -1030 -1031 0 +-1793 -36 -2019 0 +-1599 -1601 -1590 0 +-1600 -1603 -1590 0 +1603 1601 1590 0 +1600 1601 1590 0 +1603 1599 1590 0 +1600 1599 1590 0 +-1598 -1602 -1604 0 +-1429 -1426 -1375 0 +-1430 -1428 -1375 0 +1428 1426 1375 0 +1430 1426 1375 0 +1428 1429 1375 0 +1430 1429 1375 0 +-1424 -1431 -1432 0 +1837 1839 1597 0 +1838 1836 1597 0 +-1836 -1839 -1597 0 +-1838 -1839 -1597 0 +-1836 -1837 -1597 0 +-1838 -1837 -1597 0 +1835 1840 1841 0 +2078 137 -135 0 +2079 -137 135 0 +-2077 2079 2078 0 +1120 1126 135 0 +1123 1130 135 0 +-1130 -1126 -135 0 +-1123 -1126 -135 0 +-1130 -1120 -135 0 +-1123 -1120 -135 0 +-1124 -1125 -1130 0 +-1124 -1123 -1132 0 +-1124 -1130 -1132 0 +-1131 -1132 -1123 0 +-1131 -1130 -1125 0 +-1131 -1123 -1125 0 +-1127 -1128 -1120 0 +-1127 -1126 -1122 0 +-1127 -1120 -1122 0 +-136 135 137 0 +-136 -135 -137 0 +1122 1126 137 0 +1125 1132 137 0 +-1132 -1126 -137 0 +-1125 -1126 -137 0 +-1132 -1122 -137 0 +-1125 -1122 -137 0 +-1115 1121 1124 0 +-1124 1123 1125 0 +-1124 -1123 -1125 0 +-1121 1120 1122 0 +-1121 -1120 -1122 0 +1114 1129 1133 0 +-1115 1114 1116 0 +-1115 -1114 -1116 0 +1116 1129 1135 0 +-1118 1131 1134 0 +-1134 1133 1135 0 +-1134 -1133 -1135 0 +-1131 1130 1132 0 +-1131 -1130 -1132 0 +-1117 -1139 -1141 0 +-1118 1117 1119 0 +-1118 -1117 -1119 0 +-1119 -1139 -1143 0 +-1137 1142 1145 0 +-1145 1144 1146 0 +-1145 -1144 -1146 0 +-1142 1141 1143 0 +-1142 -1141 -1143 0 +-1137 1136 1138 0 +-1137 -1136 -1138 0 +2081 134 -132 0 +2082 -134 132 0 +-2080 2082 2081 0 +743 749 132 0 +746 753 132 0 +-753 -749 -132 0 +-746 -749 -132 0 +-753 -743 -132 0 +-746 -743 -132 0 +-747 -748 -753 0 +-747 -746 -755 0 +-747 -753 -755 0 +-754 -755 -746 0 +-754 -753 -748 0 +-754 -746 -748 0 +-750 -751 -743 0 +-750 -749 -745 0 +-750 -743 -745 0 +-133 132 134 0 +-133 -132 -134 0 +745 749 134 0 +748 755 134 0 +-755 -749 -134 0 +-748 -749 -134 0 +-755 -745 -134 0 +-748 -745 -134 0 +-738 744 747 0 +-747 746 748 0 +-747 -746 -748 0 +-744 743 745 0 +-744 -743 -745 0 +737 752 756 0 +-738 737 739 0 +-738 -737 -739 0 +739 752 758 0 +-741 754 757 0 +-757 756 758 0 +-757 -756 -758 0 +-754 753 755 0 +-754 -753 -755 0 +-740 -1140 -1144 0 +-741 740 742 0 +-741 -740 -742 0 +-742 -1140 -1146 0 +2084 131 -129 0 +2085 -131 129 0 +-2083 2085 2084 0 +-130 129 131 0 +-130 -129 -131 0 +-1176 -1167 -1164 0 +-1179 -1173 -1164 0 +1173 1167 1164 0 +1179 1167 1164 0 +1173 1176 1164 0 +1179 1176 1164 0 +-1180 -1181 1175 0 +-1180 -1179 1173 0 +-1180 1173 1175 0 +-1174 -1175 1181 0 +-1174 -1173 1179 0 +-1174 1179 1181 0 +-1168 -1169 1178 0 +-1168 -1167 1176 0 +-1168 1176 1178 0 +-1165 1164 1166 0 +-1165 -1164 -1166 0 +-1178 -1167 -1166 0 +-1181 -1175 -1166 0 +1175 1167 1166 0 +1181 1167 1166 0 +1175 1178 1166 0 +1181 1178 1166 0 +-1161 1177 1180 0 +-1180 1179 1181 0 +-1180 -1179 -1181 0 +-1177 1176 1178 0 +-1177 -1176 -1178 0 +-1160 -1163 -1170 0 +-1161 1160 1162 0 +-1161 -1160 -1162 0 +-1162 -1163 -1172 0 +-1154 1171 1174 0 +-1174 1173 1175 0 +-1174 -1173 -1175 0 +-1171 1170 1172 0 +-1171 -1170 -1172 0 +1153 1156 1157 0 +-1154 1153 1155 0 +-1154 -1153 -1155 0 +1155 1156 1159 0 +2087 110 -108 0 +2088 -110 108 0 +-2086 2088 2087 0 +167 164 108 0 +170 174 108 0 +-174 -164 -108 0 +-170 -164 -108 0 +-174 -167 -108 0 +-170 -167 -108 0 +-171 -172 -174 0 +-171 -170 -176 0 +-171 -174 -176 0 +-175 -176 -170 0 +-175 -174 -172 0 +-175 -170 -172 0 +-165 -166 -167 0 +-165 -164 -169 0 +-165 -167 -169 0 +-109 108 110 0 +-109 -108 -110 0 +169 164 110 0 +172 176 110 0 +-176 -164 -110 0 +-172 -164 -110 0 +-176 -169 -110 0 +-172 -169 -110 0 +-159 168 171 0 +-171 170 172 0 +-171 -170 -172 0 +-168 167 169 0 +-168 -167 -169 0 +158 173 177 0 +-159 158 160 0 +-159 -158 -160 0 +160 173 179 0 +-162 175 178 0 +-178 177 179 0 +-178 -177 -179 0 +-175 174 176 0 +-175 -174 -176 0 +-161 -407 -297 0 +-162 161 163 0 +-162 -161 -163 0 +-163 -407 -299 0 +-369 368 370 0 +-369 -368 -370 0 +-301 300 302 0 +-301 -300 -302 0 +-298 297 299 0 +-298 -297 -299 0 +-294 293 295 0 +-294 -293 -295 0 +-372 644 647 0 +-647 646 648 0 +-647 -646 -648 0 +-644 643 645 0 +-644 -643 -645 0 +-1481 -1482 1477 0 +-1481 -1480 1475 0 +-1481 1475 1477 0 +-1476 -1477 1482 0 +-1476 -1475 1480 0 +-1476 1480 1482 0 +-372 371 373 0 +-372 -371 -373 0 +-1515 1514 1516 0 +-1515 -1514 -1516 0 +-1508 1507 1509 0 +-1508 -1507 -1509 0 +-1481 1480 1482 0 +-1481 -1480 -1482 0 +-1313 1312 1314 0 +-1313 -1312 -1314 0 +-1310 1309 1311 0 +-1310 -1309 -1311 0 +-999 998 1000 0 +-999 -998 -1000 0 +1475 1706 1710 0 +-1476 1475 1477 0 +-1476 -1475 -1477 0 +1477 1708 1710 0 +2090 107 -105 0 +2091 -107 105 0 +-2089 2091 2090 0 +286 277 105 0 +289 283 105 0 +-283 -277 -105 0 +-289 -277 -105 0 +-283 -286 -105 0 +-289 -286 -105 0 +-290 -291 -283 0 +-290 -289 -285 0 +-290 -283 -285 0 +-284 -285 -289 0 +-284 -283 -291 0 +-284 -289 -291 0 +-278 -279 -286 0 +-278 -277 -288 0 +-278 -286 -288 0 +-106 105 107 0 +-106 -105 -107 0 +288 277 107 0 +291 285 107 0 +-285 -277 -107 0 +-291 -277 -107 0 +-285 -288 -107 0 +-291 -288 -107 0 +-271 287 290 0 +-290 289 291 0 +-290 -289 -291 0 +-287 286 288 0 +-287 -286 -288 0 +270 276 280 0 +-271 270 272 0 +-271 -270 -272 0 +272 276 282 0 +-274 281 284 0 +-284 283 285 0 +-284 -283 -285 0 +-281 280 282 0 +-281 -280 -282 0 +-273 -306 -300 0 +-274 273 275 0 +-274 -273 -275 0 +-275 -306 -302 0 +2093 113 -111 0 +2094 -113 111 0 +-2092 2094 2093 0 +383 374 111 0 +386 380 111 0 +-380 -374 -111 0 +-386 -374 -111 0 +-380 -383 -111 0 +-386 -383 -111 0 +-387 -388 -380 0 +-387 -386 -382 0 +-387 -380 -382 0 +-381 -382 -386 0 +-381 -380 -388 0 +-381 -386 -388 0 +-375 -376 -383 0 +-375 -374 -385 0 +-375 -383 -385 0 +-112 111 113 0 +-112 -111 -113 0 +385 374 113 0 +388 382 113 0 +-382 -374 -113 0 +-388 -374 -113 0 +-382 -385 -113 0 +-388 -385 -113 0 +-360 384 387 0 +-387 386 388 0 +-387 -386 -388 0 +-384 383 385 0 +-384 -383 -385 0 +359 365 377 0 +-360 359 361 0 +-360 -359 -361 0 +361 365 379 0 +-363 378 381 0 +-381 380 382 0 +-381 -380 -382 0 +-378 377 379 0 +-378 -377 -379 0 +-362 -367 -368 0 +-363 362 364 0 +-363 -362 -364 0 +-364 -367 -370 0 +2096 104 -102 0 +2097 -104 102 0 +-2095 2097 2096 0 +-103 102 104 0 +-103 -102 -104 0 +-629 -626 -617 0 +-632 -636 -617 0 +636 626 617 0 +632 626 617 0 +636 629 617 0 +632 629 617 0 +-633 -634 638 0 +-633 -632 636 0 +-633 636 638 0 +-637 -638 634 0 +-637 -636 632 0 +-637 632 634 0 +-627 -628 631 0 +-627 -626 629 0 +-627 629 631 0 +-618 617 619 0 +-618 -617 -619 0 +-631 -626 -619 0 +-634 -638 -619 0 +638 626 619 0 +634 626 619 0 +638 631 619 0 +634 631 619 0 +-621 630 633 0 +-633 632 634 0 +-633 -632 -634 0 +-630 629 631 0 +-630 -629 -631 0 +-620 -635 -639 0 +-621 620 622 0 +-621 -620 -622 0 +-622 -635 -641 0 +-624 637 640 0 +-640 639 641 0 +-640 -639 -641 0 +-637 636 638 0 +-637 -636 -638 0 +623 642 646 0 +-624 623 625 0 +-624 -623 -625 0 +625 642 648 0 +2099 116 -114 0 +2100 -116 114 0 +-2098 2100 2099 0 +-115 114 116 0 +-115 -114 -116 0 +-346 -343 -334 0 +-349 -353 -334 0 +353 343 334 0 +349 343 334 0 +353 346 334 0 +349 346 334 0 +-350 -351 355 0 +-350 -349 353 0 +-350 353 355 0 +-354 -355 351 0 +-354 -353 349 0 +-354 349 351 0 +-344 -345 348 0 +-344 -343 346 0 +-344 346 348 0 +-335 334 336 0 +-335 -334 -336 0 +-348 -343 -336 0 +-351 -355 -336 0 +355 343 336 0 +351 343 336 0 +355 348 336 0 +351 348 336 0 +-338 347 350 0 +-350 349 351 0 +-350 -349 -351 0 +-347 346 348 0 +-347 -346 -348 0 +-337 -352 -356 0 +-338 337 339 0 +-338 -337 -339 0 +-339 -352 -358 0 +-341 354 357 0 +-357 356 358 0 +-357 -356 -358 0 +-354 353 355 0 +-354 -353 -355 0 +340 616 900 0 +-341 340 342 0 +-341 -340 -342 0 +342 616 902 0 +-614 901 904 0 +-904 903 905 0 +-904 -903 -905 0 +-901 900 902 0 +-901 -900 -902 0 +-1281 -1282 1276 0 +-1281 -1280 1274 0 +-1281 1274 1276 0 +-1275 -1276 1282 0 +-1275 -1274 1280 0 +-1275 1280 1282 0 +-614 613 615 0 +-614 -613 -615 0 +1274 1298 1294 0 +-1275 1274 1276 0 +-1275 -1274 -1276 0 +1276 1300 1294 0 +-1904 1903 1905 0 +-1904 -1903 -1905 0 +-1730 1729 1731 0 +-1730 -1729 -1731 0 +-1302 1301 1303 0 +-1302 -1301 -1303 0 +-1299 1298 1300 0 +-1299 -1298 -1300 0 +-1292 1291 1293 0 +-1292 -1291 -1293 0 +2102 125 -123 0 +2103 -125 123 0 +-2101 2103 2102 0 +464 461 123 0 +467 471 123 0 +-471 -461 -123 0 +-467 -461 -123 0 +-471 -464 -123 0 +-467 -464 -123 0 +-468 -469 -471 0 +-468 -467 -473 0 +-468 -471 -473 0 +-472 -473 -467 0 +-472 -471 -469 0 +-472 -467 -469 0 +-462 -463 -464 0 +-462 -461 -466 0 +-462 -464 -466 0 +-124 123 125 0 +-124 -123 -125 0 +466 461 125 0 +469 473 125 0 +-473 -461 -125 0 +-469 -461 -125 0 +-473 -466 -125 0 +-469 -466 -125 0 +-456 465 468 0 +-468 467 469 0 +-468 -467 -469 0 +-465 464 466 0 +-465 -464 -466 0 +455 470 474 0 +-456 455 457 0 +-456 -455 -457 0 +457 470 476 0 +-459 472 475 0 +-475 474 476 0 +-475 -474 -476 0 +-472 471 473 0 +-472 -471 -473 0 +-458 -553 -561 0 +-459 458 460 0 +-459 -458 -460 0 +-460 -553 -563 0 +-898 897 899 0 +-898 -897 -899 0 +-565 564 566 0 +-565 -564 -566 0 +-562 561 563 0 +-562 -561 -563 0 +-551 550 552 0 +-551 -550 -552 0 +2105 119 -117 0 +2106 -119 117 0 +-2104 2106 2105 0 +581 572 117 0 +584 578 117 0 +-578 -572 -117 0 +-584 -572 -117 0 +-578 -581 -117 0 +-584 -581 -117 0 +-585 -586 -578 0 +-585 -584 -580 0 +-585 -578 -580 0 +-579 -580 -584 0 +-579 -578 -586 0 +-579 -584 -586 0 +-573 -574 -581 0 +-573 -572 -583 0 +-573 -581 -583 0 +-118 117 119 0 +-118 -117 -119 0 +583 572 119 0 +586 580 119 0 +-580 -572 -119 0 +-586 -572 -119 0 +-580 -583 -119 0 +-586 -583 -119 0 +-568 582 585 0 +-585 584 586 0 +-585 -584 -586 0 +-582 581 583 0 +-582 -581 -583 0 +567 571 575 0 +-568 567 569 0 +-568 -567 -569 0 +569 571 577 0 +-558 576 579 0 +-579 578 580 0 +-579 -578 -580 0 +-576 575 577 0 +-576 -575 -577 0 +-557 -560 -564 0 +-558 557 559 0 +-558 -557 -559 0 +-559 -560 -566 0 +2108 92 -90 0 +2109 -92 90 0 +-2107 2109 2108 0 +-91 90 92 0 +-91 -90 -92 0 +-856 -847 -844 0 +-859 -853 -844 0 +853 847 844 0 +859 847 844 0 +853 856 844 0 +859 856 844 0 +-860 -861 855 0 +-860 -859 853 0 +-860 853 855 0 +-854 -855 861 0 +-854 -853 859 0 +-854 859 861 0 +-848 -849 858 0 +-848 -847 856 0 +-848 856 858 0 +-845 844 846 0 +-845 -844 -846 0 +-858 -847 -846 0 +-861 -855 -846 0 +855 847 846 0 +861 847 846 0 +855 858 846 0 +861 858 846 0 +-838 857 860 0 +-860 859 861 0 +-860 -859 -861 0 +-857 856 858 0 +-857 -856 -858 0 +-837 -843 -850 0 +-838 837 839 0 +-838 -837 -839 0 +-839 -843 -852 0 +-841 851 854 0 +-854 853 855 0 +-854 -853 -855 0 +-851 850 852 0 +-851 -850 -852 0 +840 865 866 0 +-841 840 842 0 +-841 -840 -842 0 +842 865 868 0 +-863 867 870 0 +-870 869 871 0 +-870 -869 -871 0 +-867 866 868 0 +-867 -866 -868 0 +-1313 -1314 1297 0 +-1313 -1312 1295 0 +-1313 1295 1297 0 +-1296 -1297 1314 0 +-1296 -1295 1312 0 +-1296 1312 1314 0 +-863 862 864 0 +-863 -862 -864 0 +1295 1301 1304 0 +-1296 1295 1297 0 +-1296 -1295 -1297 0 +1297 1303 1304 0 +2111 101 -99 0 +2112 -101 99 0 +-2110 2112 2111 0 +208 199 99 0 +211 205 99 0 +-205 -199 -99 0 +-211 -199 -99 0 +-205 -208 -99 0 +-211 -208 -99 0 +-212 -213 -205 0 +-212 -211 -207 0 +-212 -205 -207 0 +-206 -207 -211 0 +-206 -205 -213 0 +-206 -211 -213 0 +-200 -201 -208 0 +-200 -199 -210 0 +-200 -208 -210 0 +-100 99 101 0 +-100 -99 -101 0 +210 199 101 0 +213 207 101 0 +-207 -199 -101 0 +-213 -199 -101 0 +-207 -210 -101 0 +-213 -210 -101 0 +-190 209 212 0 +-212 211 213 0 +-212 -211 -213 0 +-209 208 210 0 +-209 -208 -210 0 +189 195 202 0 +-190 189 191 0 +-190 -189 -191 0 +191 195 204 0 +-193 203 206 0 +-206 205 207 0 +-206 -205 -207 0 +-203 202 204 0 +-203 -202 -204 0 +-192 -366 -308 0 +-193 192 194 0 +-193 -192 -194 0 +-194 -366 -310 0 +-611 610 612 0 +-611 -610 -612 0 +-312 311 313 0 +-312 -311 -313 0 +-309 308 310 0 +-309 -308 -310 0 +-268 267 269 0 +-268 -267 -269 0 +2114 95 -93 0 +2115 -95 93 0 +-2113 2115 2114 0 +328 319 93 0 +331 325 93 0 +-325 -319 -93 0 +-331 -319 -93 0 +-325 -328 -93 0 +-331 -328 -93 0 +-332 -333 -325 0 +-332 -331 -327 0 +-332 -325 -327 0 +-326 -327 -331 0 +-326 -325 -333 0 +-326 -331 -333 0 +-320 -321 -328 0 +-320 -319 -330 0 +-320 -328 -330 0 +-94 93 95 0 +-94 -93 -95 0 +330 319 95 0 +333 327 95 0 +-327 -319 -95 0 +-333 -319 -95 0 +-327 -330 -95 0 +-333 -330 -95 0 +-315 329 332 0 +-332 331 333 0 +-332 -331 -333 0 +-329 328 330 0 +-329 -328 -330 0 +314 318 322 0 +-315 314 316 0 +-315 -314 -316 0 +316 318 324 0 +-304 323 326 0 +-326 325 327 0 +-326 -325 -327 0 +-323 322 324 0 +-323 -322 -324 0 +-303 -307 -311 0 +-304 303 305 0 +-304 -303 -305 0 +-305 -307 -313 0 +2117 98 -96 0 +2118 -98 96 0 +-2116 2118 2117 0 +603 594 96 0 +606 600 96 0 +-600 -594 -96 0 +-606 -594 -96 0 +-600 -603 -96 0 +-606 -603 -96 0 +-607 -608 -600 0 +-607 -606 -602 0 +-607 -600 -602 0 +-601 -602 -606 0 +-601 -600 -608 0 +-601 -606 -608 0 +-595 -596 -603 0 +-595 -594 -605 0 +-595 -603 -605 0 +-97 96 98 0 +-97 -96 -98 0 +605 594 98 0 +608 602 98 0 +-602 -594 -98 0 +-608 -594 -98 0 +-602 -605 -98 0 +-608 -605 -98 0 +-588 604 607 0 +-607 606 608 0 +-607 -606 -608 0 +-604 603 605 0 +-604 -603 -605 0 +587 593 597 0 +-588 587 589 0 +-588 -587 -589 0 +589 593 599 0 +-591 598 601 0 +-601 600 602 0 +-601 -600 -602 0 +-598 597 599 0 +-598 -597 -599 0 +-590 -609 -610 0 +-591 590 592 0 +-591 -590 -592 0 +-592 -609 -612 0 +2120 68 -66 0 +2121 -68 66 0 +-2119 2121 2120 0 +1254 1245 66 0 +1257 1251 66 0 +-1251 -1245 -66 0 +-1257 -1245 -66 0 +-1251 -1254 -66 0 +-1257 -1254 -66 0 +-1258 -1259 -1251 0 +-1258 -1257 -1253 0 +-1258 -1251 -1253 0 +-1252 -1253 -1257 0 +-1252 -1251 -1259 0 +-1252 -1257 -1259 0 +-1246 -1247 -1254 0 +-1246 -1245 -1256 0 +-1246 -1254 -1256 0 +-67 66 68 0 +-67 -66 -68 0 +1256 1245 68 0 +1259 1253 68 0 +-1253 -1245 -68 0 +-1259 -1245 -68 0 +-1253 -1256 -68 0 +-1259 -1256 -68 0 +-1241 1255 1258 0 +-1258 1257 1259 0 +-1258 -1257 -1259 0 +-1255 1254 1256 0 +-1255 -1254 -1256 0 +1240 1244 1248 0 +-1241 1240 1242 0 +-1241 -1240 -1242 0 +1242 1244 1250 0 +-930 1249 1252 0 +-1252 1251 1253 0 +-1252 -1251 -1253 0 +-1249 1248 1250 0 +-1249 -1248 -1250 0 +-929 -1277 -956 0 +-957 -958 1279 0 +-957 -956 1277 0 +-957 1277 1279 0 +-1278 -1279 958 0 +-1278 -1277 956 0 +-1278 956 958 0 +-930 929 931 0 +-930 -929 -931 0 +-931 -1279 -958 0 +-1262 1261 1263 0 +-1262 -1261 -1263 0 +-1229 1228 1230 0 +-1229 -1228 -1230 0 +-960 959 961 0 +-960 -959 -961 0 +-957 956 958 0 +-957 -956 -958 0 +-684 683 685 0 +-684 -683 -685 0 +-394 -395 -396 0 +-1712 1711 1713 0 +-1712 -1711 -1713 0 +-707 706 708 0 +-707 -706 -708 0 +-699 698 700 0 +-699 -698 -700 0 +-696 695 697 0 +-696 -695 -697 0 +-1726 -1727 -1739 0 +-1726 -1725 -1741 0 +-1726 -1739 -1741 0 +-1726 -1727 -1714 0 +-1726 -1725 -1716 0 +-1726 -1714 -1716 0 +-1740 -1741 -1725 0 +-1740 -1739 -1727 0 +-1740 -1725 -1727 0 +-1740 -1741 -1714 0 +-1740 -1739 -1716 0 +-1740 -1714 -1716 0 +-1715 -1716 -1725 0 +-1715 -1714 -1727 0 +-1715 -1725 -1727 0 +-1715 -1716 -1739 0 +-1715 -1714 -1741 0 +-1715 -1739 -1741 0 +-687 686 688 0 +-687 -686 -688 0 +-1733 -1734 -1729 0 +-1733 -1732 -1731 0 +-1733 -1729 -1731 0 +-1730 -1731 -1732 0 +-1730 -1729 -1734 0 +-1730 -1732 -1734 0 +-1726 1725 1727 0 +-1726 -1725 -1727 0 +-1740 1739 1741 0 +-1740 -1739 -1741 0 +1501 1504 1498 0 +1501 1491 1498 0 +1501 1507 1498 0 +-1508 -1509 1493 0 +-1508 -1507 1491 0 +-1508 1491 1493 0 +-1492 -1493 1509 0 +-1492 -1491 1507 0 +-1492 1507 1509 0 +-1505 -1506 1509 0 +-1505 -1504 1507 0 +-1505 1507 1509 0 +-1505 -1506 1493 0 +-1505 -1504 1491 0 +-1505 1491 1493 0 +-1508 -1509 -1501 0 +-1508 -1507 -1503 0 +-1508 -1501 -1503 0 +-1492 -1493 -1501 0 +-1492 -1491 -1503 0 +-1492 -1501 -1503 0 +-1505 -1506 -1501 0 +-1505 -1504 -1503 0 +-1505 -1501 -1503 0 +-1499 1498 1500 0 +-1499 -1498 -1500 0 +1503 1504 1500 0 +1503 1493 1500 0 +1503 1509 1500 0 +-1515 -1516 -1511 0 +-1515 -1514 -1513 0 +-1515 -1511 -1513 0 +-1512 -1513 -1514 0 +-1512 -1511 -1516 0 +-1512 -1514 -1516 0 +-1502 1501 1503 0 +-1502 -1501 -1503 0 +1491 1494 1497 0 +-1492 1491 1493 0 +-1492 -1491 -1493 0 +1493 1496 1497 0 +-1722 -1723 -1718 0 +-1722 -1721 -1720 0 +-1722 -1718 -1720 0 +-1719 -1720 -1721 0 +-1719 -1718 -1723 0 +-1719 -1721 -1723 0 +-1715 1714 1716 0 +-1715 -1714 -1716 0 +2123 74 -72 0 +2124 -74 72 0 +-2122 2124 2123 0 +949 940 72 0 +952 946 72 0 +-946 -940 -72 0 +-952 -940 -72 0 +-946 -949 -72 0 +-952 -949 -72 0 +-953 -954 -946 0 +-953 -952 -948 0 +-953 -946 -948 0 +-947 -948 -952 0 +-947 -946 -954 0 +-947 -952 -954 0 +-941 -942 -949 0 +-941 -940 -951 0 +-941 -949 -951 0 +-73 72 74 0 +-73 -72 -74 0 +951 940 74 0 +954 948 74 0 +-948 -940 -74 0 +-954 -940 -74 0 +-948 -951 -74 0 +-954 -951 -74 0 +-933 950 953 0 +-953 952 954 0 +-953 -952 -954 0 +-950 949 951 0 +-950 -949 -951 0 +932 939 943 0 +-933 932 934 0 +-933 -932 -934 0 +934 939 945 0 +-937 944 947 0 +-947 946 948 0 +-947 -946 -948 0 +-944 943 945 0 +-944 -943 -945 0 +-936 -962 -959 0 +-937 936 938 0 +-937 -936 -938 0 +-938 -962 -961 0 +2126 71 -69 0 +2127 -71 69 0 +-2125 2127 2126 0 +913 919 69 0 +916 923 69 0 +-923 -919 -69 0 +-916 -919 -69 0 +-923 -913 -69 0 +-916 -913 -69 0 +-917 -918 -923 0 +-917 -916 -925 0 +-917 -923 -925 0 +-924 -925 -916 0 +-924 -923 -918 0 +-924 -916 -918 0 +-920 -921 -913 0 +-920 -919 -915 0 +-920 -913 -915 0 +-70 69 71 0 +-70 -69 -71 0 +915 919 71 0 +918 925 71 0 +-925 -919 -71 0 +-918 -919 -71 0 +-925 -915 -71 0 +-918 -915 -71 0 +-908 914 917 0 +-917 916 918 0 +-917 -916 -918 0 +-914 913 915 0 +-914 -913 -915 0 +907 922 926 0 +-908 907 909 0 +-908 -907 -909 0 +909 922 928 0 +-911 924 927 0 +-927 926 928 0 +-927 -926 -928 0 +-924 923 925 0 +-924 -923 -925 0 +-910 -1264 -1228 0 +-1229 -1230 1266 0 +-1229 -1228 1264 0 +-1229 1264 1266 0 +-1265 -1266 1230 0 +-1265 -1264 1228 0 +-1265 1228 1230 0 +-911 910 912 0 +-911 -910 -912 0 +-912 -1266 -1230 0 +2129 65 -63 0 +2130 -65 63 0 +-2128 2130 2129 0 +1189 1195 63 0 +1192 1199 63 0 +-1199 -1195 -63 0 +-1192 -1195 -63 0 +-1199 -1189 -63 0 +-1192 -1189 -63 0 +-1193 -1194 -1199 0 +-1193 -1192 -1201 0 +-1193 -1199 -1201 0 +-1200 -1201 -1192 0 +-1200 -1199 -1194 0 +-1200 -1192 -1194 0 +-1196 -1197 -1189 0 +-1196 -1195 -1191 0 +-1196 -1189 -1191 0 +-64 63 65 0 +-64 -63 -65 0 +1191 1195 65 0 +1194 1201 65 0 +-1201 -1195 -65 0 +-1194 -1195 -65 0 +-1201 -1191 -65 0 +-1194 -1191 -65 0 +-1184 1190 1193 0 +-1193 1192 1194 0 +-1193 -1192 -1194 0 +-1190 1189 1191 0 +-1190 -1189 -1191 0 +1183 1198 1202 0 +-1184 1183 1185 0 +-1184 -1183 -1185 0 +1185 1198 1204 0 +-1187 1200 1203 0 +-1203 1202 1204 0 +-1203 -1202 -1204 0 +-1200 1199 1201 0 +-1200 -1199 -1201 0 +-1186 -1305 -1261 0 +-1187 1186 1188 0 +-1187 -1186 -1188 0 +-1188 -1305 -1263 0 +2132 56 -54 0 +2133 -56 54 0 +-2131 2133 2132 0 +1455 1461 54 0 +1458 1465 54 0 +-1465 -1461 -54 0 +-1458 -1461 -54 0 +-1465 -1455 -54 0 +-1458 -1455 -54 0 +-1459 -1460 -1465 0 +-1459 -1458 -1467 0 +-1459 -1465 -1467 0 +-1466 -1467 -1458 0 +-1466 -1465 -1460 0 +-1466 -1458 -1460 0 +-1462 -1463 -1455 0 +-1462 -1461 -1457 0 +-1462 -1455 -1457 0 +-55 54 56 0 +-55 -54 -56 0 +1457 1461 56 0 +1460 1467 56 0 +-1467 -1461 -56 0 +-1460 -1461 -56 0 +-1467 -1457 -56 0 +-1460 -1457 -56 0 +-1450 1456 1459 0 +-1459 1458 1460 0 +-1459 -1458 -1460 0 +-1456 1455 1457 0 +-1456 -1455 -1457 0 +1449 1464 1468 0 +-1450 1449 1451 0 +-1450 -1449 -1451 0 +1451 1464 1470 0 +-1453 1466 1469 0 +-1469 1468 1470 0 +-1469 -1468 -1470 0 +-1466 1465 1467 0 +-1466 -1465 -1467 0 +-1452 -1471 -1685 0 +-1453 1452 1454 0 +-1453 -1452 -1454 0 +-1454 -1471 -1687 0 +-1701 1700 1702 0 +-1701 -1700 -1702 0 +-1693 1692 1694 0 +-1693 -1692 -1694 0 +-1689 1688 1690 0 +-1689 -1688 -1690 0 +-1686 1685 1687 0 +-1686 -1685 -1687 0 +-692 691 693 0 +-692 -691 -693 0 +-390 -392 -393 0 +2135 83 -81 0 +2136 -83 81 0 +-2134 2136 2135 0 +-82 81 83 0 +-82 -81 -83 0 +-1402 -1393 -1389 0 +-1405 -1399 -1389 0 +1399 1393 1389 0 +1405 1393 1389 0 +1399 1402 1389 0 +1405 1402 1389 0 +-1406 -1407 1401 0 +-1406 -1405 1399 0 +-1406 1399 1401 0 +-1400 -1401 1407 0 +-1400 -1399 1405 0 +-1400 1405 1407 0 +-1394 -1395 1404 0 +-1394 -1393 1402 0 +-1394 1402 1404 0 +-1390 1389 1391 0 +-1390 -1389 -1391 0 +-1404 -1393 -1391 0 +-1407 -1401 -1391 0 +1401 1393 1391 0 +1407 1393 1391 0 +1401 1404 1391 0 +1407 1404 1391 0 +-1384 1403 1406 0 +-1406 1405 1407 0 +-1406 -1405 -1407 0 +-1403 1402 1404 0 +-1403 -1402 -1404 0 +-1383 -1392 -1396 0 +-1384 1383 1385 0 +-1384 -1383 -1385 0 +-1385 -1392 -1398 0 +-1387 1397 1400 0 +-1400 1399 1401 0 +-1400 -1399 -1401 0 +-1397 1396 1398 0 +-1397 -1396 -1398 0 +-1387 1386 1388 0 +-1387 -1386 -1388 0 +-1679 -1682 -1688 0 +-1689 -1690 1684 0 +-1689 -1688 1682 0 +-1689 1682 1684 0 +-1683 -1684 1690 0 +-1683 -1682 1688 0 +-1683 1688 1690 0 +-1680 1679 1681 0 +-1680 -1679 -1681 0 +-1681 -1684 -1690 0 +2138 50 -48 0 +2139 -50 48 0 +-2137 2139 2138 0 +1673 1664 48 0 +1676 1670 48 0 +-1670 -1664 -48 0 +-1676 -1664 -48 0 +-1670 -1673 -48 0 +-1676 -1673 -48 0 +-1677 -1678 -1670 0 +-1677 -1676 -1672 0 +-1677 -1670 -1672 0 +-1671 -1672 -1676 0 +-1671 -1670 -1678 0 +-1671 -1676 -1678 0 +-1665 -1666 -1673 0 +-1665 -1664 -1675 0 +-1665 -1673 -1675 0 +-49 48 50 0 +-49 -48 -50 0 +1675 1664 50 0 +1678 1672 50 0 +-1672 -1664 -50 0 +-1678 -1664 -50 0 +-1672 -1675 -50 0 +-1678 -1675 -50 0 +-1657 1674 1677 0 +-1677 1676 1678 0 +-1677 -1676 -1678 0 +-1674 1673 1675 0 +-1674 -1673 -1675 0 +1656 1663 1667 0 +-1657 1656 1658 0 +-1657 -1656 -1658 0 +1658 1663 1669 0 +-1661 1668 1671 0 +-1671 1670 1672 0 +-1671 -1670 -1672 0 +-1668 1667 1669 0 +-1668 -1667 -1669 0 +-1660 -1691 -1692 0 +-1661 1660 1662 0 +-1661 -1660 -1662 0 +-1662 -1691 -1694 0 +2141 53 -51 0 +2142 -53 51 0 +-2140 2142 2141 0 +1625 1631 51 0 +1628 1635 51 0 +-1635 -1631 -51 0 +-1628 -1631 -51 0 +-1635 -1625 -51 0 +-1628 -1625 -51 0 +-1629 -1630 -1635 0 +-1629 -1628 -1637 0 +-1629 -1635 -1637 0 +-1636 -1637 -1628 0 +-1636 -1635 -1630 0 +-1636 -1628 -1630 0 +-1632 -1633 -1625 0 +-1632 -1631 -1627 0 +-1632 -1625 -1627 0 +-52 51 53 0 +-52 -51 -53 0 +1627 1631 53 0 +1630 1637 53 0 +-1637 -1631 -53 0 +-1630 -1631 -53 0 +-1637 -1627 -53 0 +-1630 -1627 -53 0 +-1620 1626 1629 0 +-1629 1628 1630 0 +-1629 -1628 -1630 0 +-1626 1625 1627 0 +-1626 -1625 -1627 0 +1619 1634 1638 0 +-1620 1619 1621 0 +-1620 -1619 -1621 0 +1621 1634 1640 0 +-1623 1636 1639 0 +-1639 1638 1640 0 +-1639 -1638 -1640 0 +-1636 1635 1637 0 +-1636 -1635 -1637 0 +-1622 -1697 -1700 0 +-1701 -1702 1699 0 +-1701 -1700 1697 0 +-1701 1697 1699 0 +-1698 -1699 1702 0 +-1698 -1697 1700 0 +-1698 1700 1702 0 +-1623 1622 1624 0 +-1623 -1622 -1624 0 +-1624 -1699 -1702 0 +2144 62 -60 0 +2145 -62 60 0 +-2143 2145 2144 0 +666 657 60 0 +669 663 60 0 +-663 -657 -60 0 +-669 -657 -60 0 +-663 -666 -60 0 +-669 -666 -60 0 +-670 -671 -663 0 +-670 -669 -665 0 +-670 -663 -665 0 +-664 -665 -669 0 +-664 -663 -671 0 +-664 -669 -671 0 +-658 -659 -666 0 +-658 -657 -668 0 +-658 -666 -668 0 +-61 60 62 0 +-61 -60 -62 0 +668 657 62 0 +671 665 62 0 +-665 -657 -62 0 +-671 -657 -62 0 +-665 -668 -62 0 +-671 -668 -62 0 +-650 667 670 0 +-670 669 671 0 +-670 -669 -671 0 +-667 666 668 0 +-667 -666 -668 0 +649 656 660 0 +-650 649 651 0 +-650 -649 -651 0 +651 656 662 0 +-654 661 664 0 +-664 663 665 0 +-664 -663 -665 0 +-661 660 662 0 +-661 -660 -662 0 +-653 -963 -992 0 +-654 653 655 0 +-654 -653 -655 0 +-655 -963 -994 0 +-1271 1270 1272 0 +-1271 -1270 -1272 0 +-996 995 997 0 +-996 -995 -997 0 +-993 992 994 0 +-993 -992 -994 0 +703 418 706 0 +-704 703 705 0 +-704 -703 -705 0 +705 418 708 0 +2147 89 -87 0 +2148 -89 87 0 +-2146 2148 2147 0 +-88 87 89 0 +-88 -87 -89 0 +-973 -979 -964 0 +-976 -983 -964 0 +983 979 964 0 +976 979 964 0 +983 973 964 0 +976 973 964 0 +-977 -978 985 0 +-977 -976 983 0 +-977 983 985 0 +-984 -985 978 0 +-984 -983 976 0 +-984 976 978 0 +-980 -981 975 0 +-980 -979 973 0 +-980 973 975 0 +-965 964 966 0 +-965 -964 -966 0 +-975 -979 -966 0 +-978 -985 -966 0 +985 979 966 0 +978 979 966 0 +985 975 966 0 +978 975 966 0 +-968 974 977 0 +-977 976 978 0 +-977 -976 -978 0 +-974 973 975 0 +-974 -973 -975 0 +-967 -982 -986 0 +-968 967 969 0 +-968 -967 -969 0 +-969 -982 -988 0 +-971 984 987 0 +-987 986 988 0 +-987 -986 -988 0 +-984 983 985 0 +-984 -983 -985 0 +970 1309 1285 0 +-1286 -1287 -1309 0 +-1286 -1285 -1311 0 +-1286 -1309 -1311 0 +-1310 -1311 -1285 0 +-1310 -1309 -1287 0 +-1310 -1285 -1287 0 +-971 970 972 0 +-971 -970 -972 0 +972 1311 1287 0 +-990 1286 1289 0 +-1289 1288 1290 0 +-1289 -1288 -1290 0 +-1286 1285 1287 0 +-1286 -1285 -1287 0 +-990 989 991 0 +-990 -989 -991 0 +2150 86 -84 0 +2151 -86 84 0 +-2149 2151 2150 0 +-85 84 86 0 +-85 -84 -86 0 +-1442 -1433 -1231 0 +-1445 -1439 -1231 0 +1439 1433 1231 0 +1445 1433 1231 0 +1439 1442 1231 0 +1445 1442 1231 0 +-1446 -1447 1441 0 +-1446 -1445 1439 0 +-1446 1439 1441 0 +-1440 -1441 1447 0 +-1440 -1439 1445 0 +-1440 1445 1447 0 +-1434 -1435 1444 0 +-1434 -1433 1442 0 +-1434 1442 1444 0 +-1232 1231 1233 0 +-1232 -1231 -1233 0 +-1444 -1433 -1233 0 +-1447 -1441 -1233 0 +1441 1433 1233 0 +1447 1433 1233 0 +1441 1444 1233 0 +1447 1444 1233 0 +-1235 1443 1446 0 +-1446 1445 1447 0 +-1446 -1445 -1447 0 +-1443 1442 1444 0 +-1443 -1442 -1444 0 +-1234 -1425 -1436 0 +-1235 1234 1236 0 +-1235 -1234 -1236 0 +-1236 -1425 -1438 0 +-1238 1437 1440 0 +-1440 1439 1441 0 +-1440 -1439 -1441 0 +-1437 1436 1438 0 +-1437 -1436 -1438 0 +1237 1284 1288 0 +-1238 1237 1239 0 +-1238 -1237 -1239 0 +1239 1284 1290 0 +2153 59 -57 0 +2154 -59 57 0 +-2152 2154 2153 0 +1222 1213 57 0 +1225 1219 57 0 +-1219 -1213 -57 0 +-1225 -1213 -57 0 +-1219 -1222 -57 0 +-1225 -1222 -57 0 +-1226 -1227 -1219 0 +-1226 -1225 -1221 0 +-1226 -1219 -1221 0 +-1220 -1221 -1225 0 +-1220 -1219 -1227 0 +-1220 -1225 -1227 0 +-1214 -1215 -1222 0 +-1214 -1213 -1224 0 +-1214 -1222 -1224 0 +-58 57 59 0 +-58 -57 -59 0 +1224 1213 59 0 +1227 1221 59 0 +-1221 -1213 -59 0 +-1227 -1213 -59 0 +-1221 -1224 -59 0 +-1227 -1224 -59 0 +-1206 1223 1226 0 +-1226 1225 1227 0 +-1226 -1225 -1227 0 +-1223 1222 1224 0 +-1223 -1222 -1224 0 +1205 1212 1216 0 +-1206 1205 1207 0 +-1206 -1205 -1207 0 +1207 1212 1218 0 +-1210 1217 1220 0 +-1220 1219 1221 0 +-1220 -1219 -1221 0 +-1217 1216 1218 0 +-1217 -1216 -1218 0 +-1209 -1267 -1270 0 +-1271 -1272 1269 0 +-1271 -1270 1267 0 +-1271 1267 1269 0 +-1268 -1269 1272 0 +-1268 -1267 1270 0 +-1268 1270 1272 0 +-1210 1209 1211 0 +-1210 -1209 -1211 0 +-1211 -1269 -1272 0 +2156 47 -45 0 +2157 -47 45 0 +-2155 2157 2156 0 +1571 1577 45 0 +1574 1581 45 0 +-1581 -1577 -45 0 +-1574 -1577 -45 0 +-1581 -1571 -45 0 +-1574 -1571 -45 0 +-1575 -1576 -1581 0 +-1575 -1574 -1583 0 +-1575 -1581 -1583 0 +-1582 -1583 -1574 0 +-1582 -1581 -1576 0 +-1582 -1574 -1576 0 +-1578 -1579 -1571 0 +-1578 -1577 -1573 0 +-1578 -1571 -1573 0 +-46 45 47 0 +-46 -45 -47 0 +1573 1577 47 0 +1576 1583 47 0 +-1583 -1577 -47 0 +-1576 -1577 -47 0 +-1583 -1573 -47 0 +-1576 -1573 -47 0 +-1566 1572 1575 0 +-1575 1574 1576 0 +-1575 -1574 -1576 0 +-1572 1571 1573 0 +-1572 -1571 -1573 0 +1565 1580 1584 0 +-1566 1565 1567 0 +-1566 -1565 -1567 0 +1567 1580 1586 0 +-1569 1582 1585 0 +-1585 1584 1586 0 +-1585 -1584 -1586 0 +-1582 1581 1583 0 +-1582 -1581 -1583 0 +-1568 -1609 -1880 0 +-1569 1568 1570 0 +-1569 -1568 -1570 0 +-1570 -1609 -1882 0 +-1890 1889 1891 0 +-1890 -1889 -1891 0 +-1884 1883 1885 0 +-1884 -1883 -1885 0 +-1881 1880 1882 0 +-1881 -1880 -1882 0 +1606 405 1711 0 +-1607 1606 1608 0 +-1607 -1606 -1608 0 +1608 405 1713 0 +2159 44 -42 0 +2160 -44 42 0 +-2158 2160 2159 0 +1861 1867 42 0 +1864 1871 42 0 +-1871 -1867 -42 0 +-1864 -1867 -42 0 +-1871 -1861 -42 0 +-1864 -1861 -42 0 +-1865 -1866 -1871 0 +-1865 -1864 -1873 0 +-1865 -1871 -1873 0 +-1872 -1873 -1864 0 +-1872 -1871 -1866 0 +-1872 -1864 -1866 0 +-1868 -1869 -1861 0 +-1868 -1867 -1863 0 +-1868 -1861 -1863 0 +-43 42 44 0 +-43 -42 -44 0 +1863 1867 44 0 +1866 1873 44 0 +-1873 -1867 -44 0 +-1866 -1867 -44 0 +-1873 -1863 -44 0 +-1866 -1863 -44 0 +-1856 1862 1865 0 +-1865 1864 1866 0 +-1865 -1864 -1866 0 +-1862 1861 1863 0 +-1862 -1861 -1863 0 +1855 1870 1874 0 +-1856 1855 1857 0 +-1856 -1855 -1857 0 +1857 1870 1876 0 +-1859 1872 1875 0 +-1875 1874 1876 0 +-1875 -1874 -1876 0 +-1872 1871 1873 0 +-1872 -1871 -1873 0 +-1858 -1877 -1883 0 +-1884 -1885 1879 0 +-1884 -1883 1877 0 +-1884 1877 1879 0 +-1878 -1879 1885 0 +-1878 -1877 1883 0 +-1878 1883 1885 0 +-1859 1858 1860 0 +-1859 -1858 -1860 0 +-1860 -1879 -1885 0 +2162 77 -75 0 +2163 -77 75 0 +-2161 2163 2162 0 +-76 75 77 0 +-76 -75 -77 0 +-2030 -2027 -2021 0 +-2033 -2037 -2021 0 +2037 2027 2021 0 +2033 2027 2021 0 +2037 2030 2021 0 +2033 2030 2021 0 +-2034 -2035 2039 0 +-2034 -2033 2037 0 +-2034 2037 2039 0 +-2038 -2039 2035 0 +-2038 -2037 2033 0 +-2038 2033 2035 0 +-2028 -2029 2032 0 +-2028 -2027 2030 0 +-2028 2030 2032 0 +-2022 2021 2023 0 +-2022 -2021 -2023 0 +-2032 -2027 -2023 0 +-2035 -2039 -2023 0 +2039 2027 2023 0 +2035 2027 2023 0 +2039 2032 2023 0 +2035 2032 2023 0 +-2025 2031 2034 0 +-2034 2033 2035 0 +-2034 -2033 -2035 0 +-2031 2030 2032 0 +-2031 -2030 -2032 0 +-2024 -2036 -2040 0 +-2025 2024 2026 0 +-2025 -2024 -2026 0 +-2026 -2036 -2042 0 +-1893 2038 2041 0 +-2041 2040 2042 0 +-2041 -2040 -2042 0 +-2038 2037 2039 0 +-2038 -2037 -2039 0 +1892 1895 1906 0 +-1893 1892 1894 0 +-1893 -1892 -1894 0 +1894 1895 1908 0 +-1887 1907 1910 0 +-1910 1909 1911 0 +-1910 -1909 -1911 0 +-1907 1906 1908 0 +-1907 -1906 -1908 0 +-1887 1886 1888 0 +-1887 -1886 -1888 0 +2165 80 -78 0 +2166 -80 78 0 +-2164 2166 2165 0 +-79 78 80 0 +-79 -78 -80 0 +-2051 -2048 -1896 0 +-2054 -2058 -1896 0 +2058 2048 1896 0 +2054 2048 1896 0 +2058 2051 1896 0 +2054 2051 1896 0 +-2055 -2056 2060 0 +-2055 -2054 2058 0 +-2055 2058 2060 0 +-2059 -2060 2056 0 +-2059 -2058 2054 0 +-2059 2054 2056 0 +-2049 -2050 2053 0 +-2049 -2048 2051 0 +-2049 2051 2053 0 +-1897 1896 1898 0 +-1897 -1896 -1898 0 +-2053 -2048 -1898 0 +-2056 -2060 -1898 0 +2060 2048 1898 0 +2056 2048 1898 0 +2060 2053 1898 0 +2056 2053 1898 0 +-2045 2052 2055 0 +-2055 2054 2056 0 +-2055 -2054 -2056 0 +-2052 2051 2053 0 +-2052 -2051 -2053 0 +-2044 -2057 -2061 0 +-2045 2044 2046 0 +-2045 -2044 -2046 0 +-2046 -2057 -2063 0 +-1901 2059 2062 0 +-2062 2061 2063 0 +-2062 -2061 -2063 0 +-2059 2058 2060 0 +-2059 -2058 -2060 0 +1900 1903 1909 0 +-1910 -1911 -1903 0 +-1910 -1909 -1905 0 +-1910 -1903 -1905 0 +-1904 -1905 -1909 0 +-1904 -1903 -1911 0 +-1904 -1909 -1911 0 +-1901 1900 1902 0 +-1901 -1900 -1902 0 +1902 1905 1911 0 +2168 122 -120 0 +2169 -122 120 0 +-2167 2169 2168 0 +890 881 120 0 +893 887 120 0 +-887 -881 -120 0 +-893 -881 -120 0 +-887 -890 -120 0 +-893 -890 -120 0 +-894 -895 -887 0 +-894 -893 -889 0 +-894 -887 -889 0 +-888 -889 -893 0 +-888 -887 -895 0 +-888 -893 -895 0 +-891 -892 -881 0 +-891 -890 -883 0 +-891 -881 -883 0 +-882 -883 -890 0 +-882 -881 -892 0 +-882 -890 -892 0 +-121 120 122 0 +-121 -120 -122 0 +892 883 122 0 +895 889 122 0 +-889 -883 -122 0 +-895 -883 -122 0 +-889 -892 -122 0 +-895 -892 -122 0 +-873 891 894 0 +-894 893 895 0 +-894 -893 -895 0 +-891 890 892 0 +-891 -890 -892 0 +872 878 884 0 +-885 -886 -878 0 +-885 -884 -880 0 +-885 -878 -880 0 +-879 -880 -884 0 +-879 -878 -886 0 +-879 -884 -886 0 +-873 872 874 0 +-873 -872 -874 0 +874 880 886 0 +-876 885 888 0 +-888 887 889 0 +-888 -887 -889 0 +-885 884 886 0 +-885 -884 -886 0 +-875 -896 -897 0 +-876 875 877 0 +-876 -875 -877 0 +-877 -896 -899 0 +-2071 133 136 127 0 +-831 -818 -832 -827 0 +-831 -818 -830 -829 0 +-831 -818 -827 -829 0 +-825 -818 -826 -827 0 +-825 -818 -824 -829 0 +-825 -818 -827 -829 0 +-828 827 -830 -824 0 +-828 829 -832 -826 0 +-819 818 -830 -824 0 +-819 820 -832 -826 0 +-834 1148 1151 1158 0 +-254 241 -255 252 0 +-254 241 -253 250 0 +-254 241 250 252 0 +-248 241 -249 252 0 +-248 241 -247 250 0 +-248 241 250 252 0 +-251 -250 253 247 0 +-251 -252 255 249 0 +-242 -241 253 247 0 +-242 -243 255 249 0 +-515 -502 -516 -511 0 +-515 -502 -514 -513 0 +-515 -502 -511 -513 0 +-509 -502 -510 -511 0 +-509 -502 -508 -513 0 +-509 -502 -511 -513 0 +-512 511 -514 -508 0 +-512 513 -516 -510 0 +-503 502 -514 -508 0 +-503 504 -516 -510 0 +-531 -530 527 520 0 +-531 -532 529 522 0 +-525 -524 527 520 0 +-525 -526 529 522 0 +-528 524 -529 532 0 +-528 524 -527 530 0 +-528 524 530 532 0 +-521 524 -522 532 0 +-521 524 -520 530 0 +-521 524 530 532 0 +-226 518 521 1027 0 +-453 452 -449 -442 0 +-453 454 -451 -444 0 +-447 446 -449 -442 0 +-447 448 -451 -444 0 +-450 -446 -451 -452 0 +-450 -446 -449 -454 0 +-450 -446 -452 -454 0 +-443 -446 -444 -452 0 +-443 -446 -442 -454 0 +-443 -446 -452 -454 0 +-798 791 -799 796 0 +-798 791 -797 794 0 +-798 791 794 796 0 +-802 791 -803 796 0 +-802 791 -801 794 0 +-802 791 794 796 0 +-795 -794 797 801 0 +-795 -796 799 803 0 +-792 -791 797 801 0 +-792 -793 799 803 0 +-1084 1071 -1085 1082 0 +-1084 1071 -1083 1080 0 +-1084 1071 1080 1082 0 +-1078 1071 -1079 1082 0 +-1078 1071 -1077 1080 0 +-1078 1071 1080 1082 0 +-1081 -1080 1083 1077 0 +-1081 -1082 1085 1079 0 +-1072 -1071 1083 1077 0 +-1072 -1073 1085 1079 0 +-1058 1045 -1059 1056 0 +-1058 1045 -1057 1054 0 +-1058 1045 1054 1056 0 +-1052 1045 -1053 1056 0 +-1052 1045 -1051 1054 0 +-1052 1045 1054 1056 0 +-1055 -1054 1057 1051 0 +-1055 -1056 1059 1053 0 +-1046 -1045 1057 1051 0 +-1046 -1047 1059 1053 0 +-1024 -1011 -1025 -1020 0 +-1024 -1011 -1023 -1022 0 +-1024 -1011 -1020 -1022 0 +-1018 -1011 -1019 -1020 0 +-1018 -1011 -1017 -1022 0 +-1018 -1011 -1020 -1022 0 +-1021 1020 -1023 -1017 0 +-1021 1022 -1025 -1019 0 +-1012 1011 -1023 -1017 0 +-1012 1013 -1025 -1019 0 +682 672 681 680 0 +-415 -413 -419 -411 0 +-1124 1126 -1125 1122 0 +-1124 1126 -1123 1120 0 +-1124 1126 1120 1122 0 +-1131 1126 -1132 1122 0 +-1131 1126 -1130 1120 0 +-1131 1126 1120 1122 0 +-1121 -1120 1123 1130 0 +-1121 -1122 1125 1132 0 +-1127 -1126 1123 1130 0 +-1127 -1128 1125 1132 0 +-747 749 -748 745 0 +-747 749 -746 743 0 +-747 749 743 745 0 +-754 749 -755 745 0 +-754 749 -753 743 0 +-754 749 743 745 0 +-744 -743 746 753 0 +-744 -745 748 755 0 +-750 -749 746 753 0 +-750 -751 748 755 0 +-1180 -1167 -1181 -1176 0 +-1180 -1167 -1179 -1178 0 +-1180 -1167 -1176 -1178 0 +-1174 -1167 -1175 -1176 0 +-1174 -1167 -1173 -1178 0 +-1174 -1167 -1176 -1178 0 +-1177 1176 -1179 -1173 0 +-1177 1178 -1181 -1175 0 +-1168 1167 -1179 -1173 0 +-1168 1169 -1181 -1175 0 +-171 164 -172 169 0 +-171 164 -170 167 0 +-171 164 167 169 0 +-175 164 -176 169 0 +-175 164 -174 167 0 +-175 164 167 169 0 +-168 -167 170 174 0 +-168 -169 172 176 0 +-165 -164 170 174 0 +-165 -166 172 176 0 +-294 298 301 369 0 +-290 277 -291 288 0 +-290 277 -289 286 0 +-290 277 286 288 0 +-284 277 -285 288 0 +-284 277 -283 286 0 +-284 277 286 288 0 +-287 -286 289 283 0 +-287 -288 291 285 0 +-278 -277 289 283 0 +-278 -279 291 285 0 +-387 374 -388 385 0 +-387 374 -386 383 0 +-387 374 383 385 0 +-381 374 -382 385 0 +-381 374 -380 383 0 +-381 374 383 385 0 +-384 -383 386 380 0 +-384 -385 388 382 0 +-375 -374 386 380 0 +-375 -376 388 382 0 +-633 -626 -634 -629 0 +-633 -626 -632 -631 0 +-633 -626 -629 -631 0 +-637 -626 -638 -629 0 +-637 -626 -636 -631 0 +-637 -626 -629 -631 0 +-630 629 -632 -636 0 +-630 631 -634 -638 0 +-627 626 -632 -636 0 +-627 628 -634 -638 0 +-350 -343 -351 -346 0 +-350 -343 -349 -348 0 +-350 -343 -346 -348 0 +-354 -343 -355 -346 0 +-354 -343 -353 -348 0 +-354 -343 -346 -348 0 +-347 346 -349 -353 0 +-347 348 -351 -355 0 +-344 343 -349 -353 0 +-344 345 -351 -355 0 +-468 461 -469 466 0 +-468 461 -467 464 0 +-468 461 464 466 0 +-472 461 -473 466 0 +-472 461 -471 464 0 +-472 461 464 466 0 +-465 -464 467 471 0 +-465 -466 469 473 0 +-462 -461 467 471 0 +-462 -463 469 473 0 +-551 562 565 898 0 +-585 572 -586 583 0 +-585 572 -584 581 0 +-585 572 581 583 0 +-579 572 -580 583 0 +-579 572 -578 581 0 +-579 572 581 583 0 +-582 -581 584 578 0 +-582 -583 586 580 0 +-573 -572 584 578 0 +-573 -574 586 580 0 +-860 -847 -861 -856 0 +-860 -847 -859 -858 0 +-860 -847 -856 -858 0 +-854 -847 -855 -856 0 +-854 -847 -853 -858 0 +-854 -847 -856 -858 0 +-857 856 -859 -853 0 +-857 858 -861 -855 0 +-848 847 -859 -853 0 +-848 849 -861 -855 0 +-212 199 -213 210 0 +-212 199 -211 208 0 +-212 199 208 210 0 +-206 199 -207 210 0 +-206 199 -205 208 0 +-206 199 208 210 0 +-209 -208 211 205 0 +-209 -210 213 207 0 +-200 -199 211 205 0 +-200 -201 213 207 0 +-268 309 312 611 0 +-332 319 -333 330 0 +-332 319 -331 328 0 +-332 319 328 330 0 +-326 319 -327 330 0 +-326 319 -325 328 0 +-326 319 328 330 0 +-329 -328 331 325 0 +-329 -330 333 327 0 +-320 -319 331 325 0 +-320 -321 333 327 0 +-607 594 -608 605 0 +-607 594 -606 603 0 +-607 594 603 605 0 +-601 594 -602 605 0 +-601 594 -600 603 0 +-601 594 603 605 0 +-604 -603 606 600 0 +-604 -605 608 602 0 +-595 -594 606 600 0 +-595 -596 608 602 0 +-1258 1245 -1259 1256 0 +-1258 1245 -1257 1254 0 +-1258 1245 1254 1256 0 +-1252 1245 -1253 1256 0 +-1252 1245 -1251 1254 0 +-1252 1245 1254 1256 0 +-1255 -1254 1257 1251 0 +-1255 -1256 1259 1253 0 +-1246 -1245 1257 1251 0 +-1246 -1247 1259 1253 0 +686 1714 1739 1725 0 +688 1716 1741 1727 0 +-1507 -1491 -1504 -1498 0 +-1509 -1493 -1504 -1500 0 +-953 940 -954 951 0 +-953 940 -952 949 0 +-953 940 949 951 0 +-947 940 -948 951 0 +-947 940 -946 949 0 +-947 940 949 951 0 +-950 -949 952 946 0 +-950 -951 954 948 0 +-941 -940 952 946 0 +-941 -942 954 948 0 +-917 919 -918 915 0 +-917 919 -916 913 0 +-917 919 913 915 0 +-924 919 -925 915 0 +-924 919 -923 913 0 +-924 919 913 915 0 +-914 -913 916 923 0 +-914 -915 918 925 0 +-920 -919 916 923 0 +-920 -921 918 925 0 +-1193 1195 -1194 1191 0 +-1193 1195 -1192 1189 0 +-1193 1195 1189 1191 0 +-1200 1195 -1201 1191 0 +-1200 1195 -1199 1189 0 +-1200 1195 1189 1191 0 +-1190 -1189 1192 1199 0 +-1190 -1191 1194 1201 0 +-1196 -1195 1192 1199 0 +-1196 -1197 1194 1201 0 +-1459 1461 -1460 1457 0 +-1459 1461 -1458 1455 0 +-1459 1461 1455 1457 0 +-1466 1461 -1467 1457 0 +-1466 1461 -1465 1455 0 +-1466 1461 1455 1457 0 +-1456 -1455 1458 1465 0 +-1456 -1457 1460 1467 0 +-1462 -1461 1458 1465 0 +-1462 -1463 1460 1467 0 +-1406 -1393 -1407 -1402 0 +-1406 -1393 -1405 -1404 0 +-1406 -1393 -1402 -1404 0 +-1400 -1393 -1401 -1402 0 +-1400 -1393 -1399 -1404 0 +-1400 -1393 -1402 -1404 0 +-1403 1402 -1405 -1399 0 +-1403 1404 -1407 -1401 0 +-1394 1393 -1405 -1399 0 +-1394 1395 -1407 -1401 0 +-1677 1664 -1678 1675 0 +-1677 1664 -1676 1673 0 +-1677 1664 1673 1675 0 +-1671 1664 -1672 1675 0 +-1671 1664 -1670 1673 0 +-1671 1664 1673 1675 0 +-1674 -1673 1676 1670 0 +-1674 -1675 1678 1672 0 +-1665 -1664 1676 1670 0 +-1665 -1666 1678 1672 0 +-1629 1631 -1630 1627 0 +-1629 1631 -1628 1625 0 +-1629 1631 1625 1627 0 +-1636 1631 -1637 1627 0 +-1636 1631 -1635 1625 0 +-1636 1631 1625 1627 0 +-1626 -1625 1628 1635 0 +-1626 -1627 1630 1637 0 +-1632 -1631 1628 1635 0 +-1632 -1633 1630 1637 0 +-670 657 -671 668 0 +-670 657 -669 666 0 +-670 657 666 668 0 +-664 657 -665 668 0 +-664 657 -663 666 0 +-664 657 666 668 0 +-667 -666 669 663 0 +-667 -668 671 665 0 +-658 -657 669 663 0 +-658 -659 671 665 0 +-704 993 996 1271 0 +-977 -979 -978 -973 0 +-977 -979 -976 -975 0 +-977 -979 -973 -975 0 +-984 -979 -985 -973 0 +-984 -979 -983 -975 0 +-984 -979 -973 -975 0 +-974 973 -976 -983 0 +-974 975 -978 -985 0 +-980 979 -976 -983 0 +-980 981 -978 -985 0 +-1446 -1433 -1447 -1442 0 +-1446 -1433 -1445 -1444 0 +-1446 -1433 -1442 -1444 0 +-1440 -1433 -1441 -1442 0 +-1440 -1433 -1439 -1444 0 +-1440 -1433 -1442 -1444 0 +-1443 1442 -1445 -1439 0 +-1443 1444 -1447 -1441 0 +-1434 1433 -1445 -1439 0 +-1434 1435 -1447 -1441 0 +-1226 1213 -1227 1224 0 +-1226 1213 -1225 1222 0 +-1226 1213 1222 1224 0 +-1220 1213 -1221 1224 0 +-1220 1213 -1219 1222 0 +-1220 1213 1222 1224 0 +-1223 -1222 1225 1219 0 +-1223 -1224 1227 1221 0 +-1214 -1213 1225 1219 0 +-1214 -1215 1227 1221 0 +-1575 1577 -1576 1573 0 +-1575 1577 -1574 1571 0 +-1575 1577 1571 1573 0 +-1582 1577 -1583 1573 0 +-1582 1577 -1581 1571 0 +-1582 1577 1571 1573 0 +-1572 -1571 1574 1581 0 +-1572 -1573 1576 1583 0 +-1578 -1577 1574 1581 0 +-1578 -1579 1576 1583 0 +-1607 1881 1884 1890 0 +-1865 1867 -1866 1863 0 +-1865 1867 -1864 1861 0 +-1865 1867 1861 1863 0 +-1872 1867 -1873 1863 0 +-1872 1867 -1871 1861 0 +-1872 1867 1861 1863 0 +-1862 -1861 1864 1871 0 +-1862 -1863 1866 1873 0 +-1868 -1867 1864 1871 0 +-1868 -1869 1866 1873 0 +-2034 -2027 -2035 -2030 0 +-2034 -2027 -2033 -2032 0 +-2034 -2027 -2030 -2032 0 +-2038 -2027 -2039 -2030 0 +-2038 -2027 -2037 -2032 0 +-2038 -2027 -2030 -2032 0 +-2031 2030 -2033 -2037 0 +-2031 2032 -2035 -2039 0 +-2028 2027 -2033 -2037 0 +-2028 2029 -2035 -2039 0 +-2055 -2048 -2056 -2051 0 +-2055 -2048 -2054 -2053 0 +-2055 -2048 -2051 -2053 0 +-2059 -2048 -2060 -2051 0 +-2059 -2048 -2058 -2053 0 +-2059 -2048 -2051 -2053 0 +-2052 2051 -2054 -2058 0 +-2052 2053 -2056 -2060 0 +-2049 2048 -2054 -2058 0 +-2049 2050 -2056 -2060 0 +-894 -893 890 881 0 +-894 -895 892 883 0 +-888 -887 890 881 0 +-888 -889 892 883 0 +-891 -890 893 887 0 +-891 -892 895 889 0 +-882 -881 893 887 0 +-882 -883 895 889 0 +-833 -1486 -1487 -1483 -1488 0 +-835 -1486 -1487 -1485 -1490 0 +-2075 1698 1722 1733 1878 0 +-789 802 805 879 882 0 +-675 -676 -677 -678 -679 0 +397 399 400 403 401 0 +-371 -1478 -1479 -1475 -1480 0 +-373 -1478 -1479 -1477 -1482 0 +-613 -1283 -1307 -1274 -1280 0 +-615 -1283 -1307 -1276 -1282 0 +-1292 1299 1302 1730 1904 0 +-862 -1306 -1308 -1295 -1312 0 +-864 -1306 -1308 -1297 -1314 0 +-684 957 960 1229 1262 0 +683 689 695 394 690 0 +685 689 697 394 690 0 +-687 696 699 707 1712 0 +1725 1728 1729 1732 1735 0 +1727 1728 1731 1734 1735 0 +1501 1510 1511 1514 1517 0 +1503 1510 1513 1516 1517 0 +1714 1717 1718 1721 1724 0 +1716 1717 1720 1723 1724 0 +-692 1686 1689 1693 1701 0 +691 694 698 390 701 0 +693 694 700 390 701 0 +-418 -420 -421 -422 -423 0 +-405 -406 -408 -414 -410 0 +-2177 2083 2080 2077 2072 0 +121 79 76 43 46 2065 0 +-2065 58 85 88 61 2066 0 +-2066 52 49 82 55 2067 0 +-2067 64 70 73 67 2068 0 +-2068 97 94 100 91 2069 0 +-2069 118 124 115 103 2070 0 +-2070 112 106 109 130 2071 0 +-238 1278 1281 1473 1489 2075 0 +-1068 1265 1268 1495 1512 2076 0 +-2076 1683 1704 1707 1719 1737 0 +-999 1310 1313 1481 1508 1515 0 +-2170 2167 2164 2161 2158 2171 0 +-2171 2155 2152 2149 2146 2172 0 +-2172 2143 2140 2137 2134 2173 0 +-2173 2131 2128 2125 2122 2174 0 +-2174 2119 2116 2113 2110 2175 0 +-2175 2107 2104 2101 2098 2176 0 +-2176 2095 2092 2089 2086 2177 0 diff --git a/tests/sat/unsat/bf2670-001.cnf b/tests/sat/unsat/bf2670-001.cnf new file mode 100644 index 00000000..8476b624 --- /dev/null +++ b/tests/sat/unsat/bf2670-001.cnf @@ -0,0 +1,3447 @@ +c FILE: bf2670-001.cnf +c +c SOURCE: Allen Van Gelder (avg@cs.ucsd.edu) and Yumi Tsuji +c (tsuji@cse.ucsc.edu) +c +c Nemesis formula in 6CNF in accordance with DIMACS CNF format: +c Filename: MCNC/c2670/c2670.tdl +c Formula number 1 +c 4852 variables (range: 2 - 4853) +c 3434 clauses +c +c p cnf 4853 3434 +p cnf 1393 3434 +341 0 +-1380 0 +1393 0 +341 0 +-342 0 +340 0 +195 -196 0 +-195 196 0 +340 342 0 +-340 -342 0 +-347 -344 0 +347 344 0 +340 195 0 +-340 -195 0 +1380 -342 0 +-1380 342 0 +1380 -196 0 +-1380 196 0 +342 -196 0 +-342 196 0 +-128 -1382 0 +126 -1382 0 +128 -1383 0 +-126 -1383 0 +-1383 1381 0 +-1382 1381 0 +1226 126 0 +-1226 -126 0 +-1227 127 0 +1228 128 0 +-1228 -128 0 +1110 -1226 0 +-1110 1226 0 +1110 -1229 0 +-1110 1229 0 +1111 -1227 0 +1111 -1230 0 +1112 -1228 0 +-1112 1228 0 +1112 -1231 0 +-1112 1231 0 +1119 1110 0 +-1108 1111 0 +-1117 1111 0 +-1120 1111 0 +1121 1112 0 +930 -1113 0 +-930 1113 0 +930 -1116 0 +-930 1116 0 +930 -1119 0 +-930 1119 0 +931 -1114 0 +931 -1117 0 +931 -1120 0 +932 -1115 0 +-932 1115 0 +932 -1118 0 +-932 1118 0 +932 -1121 0 +-932 1121 0 +-937 931 0 +-940 931 0 +-943 931 0 +-943 -946 0 +568 -945 0 +-568 945 0 +568 -946 0 +-568 946 0 +-563 -568 0 +-569 -563 0 +565 -569 0 +-565 569 0 +565 -570 0 +-565 570 0 +-773 -565 0 +-788 -565 0 +-769 -565 0 +-694 -565 0 +-697 -694 0 +-695 -694 0 +699 695 0 +-699 -695 0 +693 -698 0 +-693 698 0 +693 -699 0 +-693 699 0 +705 693 0 +707 693 0 +708 693 0 +306 -431 0 +-306 431 0 +306 -432 0 +-306 432 0 +306 -441 0 +-306 441 0 +306 -443 0 +-306 443 0 +306 -452 0 +-306 452 0 +306 -476 0 +-306 476 0 +306 -480 0 +-306 480 0 +306 -483 0 +-306 483 0 +306 -577 0 +-306 577 0 +306 -579 0 +-306 579 0 +306 -684 0 +-306 684 0 +306 -686 0 +-306 686 0 +306 -691 0 +-306 691 0 +306 -708 0 +-306 708 0 +306 -710 0 +-306 710 0 +306 -808 0 +-306 808 0 +306 -906 0 +-306 906 0 +306 -910 0 +-306 910 0 +306 -1037 0 +-306 1037 0 +306 -1043 0 +-306 1043 0 +306 -1053 0 +-306 1053 0 +306 -1056 0 +-306 1056 0 +306 -1062 0 +-306 1062 0 +306 -1140 0 +-306 1140 0 +306 -1145 0 +-306 1145 0 +306 -1150 0 +-306 1150 0 +306 -1182 0 +-306 1182 0 +306 -1290 0 +-306 1290 0 +468 306 0 +470 306 0 +472 306 0 +465 -471 0 +-465 471 0 +465 -472 0 +-465 472 0 +630 465 0 +-630 -465 0 +627 -630 0 +-627 630 0 +627 -631 0 +-627 631 0 +627 -735 0 +-627 735 0 +627 -850 0 +-627 850 0 +497 627 0 +635 627 0 +632 627 0 +633 632 0 +118 632 0 +634 632 0 +212 -221 0 +-212 221 0 +212 -222 0 +-212 222 0 +212 -226 0 +-212 226 0 +212 -229 0 +-212 229 0 +212 -236 0 +-212 236 0 +212 -241 0 +-212 241 0 +212 -355 0 +-212 355 0 +212 -357 0 +-212 357 0 +212 -360 0 +-212 360 0 +212 -367 0 +-212 367 0 +212 -371 0 +-212 371 0 +212 -489 0 +-212 489 0 +212 -494 0 +-212 494 0 +212 -499 0 +-212 499 0 +212 -506 0 +-212 506 0 +212 -614 0 +-212 614 0 +212 -618 0 +-212 618 0 +212 -634 0 +-212 634 0 +212 -641 0 +-212 641 0 +212 -741 0 +-212 741 0 +620 212 0 +-620 -212 0 +98 -210 0 +-98 210 0 +98 -211 0 +-98 211 0 +98 -216 0 +-98 216 0 +98 -218 0 +-98 218 0 +98 -224 0 +-98 224 0 +98 -231 0 +-98 231 0 +98 -234 0 +-98 234 0 +98 -239 0 +-98 239 0 +98 -353 0 +-98 353 0 +98 -364 0 +-98 364 0 +98 -486 0 +-98 486 0 +98 -496 0 +-98 496 0 +98 -501 0 +-98 501 0 +98 -504 0 +-98 504 0 +98 -508 0 +-98 508 0 +98 -612 0 +-98 612 0 +98 -616 0 +-98 616 0 +98 -620 0 +-98 620 0 +98 -637 0 +-98 637 0 +98 -643 0 +-98 643 0 +98 -738 0 +-98 738 0 +39 -219 0 +-39 219 0 +39 -220 0 +-39 220 0 +39 -223 0 +-39 223 0 +39 -225 0 +-39 225 0 +39 -233 0 +-39 233 0 +39 -235 0 +-39 235 0 +39 -238 0 +-39 238 0 +39 -240 0 +-39 240 0 +39 -352 0 +-39 352 0 +39 -354 0 +-39 354 0 +39 -370 0 +-39 370 0 +39 -485 0 +-39 485 0 +39 -488 0 +-39 488 0 +39 -503 0 +-39 503 0 +39 -505 0 +-39 505 0 +39 -507 0 +-39 507 0 +39 -613 0 +-39 613 0 +39 -615 0 +-39 615 0 +39 -617 0 +-39 617 0 +39 -619 0 +-39 619 0 +39 -633 0 +-39 633 0 +39 -636 0 +-39 636 0 +39 -644 0 +-39 644 0 +636 635 0 +9 635 0 +637 635 0 +207 -208 0 +-207 208 0 +207 -209 0 +-207 209 0 +207 -213 0 +-207 213 0 +207 -215 0 +-207 215 0 +207 -228 0 +-207 228 0 +207 -230 0 +-207 230 0 +207 -356 0 +-207 356 0 +207 -359 0 +-207 359 0 +207 -363 0 +-207 363 0 +207 -366 0 +-207 366 0 +207 -493 0 +-207 493 0 +207 -495 0 +-207 495 0 +207 -498 0 +-207 498 0 +207 -500 0 +-207 500 0 +207 -640 0 +-207 640 0 +207 -642 0 +-207 642 0 +207 -737 0 +-207 737 0 +207 -740 0 +-207 740 0 +644 207 0 +-644 -207 0 +466 -469 0 +-466 469 0 +466 -470 0 +-466 470 0 +-114 -466 0 +-856 -466 0 +857 856 0 +-857 -856 0 +732 -749 0 +-732 749 0 +732 -750 0 +-732 750 0 +732 -857 0 +-732 857 0 +732 -985 0 +-732 985 0 +739 732 0 +237 732 0 +736 732 0 +737 736 0 +64 736 0 +738 736 0 +740 739 0 +34 739 0 +741 739 0 +78 -467 0 +-78 467 0 +78 -468 0 +-78 468 0 +519 -706 0 +-519 706 0 +519 -707 0 +-519 707 0 +519 -727 0 +-519 727 0 +519 -814 0 +-519 814 0 +519 -840 0 +-519 840 0 +261 519 0 +520 519 0 +521 519 0 +522 521 0 +85 521 0 +523 521 0 +244 -254 0 +-244 254 0 +244 -255 0 +-244 255 0 +244 -260 0 +-244 260 0 +244 -263 0 +-244 263 0 +244 -271 0 +-244 271 0 +244 -276 0 +-244 276 0 +244 -379 0 +-244 379 0 +244 -380 0 +-244 380 0 +244 -391 0 +-244 391 0 +244 -399 0 +-244 399 0 +244 -405 0 +-244 405 0 +244 -515 0 +-244 515 0 +244 -518 0 +-244 518 0 +244 -523 0 +-244 523 0 +244 -529 0 +-244 529 0 +244 -533 0 +-244 533 0 +244 -537 0 +-244 537 0 +244 -647 0 +-244 647 0 +244 -656 0 +-244 656 0 +244 -661 0 +-244 661 0 +509 244 0 +-509 -244 0 +46 -247 0 +-46 247 0 +46 -248 0 +-46 248 0 +46 -252 0 +-46 252 0 +46 -258 0 +-46 258 0 +46 -266 0 +-46 266 0 +46 -269 0 +-46 269 0 +46 -274 0 +-46 274 0 +46 -376 0 +-46 376 0 +46 -385 0 +-46 385 0 +46 -388 0 +-46 388 0 +46 -397 0 +-46 397 0 +46 -402 0 +-46 402 0 +46 -407 0 +-46 407 0 +46 -410 0 +-46 410 0 +46 -509 0 +-46 509 0 +46 -512 0 +-46 512 0 +46 -526 0 +-46 526 0 +46 -650 0 +-46 650 0 +46 -653 0 +-46 653 0 +46 -659 0 +-46 659 0 +46 -663 0 +-46 663 0 +84 -245 0 +-84 245 0 +84 -246 0 +-84 246 0 +84 -249 0 +-84 249 0 +84 -251 0 +-84 251 0 +84 -253 0 +-84 253 0 +84 -257 0 +-84 257 0 +84 -259 0 +-84 259 0 +84 -268 0 +-84 268 0 +84 -270 0 +-84 270 0 +84 -273 0 +-84 273 0 +84 -275 0 +-84 275 0 +84 -381 0 +-84 381 0 +84 -396 0 +-84 396 0 +84 -398 0 +-84 398 0 +84 -401 0 +-84 401 0 +84 -522 0 +-84 522 0 +84 -532 0 +-84 532 0 +84 -658 0 +-84 658 0 +84 -660 0 +-84 660 0 +84 -662 0 +-84 662 0 +84 -665 0 +-84 665 0 +662 520 0 +86 520 0 +663 520 0 +262 -264 0 +-262 264 0 +262 -265 0 +-262 265 0 +262 -375 0 +-262 375 0 +262 -378 0 +-262 378 0 +262 -384 0 +-262 384 0 +262 -387 0 +-262 387 0 +262 -390 0 +-262 390 0 +262 -404 0 +-262 404 0 +262 -406 0 +-262 406 0 +262 -409 0 +-262 409 0 +262 -511 0 +-262 511 0 +262 -514 0 +-262 514 0 +262 -517 0 +-262 517 0 +262 -525 0 +-262 525 0 +262 -528 0 +-262 528 0 +262 -536 0 +-262 536 0 +262 -646 0 +-262 646 0 +262 -649 0 +-262 649 0 +262 -652 0 +-262 652 0 +262 -655 0 +-262 655 0 +665 262 0 +-665 -262 0 +58 -575 0 +-58 575 0 +58 -576 0 +-58 576 0 +58 -705 0 +-58 705 0 +58 -804 0 +-58 804 0 +58 -907 0 +-58 907 0 +58 -912 0 +-58 912 0 +58 -1051 0 +-58 1051 0 +58 -1152 0 +-58 1152 0 +574 -696 0 +-574 696 0 +574 -697 0 +-574 697 0 +576 574 0 +571 574 0 +577 574 0 +573 571 0 +-573 -571 0 +76 -572 0 +-76 572 0 +76 -573 0 +-76 573 0 +76 -858 0 +-76 858 0 +76 -1102 0 +-76 1102 0 +-873 -769 0 +-771 -769 0 +-767 -769 0 +868 767 0 +-868 -767 0 +768 -868 0 +-768 868 0 +768 -869 0 +-768 869 0 +1051 768 0 +1052 768 0 +1053 768 0 +382 -730 0 +-382 730 0 +382 -731 0 +-382 731 0 +382 -843 0 +-382 843 0 +382 -918 0 +-382 918 0 +382 -1052 0 +-382 1052 0 +242 382 0 +377 382 0 +374 382 0 +375 374 0 +95 374 0 +376 374 0 +245 242 0 +112 242 0 +247 242 0 +870 771 0 +-870 -771 0 +772 -870 0 +-772 870 0 +772 -871 0 +-772 871 0 +-797 -772 0 +-799 -772 0 +-800 -772 0 +296 -425 0 +-296 425 0 +296 -426 0 +-296 426 0 +296 -434 0 +-296 434 0 +296 -438 0 +-296 438 0 +296 -446 0 +-296 446 0 +296 -454 0 +-296 454 0 +296 -458 0 +-296 458 0 +296 -461 0 +-296 461 0 +296 -547 0 +-296 547 0 +296 -557 0 +-296 557 0 +296 -561 0 +-296 561 0 +296 -582 0 +-296 582 0 +296 -676 0 +-296 676 0 +296 -680 0 +-296 680 0 +296 -704 0 +-296 704 0 +296 -800 0 +-296 800 0 +296 -812 0 +-296 812 0 +296 -902 0 +-296 902 0 +296 -915 0 +-296 915 0 +296 -1036 0 +-296 1036 0 +296 -1040 0 +-296 1040 0 +296 -1059 0 +-296 1059 0 +296 -1064 0 +-296 1064 0 +296 -1066 0 +-296 1066 0 +296 -1137 0 +-296 1137 0 +296 -1143 0 +-296 1143 0 +296 -1178 0 +-296 1178 0 +296 -1185 0 +-296 1185 0 +296 -1188 0 +-296 1188 0 +684 296 0 +-684 -296 0 +51 -798 0 +-51 798 0 +51 -799 0 +-51 799 0 +51 -920 0 +-51 920 0 +51 -987 0 +-51 987 0 +421 -555 0 +-421 555 0 +421 -556 0 +-421 556 0 +421 -560 0 +-421 560 0 +421 -683 0 +-421 683 0 +421 -688 0 +-421 688 0 +421 -701 0 +-421 701 0 +421 -703 0 +-421 703 0 +421 -797 0 +-421 797 0 +421 -810 0 +-421 810 0 +575 421 0 +-575 -421 0 +770 -873 0 +-770 873 0 +770 -874 0 +-770 874 0 +770 -880 0 +-770 880 0 +877 770 0 +-877 -770 0 +692 -877 0 +-692 877 0 +692 -878 0 +-692 878 0 +692 -1031 0 +-692 1031 0 +-1026 -788 0 +1028 1026 0 +1030 1026 0 +1031 1026 0 +1012 1026 0 +-1015 -1012 0 +865 -1014 0 +-865 1014 0 +865 -1015 0 +-865 1015 0 +867 865 0 +-867 -865 0 +777 -866 0 +-777 866 0 +777 -867 0 +-777 867 0 +777 -876 0 +-777 876 0 +-869 -1358 0 +871 -1358 0 +869 -1359 0 +-871 -1359 0 +-1359 777 0 +-1358 777 0 +1011 1010 0 +-1011 -1010 0 +-1020 -1011 0 +-1018 -1011 0 +1017 -1018 0 +-1017 1018 0 +1017 -1019 0 +-1017 1019 0 +1017 -1088 0 +-1017 1088 0 +1077 1017 0 +-1077 -1017 0 +393 -552 0 +-393 552 0 +393 -553 0 +-393 553 0 +393 -752 0 +-393 752 0 +393 -899 0 +-393 899 0 +393 -980 0 +-393 980 0 +393 -1024 0 +-393 1024 0 +393 -1077 0 +-393 1077 0 +393 -1083 0 +-393 1083 0 +394 393 0 +256 393 0 +386 393 0 +387 386 0 +66 386 0 +388 386 0 +517 394 0 +40 394 0 +518 394 0 +1016 -1020 0 +-1016 1020 0 +1016 -1021 0 +-1016 1021 0 +1016 -1023 0 +-1016 1023 0 +1035 -1041 0 +-1035 1041 0 +1035 -1042 0 +-1035 1042 0 +1069 1035 0 +-1069 -1035 0 +101 -988 0 +-101 988 0 +101 -989 0 +-101 989 0 +101 -1069 0 +-101 1069 0 +1034 -1038 0 +-1034 1038 0 +1034 -1039 0 +-1034 1039 0 +1278 1034 0 +-1278 -1034 0 +23 -1277 0 +-23 1277 0 +23 -1278 0 +-23 1278 0 +23 -1281 0 +-23 1281 0 +23 -1299 0 +-23 1299 0 +1019 1013 0 +1021 1013 0 +782 -1029 0 +-782 1029 0 +782 -1030 0 +-782 1030 0 +-786 -1362 0 +785 -1362 0 +786 -1363 0 +-785 -1363 0 +-1363 782 0 +-1362 782 0 +781 -784 0 +-781 784 0 +781 -785 0 +-781 785 0 +804 781 0 +-1065 -803 0 +-1066 -803 0 +88 -923 0 +-88 923 0 +88 -924 0 +-88 924 0 +88 -1065 0 +-88 1065 0 +88 -1177 0 +-88 1177 0 +-1148 -709 0 +-710 -709 0 +73 -1148 0 +-73 1148 0 +73 -1149 0 +-73 1149 0 +73 -1283 0 +-73 1283 0 +73 -1285 0 +-73 1285 0 +73 -1286 0 +-73 1286 0 +73 -1300 0 +-73 1300 0 +783 -786 0 +-783 786 0 +783 -787 0 +-783 787 0 +-810 -783 0 +811 809 0 +812 809 0 +538 -806 0 +-538 806 0 +538 -807 0 +-538 807 0 +538 -811 0 +-538 811 0 +538 -900 0 +-538 900 0 +538 -983 0 +-538 983 0 +538 -1100 0 +-538 1100 0 +538 -1104 0 +-538 1104 0 +535 538 0 +272 538 0 +408 538 0 +409 408 0 +19 408 0 +410 408 0 +536 535 0 +91 535 0 +537 535 0 +807 805 0 +808 805 0 +1025 -1027 0 +-1025 1027 0 +1025 -1028 0 +-1025 1028 0 +1033 1025 0 +-1033 -1025 0 +879 -1032 0 +-879 1032 0 +879 -1033 0 +-879 1033 0 +-883 -1356 0 +882 -1356 0 +883 -1357 0 +-882 -1357 0 +-1357 879 0 +-1356 879 0 +681 -881 0 +-681 881 0 +681 -882 0 +-681 882 0 +-683 -681 0 +689 682 0 +686 682 0 +685 -689 0 +-685 689 0 +685 -690 0 +-685 690 0 +685 -925 0 +-685 925 0 +922 685 0 +-922 -685 0 +59 -921 0 +-59 921 0 +59 -922 0 +-59 922 0 +59 -926 0 +-59 926 0 +679 677 0 +680 677 0 +675 -678 0 +-675 678 0 +675 -679 0 +-675 679 0 +852 675 0 +-852 -675 0 +50 -852 0 +-50 852 0 +50 -853 0 +-50 853 0 +50 -1284 0 +-50 1284 0 +50 -1298 0 +-50 1298 0 +700 -883 0 +-700 883 0 +700 -884 0 +-700 884 0 +-578 -700 0 +-701 -700 0 +530 -580 0 +-530 580 0 +530 -581 0 +-530 581 0 +530 -664 0 +-530 664 0 +530 -842 0 +-530 842 0 +530 -855 0 +-530 855 0 +530 -917 0 +-530 917 0 +530 -984 0 +-530 984 0 +527 530 0 +395 530 0 +524 530 0 +525 524 0 +57 524 0 +526 524 0 +528 527 0 +26 527 0 +529 527 0 +1269 1134 0 +1265 1134 0 +1262 1134 0 +1215 -1254 0 +-1215 1254 0 +1215 -1255 0 +-1215 1255 0 +1215 -1262 0 +-1215 1262 0 +1216 1215 0 +-1216 -1215 0 +534 -969 0 +-534 969 0 +534 -970 0 +-534 970 0 +534 -979 0 +-534 979 0 +534 -1049 0 +-534 1049 0 +534 -1214 0 +-534 1214 0 +534 -1216 0 +-534 1216 0 +534 -1234 0 +-534 1234 0 +534 -1243 0 +-534 1243 0 +534 -1251 0 +-534 1251 0 +534 -1264 0 +-534 1264 0 +534 -1274 0 +-534 1274 0 +403 534 0 +400 534 0 +531 534 0 +532 531 0 +36 531 0 +533 531 0 +401 400 0 +27 400 0 +402 400 0 +1054 -1265 0 +-1054 1265 0 +1054 -1266 0 +-1054 1266 0 +1054 -1273 0 +-1054 1273 0 +53 -1057 0 +-53 1057 0 +53 -1058 0 +-53 1058 0 +53 -1063 0 +-53 1063 0 +53 -1125 0 +-53 1125 0 +69 -845 0 +-69 845 0 +69 -846 0 +-69 846 0 +69 -1055 0 +-69 1055 0 +69 -1061 0 +-69 1061 0 +69 -1291 0 +-69 1291 0 +1258 -1269 0 +-1258 1269 0 +1258 -1270 0 +-1258 1270 0 +-1259 -1336 0 +1261 -1336 0 +1259 -1337 0 +-1261 -1337 0 +-1337 1258 0 +-1336 1258 0 +1129 -1260 0 +-1129 1260 0 +1129 -1261 0 +-1129 1261 0 +990 -1138 0 +-990 1138 0 +990 -1139 0 +-990 1139 0 +990 -1144 0 +-990 1144 0 +1123 990 0 +-1123 -990 0 +1 -1122 0 +-1 1122 0 +1 -1123 0 +-1 1123 0 +1 -1206 0 +-1 1206 0 +844 -1135 0 +-844 1135 0 +844 -1136 0 +-844 1136 0 +844 -1142 0 +-844 1142 0 +1282 844 0 +-1282 -844 0 +48 -1279 0 +-48 1279 0 +48 -1280 0 +-48 1280 0 +48 -1282 0 +-48 1282 0 +48 -1301 0 +-48 1301 0 +392 -981 0 +-392 981 0 +392 -982 0 +-392 982 0 +392 -1050 0 +-392 1050 0 +392 -1097 0 +-392 1097 0 +392 -1235 0 +-392 1235 0 +392 -1238 0 +-392 1238 0 +392 -1259 0 +-392 1259 0 +389 392 0 +267 392 0 +383 392 0 +384 383 0 +22 383 0 +385 383 0 +390 389 0 +115 389 0 +391 389 0 +1146 1133 0 +-1146 -1133 0 +-1267 -1146 0 +-1271 -1146 0 +1304 1271 0 +1217 -1304 0 +-1217 1304 0 +1217 -1305 0 +-1217 1305 0 +1218 1217 0 +-1218 -1217 0 +516 -1044 0 +-516 1044 0 +516 -1045 0 +-516 1045 0 +516 -1048 0 +-516 1048 0 +516 -1082 0 +-516 1082 0 +516 -1213 0 +-516 1213 0 +516 -1218 0 +-516 1218 0 +516 -1287 0 +-516 1287 0 +513 516 0 +243 516 0 +510 516 0 +511 510 0 +117 510 0 +512 510 0 +514 513 0 +42 513 0 +515 513 0 +-1187 -1186 0 +-1188 -1186 0 +110 -1126 0 +-110 1126 0 +110 -1127 0 +-110 1127 0 +110 -1187 0 +-110 1187 0 +110 -1189 0 +-110 1189 0 +-1289 -1288 0 +-1290 -1288 0 +3 -456 0 +-3 456 0 +3 -457 0 +-3 457 0 +3 -1086 0 +-3 1086 0 +3 -1190 0 +-3 1190 0 +3 -1193 0 +-3 1193 0 +3 -1289 0 +-3 1289 0 +1270 1267 0 +1272 1268 0 +-1272 -1268 0 +1273 1272 0 +1274 1272 0 +-1264 -1263 0 +-1266 -1263 0 +1128 1130 0 +1132 1130 0 +1096 -1131 0 +-1096 1131 0 +1096 -1132 0 +-1096 1132 0 +1096 -1246 0 +-1096 1246 0 +1097 1096 0 +-1097 -1096 0 +1260 1128 0 +-1260 -1128 0 +774 773 0 +775 773 0 +776 773 0 +866 776 0 +778 776 0 +779 776 0 +780 776 0 +787 780 0 +-787 -780 0 +-1032 -779 0 +-880 -779 0 +784 778 0 +-784 -778 0 +1029 775 0 +1022 775 0 +872 775 0 +1027 775 0 +-874 -872 0 +-1014 -872 0 +-1023 -1022 0 +-1024 -1022 0 +876 774 0 +881 774 0 +878 774 0 +875 774 0 +884 875 0 +-884 -875 0 +280 564 0 +754 564 0 +756 564 0 +135 -755 0 +-135 755 0 +135 -756 0 +-135 756 0 +143 135 0 +-143 -135 0 +136 -143 0 +-136 143 0 +136 -144 0 +-136 144 0 +136 -152 0 +-136 152 0 +-302 -1376 0 +301 -1376 0 +302 -1377 0 +-301 -1377 0 +-1377 136 0 +-1376 136 0 +297 -300 0 +-297 300 0 +297 -301 0 +-297 301 0 +440 297 0 +450 297 0 +441 297 0 +439 -450 0 +-439 450 0 +439 -451 0 +-439 451 0 +845 439 0 +-845 -439 0 +304 -429 0 +-304 429 0 +304 -430 0 +-304 430 0 +304 -440 0 +-304 440 0 +304 -442 0 +-304 442 0 +304 -449 0 +-304 449 0 +304 -473 0 +-304 473 0 +304 -477 0 +-304 477 0 +304 -482 0 +-304 482 0 +427 304 0 +-427 -304 0 +294 -423 0 +-294 423 0 +294 -424 0 +-294 424 0 +294 -427 0 +-294 427 0 +294 -433 0 +-294 433 0 +294 -435 0 +-294 435 0 +294 -445 0 +-294 445 0 +294 -453 0 +-294 453 0 +294 -455 0 +-294 455 0 +294 -460 0 +-294 460 0 +467 294 0 +464 294 0 +471 294 0 +469 464 0 +-469 -464 0 +299 -302 0 +-299 302 0 +299 -303 0 +-299 303 0 +442 299 0 +462 299 0 +443 299 0 +372 -462 0 +-372 462 0 +372 -463 0 +-372 463 0 +372 -587 0 +-372 587 0 +372 -745 0 +-372 745 0 +227 372 0 +373 372 0 +369 372 0 +370 369 0 +119 369 0 +371 369 0 +507 373 0 +89 373 0 +508 373 0 +137 -753 0 +-137 753 0 +137 -754 0 +-137 754 0 +139 -147 0 +-139 147 0 +139 -148 0 +-139 148 0 +-435 -139 0 +-437 -139 0 +-438 -139 0 +122 -436 0 +-122 436 0 +122 -437 0 +-122 437 0 +122 -1068 0 +-122 1068 0 +122 -1070 0 +-122 1070 0 +122 -1085 0 +-122 1085 0 +138 -145 0 +-138 145 0 +138 -146 0 +-138 146 0 +-424 -138 0 +-422 -138 0 +-426 -138 0 +478 422 0 +-478 -422 0 +202 -478 0 +-202 478 0 +202 -479 0 +-202 479 0 +202 -622 0 +-202 622 0 +202 -626 0 +-202 626 0 +203 202 0 +204 202 0 +205 202 0 +209 205 0 +60 205 0 +211 205 0 +213 203 0 +4 203 0 +221 203 0 +-283 -280 0 +141 -282 0 +-141 282 0 +141 -283 0 +-141 283 0 +141 -287 0 +-141 287 0 +-155 -1378 0 +157 -1378 0 +155 -1379 0 +-157 -1379 0 +-1379 141 0 +-1378 141 0 +153 -156 0 +-153 156 0 +153 -157 0 +-153 157 0 +-455 -153 0 +-457 -153 0 +-458 -153 0 +151 -154 0 +-151 154 0 +151 -155 0 +-151 155 0 +-445 -151 0 +-444 -151 0 +-446 -151 0 +448 444 0 +-448 -444 0 +305 -447 0 +-305 447 0 +305 -448 0 +-305 448 0 +305 -586 0 +-305 586 0 +305 -628 0 +-305 628 0 +350 305 0 +351 305 0 +206 305 0 +208 206 0 +18 206 0 +210 206 0 +356 350 0 +33 350 0 +357 350 0 +998 277 0 +288 277 0 +279 -288 0 +-279 288 0 +279 -289 0 +-279 289 0 +279 -997 0 +-279 997 0 +-423 -279 0 +-1275 -279 0 +-425 -279 0 +295 -1275 0 +-295 1275 0 +295 -1276 0 +-295 1276 0 +584 295 0 +-584 -295 0 +481 -583 0 +-481 583 0 +481 -584 0 +-481 584 0 +481 -751 0 +-481 751 0 +481 -815 0 +-481 815 0 +481 -841 0 +-481 841 0 +645 481 0 +250 481 0 +648 481 0 +649 648 0 +2 648 0 +650 648 0 +646 645 0 +31 645 0 +647 645 0 +278 -998 0 +-278 998 0 +278 -999 0 +-278 999 0 +290 278 0 +-290 -278 0 +284 -290 0 +-284 290 0 +284 -291 0 +-284 291 0 +430 284 0 +474 284 0 +432 284 0 +428 -474 0 +-428 474 0 +428 -475 0 +-428 475 0 +1098 428 0 +-1098 -428 0 +100 -1098 0 +-100 1098 0 +100 -1099 0 +-100 1099 0 +100 -1103 0 +-100 1103 0 +761 281 0 +-761 -281 0 +-997 -761 0 +-999 -761 0 +292 -566 0 +-292 566 0 +292 -567 0 +-292 567 0 +-293 -292 0 +-285 -292 0 +-149 -292 0 +-140 -292 0 +-282 -140 0 +-142 -140 0 +-144 -140 0 +-146 -140 0 +148 142 0 +-148 -142 0 +-152 -149 0 +-150 -149 0 +-154 -149 0 +156 150 0 +-156 -150 0 +-287 -285 0 +-289 -285 0 +-286 -285 0 +-291 -285 0 +753 286 0 +755 286 0 +-300 -293 0 +-298 -293 0 +303 298 0 +-303 -298 0 +566 562 0 +-566 -562 0 +927 -939 0 +-927 939 0 +927 -942 0 +-927 942 0 +928 -940 0 +928 -943 0 +929 -941 0 +-929 941 0 +929 -944 0 +-929 944 0 +-933 -927 0 +-945 -927 0 +-934 928 0 +-934 -945 0 +-935 -929 0 +-945 -929 0 +176 -933 0 +-176 933 0 +176 -936 0 +-176 936 0 +176 -1194 0 +-176 1194 0 +177 -934 0 +177 -937 0 +177 -1195 0 +178 -935 0 +-178 935 0 +178 -938 0 +-178 938 0 +178 -1196 0 +-178 1196 0 +-169 -176 0 +-170 177 0 +-187 182 0 +-183 186 0 +-171 -178 0 +-179 -169 0 +-173 170 0 +-173 166 0 +-173 -179 0 +-167 -179 0 +-179 -171 0 +175 -179 0 +-175 179 0 +175 -182 0 +-175 182 0 +-671 -175 0 +-859 -175 0 +-666 -175 0 +-860 -175 0 +-861 -860 0 +-1004 -860 0 +558 -1004 0 +-558 1004 0 +558 -1005 0 +-558 1005 0 +-560 -558 0 +-728 -558 0 +-561 -558 0 +559 -728 0 +-559 728 0 +559 -729 0 +-559 729 0 +727 559 0 +-727 -559 0 +1006 861 0 +-1006 -861 0 +554 -1006 0 +-554 1006 0 +554 -1007 0 +-554 1007 0 +-556 -554 0 +-572 -554 0 +-557 -554 0 +-670 -666 0 +-667 -666 0 +-765 -666 0 +668 -765 0 +-668 765 0 +668 -766 0 +-668 766 0 +-703 -668 0 +-742 -668 0 +-704 -668 0 +702 -742 0 +-702 742 0 +702 -743 0 +-702 743 0 +731 702 0 +-731 -702 0 +996 667 0 +-996 -667 0 +546 -995 0 +-546 995 0 +546 -996 0 +-546 996 0 +-555 -546 0 +-798 -546 0 +-547 -546 0 +545 -669 0 +-545 669 0 +545 -670 0 +-545 670 0 +545 -1000 0 +-545 1000 0 +545 -1003 0 +-545 1003 0 +545 -1233 0 +-545 1233 0 +-1005 -1350 0 +1007 -1350 0 +1005 -1351 0 +-1007 -1351 0 +-1351 545 0 +-1350 545 0 +-1002 -859 0 +-1001 -859 0 +-539 -859 0 +-1003 -859 0 +863 539 0 +543 539 0 +541 539 0 +-552 -1370 0 +550 -1370 0 +552 -1371 0 +-550 -1371 0 +-1371 541 0 +-1370 541 0 +548 -550 0 +-548 550 0 +548 -551 0 +-548 551 0 +412 -542 0 +-412 542 0 +412 -543 0 +-412 543 0 +412 -760 0 +-412 760 0 +412 -992 0 +-412 992 0 +540 -863 0 +-540 863 0 +540 -864 0 +-540 864 0 +758 -1008 0 +-758 1008 0 +758 -1009 0 +-758 1009 0 +1152 758 0 +-1177 -1151 0 +-1178 -1151 0 +-1149 -1147 0 +-1150 -1147 0 +757 -993 0 +-757 993 0 +757 -994 0 +-757 994 0 +912 757 0 +-913 -908 0 +-910 -908 0 +909 -913 0 +-909 913 0 +909 -914 0 +-909 914 0 +909 -1095 0 +-909 1095 0 +1104 909 0 +-1104 -909 0 +-914 -911 0 +-915 -911 0 +-1241 -1001 0 +-1249 -1241 0 +-1256 -1241 0 +-1243 -1241 0 +1242 -1256 0 +-1242 1256 0 +1242 -1257 0 +-1242 1257 0 +1253 1242 0 +-1253 -1242 0 +1060 -1252 0 +-1060 1252 0 +1060 -1253 0 +-1060 1253 0 +1237 -1249 0 +-1237 1249 0 +1237 -1250 0 +-1237 1250 0 +1141 -1239 0 +-1141 1239 0 +1141 -1240 0 +-1141 1240 0 +-1287 -1245 0 +1181 1180 0 +1182 1180 0 +1189 1181 0 +-1189 -1181 0 +1191 1183 0 +1185 1183 0 +1184 -1191 0 +-1184 1191 0 +1184 -1192 0 +-1184 1192 0 +1190 1184 0 +-1190 -1184 0 +-1250 -1244 0 +1252 1248 0 +1251 1248 0 +1255 1247 0 +1257 1247 0 +1239 1236 0 +-1239 -1236 0 +416 -763 0 +-416 763 0 +416 -764 0 +-416 764 0 +416 -1002 0 +-416 1002 0 +413 -419 0 +-413 419 0 +413 -420 0 +-413 420 0 +-688 -413 0 +690 687 0 +691 687 0 +678 674 0 +676 674 0 +415 -417 0 +-415 417 0 +415 -418 0 +-415 418 0 +907 415 0 +-905 -903 0 +-906 -903 0 +854 -904 0 +-854 904 0 +854 -905 0 +-854 905 0 +854 -1087 0 +-854 1087 0 +855 854 0 +-855 -854 0 +-904 -901 0 +-902 -901 0 +411 671 0 +672 671 0 +673 671 0 +992 673 0 +991 673 0 +544 673 0 +994 673 0 +-763 -544 0 +-669 -544 0 +1009 991 0 +-1009 -991 0 +864 672 0 +549 672 0 +862 672 0 +762 672 0 +764 762 0 +-764 -762 0 +-1000 -862 0 +-759 -862 0 +760 759 0 +-760 -759 0 +-551 -549 0 +-553 -549 0 +542 411 0 +419 411 0 +414 411 0 +417 411 0 +1233 414 0 +-1233 -414 0 +316 172 0 +328 172 0 +321 172 0 +-317 173 0 +-317 321 0 +-317 328 0 +318 174 0 +328 174 0 +321 174 0 +307 -320 0 +-307 320 0 +307 -321 0 +-307 321 0 +307 -327 0 +-307 327 0 +307 -330 0 +-307 330 0 +-313 -1374 0 +315 -1374 0 +313 -1375 0 +-315 -1375 0 +-1375 307 0 +-1374 307 0 +162 -314 0 +-162 314 0 +162 -315 0 +-162 315 0 +449 162 0 +451 162 0 +452 162 0 +163 -312 0 +-163 312 0 +163 -313 0 +-163 313 0 +-460 -163 0 +-459 -163 0 +-461 -163 0 +463 459 0 +-463 -459 0 +319 -328 0 +-319 328 0 +319 -329 0 +-319 329 0 +-324 -1372 0 +325 -1372 0 +324 -1373 0 +-325 -1373 0 +-1373 319 0 +-1372 319 0 +322 -325 0 +-322 325 0 +322 -326 0 +-322 326 0 +-433 -322 0 +-436 -322 0 +-434 -322 0 +190 -323 0 +-190 323 0 +190 -324 0 +-190 324 0 +477 190 0 +479 190 0 +480 190 0 +-337 -316 0 +-335 317 0 +-335 331 0 +-335 -337 0 +-332 -337 0 +-337 -318 0 +158 -199 0 +-158 199 0 +158 -200 0 +-158 200 0 +158 -337 0 +-158 337 0 +160 -308 0 +-160 308 0 +160 -309 0 +-160 309 0 +-453 -160 0 +-456 -160 0 +-454 -160 0 +159 -310 0 +-159 310 0 +159 -311 0 +-159 311 0 +429 159 0 +447 159 0 +431 159 0 +340 334 0 +346 334 0 +342 336 0 +346 336 0 +195 -345 0 +-195 345 0 +195 -346 0 +-195 346 0 +347 195 0 +-347 -195 0 +201 -347 0 +-201 347 0 +201 -348 0 +-201 348 0 +482 201 0 +583 201 0 +483 201 0 +344 340 0 +-344 -340 0 +198 -343 0 +-198 343 0 +198 -344 0 +-198 344 0 +198 -349 0 +-198 349 0 +473 198 0 +475 198 0 +476 198 0 +348 331 0 +349 331 0 +185 166 0 +-185 -166 0 +161 -185 0 +-161 185 0 +161 -186 0 +-161 186 0 +164 161 0 +165 161 0 +320 165 0 +309 165 0 +311 165 0 +-194 -164 0 +-191 -164 0 +-199 -191 0 +-192 -191 0 +-193 -191 0 +-189 -191 0 +323 189 0 +-323 -189 0 +327 193 0 +-327 -193 0 +326 192 0 +-326 -192 0 +-200 -194 0 +-345 -194 0 +-197 -194 0 +-343 -194 0 +329 197 0 +330 197 0 +1113 1107 0 +-1113 -1107 0 +-1114 1108 0 +1115 1109 0 +-1115 -1109 0 +-134 -1385 0 +132 -1385 0 +134 -1386 0 +-132 -1386 0 +-1386 1384 0 +-1385 1384 0 +1306 132 0 +-1306 -132 0 +-1307 133 0 +1308 134 0 +-1308 -134 0 +1312 1306 0 +-1312 -1306 0 +-1313 1307 0 +1314 1308 0 +-1314 -1308 0 +1309 -1312 0 +-1309 1312 0 +1309 -1315 0 +-1309 1315 0 +1310 -1313 0 +1310 -1316 0 +1311 -1314 0 +-1311 1314 0 +1311 -1317 0 +-1311 1317 0 +-1322 -1309 0 +-1222 -1309 0 +-1223 1310 0 +-1223 -1322 0 +-1322 -1311 0 +-1224 -1311 0 +1320 1222 0 +1221 1222 0 +1324 1222 0 +1229 1222 0 +-1230 1223 0 +-1230 1324 0 +-1230 1221 0 +-1230 1320 0 +1320 1224 0 +1221 1224 0 +1324 1224 0 +1231 1224 0 +1225 -1324 0 +-1225 1324 0 +1225 -1325 0 +-1225 1325 0 +1232 1225 0 +52 1225 0 +-1219 -1338 0 +1211 -1338 0 +1219 -1339 0 +-1211 -1339 0 +-1339 1232 0 +-1338 1232 0 +1212 1211 0 +960 1211 0 +848 -958 0 +-848 958 0 +848 -959 0 +-848 959 0 +848 -968 0 +-848 968 0 +-83 -1328 0 +24 -1328 0 +83 -1329 0 +-24 -1329 0 +-1329 848 0 +-1328 848 0 +953 -956 0 +-953 956 0 +953 -957 0 +-953 957 0 +953 -965 0 +-953 965 0 +953 -967 0 +-953 967 0 +-113 -1326 0 +38 -1326 0 +113 -1327 0 +-38 -1327 0 +-1327 953 0 +-1326 953 0 +951 -954 0 +-951 954 0 +951 -955 0 +-951 955 0 +951 -966 0 +-951 966 0 +-71 -1330 0 +104 -1330 0 +71 -1331 0 +-104 -1331 0 +-1331 951 0 +-1330 951 0 +847 -963 0 +-847 963 0 +847 -964 0 +-847 964 0 +958 847 0 +-958 -847 0 +950 -961 0 +-950 961 0 +950 -962 0 +-950 962 0 +954 950 0 +-954 -950 0 +952 1212 0 +-952 -1212 0 +-1220 -1340 0 +1124 -1340 0 +1220 -1341 0 +-1124 -1341 0 +-1341 1219 0 +-1340 1219 0 +-1126 -1342 0 +1125 -1342 0 +1126 -1343 0 +-1125 -1343 0 +-1343 1124 0 +-1342 1124 0 +1199 1221 0 +-1199 -1221 0 +1201 1199 0 +1203 1199 0 +1205 1199 0 +720 -1204 0 +-720 1204 0 +720 -1205 0 +-720 1205 0 +1080 720 0 +623 -1080 0 +-623 1080 0 +623 -1081 0 +-623 1081 0 +624 623 0 +625 623 0 +49 -624 0 +-49 624 0 +49 -625 0 +-49 625 0 +726 722 0 +-726 -722 0 +721 -725 0 +-721 725 0 +721 -726 0 +-721 726 0 +-629 -1366 0 +713 -1366 0 +629 -1367 0 +-713 -1367 0 +-1367 721 0 +-1366 721 0 +610 -714 0 +-610 714 0 +610 -715 0 +-610 715 0 +611 610 0 +368 -716 0 +-368 716 0 +368 -717 0 +-368 717 0 +368 -718 0 +-368 718 0 +368 -744 0 +-368 744 0 +365 368 0 +232 368 0 +362 368 0 +363 362 0 +7 362 0 +364 362 0 +366 365 0 +30 365 0 +367 365 0 +-631 -1368 0 +747 -1368 0 +631 -1369 0 +-747 -1369 0 +-1369 629 0 +-1368 629 0 +490 -747 0 +-490 747 0 +490 -748 0 +-490 748 0 +490 -986 0 +-490 986 0 +491 490 0 +484 490 0 +487 490 0 +492 490 0 +495 492 0 +121 492 0 +496 492 0 +488 487 0 +29 487 0 +489 487 0 +485 484 0 +87 484 0 +486 484 0 +493 491 0 +120 491 0 +494 491 0 +609 -723 0 +-609 723 0 +609 -724 0 +-609 724 0 +-608 -609 0 +-597 -609 0 +592 -605 0 +-592 605 0 +592 -606 0 +-592 606 0 +592 -607 0 +-592 607 0 +638 621 0 +502 621 0 +639 621 0 +642 639 0 +107 639 0 +643 639 0 +640 638 0 +47 638 0 +641 638 0 +585 -595 0 +-585 595 0 +585 -596 0 +-585 596 0 +585 -601 0 +-585 601 0 +585 -604 0 +-585 604 0 +588 -602 0 +-588 602 0 +588 -603 0 +-588 603 0 +593 588 0 +-593 -588 0 +589 -593 0 +-589 593 0 +589 -594 0 +-589 594 0 +589 -598 0 +-589 598 0 +-734 -1364 0 +749 -1364 0 +734 -1365 0 +-749 -1365 0 +-1365 589 0 +-1364 589 0 +361 -733 0 +-361 733 0 +361 -734 0 +-361 734 0 +358 361 0 +217 361 0 +214 361 0 +215 214 0 +70 214 0 +216 214 0 +359 358 0 +80 358 0 +360 358 0 +591 -599 0 +-591 599 0 +591 -600 0 +-591 600 0 +607 591 0 +-607 -591 0 +590 608 0 +-590 -608 0 +723 719 0 +-723 -719 0 +1075 -1202 0 +-1075 1202 0 +1075 -1203 0 +-1075 1203 0 +1172 1076 0 +1159 1076 0 +1167 1076 0 +1169 1167 0 +1175 1167 0 +1171 1167 0 +1157 -1170 0 +-1157 1170 0 +1157 -1171 0 +-1157 1171 0 +1165 1157 0 +-1165 -1157 0 +1158 -1165 0 +-1158 1165 0 +1158 -1166 0 +-1158 1166 0 +1158 -1174 0 +-1158 1174 0 +-108 -1332 0 +1291 -1332 0 +108 -1333 0 +-1291 -1333 0 +-1333 1158 0 +-1332 1158 0 +1153 -1175 0 +-1153 1175 0 +1153 -1176 0 +-1153 1176 0 +1162 1153 0 +-1162 -1153 0 +1154 -1162 0 +-1154 1162 0 +1154 -1163 0 +-1154 1163 0 +1154 -1164 0 +-1154 1164 0 +-1280 -1334 0 +1281 -1334 0 +1280 -1335 0 +-1281 -1335 0 +-1335 1154 0 +-1334 1154 0 +1155 -1168 0 +-1155 1168 0 +1155 -1169 0 +-1155 1169 0 +1160 1155 0 +-1160 -1155 0 +1156 -1160 0 +-1156 1160 0 +1156 -1161 0 +-1156 1161 0 +1156 -1173 0 +-1156 1173 0 +1173 1172 0 +1174 1172 0 +1176 1172 0 +96 -711 0 +-96 711 0 +96 -712 0 +-96 712 0 +96 -1074 0 +-96 1074 0 +65 -1072 0 +-65 1072 0 +65 -1073 0 +-65 1073 0 +1079 -1200 0 +-1079 1200 0 +1079 -1201 0 +-1079 1201 0 +1067 1079 0 +1081 1079 0 +-919 -1346 0 +888 -1346 0 +919 -1347 0 +-888 -1347 0 +-1347 1067 0 +-1346 1067 0 +-889 -888 0 +-789 -888 0 +794 -801 0 +-794 801 0 +794 -802 0 +-794 802 0 +794 -891 0 +-794 891 0 +746 -1046 0 +-746 1046 0 +746 -1047 0 +-746 1047 0 +746 -1078 0 +-746 1078 0 +746 -1302 0 +-746 1302 0 +746 -1303 0 +-746 1303 0 +654 746 0 +657 746 0 +651 746 0 +652 651 0 +97 651 0 +653 651 0 +655 654 0 +109 654 0 +656 654 0 +792 -795 0 +-792 795 0 +792 -796 0 +-792 796 0 +892 792 0 +-892 -792 0 +885 -892 0 +-885 892 0 +885 -893 0 +-885 893 0 +885 -896 0 +-885 896 0 +-1049 -1348 0 +1050 -1348 0 +1049 -1349 0 +-1050 -1349 0 +-1349 885 0 +-1348 885 0 +793 -894 0 +-793 894 0 +793 -895 0 +-793 895 0 +887 793 0 +-887 -793 0 +790 -886 0 +-790 886 0 +790 -887 0 +-790 887 0 +790 -890 0 +-790 890 0 +-899 -1354 0 +900 -1354 0 +899 -1355 0 +-900 -1355 0 +-1355 790 0 +-1354 790 0 +791 -897 0 +-791 897 0 +791 -898 0 +-791 898 0 +802 791 0 +-802 -791 0 +-814 -1360 0 +815 -1360 0 +814 -1361 0 +-815 -1361 0 +-1361 813 0 +-1360 813 0 +1106 -1320 0 +-1106 1320 0 +1106 -1321 0 +-1106 1321 0 +-821 -820 0 +-822 -820 0 +-816 -820 0 +-832 -816 0 +-825 -816 0 +-830 -816 0 +819 -830 0 +-819 830 0 +819 -831 0 +-819 831 0 +1179 819 0 +-1179 -819 0 +824 -836 0 +-824 836 0 +824 -837 0 +-824 837 0 +824 -1179 0 +-824 1179 0 +818 -825 0 +-818 825 0 +818 -826 0 +-818 826 0 +839 818 0 +-839 -818 0 +827 -834 0 +-827 834 0 +827 -835 0 +-827 835 0 +827 -839 0 +-827 839 0 +817 -832 0 +-817 832 0 +817 -833 0 +-817 833 0 +838 817 0 +-838 -817 0 +823 -828 0 +-823 828 0 +823 -829 0 +-823 829 0 +823 -838 0 +-823 838 0 +-921 -1352 0 +920 -1352 0 +921 -1353 0 +-920 -1353 0 +-1353 823 0 +-1352 823 0 +-828 -821 0 +-836 -821 0 +-826 -821 0 +-1085 -1344 0 +1086 -1344 0 +1085 -1345 0 +-1086 -1345 0 +-1345 1084 0 +-1344 1084 0 +1318 -1322 0 +-1318 1322 0 +1318 -1323 0 +-1318 1323 0 +1319 1318 0 +-1319 -1318 0 +851 -977 0 +-851 977 0 +851 -978 0 +-851 978 0 +851 -1319 0 +-851 1319 0 +849 -975 0 +-849 975 0 +849 -976 0 +-849 976 0 +1091 849 0 +1089 849 0 +971 849 0 +1207 849 0 +11 -1207 0 +-11 1207 0 +11 -1208 0 +-11 1208 0 +15 -971 0 +-15 971 0 +15 -972 0 +-15 972 0 +45 -1089 0 +-45 1089 0 +45 -1090 0 +-45 1090 0 +62 -1091 0 +-62 1091 0 +62 -1092 0 +-62 1092 0 +44 -1093 0 +-44 1093 0 +44 -1094 0 +-44 1094 0 +949 -973 0 +-949 973 0 +949 -974 0 +-949 974 0 +1294 949 0 +1197 949 0 +1292 949 0 +1296 949 0 +74 -1296 0 +-74 1296 0 +74 -1297 0 +-74 1297 0 +32 -1292 0 +-32 1292 0 +32 -1293 0 +-32 1293 0 +54 -1197 0 +-54 1197 0 +54 -1198 0 +-54 1198 0 +41 -1294 0 +-41 1294 0 +41 -1295 0 +-41 1295 0 +37 -1209 0 +-37 1209 0 +37 -1210 0 +-37 1210 0 +-131 -1388 0 +129 -1388 0 +131 -1389 0 +-129 -1389 0 +-1389 1387 0 +-1388 1387 0 +1315 129 0 +-1315 -129 0 +-1316 130 0 +1317 131 0 +-1317 -131 0 +-125 -1391 0 +123 -1391 0 +125 -1392 0 +-123 -1392 0 +-1392 1390 0 +-1391 1390 0 +1194 123 0 +-1194 -123 0 +-1195 124 0 +1196 125 0 +-1196 -125 0 +-1390 1393 0 +-1387 1393 0 +-1384 1393 0 +-1381 1393 0 +1382 128 -126 0 +1383 -128 126 0 +-1381 1383 1382 0 +-127 126 128 0 +-127 -126 -128 0 +-1111 1227 1230 0 +-1230 1229 1231 0 +-1230 -1229 -1231 0 +-1227 1226 1228 0 +-1227 -1226 -1228 0 +1116 1107 1110 0 +-1119 -1107 -1110 0 +-1119 -1116 -1110 0 +-1117 -1118 -1107 0 +-1117 -1116 -1109 0 +-1117 -1107 -1109 0 +-1108 -1109 -1116 0 +-1108 -1107 -1118 0 +-1108 -1116 -1118 0 +-1117 -1118 1121 0 +-1117 -1116 1119 0 +-1117 1119 1121 0 +-1108 -1109 1121 0 +-1108 -1107 1119 0 +-1108 1119 1121 0 +-1111 1110 1112 0 +-1111 -1110 -1112 0 +1118 1109 1112 0 +-1121 -1109 -1112 0 +-1121 -1118 -1112 0 +-1120 1119 1121 0 +-1120 -1119 -1121 0 +-1117 1116 1118 0 +-1117 -1116 -1118 0 +-1114 1113 1115 0 +-1114 -1113 -1115 0 +939 936 930 0 +946 942 930 0 +-942 -936 -930 0 +-946 -936 -930 0 +-942 -939 -930 0 +-946 -939 -930 0 +-947 -948 -942 0 +-947 -946 -944 0 +-947 -942 -944 0 +-940 -941 -936 0 +-940 -939 -938 0 +-940 -936 -938 0 +-937 -938 -939 0 +-937 -936 -941 0 +-937 -939 -941 0 +-931 930 932 0 +-931 -930 -932 0 +941 938 932 0 +946 944 932 0 +-944 -938 -932 0 +-946 -938 -932 0 +-944 -941 -932 0 +-946 -941 -932 0 +-562 -570 -568 0 +563 570 568 0 +563 562 568 0 +-564 -567 -563 0 +569 567 563 0 +569 564 563 0 +694 697 695 0 +500 498 497 0 +90 498 497 0 +501 498 497 0 +500 82 497 0 +90 82 497 0 +501 82 497 0 +500 499 497 0 +90 499 497 0 +501 499 497 0 +466 114 856 0 +240 238 237 0 +102 238 237 0 +241 238 237 0 +240 72 237 0 +102 72 237 0 +241 72 237 0 +240 239 237 0 +102 239 237 0 +241 239 237 0 +265 264 261 0 +79 264 261 0 +266 264 261 0 +265 92 261 0 +79 92 261 0 +266 92 261 0 +265 263 261 0 +79 263 261 0 +266 263 261 0 +-381 -380 -377 0 +380 378 377 0 +381 378 377 0 +380 35 377 0 +381 35 377 0 +380 379 377 0 +381 379 377 0 +696 698 692 0 +-696 -698 692 0 +-696 698 -692 0 +696 -698 -692 0 +1026 1130 788 0 +1026 1133 788 0 +1026 1134 788 0 +-1010 -1013 -1012 0 +1015 1013 1012 0 +1015 1010 1012 0 +1358 869 -871 0 +1359 -869 871 0 +-777 1359 1358 0 +1011 1020 1018 0 +259 257 256 0 +55 257 256 0 +260 257 256 0 +259 10 256 0 +55 10 256 0 +260 10 256 0 +259 258 256 0 +55 258 256 0 +260 258 256 0 +-1036 -1038 -1016 0 +-1037 -1041 -1016 0 +1041 1038 1016 0 +1037 1038 1016 0 +1041 1036 1016 0 +1037 1036 1016 0 +-1013 -1019 -1021 0 +1362 786 -785 0 +1363 -786 785 0 +-782 1363 1362 0 +803 709 781 0 +-804 -709 -781 0 +-804 -803 -781 0 +803 1065 1066 0 +709 1148 710 0 +-809 -805 -783 0 +810 805 783 0 +810 809 783 0 +-809 -811 -812 0 +275 273 272 0 +77 273 272 0 +276 273 272 0 +275 106 272 0 +77 106 272 0 +276 106 272 0 +275 274 272 0 +77 274 272 0 +276 274 272 0 +-805 -807 -808 0 +1356 883 -882 0 +1357 -883 882 0 +-879 1357 1356 0 +-682 -677 -681 0 +683 677 681 0 +683 682 681 0 +-682 -689 -686 0 +-677 -679 -680 0 +700 578 701 0 +-579 -580 -578 0 +-582 -581 -578 0 +581 580 578 0 +582 580 578 0 +581 579 578 0 +582 579 578 0 +398 396 395 0 +43 396 395 0 +399 396 395 0 +398 14 395 0 +43 14 395 0 +399 14 395 0 +398 397 395 0 +43 397 395 0 +399 397 395 0 +406 404 403 0 +20 404 403 0 +407 404 403 0 +406 67 403 0 +20 67 403 0 +407 67 403 0 +406 405 403 0 +20 405 403 0 +407 405 403 0 +1056 1055 1054 0 +1059 1058 1054 0 +-1058 -1055 -1054 0 +-1059 -1055 -1054 0 +-1058 -1056 -1054 0 +-1059 -1056 -1054 0 +1336 1259 -1261 0 +1337 -1259 1261 0 +-1258 1337 1336 0 +-1137 -1136 -1129 0 +-1140 -1139 -1129 0 +1139 1136 1129 0 +1140 1136 1129 0 +1139 1137 1129 0 +1140 1137 1129 0 +270 268 267 0 +61 268 267 0 +271 268 267 0 +270 8 267 0 +61 8 267 0 +271 8 267 0 +270 269 267 0 +61 269 267 0 +271 269 267 0 +1146 1267 1271 0 +1186 1288 1271 0 +-1304 -1288 -1271 0 +-1304 -1186 -1271 0 +249 246 243 0 +5 246 243 0 +254 246 243 0 +249 28 243 0 +5 28 243 0 +254 28 243 0 +249 248 243 0 +5 248 243 0 +254 248 243 0 +1186 1187 1188 0 +1288 1289 1290 0 +1268 1263 1267 0 +-1270 -1263 -1267 0 +-1270 -1268 -1267 0 +-1272 -1273 -1274 0 +1263 1264 1266 0 +-1130 -1128 -1132 0 +779 1032 880 0 +872 874 1014 0 +1022 1023 1024 0 +1376 302 -301 0 +1377 -302 301 0 +-136 1377 1376 0 +230 228 227 0 +13 228 227 0 +231 228 227 0 +230 16 227 0 +13 16 227 0 +231 16 227 0 +230 229 227 0 +13 229 227 0 +231 229 227 0 +147 145 137 0 +-147 -145 137 0 +-147 145 -137 0 +147 -145 -137 0 +225 223 204 0 +63 223 204 0 +226 223 204 0 +225 6 204 0 +63 6 204 0 +226 6 204 0 +225 224 204 0 +63 224 204 0 +226 224 204 0 +-277 -281 -280 0 +283 281 280 0 +283 277 280 0 +1378 155 -157 0 +1379 -155 157 0 +-141 1379 1378 0 +354 352 351 0 +56 352 351 0 +355 352 351 0 +354 93 351 0 +56 93 351 0 +355 93 351 0 +354 353 351 0 +56 353 351 0 +355 353 351 0 +-277 -998 -288 0 +253 251 250 0 +103 251 250 0 +255 251 250 0 +253 21 250 0 +103 21 250 0 +255 21 250 0 +253 252 250 0 +103 252 250 0 +255 252 250 0 +761 997 999 0 +-286 -753 -755 0 +293 300 298 0 +-928 940 943 0 +-943 942 944 0 +-943 -942 -944 0 +-940 939 941 0 +-940 -939 -941 0 +927 933 945 0 +-928 927 929 0 +-928 -927 -929 0 +929 935 945 0 +-1195 1194 1196 0 +-1195 -1194 -1196 0 +-937 936 938 0 +-937 -936 -938 0 +-934 933 935 0 +-934 -933 -935 0 +-186 -182 -176 0 +169 182 176 0 +169 186 176 0 +-187 -188 -169 0 +-187 -186 -171 0 +-187 -169 -171 0 +-183 -184 -169 0 +-183 -182 -171 0 +-183 -169 -171 0 +-170 -186 -182 0 +-177 176 178 0 +-177 -176 -178 0 +-186 -182 -178 0 +171 182 178 0 +171 186 178 0 +-172 -166 -169 0 +179 166 169 0 +179 172 169 0 +-167 -168 174 0 +-167 -166 172 0 +-167 172 174 0 +-170 169 171 0 +-170 -169 -171 0 +-174 -166 -171 0 +179 166 171 0 +179 174 171 0 +860 861 1004 0 +1350 1005 -1007 0 +1351 -1005 1007 0 +-545 1351 1350 0 +1370 552 -550 0 +1371 -552 550 0 +-541 1371 1370 0 +-1040 -1039 -548 0 +-1043 -1042 -548 0 +1042 1039 548 0 +1043 1039 548 0 +1042 1040 548 0 +1043 1040 548 0 +995 766 412 0 +-995 -766 412 0 +-995 766 -412 0 +995 -766 -412 0 +1008 993 540 0 +-1008 -993 540 0 +-1008 993 -540 0 +1008 -993 -540 0 +1151 1147 758 0 +-1152 -1147 -758 0 +-1152 -1151 -758 0 +1151 1177 1178 0 +1147 1149 1150 0 +908 911 757 0 +-912 -911 -757 0 +-912 -908 -757 0 +908 913 910 0 +911 914 915 0 +-1246 -1236 -1001 0 +-1245 -1244 -1001 0 +1062 1061 1060 0 +1064 1063 1060 0 +-1063 -1061 -1060 0 +-1064 -1061 -1060 0 +-1063 -1062 -1060 0 +-1064 -1062 -1060 0 +1240 1238 1237 0 +-1240 -1238 1237 0 +-1240 1238 -1237 0 +1240 -1238 -1237 0 +-1143 -1142 -1141 0 +-1145 -1144 -1141 0 +1144 1142 1141 0 +1145 1142 1141 0 +1144 1143 1141 0 +1145 1143 1141 0 +-1180 -1183 -1245 0 +1287 1183 1245 0 +1287 1180 1245 0 +-1180 -1181 -1182 0 +-1183 -1191 -1185 0 +-1248 -1247 -1244 0 +1250 1247 1244 0 +1250 1248 1244 0 +-1248 -1252 -1251 0 +-1247 -1255 -1257 0 +420 418 416 0 +-420 -418 416 0 +-420 418 -416 0 +420 -418 -416 0 +-687 -674 -413 0 +688 674 413 0 +688 687 413 0 +-687 -690 -691 0 +-674 -678 -676 0 +903 901 415 0 +-907 -901 -415 0 +-907 -903 -415 0 +903 905 906 0 +901 904 902 0 +544 763 669 0 +862 1000 759 0 +549 551 553 0 +-173 172 174 0 +-173 -172 -174 0 +1374 313 -315 0 +1375 -313 315 0 +-307 1375 1374 0 +1372 324 -325 0 +1373 -324 325 0 +-319 1373 1372 0 +-334 -331 -316 0 +337 331 316 0 +337 334 316 0 +-332 -333 336 0 +-332 -331 334 0 +-332 334 336 0 +-317 316 318 0 +-317 -316 -318 0 +-336 -331 -318 0 +337 331 318 0 +337 336 318 0 +308 310 158 0 +-308 -310 158 0 +-308 310 -158 0 +308 -310 -158 0 +-334 -340 -346 0 +-335 334 336 0 +-335 -334 -336 0 +-336 -342 -346 0 +-331 -348 -349 0 +312 314 161 0 +164 194 191 0 +-197 -329 -330 0 +-1108 1107 1109 0 +-1108 -1107 -1109 0 +1385 134 -132 0 +1386 -134 132 0 +-1384 1386 1385 0 +-133 132 134 0 +-133 -132 -134 0 +-1307 1306 1308 0 +-1307 -1306 -1308 0 +-1310 1313 1316 0 +-1316 1315 1317 0 +-1316 -1315 -1317 0 +-1313 1312 1314 0 +-1313 -1312 -1314 0 +1309 1322 1222 0 +-1310 1309 1311 0 +-1310 -1309 -1311 0 +1311 1322 1224 0 +-1223 1222 1224 0 +-1223 -1222 -1224 0 +-1225 -1232 -52 0 +1338 1219 -1211 0 +1339 -1219 1211 0 +-1232 1339 1338 0 +-1211 -1212 -960 0 +966 962 960 0 +967 962 960 0 +968 962 960 0 +966 964 960 0 +967 964 960 0 +968 964 960 0 +966 965 960 0 +967 965 960 0 +968 965 960 0 +1328 83 -24 0 +1329 -83 24 0 +-848 1329 1328 0 +1326 113 -38 0 +1327 -113 38 0 +-953 1327 1326 0 +1330 71 -104 0 +1331 -71 104 0 +-951 1331 1330 0 +-961 -955 -952 0 +-957 -955 -952 0 +-959 -955 -952 0 +-961 -963 -952 0 +-957 -963 -952 0 +-959 -963 -952 0 +-961 -956 -952 0 +-957 -956 -952 0 +-959 -956 -952 0 +1340 1220 -1124 0 +1341 -1220 1124 0 +-1219 1341 1340 0 +1342 1126 -1125 0 +1343 -1126 1125 0 +-1124 1343 1342 0 +17 81 1220 0 +-17 -81 1220 0 +-17 81 -1220 0 +17 -81 -1220 0 +719 725 720 0 +722 724 720 0 +-623 -624 -625 0 +1366 629 -713 0 +1367 -629 713 0 +-721 1367 1366 0 +715 716 713 0 +-715 -716 713 0 +-715 716 -713 0 +715 -716 -713 0 +613 612 610 0 +615 614 610 0 +-617 -616 -611 0 +-619 -618 -611 0 +618 616 611 0 +619 616 611 0 +618 617 611 0 +619 617 611 0 +235 233 232 0 +94 233 232 0 +236 233 232 0 +235 105 232 0 +94 105 232 0 +236 105 232 0 +235 234 232 0 +94 234 232 0 +236 234 232 0 +1368 631 -747 0 +1369 -631 747 0 +-629 1369 1368 0 +609 608 597 0 +-603 -598 -597 0 +-604 -598 -597 0 +-606 -598 -597 0 +-603 -600 -597 0 +-604 -600 -597 0 +-606 -600 -597 0 +-603 -601 -597 0 +-604 -601 -597 0 +-606 -601 -597 0 +622 621 592 0 +-622 -621 592 0 +-622 621 -592 0 +622 -621 -592 0 +505 503 502 0 +116 503 502 0 +506 503 502 0 +505 75 502 0 +116 75 502 0 +506 75 502 0 +505 504 502 0 +116 504 502 0 +506 504 502 0 +587 586 585 0 +-587 -586 585 0 +-587 586 -585 0 +587 -586 -585 0 +1364 734 -749 0 +1365 -734 749 0 +-589 1365 1364 0 +220 219 217 0 +12 219 217 0 +222 219 217 0 +220 111 217 0 +12 111 217 0 +222 111 217 0 +220 218 217 0 +12 218 217 0 +222 218 217 0 +594 602 590 0 +596 602 590 0 +605 602 590 0 +594 599 590 0 +596 599 590 0 +605 599 590 0 +594 595 590 0 +596 595 590 0 +605 595 590 0 +1076 1071 1075 0 +-1076 -1071 1075 0 +-1076 1071 -1075 0 +1076 -1071 -1075 0 +1332 108 -1291 0 +1333 -108 1291 0 +-1158 1333 1332 0 +1334 1280 -1281 0 +1335 -1280 1281 0 +-1154 1335 1334 0 +1284 1283 1156 0 +-1284 -1283 1156 0 +-1284 1283 -1156 0 +1284 -1283 -1156 0 +1168 1161 1159 0 +1164 1161 1159 0 +1166 1161 1159 0 +1168 1170 1159 0 +1164 1170 1159 0 +1166 1170 1159 0 +1168 1163 1159 0 +1164 1163 1159 0 +1166 1163 1159 0 +1074 1073 1071 0 +-1074 -1073 1071 0 +-1074 1073 -1071 0 +1074 -1073 -1071 0 +-1079 -1067 -1081 0 +1346 919 -888 0 +1347 -919 888 0 +-1067 1347 1346 0 +888 889 789 0 +-894 -886 -789 0 +-796 -886 -789 0 +-801 -886 -789 0 +-894 -897 -789 0 +-796 -897 -789 0 +-801 -897 -789 0 +-894 -795 -789 0 +-796 -795 -789 0 +-801 -795 -789 0 +1045 1046 794 0 +-1045 -1046 794 0 +-1045 1046 -794 0 +1045 -1046 -794 0 +660 658 657 0 +68 658 657 0 +661 658 657 0 +660 99 657 0 +68 99 657 0 +661 99 657 0 +660 659 657 0 +68 659 657 0 +661 659 657 0 +1348 1049 -1050 0 +1349 -1049 1050 0 +-885 1349 1348 0 +1354 899 -900 0 +1355 -899 900 0 +-790 1355 1354 0 +-895 -890 -889 0 +-896 -890 -889 0 +-898 -890 -889 0 +-895 -891 -889 0 +-896 -891 -889 0 +-898 -891 -889 0 +-895 -893 -889 0 +-896 -893 -889 0 +-898 -893 -889 0 +813 916 919 0 +-813 -916 919 0 +-813 916 -919 0 +813 -916 -919 0 +1360 814 -815 0 +1361 -814 815 0 +-813 1361 1360 0 +918 917 916 0 +-918 -917 916 0 +-918 917 -916 0 +918 -917 -916 0 +820 1105 1106 0 +-820 -1105 1106 0 +-820 1105 -1106 0 +820 -1105 -1106 0 +1206 25 824 0 +-1206 -25 824 0 +-1206 25 -824 0 +1206 -25 -824 0 +924 988 827 0 +-924 -988 827 0 +-924 988 -827 0 +924 -988 -827 0 +1352 921 -920 0 +1353 -921 920 0 +-823 1353 1352 0 +-833 -829 -822 0 +-835 -829 -822 0 +-837 -829 -822 0 +-833 -831 -822 0 +-835 -831 -822 0 +-837 -831 -822 0 +-833 -834 -822 0 +-835 -834 -822 0 +-837 -834 -822 0 +1084 1101 1105 0 +-1084 -1101 1105 0 +-1084 1101 -1105 0 +1084 -1101 -1105 0 +1344 1085 -1086 0 +1345 -1085 1086 0 +-1084 1345 1344 0 +1103 1102 1101 0 +-1103 -1102 1101 0 +-1103 1102 -1101 0 +1103 -1102 -1101 0 +-974 -1209 -851 0 +-976 -1093 -851 0 +1093 1209 851 0 +976 1209 851 0 +1093 974 851 0 +976 974 851 0 +1388 131 -129 0 +1389 -131 129 0 +-1387 1389 1388 0 +-130 129 131 0 +-130 -129 -131 0 +1391 125 -123 0 +1392 -125 123 0 +-1390 1392 1391 0 +-124 123 125 0 +-124 -123 -125 0 +124 130 133 127 0 +-1120 -1119 1116 1107 0 +-1120 -1121 1118 1109 0 +-931 1114 1117 1120 0 +-947 -946 939 936 0 +-947 -948 941 938 0 +-943 -942 939 936 0 +-943 -944 941 938 0 +-940 946 -941 944 0 +-940 946 -939 942 0 +-940 946 942 944 0 +-937 946 -938 944 0 +-937 946 -936 942 0 +-937 946 942 944 0 +-693 -705 -707 -708 0 +-306 -468 -470 -472 0 +-627 -497 -635 -632 0 +-632 -633 -118 -634 0 +-635 -636 -9 -637 0 +-499 -82 -498 -497 0 +-501 -90 -500 -497 0 +-732 -739 -237 -736 0 +-736 -737 -64 -738 0 +-239 -72 -238 -237 0 +-241 -102 -240 -237 0 +-739 -740 -34 -741 0 +-519 -261 -520 -521 0 +-521 -522 -85 -523 0 +-520 -662 -86 -663 0 +-263 -92 -264 -261 0 +-266 -79 -265 -261 0 +-574 -576 -571 -577 0 +769 873 771 767 0 +-768 -1051 -1052 -1053 0 +-382 -242 -377 -374 0 +-374 -375 -95 -376 0 +-379 -35 -378 -377 0 +-242 -245 -112 -247 0 +772 797 799 800 0 +-1134 -1133 -1130 -788 0 +-393 -394 -256 -386 0 +-386 -387 -66 -388 0 +-258 -10 -257 -256 0 +-260 -55 -259 -256 0 +-394 -517 -40 -518 0 +-538 -535 -272 -408 0 +-408 -409 -19 -410 0 +-274 -106 -273 -272 0 +-276 -77 -275 -272 0 +-535 -536 -91 -537 0 +-530 -527 -395 -524 0 +-524 -525 -57 -526 0 +-397 -14 -396 -395 0 +-399 -43 -398 -395 0 +-527 -528 -26 -529 0 +-1134 -1269 -1265 -1262 0 +-534 -403 -400 -531 0 +-531 -532 -36 -533 0 +-400 -401 -27 -402 0 +-405 -67 -404 -403 0 +-407 -20 -406 -403 0 +-392 -389 -267 -383 0 +-383 -384 -22 -385 0 +-269 -8 -268 -267 0 +-271 -61 -270 -267 0 +-389 -390 -115 -391 0 +-516 -513 -243 -510 0 +-510 -511 -117 -512 0 +-248 -28 -246 -243 0 +-254 -5 -249 -243 0 +-513 -514 -42 -515 0 +-773 -774 -775 -776 0 +-564 -280 -754 -756 0 +-297 -440 -450 -441 0 +-294 -467 -464 -471 0 +-299 -442 -462 -443 0 +-372 -227 -373 -369 0 +-369 -370 -119 -371 0 +-373 -507 -89 -508 0 +-229 -16 -228 -227 0 +-231 -13 -230 -227 0 +139 435 437 438 0 +138 424 422 426 0 +-202 -203 -204 -205 0 +-205 -209 -60 -211 0 +-224 -6 -223 -204 0 +-226 -63 -225 -204 0 +-203 -213 -4 -221 0 +153 455 457 458 0 +151 445 444 446 0 +-305 -350 -351 -206 0 +-206 -208 -18 -210 0 +-353 -93 -352 -351 0 +-355 -56 -354 -351 0 +-350 -356 -33 -357 0 +279 423 1275 425 0 +-481 -645 -250 -648 0 +-648 -649 -2 -650 0 +-252 -21 -251 -250 0 +-255 -103 -253 -250 0 +-645 -646 -31 -647 0 +-284 -430 -474 -432 0 +149 152 150 154 0 +-177 934 937 1195 0 +-180 -166 -181 -172 0 +-180 -166 -179 -174 0 +-180 -166 -172 -174 0 +558 560 728 561 0 +554 556 572 557 0 +666 670 667 765 0 +668 703 742 704 0 +546 555 798 547 0 +-539 -863 -543 -541 0 +1241 1244 1236 1001 0 +1241 1245 1236 1001 0 +1241 1244 1246 1001 0 +1241 1245 1246 1001 0 +1241 1249 1256 1243 0 +-671 -411 -672 -673 0 +-172 -316 -328 -321 0 +-174 -318 -328 -321 0 +-162 -449 -451 -452 0 +163 460 459 461 0 +322 433 436 434 0 +-190 -477 -479 -480 0 +-338 -331 -339 -334 0 +-338 -331 -337 -336 0 +-338 -331 -334 -336 0 +160 453 456 454 0 +-159 -429 -447 -431 0 +-201 -482 -583 -483 0 +-198 -473 -475 -476 0 +-165 -164 -314 -161 0 +-165 -164 -312 -161 0 +-165 -320 -309 -311 0 +-965 -964 -962 -960 0 +-968 -967 -966 -960 0 +956 963 955 952 0 +959 957 961 952 0 +-1199 -1201 -1203 -1205 0 +-1080 -724 -725 -720 0 +-1080 -722 -725 -720 0 +-1080 -724 -719 -720 0 +-1080 -722 -719 -720 0 +-611 -614 -612 -610 0 +-611 -615 -612 -610 0 +-611 -614 -613 -610 0 +-611 -615 -613 -610 0 +-368 -365 -232 -362 0 +-362 -363 -7 -364 0 +-234 -105 -233 -232 0 +-236 -94 -235 -232 0 +-365 -366 -30 -367 0 +-492 -495 -121 -496 0 +-487 -488 -29 -489 0 +-484 -485 -87 -486 0 +-491 -493 -120 -494 0 +601 600 598 597 0 +606 604 603 597 0 +-621 -638 -502 -639 0 +-639 -642 -107 -643 0 +-504 -75 -503 -502 0 +-506 -116 -505 -502 0 +-638 -640 -47 -641 0 +-361 -358 -217 -214 0 +-214 -215 -70 -216 0 +-218 -111 -219 -217 0 +-222 -12 -220 -217 0 +-358 -359 -80 -360 0 +-595 -599 -602 -590 0 +-605 -596 -594 -590 0 +-1076 -1172 -1159 -1167 0 +-1167 -1169 -1175 -1171 0 +-1163 -1170 -1161 -1159 0 +-1166 -1164 -1168 -1159 0 +-1172 -1173 -1174 -1176 0 +795 897 886 789 0 +801 796 894 789 0 +-746 -654 -657 -651 0 +-651 -652 -97 -653 0 +-659 -99 -658 -657 0 +-661 -68 -660 -657 0 +-654 -655 -109 -656 0 +893 891 890 889 0 +898 896 895 889 0 +820 821 822 816 0 +816 832 825 830 0 +834 831 829 822 0 +837 835 833 822 0 +821 828 836 826 0 +565 773 788 769 694 0 +-1026 -1028 -1030 -1031 -1012 0 +-776 -866 -778 -779 -780 0 +-775 -1029 -1022 -872 -1027 0 +-774 -876 -881 -878 -875 0 +292 293 285 149 140 0 +140 282 142 144 146 0 +285 287 289 286 291 0 +175 671 859 666 860 0 +859 1002 1001 539 1003 0 +-673 -992 -991 -544 -994 0 +-672 -864 -549 -862 -762 0 +-411 -542 -419 -414 -417 0 +191 199 192 193 189 0 +194 200 345 197 343 0 +-1222 -1320 -1221 -1324 -1229 0 +-1224 -1320 -1221 -1324 -1231 0 +-490 -491 -484 -487 -492 0 +-849 -1091 -1089 -971 -1207 0 +-949 -1294 -1197 -1292 -1296 0 +-1393 1390 1387 1384 1381 0 diff --git a/tests/sat/unsat/pret150_25.cnf b/tests/sat/unsat/pret150_25.cnf new file mode 100644 index 00000000..74f3f88d --- /dev/null +++ b/tests/sat/unsat/pret150_25.cnf @@ -0,0 +1,421 @@ +c File: pret150_25.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 100 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 25 +c Number of Propositional variables ==> 150 +c Number of Clauses ==> 400 +c Nodes with Charge = 1 ==> 1 +c Horn Percentage (exact) ==> 24.000 +c +c ----------------------------------------------------- +p cnf 150 400 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + -36 -35 -34 0 + 36 35 -34 0 + 35 34 -36 0 + 36 34 -35 0 + -39 -38 -37 0 + 39 38 -37 0 + 38 37 -39 0 + 39 37 -38 0 + -42 -41 -40 0 + 42 41 -40 0 + 41 40 -42 0 + 42 40 -41 0 + -45 -44 -43 0 + 45 44 -43 0 + 44 43 -45 0 + 45 43 -44 0 + -48 -47 -46 0 + 48 47 -46 0 + 47 46 -48 0 + 48 46 -47 0 + -51 -50 -49 0 + 51 50 -49 0 + 50 49 -51 0 + 51 49 -50 0 + -54 -53 -52 0 + 54 53 -52 0 + 53 52 -54 0 + 54 52 -53 0 + -57 -56 -55 0 + 57 56 -55 0 + 56 55 -57 0 + 57 55 -56 0 + -60 -59 -58 0 + 60 59 -58 0 + 59 58 -60 0 + 60 58 -59 0 + -63 -62 -61 0 + 63 62 -61 0 + 62 61 -63 0 + 63 61 -62 0 + -66 -65 -64 0 + 66 65 -64 0 + 65 64 -66 0 + 66 64 -65 0 + -69 -68 -67 0 + 69 68 -67 0 + 68 67 -69 0 + 69 67 -68 0 + -72 -71 -70 0 + 72 71 -70 0 + 71 70 -72 0 + 72 70 -71 0 + -75 -74 -73 0 + 75 74 -73 0 + 74 73 -75 0 + 75 73 -74 0 + -78 -77 -76 0 + 78 77 -76 0 + 77 76 -78 0 + 78 76 -77 0 + -81 -80 -79 0 + 81 80 -79 0 + 80 79 -81 0 + 81 79 -80 0 + -84 -83 -82 0 + 84 83 -82 0 + 83 82 -84 0 + 84 82 -83 0 + -87 -86 -85 0 + 87 86 -85 0 + 86 85 -87 0 + 87 85 -86 0 + -90 -89 -88 0 + 90 89 -88 0 + 89 88 -90 0 + 90 88 -89 0 + -93 -92 -91 0 + 93 92 -91 0 + 92 91 -93 0 + 93 91 -92 0 + -96 -95 -94 0 + 96 95 -94 0 + 95 94 -96 0 + 96 94 -95 0 + -99 -98 -97 0 + 99 98 -97 0 + 98 97 -99 0 + 99 97 -98 0 + -101 -100 -97 0 + 101 100 -97 0 + 100 97 -101 0 + 101 97 -100 0 + -102 -36 -7 0 + 102 36 -7 0 + 36 7 -102 0 + 102 7 -36 0 + -102 -35 -31 0 + 102 35 -31 0 + 35 31 -102 0 + 102 31 -35 0 + -104 -103 -3 0 + 104 103 -3 0 + 103 3 -104 0 + 104 3 -103 0 + -103 -40 -2 0 + 103 40 -2 0 + 40 2 -103 0 + 103 2 -40 0 + -106 -105 -39 0 + 106 105 -39 0 + 105 39 -106 0 + 106 39 -105 0 + -105 -104 -38 0 + 105 104 -38 0 + 104 38 -105 0 + 105 38 -104 0 + -107 -42 -16 0 + 107 42 -16 0 + 42 16 -107 0 + 107 16 -42 0 + -107 -41 -37 0 + 107 41 -37 0 + 41 37 -107 0 + 107 37 -41 0 + -109 -108 -15 0 + 109 108 -15 0 + 108 15 -109 0 + 109 15 -108 0 + -108 -46 -14 0 + 108 46 -14 0 + 46 14 -108 0 + 108 14 -46 0 + -111 -110 -45 0 + 111 110 -45 0 + 110 45 -111 0 + 111 45 -110 0 + -110 -109 -44 0 + 110 109 -44 0 + 109 44 -110 0 + 110 44 -109 0 + -112 -106 -48 0 + 112 106 -48 0 + 106 48 -112 0 + 112 48 -106 0 + -112 -47 -43 0 + 112 47 -43 0 + 47 43 -112 0 + 112 43 -47 0 + -114 -113 -18 0 + 114 113 -18 0 + 113 18 -114 0 + 114 18 -113 0 + -113 -52 -17 0 + 113 52 -17 0 + 52 17 -113 0 + 113 17 -52 0 + -115 -51 -10 0 + 115 51 -10 0 + 51 10 -115 0 + 115 10 -51 0 + -115 -114 -50 0 + 115 114 -50 0 + 114 50 -115 0 + 115 50 -114 0 + -116 -54 -13 0 + 116 54 -13 0 + 54 13 -116 0 + 116 13 -54 0 + -116 -53 -49 0 + 116 53 -49 0 + 53 49 -116 0 + 116 49 -53 0 + -118 -117 -6 0 + 118 117 -6 0 + 117 6 -118 0 + 118 6 -117 0 + -117 -58 -5 0 + 117 58 -5 0 + 58 5 -117 0 + 117 5 -58 0 + -120 -119 -57 0 + 120 119 -57 0 + 119 57 -120 0 + 120 57 -119 0 + -119 -118 -56 0 + 119 118 -56 0 + 118 56 -119 0 + 119 56 -118 0 + -121 -60 -22 0 + 121 60 -22 0 + 60 22 -121 0 + 121 22 -60 0 + -121 -59 -55 0 + 121 59 -55 0 + 59 55 -121 0 + 121 55 -59 0 + -123 -122 -21 0 + 123 122 -21 0 + 122 21 -123 0 + 123 21 -122 0 + -122 -64 -20 0 + 122 64 -20 0 + 64 20 -122 0 + 122 20 -64 0 + -125 -124 -63 0 + 125 124 -63 0 + 124 63 -125 0 + 125 63 -124 0 + -124 -123 -62 0 + 124 123 -62 0 + 123 62 -124 0 + 124 62 -123 0 + -126 -120 -66 0 + 126 120 -66 0 + 120 66 -126 0 + 126 66 -120 0 + -126 -65 -61 0 + 126 65 -61 0 + 65 61 -126 0 + 126 61 -65 0 + -128 -127 -24 0 + 128 127 -24 0 + 127 24 -128 0 + 128 24 -127 0 + -127 -70 -23 0 + 127 70 -23 0 + 70 23 -127 0 + 127 23 -70 0 + -129 -69 -1 0 + 129 69 -1 0 + 69 1 -129 0 + 129 1 -69 0 + -129 -128 -68 0 + 129 128 -68 0 + 128 68 -129 0 + 129 68 -128 0 + -130 -72 -19 0 + 130 72 -19 0 + 72 19 -130 0 + 130 19 -72 0 + -130 -71 -67 0 + 130 71 -67 0 + 71 67 -130 0 + 130 67 -71 0 + -132 -131 -9 0 + 132 131 -9 0 + 131 9 -132 0 + 132 9 -131 0 + -131 -76 -8 0 + 131 76 -8 0 + 76 8 -131 0 + 131 8 -76 0 + -134 -133 -75 0 + 134 133 -75 0 + 133 75 -134 0 + 134 75 -133 0 + -133 -132 -74 0 + 133 132 -74 0 + 132 74 -133 0 + 133 74 -132 0 + -135 -78 -28 0 + 135 78 -28 0 + 78 28 -135 0 + 135 28 -78 0 + -135 -77 -73 0 + 135 77 -73 0 + 77 73 -135 0 + 135 73 -77 0 + -137 -136 -27 0 + 137 136 -27 0 + 136 27 -137 0 + 137 27 -136 0 + -136 -82 -26 0 + 136 82 -26 0 + 82 26 -136 0 + 136 26 -82 0 + -138 -111 -81 0 + 138 111 -81 0 + 111 81 -138 0 + 138 81 -111 0 + -138 -137 -80 0 + 138 137 -80 0 + 137 80 -138 0 + 138 80 -137 0 + -139 -134 -84 0 + 139 134 -84 0 + 134 84 -139 0 + 139 84 -134 0 + -139 -83 -79 0 + 139 83 -79 0 + 83 79 -139 0 + 139 79 -83 0 + -141 -140 -30 0 + 141 140 -30 0 + 140 30 -141 0 + 141 30 -140 0 + -140 -88 -29 0 + 140 88 -29 0 + 88 29 -140 0 + 140 29 -88 0 + -142 -87 -4 0 + 142 87 -4 0 + 87 4 -142 0 + 142 4 -87 0 + -142 -141 -86 0 + 142 141 -86 0 + 141 86 -142 0 + 142 86 -141 0 + -143 -90 -25 0 + 143 90 -25 0 + 90 25 -143 0 + 143 25 -90 0 + -143 -89 -85 0 + 143 89 -85 0 + 89 85 -143 0 + 143 85 -89 0 + -145 -144 -12 0 + 145 144 -12 0 + 144 12 -145 0 + 145 12 -144 0 + -144 -94 -11 0 + 144 94 -11 0 + 94 11 -144 0 + 144 11 -94 0 + -146 -101 -93 0 + 146 101 -93 0 + 101 93 -146 0 + 146 93 -101 0 + -146 -145 -92 0 + 146 145 -92 0 + 145 92 -146 0 + 146 92 -145 0 + -147 -96 -34 0 + 147 96 -34 0 + 96 34 -147 0 + 147 34 -96 0 + -147 -95 -91 0 + 147 95 -91 0 + 95 91 -147 0 + 147 91 -95 0 + -149 -148 -33 0 + 149 148 -33 0 + 148 33 -149 0 + 149 33 -148 0 + -148 -100 -32 0 + 148 100 -32 0 + 100 32 -148 0 + 148 32 -100 0 + -150 -125 -99 0 + 150 125 -99 0 + 125 99 -150 0 + 150 99 -125 0 + 150 149 98 0 + 150 -149 -98 0 + 149 -150 -98 0 + 98 -150 -149 0 diff --git a/tests/sat/unsat/pret150_40.cnf b/tests/sat/unsat/pret150_40.cnf new file mode 100644 index 00000000..8cf2647e --- /dev/null +++ b/tests/sat/unsat/pret150_40.cnf @@ -0,0 +1,421 @@ +c File: pret150_40.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 100 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 40 +c Number of Propositional variables ==> 150 +c Number of Clauses ==> 400 +c Nodes with Charge = 1 ==> 31 +c Horn Percentage (exact) ==> 40.000 +c +c ----------------------------------------------------- +p cnf 150 400 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + -36 -35 -34 0 + 36 35 -34 0 + 35 34 -36 0 + 36 34 -35 0 + -39 -38 -37 0 + 39 38 -37 0 + 38 37 -39 0 + 39 37 -38 0 + -42 -41 -40 0 + 42 41 -40 0 + 41 40 -42 0 + 42 40 -41 0 + -45 -44 -43 0 + 45 44 -43 0 + 44 43 -45 0 + 45 43 -44 0 + -48 -47 -46 0 + 48 47 -46 0 + 47 46 -48 0 + 48 46 -47 0 + -51 -50 -49 0 + 51 50 -49 0 + 50 49 -51 0 + 51 49 -50 0 + -54 -53 -52 0 + 54 53 -52 0 + 53 52 -54 0 + 54 52 -53 0 + -57 -56 -55 0 + 57 56 -55 0 + 56 55 -57 0 + 57 55 -56 0 + -60 -59 -58 0 + 60 59 -58 0 + 59 58 -60 0 + 60 58 -59 0 + -63 -62 -61 0 + 63 62 -61 0 + 62 61 -63 0 + 63 61 -62 0 + -66 -65 -64 0 + 66 65 -64 0 + 65 64 -66 0 + 66 64 -65 0 + -69 -68 -67 0 + 69 68 -67 0 + 68 67 -69 0 + 69 67 -68 0 + -72 -71 -70 0 + 72 71 -70 0 + 71 70 -72 0 + 72 70 -71 0 + -75 -74 -73 0 + 75 74 -73 0 + 74 73 -75 0 + 75 73 -74 0 + -78 -77 -76 0 + 78 77 -76 0 + 77 76 -78 0 + 78 76 -77 0 + -81 -80 -79 0 + 81 80 -79 0 + 80 79 -81 0 + 81 79 -80 0 + -84 -83 -82 0 + 84 83 -82 0 + 83 82 -84 0 + 84 82 -83 0 + -87 -86 -85 0 + 87 86 -85 0 + 86 85 -87 0 + 87 85 -86 0 + -90 -89 -88 0 + 90 89 -88 0 + 89 88 -90 0 + 90 88 -89 0 + -93 -92 -91 0 + 93 92 -91 0 + 92 91 -93 0 + 93 91 -92 0 + -96 -95 -94 0 + 96 95 -94 0 + 95 94 -96 0 + 96 94 -95 0 + -99 -98 -97 0 + 99 98 -97 0 + 98 97 -99 0 + 99 97 -98 0 + -101 -100 -97 0 + 101 100 -97 0 + 100 97 -101 0 + 101 97 -100 0 + -102 -36 -7 0 + 102 36 -7 0 + 36 7 -102 0 + 102 7 -36 0 + -102 -35 -31 0 + 102 35 -31 0 + 35 31 -102 0 + 102 31 -35 0 + -104 -103 -3 0 + 104 103 -3 0 + 103 3 -104 0 + 104 3 -103 0 + -103 -40 -2 0 + 103 40 -2 0 + 40 2 -103 0 + 103 2 -40 0 + -106 -105 -39 0 + 106 105 -39 0 + 105 39 -106 0 + 106 39 -105 0 + -105 -104 -38 0 + 105 104 -38 0 + 104 38 -105 0 + 105 38 -104 0 + -107 -42 -16 0 + 107 42 -16 0 + 42 16 -107 0 + 107 16 -42 0 + -107 -41 -37 0 + 107 41 -37 0 + 41 37 -107 0 + 107 37 -41 0 + -109 -108 -15 0 + 109 108 -15 0 + 108 15 -109 0 + 109 15 -108 0 + -108 -46 -14 0 + 108 46 -14 0 + 46 14 -108 0 + 108 14 -46 0 + -111 -110 -45 0 + 111 110 -45 0 + 110 45 -111 0 + 111 45 -110 0 + -110 -109 -44 0 + 110 109 -44 0 + 109 44 -110 0 + 110 44 -109 0 + -112 -106 -48 0 + 112 106 -48 0 + 106 48 -112 0 + 112 48 -106 0 + -112 -47 -43 0 + 112 47 -43 0 + 47 43 -112 0 + 112 43 -47 0 + -114 -113 -18 0 + 114 113 -18 0 + 113 18 -114 0 + 114 18 -113 0 + -113 -52 -17 0 + 113 52 -17 0 + 52 17 -113 0 + 113 17 -52 0 + -115 -51 -10 0 + 115 51 -10 0 + 51 10 -115 0 + 115 10 -51 0 + -115 -114 -50 0 + 115 114 -50 0 + 114 50 -115 0 + 115 50 -114 0 + -116 -54 -13 0 + 116 54 -13 0 + 54 13 -116 0 + 116 13 -54 0 + -116 -53 -49 0 + 116 53 -49 0 + 53 49 -116 0 + 116 49 -53 0 + -118 -117 -6 0 + 118 117 -6 0 + 117 6 -118 0 + 118 6 -117 0 + -117 -58 -5 0 + 117 58 -5 0 + 58 5 -117 0 + 117 5 -58 0 + -120 -119 -57 0 + 120 119 -57 0 + 119 57 -120 0 + 120 57 -119 0 + -119 -118 -56 0 + 119 118 -56 0 + 118 56 -119 0 + 119 56 -118 0 + -121 -60 -22 0 + 121 60 -22 0 + 60 22 -121 0 + 121 22 -60 0 + -121 -59 -55 0 + 121 59 -55 0 + 59 55 -121 0 + 121 55 -59 0 + -123 -122 -21 0 + 123 122 -21 0 + 122 21 -123 0 + 123 21 -122 0 + -122 -64 -20 0 + 122 64 -20 0 + 64 20 -122 0 + 122 20 -64 0 + -125 -124 -63 0 + 125 124 -63 0 + 124 63 -125 0 + 125 63 -124 0 + -124 -123 -62 0 + 124 123 -62 0 + 123 62 -124 0 + 124 62 -123 0 + -126 -120 -66 0 + 126 120 -66 0 + 120 66 -126 0 + 126 66 -120 0 + -126 -65 -61 0 + 126 65 -61 0 + 65 61 -126 0 + 126 61 -65 0 + -128 -127 -24 0 + 128 127 -24 0 + 127 24 -128 0 + 128 24 -127 0 + -127 -70 -23 0 + 127 70 -23 0 + 70 23 -127 0 + 127 23 -70 0 + -129 -69 -1 0 + 129 69 -1 0 + 69 1 -129 0 + 129 1 -69 0 + 129 128 68 0 + 129 -128 -68 0 + 128 -129 -68 0 + 68 -129 -128 0 + 130 72 19 0 + 130 -72 -19 0 + 72 -130 -19 0 + 19 -130 -72 0 + 130 71 67 0 + 130 -71 -67 0 + 71 -130 -67 0 + 67 -130 -71 0 + 132 131 9 0 + 132 -131 -9 0 + 131 -132 -9 0 + 9 -132 -131 0 + 131 76 8 0 + 131 -76 -8 0 + 76 -131 -8 0 + 8 -131 -76 0 + 134 133 75 0 + 134 -133 -75 0 + 133 -134 -75 0 + 75 -134 -133 0 + 133 132 74 0 + 133 -132 -74 0 + 132 -133 -74 0 + 74 -133 -132 0 + 135 78 28 0 + 135 -78 -28 0 + 78 -135 -28 0 + 28 -135 -78 0 + 135 77 73 0 + 135 -77 -73 0 + 77 -135 -73 0 + 73 -135 -77 0 + 137 136 27 0 + 137 -136 -27 0 + 136 -137 -27 0 + 27 -137 -136 0 + 136 82 26 0 + 136 -82 -26 0 + 82 -136 -26 0 + 26 -136 -82 0 + 138 111 81 0 + 138 -111 -81 0 + 111 -138 -81 0 + 81 -138 -111 0 + 138 137 80 0 + 138 -137 -80 0 + 137 -138 -80 0 + 80 -138 -137 0 + 139 134 84 0 + 139 -134 -84 0 + 134 -139 -84 0 + 84 -139 -134 0 + 139 83 79 0 + 139 -83 -79 0 + 83 -139 -79 0 + 79 -139 -83 0 + 141 140 30 0 + 141 -140 -30 0 + 140 -141 -30 0 + 30 -141 -140 0 + 140 88 29 0 + 140 -88 -29 0 + 88 -140 -29 0 + 29 -140 -88 0 + 142 87 4 0 + 142 -87 -4 0 + 87 -142 -4 0 + 4 -142 -87 0 + 142 141 86 0 + 142 -141 -86 0 + 141 -142 -86 0 + 86 -142 -141 0 + 143 90 25 0 + 143 -90 -25 0 + 90 -143 -25 0 + 25 -143 -90 0 + 143 89 85 0 + 143 -89 -85 0 + 89 -143 -85 0 + 85 -143 -89 0 + 145 144 12 0 + 145 -144 -12 0 + 144 -145 -12 0 + 12 -145 -144 0 + 144 94 11 0 + 144 -94 -11 0 + 94 -144 -11 0 + 11 -144 -94 0 + 146 101 93 0 + 146 -101 -93 0 + 101 -146 -93 0 + 93 -146 -101 0 + 146 145 92 0 + 146 -145 -92 0 + 145 -146 -92 0 + 92 -146 -145 0 + 147 96 34 0 + 147 -96 -34 0 + 96 -147 -34 0 + 34 -147 -96 0 + 147 95 91 0 + 147 -95 -91 0 + 95 -147 -91 0 + 91 -147 -95 0 + 149 148 33 0 + 149 -148 -33 0 + 148 -149 -33 0 + 33 -149 -148 0 + 148 100 32 0 + 148 -100 -32 0 + 100 -148 -32 0 + 32 -148 -100 0 + 150 125 99 0 + 150 -125 -99 0 + 125 -150 -99 0 + 99 -150 -125 0 + 150 149 98 0 + 150 -149 -98 0 + 149 -150 -98 0 + 98 -150 -149 0 diff --git a/tests/sat/unsat/pret150_60.cnf b/tests/sat/unsat/pret150_60.cnf new file mode 100644 index 00000000..496c3697 --- /dev/null +++ b/tests/sat/unsat/pret150_60.cnf @@ -0,0 +1,421 @@ +c File: pret150_60.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 100 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 60 +c Number of Propositional variables ==> 150 +c Number of Clauses ==> 400 +c Nodes with Charge = 1 ==> 71 +c Horn Percentage (exact) ==> 60.000 +c +c ----------------------------------------------------- +p cnf 150 400 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + -36 -35 -34 0 + 36 35 -34 0 + 35 34 -36 0 + 36 34 -35 0 + -39 -38 -37 0 + 39 38 -37 0 + 38 37 -39 0 + 39 37 -38 0 + -42 -41 -40 0 + 42 41 -40 0 + 41 40 -42 0 + 42 40 -41 0 + -45 -44 -43 0 + 45 44 -43 0 + 44 43 -45 0 + 45 43 -44 0 + -48 -47 -46 0 + 48 47 -46 0 + 47 46 -48 0 + 48 46 -47 0 + -51 -50 -49 0 + 51 50 -49 0 + 50 49 -51 0 + 51 49 -50 0 + -54 -53 -52 0 + 54 53 -52 0 + 53 52 -54 0 + 54 52 -53 0 + -57 -56 -55 0 + 57 56 -55 0 + 56 55 -57 0 + 57 55 -56 0 + -60 -59 -58 0 + 60 59 -58 0 + 59 58 -60 0 + 60 58 -59 0 + -63 -62 -61 0 + 63 62 -61 0 + 62 61 -63 0 + 63 61 -62 0 + -66 -65 -64 0 + 66 65 -64 0 + 65 64 -66 0 + 66 64 -65 0 + -69 -68 -67 0 + 69 68 -67 0 + 68 67 -69 0 + 69 67 -68 0 + -72 -71 -70 0 + 72 71 -70 0 + 71 70 -72 0 + 72 70 -71 0 + -75 -74 -73 0 + 75 74 -73 0 + 74 73 -75 0 + 75 73 -74 0 + -78 -77 -76 0 + 78 77 -76 0 + 77 76 -78 0 + 78 76 -77 0 + -81 -80 -79 0 + 81 80 -79 0 + 80 79 -81 0 + 81 79 -80 0 + -84 -83 -82 0 + 84 83 -82 0 + 83 82 -84 0 + 84 82 -83 0 + -87 -86 -85 0 + 87 86 -85 0 + 86 85 -87 0 + 87 85 -86 0 + 90 89 88 0 + 90 -89 -88 0 + 89 -90 -88 0 + 88 -90 -89 0 + 93 92 91 0 + 93 -92 -91 0 + 92 -93 -91 0 + 91 -93 -92 0 + 96 95 94 0 + 96 -95 -94 0 + 95 -96 -94 0 + 94 -96 -95 0 + 99 98 97 0 + 99 -98 -97 0 + 98 -99 -97 0 + 97 -99 -98 0 + 101 100 97 0 + 101 -100 -97 0 + 100 -101 -97 0 + 97 -101 -100 0 + 102 36 7 0 + 102 -36 -7 0 + 36 -102 -7 0 + 7 -102 -36 0 + 102 35 31 0 + 102 -35 -31 0 + 35 -102 -31 0 + 31 -102 -35 0 + 104 103 3 0 + 104 -103 -3 0 + 103 -104 -3 0 + 3 -104 -103 0 + 103 40 2 0 + 103 -40 -2 0 + 40 -103 -2 0 + 2 -103 -40 0 + 106 105 39 0 + 106 -105 -39 0 + 105 -106 -39 0 + 39 -106 -105 0 + 105 104 38 0 + 105 -104 -38 0 + 104 -105 -38 0 + 38 -105 -104 0 + 107 42 16 0 + 107 -42 -16 0 + 42 -107 -16 0 + 16 -107 -42 0 + 107 41 37 0 + 107 -41 -37 0 + 41 -107 -37 0 + 37 -107 -41 0 + 109 108 15 0 + 109 -108 -15 0 + 108 -109 -15 0 + 15 -109 -108 0 + 108 46 14 0 + 108 -46 -14 0 + 46 -108 -14 0 + 14 -108 -46 0 + 111 110 45 0 + 111 -110 -45 0 + 110 -111 -45 0 + 45 -111 -110 0 + 110 109 44 0 + 110 -109 -44 0 + 109 -110 -44 0 + 44 -110 -109 0 + 112 106 48 0 + 112 -106 -48 0 + 106 -112 -48 0 + 48 -112 -106 0 + 112 47 43 0 + 112 -47 -43 0 + 47 -112 -43 0 + 43 -112 -47 0 + 114 113 18 0 + 114 -113 -18 0 + 113 -114 -18 0 + 18 -114 -113 0 + 113 52 17 0 + 113 -52 -17 0 + 52 -113 -17 0 + 17 -113 -52 0 + 115 51 10 0 + 115 -51 -10 0 + 51 -115 -10 0 + 10 -115 -51 0 + 115 114 50 0 + 115 -114 -50 0 + 114 -115 -50 0 + 50 -115 -114 0 + 116 54 13 0 + 116 -54 -13 0 + 54 -116 -13 0 + 13 -116 -54 0 + 116 53 49 0 + 116 -53 -49 0 + 53 -116 -49 0 + 49 -116 -53 0 + 118 117 6 0 + 118 -117 -6 0 + 117 -118 -6 0 + 6 -118 -117 0 + 117 58 5 0 + 117 -58 -5 0 + 58 -117 -5 0 + 5 -117 -58 0 + 120 119 57 0 + 120 -119 -57 0 + 119 -120 -57 0 + 57 -120 -119 0 + 119 118 56 0 + 119 -118 -56 0 + 118 -119 -56 0 + 56 -119 -118 0 + 121 60 22 0 + 121 -60 -22 0 + 60 -121 -22 0 + 22 -121 -60 0 + 121 59 55 0 + 121 -59 -55 0 + 59 -121 -55 0 + 55 -121 -59 0 + 123 122 21 0 + 123 -122 -21 0 + 122 -123 -21 0 + 21 -123 -122 0 + 122 64 20 0 + 122 -64 -20 0 + 64 -122 -20 0 + 20 -122 -64 0 + 125 124 63 0 + 125 -124 -63 0 + 124 -125 -63 0 + 63 -125 -124 0 + 124 123 62 0 + 124 -123 -62 0 + 123 -124 -62 0 + 62 -124 -123 0 + 126 120 66 0 + 126 -120 -66 0 + 120 -126 -66 0 + 66 -126 -120 0 + 126 65 61 0 + 126 -65 -61 0 + 65 -126 -61 0 + 61 -126 -65 0 + 128 127 24 0 + 128 -127 -24 0 + 127 -128 -24 0 + 24 -128 -127 0 + 127 70 23 0 + 127 -70 -23 0 + 70 -127 -23 0 + 23 -127 -70 0 + 129 69 1 0 + 129 -69 -1 0 + 69 -129 -1 0 + 1 -129 -69 0 + 129 128 68 0 + 129 -128 -68 0 + 128 -129 -68 0 + 68 -129 -128 0 + 130 72 19 0 + 130 -72 -19 0 + 72 -130 -19 0 + 19 -130 -72 0 + 130 71 67 0 + 130 -71 -67 0 + 71 -130 -67 0 + 67 -130 -71 0 + 132 131 9 0 + 132 -131 -9 0 + 131 -132 -9 0 + 9 -132 -131 0 + 131 76 8 0 + 131 -76 -8 0 + 76 -131 -8 0 + 8 -131 -76 0 + 134 133 75 0 + 134 -133 -75 0 + 133 -134 -75 0 + 75 -134 -133 0 + 133 132 74 0 + 133 -132 -74 0 + 132 -133 -74 0 + 74 -133 -132 0 + 135 78 28 0 + 135 -78 -28 0 + 78 -135 -28 0 + 28 -135 -78 0 + 135 77 73 0 + 135 -77 -73 0 + 77 -135 -73 0 + 73 -135 -77 0 + 137 136 27 0 + 137 -136 -27 0 + 136 -137 -27 0 + 27 -137 -136 0 + 136 82 26 0 + 136 -82 -26 0 + 82 -136 -26 0 + 26 -136 -82 0 + 138 111 81 0 + 138 -111 -81 0 + 111 -138 -81 0 + 81 -138 -111 0 + 138 137 80 0 + 138 -137 -80 0 + 137 -138 -80 0 + 80 -138 -137 0 + 139 134 84 0 + 139 -134 -84 0 + 134 -139 -84 0 + 84 -139 -134 0 + 139 83 79 0 + 139 -83 -79 0 + 83 -139 -79 0 + 79 -139 -83 0 + 141 140 30 0 + 141 -140 -30 0 + 140 -141 -30 0 + 30 -141 -140 0 + 140 88 29 0 + 140 -88 -29 0 + 88 -140 -29 0 + 29 -140 -88 0 + 142 87 4 0 + 142 -87 -4 0 + 87 -142 -4 0 + 4 -142 -87 0 + 142 141 86 0 + 142 -141 -86 0 + 141 -142 -86 0 + 86 -142 -141 0 + 143 90 25 0 + 143 -90 -25 0 + 90 -143 -25 0 + 25 -143 -90 0 + 143 89 85 0 + 143 -89 -85 0 + 89 -143 -85 0 + 85 -143 -89 0 + 145 144 12 0 + 145 -144 -12 0 + 144 -145 -12 0 + 12 -145 -144 0 + 144 94 11 0 + 144 -94 -11 0 + 94 -144 -11 0 + 11 -144 -94 0 + 146 101 93 0 + 146 -101 -93 0 + 101 -146 -93 0 + 93 -146 -101 0 + 146 145 92 0 + 146 -145 -92 0 + 145 -146 -92 0 + 92 -146 -145 0 + 147 96 34 0 + 147 -96 -34 0 + 96 -147 -34 0 + 34 -147 -96 0 + 147 95 91 0 + 147 -95 -91 0 + 95 -147 -91 0 + 91 -147 -95 0 + 149 148 33 0 + 149 -148 -33 0 + 148 -149 -33 0 + 33 -149 -148 0 + 148 100 32 0 + 148 -100 -32 0 + 100 -148 -32 0 + 32 -148 -100 0 + 150 125 99 0 + 150 -125 -99 0 + 125 -150 -99 0 + 99 -150 -125 0 + 150 149 98 0 + 150 -149 -98 0 + 149 -150 -98 0 + 98 -150 -149 0 diff --git a/tests/sat/unsat/pret150_75.cnf b/tests/sat/unsat/pret150_75.cnf new file mode 100644 index 00000000..56145b2a --- /dev/null +++ b/tests/sat/unsat/pret150_75.cnf @@ -0,0 +1,421 @@ +c File: pret150_75.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 100 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 75 +c Number of Propositional variables ==> 150 +c Number of Clauses ==> 400 +c Nodes with Charge = 1 ==> 99 +c Horn Percentage (exact) ==> 74.000 +c +c ----------------------------------------------------- +p cnf 150 400 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + 6 5 4 0 + 6 -5 -4 0 + 5 -6 -4 0 + 4 -6 -5 0 + 9 8 7 0 + 9 -8 -7 0 + 8 -9 -7 0 + 7 -9 -8 0 + 12 11 10 0 + 12 -11 -10 0 + 11 -12 -10 0 + 10 -12 -11 0 + 15 14 13 0 + 15 -14 -13 0 + 14 -15 -13 0 + 13 -15 -14 0 + 18 17 16 0 + 18 -17 -16 0 + 17 -18 -16 0 + 16 -18 -17 0 + 21 20 19 0 + 21 -20 -19 0 + 20 -21 -19 0 + 19 -21 -20 0 + 24 23 22 0 + 24 -23 -22 0 + 23 -24 -22 0 + 22 -24 -23 0 + 27 26 25 0 + 27 -26 -25 0 + 26 -27 -25 0 + 25 -27 -26 0 + 30 29 28 0 + 30 -29 -28 0 + 29 -30 -28 0 + 28 -30 -29 0 + 33 32 31 0 + 33 -32 -31 0 + 32 -33 -31 0 + 31 -33 -32 0 + 36 35 34 0 + 36 -35 -34 0 + 35 -36 -34 0 + 34 -36 -35 0 + 39 38 37 0 + 39 -38 -37 0 + 38 -39 -37 0 + 37 -39 -38 0 + 42 41 40 0 + 42 -41 -40 0 + 41 -42 -40 0 + 40 -42 -41 0 + 45 44 43 0 + 45 -44 -43 0 + 44 -45 -43 0 + 43 -45 -44 0 + 48 47 46 0 + 48 -47 -46 0 + 47 -48 -46 0 + 46 -48 -47 0 + 51 50 49 0 + 51 -50 -49 0 + 50 -51 -49 0 + 49 -51 -50 0 + 54 53 52 0 + 54 -53 -52 0 + 53 -54 -52 0 + 52 -54 -53 0 + 57 56 55 0 + 57 -56 -55 0 + 56 -57 -55 0 + 55 -57 -56 0 + 60 59 58 0 + 60 -59 -58 0 + 59 -60 -58 0 + 58 -60 -59 0 + 63 62 61 0 + 63 -62 -61 0 + 62 -63 -61 0 + 61 -63 -62 0 + 66 65 64 0 + 66 -65 -64 0 + 65 -66 -64 0 + 64 -66 -65 0 + 69 68 67 0 + 69 -68 -67 0 + 68 -69 -67 0 + 67 -69 -68 0 + 72 71 70 0 + 72 -71 -70 0 + 71 -72 -70 0 + 70 -72 -71 0 + 75 74 73 0 + 75 -74 -73 0 + 74 -75 -73 0 + 73 -75 -74 0 + 78 77 76 0 + 78 -77 -76 0 + 77 -78 -76 0 + 76 -78 -77 0 + 81 80 79 0 + 81 -80 -79 0 + 80 -81 -79 0 + 79 -81 -80 0 + 84 83 82 0 + 84 -83 -82 0 + 83 -84 -82 0 + 82 -84 -83 0 + 87 86 85 0 + 87 -86 -85 0 + 86 -87 -85 0 + 85 -87 -86 0 + 90 89 88 0 + 90 -89 -88 0 + 89 -90 -88 0 + 88 -90 -89 0 + 93 92 91 0 + 93 -92 -91 0 + 92 -93 -91 0 + 91 -93 -92 0 + 96 95 94 0 + 96 -95 -94 0 + 95 -96 -94 0 + 94 -96 -95 0 + 99 98 97 0 + 99 -98 -97 0 + 98 -99 -97 0 + 97 -99 -98 0 + 101 100 97 0 + 101 -100 -97 0 + 100 -101 -97 0 + 97 -101 -100 0 + 102 36 7 0 + 102 -36 -7 0 + 36 -102 -7 0 + 7 -102 -36 0 + 102 35 31 0 + 102 -35 -31 0 + 35 -102 -31 0 + 31 -102 -35 0 + 104 103 3 0 + 104 -103 -3 0 + 103 -104 -3 0 + 3 -104 -103 0 + 103 40 2 0 + 103 -40 -2 0 + 40 -103 -2 0 + 2 -103 -40 0 + 106 105 39 0 + 106 -105 -39 0 + 105 -106 -39 0 + 39 -106 -105 0 + 105 104 38 0 + 105 -104 -38 0 + 104 -105 -38 0 + 38 -105 -104 0 + 107 42 16 0 + 107 -42 -16 0 + 42 -107 -16 0 + 16 -107 -42 0 + 107 41 37 0 + 107 -41 -37 0 + 41 -107 -37 0 + 37 -107 -41 0 + 109 108 15 0 + 109 -108 -15 0 + 108 -109 -15 0 + 15 -109 -108 0 + 108 46 14 0 + 108 -46 -14 0 + 46 -108 -14 0 + 14 -108 -46 0 + 111 110 45 0 + 111 -110 -45 0 + 110 -111 -45 0 + 45 -111 -110 0 + 110 109 44 0 + 110 -109 -44 0 + 109 -110 -44 0 + 44 -110 -109 0 + 112 106 48 0 + 112 -106 -48 0 + 106 -112 -48 0 + 48 -112 -106 0 + 112 47 43 0 + 112 -47 -43 0 + 47 -112 -43 0 + 43 -112 -47 0 + 114 113 18 0 + 114 -113 -18 0 + 113 -114 -18 0 + 18 -114 -113 0 + 113 52 17 0 + 113 -52 -17 0 + 52 -113 -17 0 + 17 -113 -52 0 + 115 51 10 0 + 115 -51 -10 0 + 51 -115 -10 0 + 10 -115 -51 0 + 115 114 50 0 + 115 -114 -50 0 + 114 -115 -50 0 + 50 -115 -114 0 + 116 54 13 0 + 116 -54 -13 0 + 54 -116 -13 0 + 13 -116 -54 0 + 116 53 49 0 + 116 -53 -49 0 + 53 -116 -49 0 + 49 -116 -53 0 + 118 117 6 0 + 118 -117 -6 0 + 117 -118 -6 0 + 6 -118 -117 0 + 117 58 5 0 + 117 -58 -5 0 + 58 -117 -5 0 + 5 -117 -58 0 + 120 119 57 0 + 120 -119 -57 0 + 119 -120 -57 0 + 57 -120 -119 0 + 119 118 56 0 + 119 -118 -56 0 + 118 -119 -56 0 + 56 -119 -118 0 + 121 60 22 0 + 121 -60 -22 0 + 60 -121 -22 0 + 22 -121 -60 0 + 121 59 55 0 + 121 -59 -55 0 + 59 -121 -55 0 + 55 -121 -59 0 + 123 122 21 0 + 123 -122 -21 0 + 122 -123 -21 0 + 21 -123 -122 0 + 122 64 20 0 + 122 -64 -20 0 + 64 -122 -20 0 + 20 -122 -64 0 + 125 124 63 0 + 125 -124 -63 0 + 124 -125 -63 0 + 63 -125 -124 0 + 124 123 62 0 + 124 -123 -62 0 + 123 -124 -62 0 + 62 -124 -123 0 + 126 120 66 0 + 126 -120 -66 0 + 120 -126 -66 0 + 66 -126 -120 0 + 126 65 61 0 + 126 -65 -61 0 + 65 -126 -61 0 + 61 -126 -65 0 + 128 127 24 0 + 128 -127 -24 0 + 127 -128 -24 0 + 24 -128 -127 0 + 127 70 23 0 + 127 -70 -23 0 + 70 -127 -23 0 + 23 -127 -70 0 + 129 69 1 0 + 129 -69 -1 0 + 69 -129 -1 0 + 1 -129 -69 0 + 129 128 68 0 + 129 -128 -68 0 + 128 -129 -68 0 + 68 -129 -128 0 + 130 72 19 0 + 130 -72 -19 0 + 72 -130 -19 0 + 19 -130 -72 0 + 130 71 67 0 + 130 -71 -67 0 + 71 -130 -67 0 + 67 -130 -71 0 + 132 131 9 0 + 132 -131 -9 0 + 131 -132 -9 0 + 9 -132 -131 0 + 131 76 8 0 + 131 -76 -8 0 + 76 -131 -8 0 + 8 -131 -76 0 + 134 133 75 0 + 134 -133 -75 0 + 133 -134 -75 0 + 75 -134 -133 0 + 133 132 74 0 + 133 -132 -74 0 + 132 -133 -74 0 + 74 -133 -132 0 + 135 78 28 0 + 135 -78 -28 0 + 78 -135 -28 0 + 28 -135 -78 0 + 135 77 73 0 + 135 -77 -73 0 + 77 -135 -73 0 + 73 -135 -77 0 + 137 136 27 0 + 137 -136 -27 0 + 136 -137 -27 0 + 27 -137 -136 0 + 136 82 26 0 + 136 -82 -26 0 + 82 -136 -26 0 + 26 -136 -82 0 + 138 111 81 0 + 138 -111 -81 0 + 111 -138 -81 0 + 81 -138 -111 0 + 138 137 80 0 + 138 -137 -80 0 + 137 -138 -80 0 + 80 -138 -137 0 + 139 134 84 0 + 139 -134 -84 0 + 134 -139 -84 0 + 84 -139 -134 0 + 139 83 79 0 + 139 -83 -79 0 + 83 -139 -79 0 + 79 -139 -83 0 + 141 140 30 0 + 141 -140 -30 0 + 140 -141 -30 0 + 30 -141 -140 0 + 140 88 29 0 + 140 -88 -29 0 + 88 -140 -29 0 + 29 -140 -88 0 + 142 87 4 0 + 142 -87 -4 0 + 87 -142 -4 0 + 4 -142 -87 0 + 142 141 86 0 + 142 -141 -86 0 + 141 -142 -86 0 + 86 -142 -141 0 + 143 90 25 0 + 143 -90 -25 0 + 90 -143 -25 0 + 25 -143 -90 0 + 143 89 85 0 + 143 -89 -85 0 + 89 -143 -85 0 + 85 -143 -89 0 + 145 144 12 0 + 145 -144 -12 0 + 144 -145 -12 0 + 12 -145 -144 0 + 144 94 11 0 + 144 -94 -11 0 + 94 -144 -11 0 + 11 -144 -94 0 + 146 101 93 0 + 146 -101 -93 0 + 101 -146 -93 0 + 93 -146 -101 0 + 146 145 92 0 + 146 -145 -92 0 + 145 -146 -92 0 + 92 -146 -145 0 + 147 96 34 0 + 147 -96 -34 0 + 96 -147 -34 0 + 34 -147 -96 0 + 147 95 91 0 + 147 -95 -91 0 + 95 -147 -91 0 + 91 -147 -95 0 + 149 148 33 0 + 149 -148 -33 0 + 148 -149 -33 0 + 33 -149 -148 0 + 148 100 32 0 + 148 -100 -32 0 + 100 -148 -32 0 + 32 -148 -100 0 + 150 125 99 0 + 150 -125 -99 0 + 125 -150 -99 0 + 99 -150 -125 0 + 150 149 98 0 + 150 -149 -98 0 + 149 -150 -98 0 + 98 -150 -149 0 diff --git a/tests/sat/unsat/pret60_25.cnf b/tests/sat/unsat/pret60_25.cnf new file mode 100644 index 00000000..d08e609c --- /dev/null +++ b/tests/sat/unsat/pret60_25.cnf @@ -0,0 +1,181 @@ +c File: pret60_25.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 40 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 25 +c Number of Propositional variables ==> 60 +c Number of Clauses ==> 160 +c Nodes with Charge = 1 ==> 1 +c Horn Percentage (exact) ==> 22.000 +c +c ----------------------------------------------------- +p cnf 60 160 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + -36 -35 -34 0 + 36 35 -34 0 + 35 34 -36 0 + 36 34 -35 0 + -39 -38 -37 0 + 39 38 -37 0 + 38 37 -39 0 + 39 37 -38 0 + -40 -37 -16 0 + 40 37 -16 0 + 37 16 -40 0 + 40 16 -37 0 + -42 -41 -15 0 + 42 41 -15 0 + 41 15 -42 0 + 42 15 -41 0 + -43 -41 -14 0 + 43 41 -14 0 + 41 14 -43 0 + 43 14 -41 0 + -44 -18 -10 0 + 44 18 -10 0 + 18 10 -44 0 + 44 10 -18 0 + -44 -17 -13 0 + 44 17 -13 0 + 17 13 -44 0 + 44 13 -17 0 + -46 -45 -6 0 + 46 45 -6 0 + 45 6 -46 0 + 46 6 -45 0 + -45 -22 -5 0 + 45 22 -5 0 + 22 5 -45 0 + 45 5 -22 0 + -48 -47 -21 0 + 48 47 -21 0 + 47 21 -48 0 + 48 21 -47 0 + -47 -46 -20 0 + 47 46 -20 0 + 46 20 -47 0 + 47 20 -46 0 + -49 -24 -1 0 + 49 24 -1 0 + 24 1 -49 0 + 49 1 -24 0 + -49 -23 -19 0 + 49 23 -19 0 + 23 19 -49 0 + 49 19 -23 0 + -51 -50 -9 0 + 51 50 -9 0 + 50 9 -51 0 + 51 9 -50 0 + -50 -28 -8 0 + 50 28 -8 0 + 28 8 -50 0 + 50 8 -28 0 + -52 -42 -27 0 + 52 42 -27 0 + 42 27 -52 0 + 52 27 -42 0 + -52 -51 -26 0 + 52 51 -26 0 + 51 26 -52 0 + 52 26 -51 0 + -53 -30 -4 0 + 53 30 -4 0 + 30 4 -53 0 + 53 4 -30 0 + -53 -29 -25 0 + 53 29 -25 0 + 29 25 -53 0 + 53 25 -29 0 + -55 -54 -12 0 + 55 54 -12 0 + 54 12 -55 0 + 55 12 -54 0 + -54 -34 -11 0 + 54 34 -11 0 + 34 11 -54 0 + 54 11 -34 0 + -56 -48 -33 0 + 56 48 -33 0 + 48 33 -56 0 + 56 33 -48 0 + -56 -55 -32 0 + 56 55 -32 0 + 55 32 -56 0 + 56 32 -55 0 + -57 -36 -7 0 + 57 36 -7 0 + 36 7 -57 0 + 57 7 -36 0 + -57 -35 -31 0 + 57 35 -31 0 + 35 31 -57 0 + 57 31 -35 0 + -59 -58 -3 0 + 59 58 -3 0 + 58 3 -59 0 + 59 3 -58 0 + -58 -40 -2 0 + 58 40 -2 0 + 40 2 -58 0 + 58 2 -40 0 + -60 -43 -39 0 + 60 43 -39 0 + 43 39 -60 0 + 60 39 -43 0 + 60 59 38 0 + 60 -59 -38 0 + 59 -60 -38 0 + 38 -60 -59 0 diff --git a/tests/sat/unsat/pret60_40.cnf b/tests/sat/unsat/pret60_40.cnf new file mode 100644 index 00000000..67c4bf10 --- /dev/null +++ b/tests/sat/unsat/pret60_40.cnf @@ -0,0 +1,181 @@ +c File: pret60_40.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 40 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 40 +c Number of Propositional variables ==> 60 +c Number of Clauses ==> 160 +c Nodes with Charge = 1 ==> 13 +c Horn Percentage (exact) ==> 37.000 +c +c ----------------------------------------------------- +p cnf 60 160 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + -36 -35 -34 0 + 36 35 -34 0 + 35 34 -36 0 + 36 34 -35 0 + -39 -38 -37 0 + 39 38 -37 0 + 38 37 -39 0 + 39 37 -38 0 + -40 -37 -16 0 + 40 37 -16 0 + 37 16 -40 0 + 40 16 -37 0 + -42 -41 -15 0 + 42 41 -15 0 + 41 15 -42 0 + 42 15 -41 0 + -43 -41 -14 0 + 43 41 -14 0 + 41 14 -43 0 + 43 14 -41 0 + -44 -18 -10 0 + 44 18 -10 0 + 18 10 -44 0 + 44 10 -18 0 + -44 -17 -13 0 + 44 17 -13 0 + 17 13 -44 0 + 44 13 -17 0 + -46 -45 -6 0 + 46 45 -6 0 + 45 6 -46 0 + 46 6 -45 0 + -45 -22 -5 0 + 45 22 -5 0 + 22 5 -45 0 + 45 5 -22 0 + -48 -47 -21 0 + 48 47 -21 0 + 47 21 -48 0 + 48 21 -47 0 + -47 -46 -20 0 + 47 46 -20 0 + 46 20 -47 0 + 47 20 -46 0 + -49 -24 -1 0 + 49 24 -1 0 + 24 1 -49 0 + 49 1 -24 0 + -49 -23 -19 0 + 49 23 -19 0 + 23 19 -49 0 + 49 19 -23 0 + -51 -50 -9 0 + 51 50 -9 0 + 50 9 -51 0 + 51 9 -50 0 + -50 -28 -8 0 + 50 28 -8 0 + 28 8 -50 0 + 50 8 -28 0 + -52 -42 -27 0 + 52 42 -27 0 + 42 27 -52 0 + 52 27 -42 0 + 52 51 26 0 + 52 -51 -26 0 + 51 -52 -26 0 + 26 -52 -51 0 + 53 30 4 0 + 53 -30 -4 0 + 30 -53 -4 0 + 4 -53 -30 0 + 53 29 25 0 + 53 -29 -25 0 + 29 -53 -25 0 + 25 -53 -29 0 + 55 54 12 0 + 55 -54 -12 0 + 54 -55 -12 0 + 12 -55 -54 0 + 54 34 11 0 + 54 -34 -11 0 + 34 -54 -11 0 + 11 -54 -34 0 + 56 48 33 0 + 56 -48 -33 0 + 48 -56 -33 0 + 33 -56 -48 0 + 56 55 32 0 + 56 -55 -32 0 + 55 -56 -32 0 + 32 -56 -55 0 + 57 36 7 0 + 57 -36 -7 0 + 36 -57 -7 0 + 7 -57 -36 0 + 57 35 31 0 + 57 -35 -31 0 + 35 -57 -31 0 + 31 -57 -35 0 + 59 58 3 0 + 59 -58 -3 0 + 58 -59 -3 0 + 3 -59 -58 0 + 58 40 2 0 + 58 -40 -2 0 + 40 -58 -2 0 + 2 -58 -40 0 + 60 43 39 0 + 60 -43 -39 0 + 43 -60 -39 0 + 39 -60 -43 0 + 60 59 38 0 + 60 -59 -38 0 + 59 -60 -38 0 + 38 -60 -59 0 diff --git a/tests/sat/unsat/pret60_60.cnf b/tests/sat/unsat/pret60_60.cnf new file mode 100644 index 00000000..b96929ee --- /dev/null +++ b/tests/sat/unsat/pret60_60.cnf @@ -0,0 +1,181 @@ +c File: pret60_60.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 40 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 60 +c Number of Propositional variables ==> 60 +c Number of Clauses ==> 160 +c Nodes with Charge = 1 ==> 29 +c Horn Percentage (exact) ==> 57.000 +c +c ----------------------------------------------------- +p cnf 60 160 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + -6 -5 -4 0 + 6 5 -4 0 + 5 4 -6 0 + 6 4 -5 0 + -9 -8 -7 0 + 9 8 -7 0 + 8 7 -9 0 + 9 7 -8 0 + -12 -11 -10 0 + 12 11 -10 0 + 11 10 -12 0 + 12 10 -11 0 + -15 -14 -13 0 + 15 14 -13 0 + 14 13 -15 0 + 15 13 -14 0 + -18 -17 -16 0 + 18 17 -16 0 + 17 16 -18 0 + 18 16 -17 0 + -21 -20 -19 0 + 21 20 -19 0 + 20 19 -21 0 + 21 19 -20 0 + -24 -23 -22 0 + 24 23 -22 0 + 23 22 -24 0 + 24 22 -23 0 + -27 -26 -25 0 + 27 26 -25 0 + 26 25 -27 0 + 27 25 -26 0 + -30 -29 -28 0 + 30 29 -28 0 + 29 28 -30 0 + 30 28 -29 0 + -33 -32 -31 0 + 33 32 -31 0 + 32 31 -33 0 + 33 31 -32 0 + 36 35 34 0 + 36 -35 -34 0 + 35 -36 -34 0 + 34 -36 -35 0 + 39 38 37 0 + 39 -38 -37 0 + 38 -39 -37 0 + 37 -39 -38 0 + 40 37 16 0 + 40 -37 -16 0 + 37 -40 -16 0 + 16 -40 -37 0 + 42 41 15 0 + 42 -41 -15 0 + 41 -42 -15 0 + 15 -42 -41 0 + 43 41 14 0 + 43 -41 -14 0 + 41 -43 -14 0 + 14 -43 -41 0 + 44 18 10 0 + 44 -18 -10 0 + 18 -44 -10 0 + 10 -44 -18 0 + 44 17 13 0 + 44 -17 -13 0 + 17 -44 -13 0 + 13 -44 -17 0 + 46 45 6 0 + 46 -45 -6 0 + 45 -46 -6 0 + 6 -46 -45 0 + 45 22 5 0 + 45 -22 -5 0 + 22 -45 -5 0 + 5 -45 -22 0 + 48 47 21 0 + 48 -47 -21 0 + 47 -48 -21 0 + 21 -48 -47 0 + 47 46 20 0 + 47 -46 -20 0 + 46 -47 -20 0 + 20 -47 -46 0 + 49 24 1 0 + 49 -24 -1 0 + 24 -49 -1 0 + 1 -49 -24 0 + 49 23 19 0 + 49 -23 -19 0 + 23 -49 -19 0 + 19 -49 -23 0 + 51 50 9 0 + 51 -50 -9 0 + 50 -51 -9 0 + 9 -51 -50 0 + 50 28 8 0 + 50 -28 -8 0 + 28 -50 -8 0 + 8 -50 -28 0 + 52 42 27 0 + 52 -42 -27 0 + 42 -52 -27 0 + 27 -52 -42 0 + 52 51 26 0 + 52 -51 -26 0 + 51 -52 -26 0 + 26 -52 -51 0 + 53 30 4 0 + 53 -30 -4 0 + 30 -53 -4 0 + 4 -53 -30 0 + 53 29 25 0 + 53 -29 -25 0 + 29 -53 -25 0 + 25 -53 -29 0 + 55 54 12 0 + 55 -54 -12 0 + 54 -55 -12 0 + 12 -55 -54 0 + 54 34 11 0 + 54 -34 -11 0 + 34 -54 -11 0 + 11 -54 -34 0 + 56 48 33 0 + 56 -48 -33 0 + 48 -56 -33 0 + 33 -56 -48 0 + 56 55 32 0 + 56 -55 -32 0 + 55 -56 -32 0 + 32 -56 -55 0 + 57 36 7 0 + 57 -36 -7 0 + 36 -57 -7 0 + 7 -57 -36 0 + 57 35 31 0 + 57 -35 -31 0 + 35 -57 -31 0 + 31 -57 -35 0 + 59 58 3 0 + 59 -58 -3 0 + 58 -59 -3 0 + 3 -59 -58 0 + 58 40 2 0 + 58 -40 -2 0 + 40 -58 -2 0 + 2 -58 -40 0 + 60 43 39 0 + 60 -43 -39 0 + 43 -60 -39 0 + 39 -60 -43 0 + 60 59 38 0 + 60 -59 -38 0 + 59 -60 -38 0 + 38 -60 -59 0 diff --git a/tests/sat/unsat/pret60_75.cnf b/tests/sat/unsat/pret60_75.cnf new file mode 100644 index 00000000..bd93a558 --- /dev/null +++ b/tests/sat/unsat/pret60_75.cnf @@ -0,0 +1,181 @@ +c File: pret60_75.cnf +c +c SOURCE: Daniel Pretolani (daniele@crt.umontreal.ca) +c +c DESCRIPTION: Unsatisfiable instances of a graph 2-coloring with +c parity constraints. +c +c ----------- DIMACS Challenge - CNF format ----------- +c +c TRISAT Generator (Pretolani 1990) +c +c (Even) number of nodes ==> 40 +c Charge ( 0 = sat. / 1 = unsat. ) ==> 1 +c Horn Percentage (min -> 25; max -> 75) ==> 75 +c Number of Propositional variables ==> 60 +c Number of Clauses ==> 160 +c Nodes with Charge = 1 ==> 39 +c Horn Percentage (exact) ==> 72.000 +c +c ----------------------------------------------------- +p cnf 60 160 + -3 -2 -1 0 + 3 2 -1 0 + 2 1 -3 0 + 3 1 -2 0 + 6 5 4 0 + 6 -5 -4 0 + 5 -6 -4 0 + 4 -6 -5 0 + 9 8 7 0 + 9 -8 -7 0 + 8 -9 -7 0 + 7 -9 -8 0 + 12 11 10 0 + 12 -11 -10 0 + 11 -12 -10 0 + 10 -12 -11 0 + 15 14 13 0 + 15 -14 -13 0 + 14 -15 -13 0 + 13 -15 -14 0 + 18 17 16 0 + 18 -17 -16 0 + 17 -18 -16 0 + 16 -18 -17 0 + 21 20 19 0 + 21 -20 -19 0 + 20 -21 -19 0 + 19 -21 -20 0 + 24 23 22 0 + 24 -23 -22 0 + 23 -24 -22 0 + 22 -24 -23 0 + 27 26 25 0 + 27 -26 -25 0 + 26 -27 -25 0 + 25 -27 -26 0 + 30 29 28 0 + 30 -29 -28 0 + 29 -30 -28 0 + 28 -30 -29 0 + 33 32 31 0 + 33 -32 -31 0 + 32 -33 -31 0 + 31 -33 -32 0 + 36 35 34 0 + 36 -35 -34 0 + 35 -36 -34 0 + 34 -36 -35 0 + 39 38 37 0 + 39 -38 -37 0 + 38 -39 -37 0 + 37 -39 -38 0 + 40 37 16 0 + 40 -37 -16 0 + 37 -40 -16 0 + 16 -40 -37 0 + 42 41 15 0 + 42 -41 -15 0 + 41 -42 -15 0 + 15 -42 -41 0 + 43 41 14 0 + 43 -41 -14 0 + 41 -43 -14 0 + 14 -43 -41 0 + 44 18 10 0 + 44 -18 -10 0 + 18 -44 -10 0 + 10 -44 -18 0 + 44 17 13 0 + 44 -17 -13 0 + 17 -44 -13 0 + 13 -44 -17 0 + 46 45 6 0 + 46 -45 -6 0 + 45 -46 -6 0 + 6 -46 -45 0 + 45 22 5 0 + 45 -22 -5 0 + 22 -45 -5 0 + 5 -45 -22 0 + 48 47 21 0 + 48 -47 -21 0 + 47 -48 -21 0 + 21 -48 -47 0 + 47 46 20 0 + 47 -46 -20 0 + 46 -47 -20 0 + 20 -47 -46 0 + 49 24 1 0 + 49 -24 -1 0 + 24 -49 -1 0 + 1 -49 -24 0 + 49 23 19 0 + 49 -23 -19 0 + 23 -49 -19 0 + 19 -49 -23 0 + 51 50 9 0 + 51 -50 -9 0 + 50 -51 -9 0 + 9 -51 -50 0 + 50 28 8 0 + 50 -28 -8 0 + 28 -50 -8 0 + 8 -50 -28 0 + 52 42 27 0 + 52 -42 -27 0 + 42 -52 -27 0 + 27 -52 -42 0 + 52 51 26 0 + 52 -51 -26 0 + 51 -52 -26 0 + 26 -52 -51 0 + 53 30 4 0 + 53 -30 -4 0 + 30 -53 -4 0 + 4 -53 -30 0 + 53 29 25 0 + 53 -29 -25 0 + 29 -53 -25 0 + 25 -53 -29 0 + 55 54 12 0 + 55 -54 -12 0 + 54 -55 -12 0 + 12 -55 -54 0 + 54 34 11 0 + 54 -34 -11 0 + 34 -54 -11 0 + 11 -54 -34 0 + 56 48 33 0 + 56 -48 -33 0 + 48 -56 -33 0 + 33 -56 -48 0 + 56 55 32 0 + 56 -55 -32 0 + 55 -56 -32 0 + 32 -56 -55 0 + 57 36 7 0 + 57 -36 -7 0 + 36 -57 -7 0 + 7 -57 -36 0 + 57 35 31 0 + 57 -35 -31 0 + 35 -57 -31 0 + 31 -57 -35 0 + 59 58 3 0 + 59 -58 -3 0 + 58 -59 -3 0 + 3 -59 -58 0 + 58 40 2 0 + 58 -40 -2 0 + 40 -58 -2 0 + 2 -58 -40 0 + 60 43 39 0 + 60 -43 -39 0 + 43 -60 -39 0 + 39 -60 -43 0 + 60 59 38 0 + 60 -59 -38 0 + 59 -60 -38 0 + 38 -60 -59 0 From 56ec549bc7e4b0933ef42a637281feb00b93c7c2 Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 21 Oct 2017 13:03:25 +0200 Subject: [PATCH 20/22] Lots of small code improvements --- .../cardinalityconstraints/CCAMOBimander.java | 6 +- .../CCAMOCommander.java | 8 +-- .../cardinalityconstraints/CCAMONested.java | 2 +- .../cardinalityconstraints/CCEncoder.java | 25 ++++---- .../CCModularTotalizer.java | 2 +- .../collections/LNGDoublePriorityQueue.java | 6 +- .../collections/LNGLongPriorityQueue.java | 6 +- .../unsatcores/drup/DRUPTrim.java | 58 +++++++++---------- src/main/java/org/logicng/formulas/FType.java | 2 +- .../org/logicng/formulas/FormulaFactory.java | 2 +- .../formulas/cache/FunctionCacheEntry.java | 2 +- .../formulas/cache/PredicateCacheEntry.java | 2 +- .../cache/TransformationCacheEntry.java | 2 +- .../graphs/algorithms/BronKerbosch.java | 6 +- .../logicng/graphs/datastructures/Node.java | 6 +- .../org/logicng/io/parsers/FormulaParser.java | 3 - .../org/logicng/io/readers/DimacsReader.java | 6 +- .../org/logicng/solvers/MaxSATSolver.java | 4 +- .../java/org/logicng/solvers/MiniSat.java | 2 +- .../java/org/logicng/solvers/SATSolver.java | 2 +- .../solvers/datastructures/CLClause.java | 8 +-- .../datastructures/LNGBoundedIntQueue.java | 2 +- .../datastructures/LNGBoundedLongQueue.java | 2 +- .../solvers/datastructures/LNGHeap.java | 4 +- .../solvers/datastructures/MSClause.java | 6 +- .../solvers/datastructures/MSHardClause.java | 2 +- .../solvers/datastructures/MSSoftClause.java | 4 +- .../solvers/maxsat/algorithms/IncWBO.java | 6 +- .../solvers/maxsat/algorithms/LinearSU.java | 10 ++-- .../solvers/maxsat/algorithms/LinearUS.java | 8 +-- .../solvers/maxsat/algorithms/MSU3.java | 12 ++-- .../solvers/maxsat/algorithms/MaxSAT.java | 16 +++-- .../solvers/maxsat/algorithms/WBO.java | 2 +- .../solvers/maxsat/algorithms/WMSU3.java | 18 +++--- .../solvers/maxsat/encodings/Encoder.java | 14 ++--- .../solvers/maxsat/encodings/Encoding.java | 8 +-- .../maxsat/encodings/ModularTotalizer.java | 6 +- .../encodings/SequentialWeightCounter.java | 6 +- .../solvers/maxsat/encodings/Totalizer.java | 12 ++-- .../logicng/solvers/sat/CleaneLingSolver.java | 2 +- .../formulas/ExtendedFormulaFactoryTest.java | 9 ++- .../logicng/io/FormulaWriterReaderTest.java | 4 ++ .../java/org/logicng/solvers/sat/SATTest.java | 31 ++++++++++ 43 files changed, 180 insertions(+), 164 deletions(-) diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java b/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java index 35d3a97e..fab864c4 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java @@ -64,12 +64,12 @@ final class CCAMOBimander implements CCAtMostOne { private EncodingResult result; - private LNGVector> groups; - private LNGVector bits; + private final LNGVector> groups; + private final LNGVector bits; private int numberOfBits; private int twoPowNBits; private int k; - private int m; + private final int m; /** * Constructs the bimander AMO encoder with a given number of groups. diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java b/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java index ad47e45e..b1eeee5f 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java @@ -64,10 +64,10 @@ final class CCAMOCommander implements CCAtMostOne { private EncodingResult result; - private int k; - private LNGVector literals; - private LNGVector nextLiterals; - private LNGVector currentLiterals; + private final int k; + private final LNGVector literals; + private final LNGVector nextLiterals; + private final LNGVector currentLiterals; /** * Constructs the commander AMO encoder with a given group size. diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCAMONested.java b/src/main/java/org/logicng/cardinalityconstraints/CCAMONested.java index cf1974c4..ec315828 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCAMONested.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCAMONested.java @@ -63,7 +63,7 @@ */ final class CCAMONested implements CCAtMostOne { - private int groupSize; + private final int groupSize; private EncodingResult result; /** diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCEncoder.java b/src/main/java/org/logicng/cardinalityconstraints/CCEncoder.java index c67236a8..f8e809bd 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCEncoder.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCEncoder.java @@ -33,16 +33,12 @@ import org.logicng.configurations.ConfigurationType; import org.logicng.datastructures.EncodingResult; import org.logicng.formulas.FType; -import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; import org.logicng.formulas.Literal; import org.logicng.formulas.PBConstraint; import org.logicng.formulas.Variable; import org.logicng.util.Pair; -import java.util.ArrayList; -import java.util.List; - /** * An encoder for cardinality constraints. *

@@ -237,42 +233,41 @@ private void encodeConstraint(final PBConstraint cc, final EncodingResult result * Encodes an at-most-one constraint. * @param result the result * @param vars the variables of the constraint - * @return the CNF encoding of the constraint */ - private List amo(final EncodingResult result, final Variable... vars) { + private void amo(final EncodingResult result, final Variable... vars) { if (vars.length <= 1) - return new ArrayList<>(); + return; switch (this.config().amoEncoder) { case PURE: if (this.amoPure == null) this.amoPure = new CCAMOPure(); this.amoPure.build(result, vars); - return result.result(); + break; case LADDER: if (this.amoLadder == null) this.amoLadder = new CCAMOLadder(); this.amoLadder.build(result, vars); - return result.result(); + break; case PRODUCT: if (this.amoProduct == null) this.amoProduct = new CCAMOProduct(this.config().productRecursiveBound); this.amoProduct.build(result, vars); - return result.result(); + break; case NESTED: if (this.amoNested == null) this.amoNested = new CCAMONested(this.config().nestingGroupSize); this.amoNested.build(result, vars); - return result.result(); + break; case COMMANDER: if (this.amoCommander == null) this.amoCommander = new CCAMOCommander(this.config().commanderGroupSize); this.amoCommander.build(result, vars); - return result.result(); + break; case BINARY: if (this.amoBinary == null) this.amoBinary = new CCAMOBinary(); this.amoBinary.build(result, vars); - return result.result(); + break; case BIMANDER: if (this.config().bimanderGroupSize != CCConfig.BIMANDER_GROUP_SIZE.FIXED || this.amoBimander == null) { int groupSize; @@ -292,10 +287,10 @@ private List amo(final EncodingResult result, final Variable... vars) { this.amoBimander = new CCAMOBimander(groupSize); } this.amoBimander.build(result, vars); - return result.result(); + break; case BEST: this.bestAMO(vars.length).build(result, vars); - return result.result(); + break; default: throw new IllegalStateException("Unknown at-most-one encoder: " + this.config().amoEncoder); } diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCModularTotalizer.java b/src/main/java/org/logicng/cardinalityconstraints/CCModularTotalizer.java index 6b351543..ba9cb41c 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCModularTotalizer.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCModularTotalizer.java @@ -65,7 +65,7 @@ final class CCModularTotalizer { private final Variable varUndef; private final Variable varError; - private Variable h0; + private final Variable h0; private LNGVector inlits; private LNGVector cardinalityUpOutvars; private LNGVector cardinalityLwOutvars; diff --git a/src/main/java/org/logicng/collections/LNGDoublePriorityQueue.java b/src/main/java/org/logicng/collections/LNGDoublePriorityQueue.java index 5bfb5af4..c650963f 100644 --- a/src/main/java/org/logicng/collections/LNGDoublePriorityQueue.java +++ b/src/main/java/org/logicng/collections/LNGDoublePriorityQueue.java @@ -59,9 +59,9 @@ */ public final class LNGDoublePriorityQueue { - private LNGIntVector heap; - private LNGDoubleVector prior; - private LNGIntVector pos; + private final LNGIntVector heap; + private final LNGDoubleVector prior; + private final LNGIntVector pos; /** * Creates a new priority queue. diff --git a/src/main/java/org/logicng/collections/LNGLongPriorityQueue.java b/src/main/java/org/logicng/collections/LNGLongPriorityQueue.java index e2888cf2..73feb4a7 100644 --- a/src/main/java/org/logicng/collections/LNGLongPriorityQueue.java +++ b/src/main/java/org/logicng/collections/LNGLongPriorityQueue.java @@ -57,9 +57,9 @@ */ public final class LNGLongPriorityQueue { - private LNGIntVector heap; - private LNGLongVector prior; - private LNGIntVector pos; + private final LNGIntVector heap; + private final LNGLongVector prior; + private final LNGIntVector pos; /** * Creates a new priority queue. diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index 28b28371..1343e5f0 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -63,11 +63,11 @@ */ public final class DRUPTrim { - private static int BIGINIT = 1000000; - private static int UNSAT = 0; - private static int SAT = 1; - private static int EXTRA = 2; - private static int MARK = 3; + private static final int BIGINIT = 1000000; + private static final int UNSAT = 0; + private static final int SAT = 1; + private static final int EXTRA = 2; + private static final int MARK = 3; public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof) { final DRUPResult result = new DRUPResult(); @@ -102,33 +102,30 @@ private static int index(int lit) { private static class Solver { - private LNGVector originalProblem; - private LNGVector proof; - private LNGVector core; + private final LNGVector originalProblem; + private final LNGVector proof; + private final LNGVector core; - LNGIntVector DB; - int nVars; - int nClauses; + private LNGIntVector DB; + private int nVars; + private int nClauses; - int[] falseStack; - int[] reason; - int[] internalFalse; - int forcedPtr; - int processedPtr; - int assignedPtr; + private int[] falseStack; + private int[] reason; + private int[] internalFalse; + private int forcedPtr; + private int processedPtr; + private int assignedPtr; - LNGIntVector adlist; - LNGIntVector[] wlist; + private LNGIntVector adlist; + private LNGIntVector[] wlist; - int mask; - boolean delete; + private final boolean delete; - int count; - int basePtr; - int adlemmas; - int lemmas; - int arcs; - int time; + private int count; + private int adlemmas; + private int lemmas; + private int time; private Solver(final LNGVector originalProblem, final LNGVector proof) { this.originalProblem = originalProblem; @@ -144,7 +141,7 @@ private void assign(int a) { private void addWatch(int cPtr, int index) { int lit = this.DB.get(cPtr + index); - this.wlist[index(lit)].push((cPtr << 1) + this.mask); + this.wlist[index(lit)].push((cPtr << 1)); } private void addWatchLit(int l, int m) { @@ -179,7 +176,6 @@ private void markWatch(int clausePtr, int index, int offset) { } private void markClause(int clausePtr, int index) { - this.arcs++; if ((this.DB.get(clausePtr + index - 1) & 1) == 0) { this.DB.set(clausePtr + index - 1, this.DB.get(clausePtr + index - 1) | 1); if (this.DB.get(clausePtr + 1 + index) == 0) @@ -244,7 +240,7 @@ private int propagate() { this.wlist[index(lit)].pop(); gotoNextClause = true; break; - } // Goto the next watched clause + } // go to the next watched clause } if (!gotoNextClause) { this.DB.set(clausePtr + 1, lit); @@ -385,8 +381,6 @@ private boolean parse() { this.adlist.push(clausePtr << 1); - if (nZeros == this.nClauses) - this.basePtr = clausePtr; if (nZeros == 0) { this.lemmas = clausePtr; this.adlemmas = this.adlist.size() - 1; diff --git a/src/main/java/org/logicng/formulas/FType.java b/src/main/java/org/logicng/formulas/FType.java index 2ec02b92..d7fb23ac 100644 --- a/src/main/java/org/logicng/formulas/FType.java +++ b/src/main/java/org/logicng/formulas/FType.java @@ -45,7 +45,7 @@ public enum FType { FALSE((byte) 0x08), NONE((byte) 0x42); - private byte precedence; + private final byte precedence; /** * Constructs a new formula type with a given precedence and syntax string diff --git a/src/main/java/org/logicng/formulas/FormulaFactory.java b/src/main/java/org/logicng/formulas/FormulaFactory.java index 44f44855..0dee5d3e 100644 --- a/src/main/java/org/logicng/formulas/FormulaFactory.java +++ b/src/main/java/org/logicng/formulas/FormulaFactory.java @@ -104,7 +104,7 @@ public class FormulaFactory { Map, Or> orsN; Map pbConstraints; private boolean cnfCheck; - private boolean[] formulaAdditionResult; + private final boolean[] formulaAdditionResult; int ccCounter; int pbCounter; int cnfCounter; diff --git a/src/main/java/org/logicng/formulas/cache/FunctionCacheEntry.java b/src/main/java/org/logicng/formulas/cache/FunctionCacheEntry.java index 182624d2..9a1c9d82 100644 --- a/src/main/java/org/logicng/formulas/cache/FunctionCacheEntry.java +++ b/src/main/java/org/logicng/formulas/cache/FunctionCacheEntry.java @@ -38,7 +38,7 @@ public enum FunctionCacheEntry implements CacheEntry { VARPROFILE("variable profile"), LITPROFILE("literal profile"); - private String description; + private final String description; /** * Constructs a new entry. diff --git a/src/main/java/org/logicng/formulas/cache/PredicateCacheEntry.java b/src/main/java/org/logicng/formulas/cache/PredicateCacheEntry.java index d605bbc0..bec5e79b 100644 --- a/src/main/java/org/logicng/formulas/cache/PredicateCacheEntry.java +++ b/src/main/java/org/logicng/formulas/cache/PredicateCacheEntry.java @@ -40,7 +40,7 @@ public enum PredicateCacheEntry implements CacheEntry { IS_SAT("satisfiable"), IS_TAUTOLOGY("tautology"); - private String description; + private final String description; /** * Constructs a new entry. diff --git a/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java b/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java index 99da836f..4980a1a7 100644 --- a/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java +++ b/src/main/java/org/logicng/formulas/cache/TransformationCacheEntry.java @@ -46,7 +46,7 @@ public enum TransformationCacheEntry implements CacheEntry { UNIT_PROPAGATION("unit propagation"), DISTRIBUTIVE_SIMPLIFICATION("distributive simplification"); - private String description; + private final String description; /** * Constructs a new entry. diff --git a/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java b/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java index 659763a0..c3f4c23e 100644 --- a/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java +++ b/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java @@ -47,9 +47,9 @@ */ public class BronKerbosch> { - private Graph g; - private Comparator> nodeComparator; - private Set>> cliques; + private final Graph g; + private final Comparator> nodeComparator; + private final Set>> cliques; /** * Constructor. diff --git a/src/main/java/org/logicng/graphs/datastructures/Node.java b/src/main/java/org/logicng/graphs/datastructures/Node.java index 5e20438a..b4f52a8e 100644 --- a/src/main/java/org/logicng/graphs/datastructures/Node.java +++ b/src/main/java/org/logicng/graphs/datastructures/Node.java @@ -38,9 +38,9 @@ */ public class Node { - private Graph graph; - private T content; - private Set> neighbours; + private final Graph graph; + private final T content; + private final Set> neighbours; /** * Constructor. diff --git a/src/main/java/org/logicng/io/parsers/FormulaParser.java b/src/main/java/org/logicng/io/parsers/FormulaParser.java index d1c6ce56..82cccdee 100644 --- a/src/main/java/org/logicng/io/parsers/FormulaParser.java +++ b/src/main/java/org/logicng/io/parsers/FormulaParser.java @@ -31,9 +31,6 @@ import org.logicng.formulas.Formula; import org.logicng.formulas.FormulaFactory; -import java.io.ByteArrayInputStream; -import java.io.InputStream; - /** * Super class for a formula parser. * @version 1.2 diff --git a/src/main/java/org/logicng/io/readers/DimacsReader.java b/src/main/java/org/logicng/io/readers/DimacsReader.java index 2669bb61..5219b586 100644 --- a/src/main/java/org/logicng/io/readers/DimacsReader.java +++ b/src/main/java/org/logicng/io/readers/DimacsReader.java @@ -77,11 +77,9 @@ public static List readCNF(final File file, final FormulaFactory f) thr * @param f the formula factory * @param prefix the prefix for the variable names * @return the list of formulas (clauses) - * @throws IOException if there was a problem reading the file - * @throws ParserException if there was a problem parsing the formula + * @throws IOException if there was a problem reading the file */ - public static List readCNF(final File file, final FormulaFactory f, final String prefix) - throws IOException, ParserException { + public static List readCNF(final File file, final FormulaFactory f, final String prefix) throws IOException { List result = new ArrayList<>(); try (final BufferedReader br = new BufferedReader(new FileReader(file))) { while (br.ready()) { diff --git a/src/main/java/org/logicng/solvers/MaxSATSolver.java b/src/main/java/org/logicng/solvers/MaxSATSolver.java index 15313585..a13baba7 100644 --- a/src/main/java/org/logicng/solvers/MaxSATSolver.java +++ b/src/main/java/org/logicng/solvers/MaxSATSolver.java @@ -64,8 +64,8 @@ private enum Algorithm {WBO, INC_WBO, LINEAR_SU, LINEAR_US, MSU3, WMSU3} private MaxSAT solver; private SortedMap var2index; private SortedMap index2var; - private MaxSATConfig configuration; - private Algorithm algorithm; + private final MaxSATConfig configuration; + private final Algorithm algorithm; /** * Constructs a new MaxSAT solver with a given configuration. diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index 4eb8ec9d..af7cd1f4 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -87,7 +87,7 @@ private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} private final SolverStyle style; private final LNGIntVector validStates; private boolean incremental; - private boolean initialPhase; + private final boolean initialPhase; private int nextStateId; /** diff --git a/src/main/java/org/logicng/solvers/SATSolver.java b/src/main/java/org/logicng/solvers/SATSolver.java index c7ae02be..f8f1219d 100644 --- a/src/main/java/org/logicng/solvers/SATSolver.java +++ b/src/main/java/org/logicng/solvers/SATSolver.java @@ -147,7 +147,7 @@ public void addWithRelaxation(final Variable relaxationVar, final ImmutableFormu * @param relaxationVar the relaxation variable * @param formulas the collection of formulas */ - public void add(final Variable relaxationVar, final Collection formulas) { + public void addWithRelaxation(final Variable relaxationVar, final Collection formulas) { for (final Formula formula : formulas) this.addWithRelaxation(relaxationVar, formula); } diff --git a/src/main/java/org/logicng/solvers/datastructures/CLClause.java b/src/main/java/org/logicng/solvers/datastructures/CLClause.java index b9469c86..d9942fe9 100644 --- a/src/main/java/org/logicng/solvers/datastructures/CLClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/CLClause.java @@ -71,11 +71,7 @@ public int compare(final CLClause c1, CLClause c2) { return -1; if (c1.glue > c2.glue) return 1; - if (c1.activity < c2.activity) - return 1; - if (c1.activity > c2.activity) - return -1; - return 0; + return Long.compare(c2.activity, c1.activity); } }; @@ -87,7 +83,7 @@ public int compare(final CLClause c1, CLClause c2) { private boolean dumped; private boolean satisfied; private long activity; - private LNGIntVector lits; + private final LNGIntVector lits; /** * Constructs a new clause with default size 2. diff --git a/src/main/java/org/logicng/solvers/datastructures/LNGBoundedIntQueue.java b/src/main/java/org/logicng/solvers/datastructures/LNGBoundedIntQueue.java index fa8ab7b4..737c463e 100644 --- a/src/main/java/org/logicng/solvers/datastructures/LNGBoundedIntQueue.java +++ b/src/main/java/org/logicng/solvers/datastructures/LNGBoundedIntQueue.java @@ -85,7 +85,7 @@ * @since 1.0 */ public final class LNGBoundedIntQueue { - private LNGIntVector elems; + private final LNGIntVector elems; private int first; private int last; private long sumOfQueue; diff --git a/src/main/java/org/logicng/solvers/datastructures/LNGBoundedLongQueue.java b/src/main/java/org/logicng/solvers/datastructures/LNGBoundedLongQueue.java index b0bd0e1a..7d169539 100644 --- a/src/main/java/org/logicng/solvers/datastructures/LNGBoundedLongQueue.java +++ b/src/main/java/org/logicng/solvers/datastructures/LNGBoundedLongQueue.java @@ -85,7 +85,7 @@ * @since 1.0 */ public final class LNGBoundedLongQueue { - private LNGLongVector elems; + private final LNGLongVector elems; private int first; private int last; private long sumOfQueue; diff --git a/src/main/java/org/logicng/solvers/datastructures/LNGHeap.java b/src/main/java/org/logicng/solvers/datastructures/LNGHeap.java index 19afe0ba..bdb85d5b 100644 --- a/src/main/java/org/logicng/solvers/datastructures/LNGHeap.java +++ b/src/main/java/org/logicng/solvers/datastructures/LNGHeap.java @@ -55,8 +55,8 @@ public final class LNGHeap { private final MiniSatStyleSolver s; - private LNGIntVector heap; - private LNGIntVector indices; + private final LNGIntVector heap; + private final LNGIntVector indices; /** * Constructs a new heap for a given solver. The solver is required to access it's activity information stored diff --git a/src/main/java/org/logicng/solvers/datastructures/MSClause.java b/src/main/java/org/logicng/solvers/datastructures/MSClause.java index 4c0dfdee..558908e3 100644 --- a/src/main/java/org/logicng/solvers/datastructures/MSClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/MSClause.java @@ -85,15 +85,15 @@ public int compare(final MSClause x, final MSClause y) { } }; - private LNGIntVector data; + private final LNGIntVector data; private double activity; - private boolean learnt; + private final boolean learnt; private int szWithoutSelectors; private boolean seen; private long lbd; private boolean canBeDel; private boolean oneWatched; - private boolean isAtMost; + private final boolean isAtMost; private int atMostWatchers; /** diff --git a/src/main/java/org/logicng/solvers/datastructures/MSHardClause.java b/src/main/java/org/logicng/solvers/datastructures/MSHardClause.java index 4288085e..fae665a3 100644 --- a/src/main/java/org/logicng/solvers/datastructures/MSHardClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/MSHardClause.java @@ -58,7 +58,7 @@ */ public final class MSHardClause { - private LNGIntVector clause; + private final LNGIntVector clause; /** * Constructs a new hard clause. diff --git a/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java b/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java index 82ebbb45..c9cc2b9f 100644 --- a/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java @@ -58,10 +58,10 @@ */ public final class MSSoftClause { - private LNGIntVector clause; + private final LNGIntVector clause; private int weight; private int assumptionVar; - private LNGIntVector relaxationVars; + private final LNGIntVector relaxationVars; /** * Constructs a new soft clause. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java index 034f876d..d0b18eae 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java @@ -75,10 +75,10 @@ */ public final class IncWBO extends WBO { - private Encoder encoder; - private LNGBooleanVector incSoft; + private final Encoder encoder; + private final LNGBooleanVector incSoft; private boolean firstBuild; - private PrintStream output; + private final PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java index 5fdc6b96..50c1c765 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java @@ -70,12 +70,12 @@ public final class LinearSU extends MaxSAT { private MiniSatStyleSolver solver; - private Encoder encoder; - private boolean bmoMode; // Enables BMO mode. - private LNGIntVector objFunction; // Literals to be used in the constraint that excludes models. - private LNGIntVector coeffs; // Coefficients of the literals that are used in the constraint that excludes models. + private final Encoder encoder; + private final boolean bmoMode; // Enables BMO mode. + private final LNGIntVector objFunction; // Literals to be used in the constraint that excludes models. + private final LNGIntVector coeffs; // Coefficients of the literals that are used in the constraint that excludes models. private boolean isBmo; // Stores if the formula is BMO or not. - private PrintStream output; + private final PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java index 7d2ace5c..914068ed 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java @@ -66,10 +66,10 @@ public final class LinearUS extends MaxSAT { private MiniSatStyleSolver solver; - private Encoder encoder; - private MaxSATConfig.IncrementalStrategy incrementalStrategy; - private LNGIntVector objFunction; - private PrintStream output; + private final Encoder encoder; + private final MaxSATConfig.IncrementalStrategy incrementalStrategy; + private final LNGIntVector objFunction; + private final PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java index b4bd07a8..de61fb7c 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java @@ -72,12 +72,12 @@ public final class MSU3 extends MaxSAT { private MiniSatStyleSolver solver; - private Encoder encoder; - private IncrementalStrategy incrementalStrategy; - private LNGIntVector objFunction; - private SortedMap coreMapping; - private LNGBooleanVector activeSoft; - private PrintStream output; + private final Encoder encoder; + private final IncrementalStrategy incrementalStrategy; + private final LNGIntVector objFunction; + private final SortedMap coreMapping; + private final LNGBooleanVector activeSoft; + private final PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java index ff04e7be..b3656c12 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java @@ -98,15 +98,15 @@ public enum MaxSATResult { UNSATISFIABLE, OPTIMUM, UNDEF } - protected LNGVector softClauses; - protected LNGVector hardClauses; + protected final LNGVector softClauses; + protected final LNGVector hardClauses; protected int hardWeight; protected ProblemType problemType; protected int nbVars; protected int nbSoft; protected int nbHard; protected int nbInitialVariables; - protected LNGBooleanVector model; + protected final LNGBooleanVector model; protected int nbCores; protected int nbSymmetryClauses; protected long sumSizeCores; @@ -115,8 +115,8 @@ public enum MaxSATResult { protected int lbCost; protected int currentWeight; protected Verbosity verbosity; - protected LNGIntVector orderWeights; - protected SolverType solverType; + protected final LNGIntVector orderWeights; + protected final SolverType solverType; protected MaxSATHandler handler; @@ -243,8 +243,7 @@ public void addHardClause(final LNGIntVector lits) { */ public void addSoftClause(int weight, final LNGIntVector lits) { final LNGIntVector rVars = new LNGIntVector(); - final int assump = LIT_UNDEF; - this.softClauses.push(new MSSoftClause(lits, weight, assump, rVars)); + this.softClauses.push(new MSSoftClause(lits, weight, LIT_UNDEF, rVars)); this.nbSoft++; } @@ -255,8 +254,7 @@ public void addSoftClause(int weight, final LNGIntVector lits) { * @param vars the relaxation variables of the soft clause */ public void addSoftClause(int weight, final LNGIntVector lits, final LNGIntVector vars) { - final int assump = LIT_UNDEF; - this.softClauses.push(new MSSoftClause(lits, weight, assump, vars)); + this.softClauses.push(new MSSoftClause(lits, weight, LIT_UNDEF, vars)); this.nbSoft++; } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java index 185e948c..e11d5c0b 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java @@ -89,7 +89,7 @@ public class WBO extends MaxSAT { protected LNGVector relaxationMapping; protected Set> duplicatedSymmetryClauses; protected int symmetryBreakingLimit; - private PrintStream output; + private final PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java index 489497ec..96b44b4a 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java @@ -74,17 +74,17 @@ */ public final class WMSU3 extends MaxSAT { - boolean bmoStrategy; + final boolean bmoStrategy; boolean isBmo; private MiniSatStyleSolver solver; - private Encoder encoder; - private IncrementalStrategy incrementalStrategy; - private LNGIntVector assumptions; - private LNGIntVector objFunction; - private LNGIntVector coeffs; - private SortedMap coreMapping; - private LNGBooleanVector activeSoft; - private PrintStream output; + final private Encoder encoder; + final private IncrementalStrategy incrementalStrategy; + final private LNGIntVector assumptions; + final private LNGIntVector objFunction; + final private LNGIntVector coeffs; + final private SortedMap coreMapping; + final private LNGBooleanVector activeSoft; + final private PrintStream output; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java index 2571d53c..37fd4f2f 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java @@ -65,14 +65,14 @@ public class Encoder { private IncrementalStrategy incrementalStrategy; - private CardinalityEncoding cardinalityEncoding; + private final CardinalityEncoding cardinalityEncoding; private PBEncoding pbEncoding; private AMOEncoding amoEncoding; - private Ladder ladder; - private ModularTotalizer mtotalizer; - private Totalizer totalizer; - private SequentialWeightCounter swc; + private final Ladder ladder; + private final ModularTotalizer mtotalizer; + private final Totalizer totalizer; + private final SequentialWeightCounter swc; /** * Constructs a new Encoder. @@ -89,8 +89,8 @@ public Encoder(final CardinalityEncoding cardinality) { * @param amo the AMO constraint encoder * @param pb the pseudo Boolean encoder */ - Encoder(final IncrementalStrategy incremental, final CardinalityEncoding cardinality, - final AMOEncoding amo, final PBEncoding pb) { + private Encoder(final IncrementalStrategy incremental, final CardinalityEncoding cardinality, + final AMOEncoding amo, final PBEncoding pb) { this.incrementalStrategy = incremental; this.cardinalityEncoding = cardinality; this.amoEncoding = amo; diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java index e72c9c13..018fa2ac 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoding.java @@ -62,13 +62,13 @@ */ public abstract class Encoding { - protected LNGIntVector clause; - protected boolean hasEncoding; + protected final LNGIntVector clause; + boolean hasEncoding; /** * Constructor. */ - protected Encoding() { + Encoding() { this.clause = new LNGIntVector(); } @@ -87,7 +87,7 @@ void addUnitClause(final MiniSatStyleSolver s, int a) { * @param a the unit literal * @param blocking the blocking literal */ - void addUnitClause(final MiniSatStyleSolver s, int a, int blocking) { + private void addUnitClause(final MiniSatStyleSolver s, int a, int blocking) { assert this.clause.size() == 0; assert a != LIT_UNDEF; assert var(a) < s.nVars(); diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java index 7eab1673..63498937 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java @@ -67,11 +67,11 @@ final class ModularTotalizer extends Encoding { private static final int LIT_ERROR = -2; - private int h0; + private final int h0; private int modulo; private LNGIntVector cardinalityInlits; - private LNGIntVector cardinalityUpoutlits; - private LNGIntVector cardinalityLwoutlits; + private final LNGIntVector cardinalityUpoutlits; + private final LNGIntVector cardinalityLwoutlits; private int currentCardinalityRhs; /** diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java b/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java index c425f651..2c08c4f2 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java @@ -65,11 +65,11 @@ */ final class SequentialWeightCounter extends Encoding { - private LNGIntVector pbOutlits; + private final LNGIntVector pbOutlits; private int currentPbRhs; private int currentLitBlocking; - private LNGIntVector unitLits; - private LNGIntVector unitCoeffs; + private final LNGIntVector unitLits; + private final LNGIntVector unitCoeffs; private LNGVector seqAuxiliaryInc; private LNGIntVector litsInc; private LNGIntVector coeffsInc; diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java index 5f91786c..a442a31e 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java @@ -67,13 +67,13 @@ */ final class Totalizer extends Encoding { - private LNGVector totalizerIterativeLeft; - private LNGVector totalizerIterativeRight; - private LNGVector totalizerIterativeOutput; - private LNGIntVector totalizerIterativeRhs; - private int blocking; + private final LNGVector totalizerIterativeLeft; + private final LNGVector totalizerIterativeRight; + private final LNGVector totalizerIterativeOutput; + private final LNGIntVector totalizerIterativeRhs; + private final int blocking; private LNGIntVector cardinalityInlits; - private LNGIntVector cardinalityOutlits; + private final LNGIntVector cardinalityOutlits; private MaxSATConfig.IncrementalStrategy incrementalStrategy; private int currentCardinalityRhs; private boolean joinMode; diff --git a/src/main/java/org/logicng/solvers/sat/CleaneLingSolver.java b/src/main/java/org/logicng/solvers/sat/CleaneLingSolver.java index 36883545..1f51c122 100644 --- a/src/main/java/org/logicng/solvers/sat/CleaneLingSolver.java +++ b/src/main/java/org/logicng/solvers/sat/CleaneLingSolver.java @@ -615,7 +615,7 @@ private CLOccs occs(int lit) { /** * Updates and pushes a literal as candidate to simplify. - * @param lit the literal + * @param l the literal */ private void touch(int l) { int lit = l; diff --git a/src/test/java/org/logicng/formulas/ExtendedFormulaFactoryTest.java b/src/test/java/org/logicng/formulas/ExtendedFormulaFactoryTest.java index f740103c..f866e200 100644 --- a/src/test/java/org/logicng/formulas/ExtendedFormulaFactoryTest.java +++ b/src/test/java/org/logicng/formulas/ExtendedFormulaFactoryTest.java @@ -41,6 +41,8 @@ import java.util.ArrayList; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + /** * Unit tests for the class {@link ExtendedFormulaFactory}. * @version 1.2 @@ -119,9 +121,10 @@ public void testDNFFactorization() { } private void testCacheClearance(FormulaTransformation transformation, PredicateCacheEntry predicateCacheEntry, TransformationCacheEntry transformationCacheEntry) { - ExtendedFormulaFactory eff = new ExtendedFormulaFactory(); - List formulas = initializeFormulaFactoryWithFormulas(eff); - FormulaFactoryState state = eff.save(); + final ExtendedFormulaFactory eff = new ExtendedFormulaFactory(); + final List formulas = initializeFormulaFactoryWithFormulas(eff); + final FormulaFactoryState state = eff.save(); + assertThat(state.toString()).isEqualTo("FormulaFactoryState{id=0, state=[4, 4, 0, 5, 4, 5, 3, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0]}"); for (Formula formula : formulas) { transformation.apply(formula, true); softly.assertThat((formula.predicateCacheEntry(predicateCacheEntry) != null && formula.predicateCacheEntry(predicateCacheEntry).equals(Tristate.TRUE)) || formula.transformationCacheEntry(transformationCacheEntry) != null).as("CacheClearanceTest for " + formula.toString() + " type: " + transformationCacheEntry).isTrue(); diff --git a/src/test/java/org/logicng/io/FormulaWriterReaderTest.java b/src/test/java/org/logicng/io/FormulaWriterReaderTest.java index 769f84b3..746af895 100644 --- a/src/test/java/org/logicng/io/FormulaWriterReaderTest.java +++ b/src/test/java/org/logicng/io/FormulaWriterReaderTest.java @@ -60,7 +60,9 @@ public void testSimpleFormulaOneLine() throws ParserException, IOException { final Formula p1 = new PropositionalParser(f).parse("A & B & ~(C | (D => ~E))"); FormulaWriter.write(fileName, p1, false); final Formula p2 = FormulaReader.readPropositionalFormula(fileName, f); + final Formula p3 = FormulaReader.readPropositionalFormula(file, f); Assert.assertEquals(p1, p2); + Assert.assertEquals(p1, p3); try (final BufferedReader reader = new BufferedReader(new FileReader(fileName))) { int count = 0; while (reader.ready()) { @@ -100,7 +102,9 @@ public void testPBFormulaOneLine() throws ParserException, IOException { final Formula p1 = new PseudoBooleanParser(f).parse("A & B & ~(C | (D => ~E)) & (2*y + 3*y >= 4) & (x <= 1)"); FormulaWriter.write(fileName, p1, false); final Formula p2 = FormulaReader.readPseudoBooleanFormula(fileName, f); + final Formula p3 = FormulaReader.readPseudoBooleanFormula(file, f); Assert.assertEquals(p1, p2); + Assert.assertEquals(p1, p3); try (final BufferedReader reader = new BufferedReader(new FileReader(fileName))) { int count = 0; while (reader.ready()) { diff --git a/src/test/java/org/logicng/solvers/sat/SATTest.java b/src/test/java/org/logicng/solvers/sat/SATTest.java index 3eb9eeea..4334f68c 100644 --- a/src/test/java/org/logicng/solvers/sat/SATTest.java +++ b/src/test/java/org/logicng/solvers/sat/SATTest.java @@ -30,6 +30,7 @@ import org.junit.Assert; import org.junit.Test; +import org.logicng.collections.ImmutableFormulaList; import org.logicng.datastructures.Assignment; import org.logicng.datastructures.Tristate; import org.logicng.formulas.CType; @@ -314,6 +315,36 @@ public void testWithRelaxation() throws ParserException { Assert.assertTrue(e instanceof UnsupportedOperationException); } s.reset(); + + s.add(one); + s.addWithRelaxation(f.variable("d"), new StandardProposition(two)); + Assert.assertEquals(Tristate.TRUE, s.sat()); + try { + Assert.assertEquals(2, s.enumerateAllModels().size()); + } catch (Exception e) { + Assert.assertTrue(e instanceof UnsupportedOperationException); + } + s.reset(); + + s.add(one); + s.addWithRelaxation(f.variable("d"), new ImmutableFormulaList(two)); + Assert.assertEquals(Tristate.TRUE, s.sat()); + try { + Assert.assertEquals(2, s.enumerateAllModels().size()); + } catch (Exception e) { + Assert.assertTrue(e instanceof UnsupportedOperationException); + } + s.reset(); + + s.add(one); + s.addWithRelaxation(f.variable("d"), Arrays.asList(two, f.verum())); + Assert.assertEquals(Tristate.TRUE, s.sat()); + try { + Assert.assertEquals(2, s.enumerateAllModels().size()); + } catch (Exception e) { + Assert.assertTrue(e instanceof UnsupportedOperationException); + } + s.reset(); } } From 091b19d19d02ee7f42e3f3bfc8ebefb26f0c8e0f Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 21 Oct 2017 17:21:31 +0200 Subject: [PATCH 21/22] More testing --- .../org/logicng/explanations/unsatcores/drup/DRUPTrim.java | 4 ++-- src/test/java/org/logicng/explanations/drup/DRUPTest.java | 2 +- src/test/java/org/logicng/io/FormulaWriterReaderTest.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index 1343e5f0..ee51dbe2 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -58,8 +58,8 @@ /** * Implementation of the DRUP-trim tool to check satisfiability proofs and perform trimming. - * @version 1.2 - * @since 1.2 + * @version 1.3 + * @since 1.3 */ public final class DRUPTrim { diff --git a/src/test/java/org/logicng/explanations/drup/DRUPTest.java b/src/test/java/org/logicng/explanations/drup/DRUPTest.java index bdd26967..a4af5da0 100644 --- a/src/test/java/org/logicng/explanations/drup/DRUPTest.java +++ b/src/test/java/org/logicng/explanations/drup/DRUPTest.java @@ -79,7 +79,7 @@ public void testUnsatCoresFromDimacs() throws IOException, ParserException { final List> cnfs = new ArrayList<>(3); cnfs.add(DimacsReader.readCNF("tests/drup/simple_input.cnf", f)); cnfs.add(DimacsReader.readCNF("tests/drup/pg4_input.cnf", f)); - cnfs.add(DimacsReader.readCNF("tests/drup/avg_input.cnf", f)); + cnfs.add(DimacsReader.readCNF("tests/drup/avg_input.cnf", f, "var")); for (SATSolver solver : this.solvers) { for (List cnf : cnfs) { diff --git a/src/test/java/org/logicng/io/FormulaWriterReaderTest.java b/src/test/java/org/logicng/io/FormulaWriterReaderTest.java index 746af895..b6b9a6be 100644 --- a/src/test/java/org/logicng/io/FormulaWriterReaderTest.java +++ b/src/test/java/org/logicng/io/FormulaWriterReaderTest.java @@ -58,7 +58,7 @@ public void testSimpleFormulaOneLine() throws ParserException, IOException { final File file = new File(fileName); final FormulaFactory f = new FormulaFactory(); final Formula p1 = new PropositionalParser(f).parse("A & B & ~(C | (D => ~E))"); - FormulaWriter.write(fileName, p1, false); + FormulaWriter.write(file, p1, false); final Formula p2 = FormulaReader.readPropositionalFormula(fileName, f); final Formula p3 = FormulaReader.readPropositionalFormula(file, f); Assert.assertEquals(p1, p2); From 8fdac9e45915c528723db4e1aab0c9724d4556bb Mon Sep 17 00:00:00 2001 From: Christoph Zengler Date: Sat, 21 Oct 2017 18:56:30 +0200 Subject: [PATCH 22/22] fixed some javadoc issues and code formatting --- README.md | 7 +- .../cardinalityconstraints/CCAMOBimander.java | 4 +- .../CCAMOCommander.java | 2 +- .../EncodingAuxiliaryVariable.java | 2 + .../unsatcores/MUSGeneration.java | 2 + .../explanations/unsatcores/UNSATCore.java | 1 + .../unsatcores/algorithms/MUSAlgorithm.java | 1 + .../unsatcores/drup/DRUPTrim.java | 41 +++---- .../formulas/ExtendedFormulaFactory.java | 90 +++++++-------- .../org/logicng/formulas/FormulaFactory.java | 46 ++++---- .../org/logicng/formulas/PBConstraint.java | 79 +++++++------ .../graphs/algorithms/BronKerbosch.java | 1 + .../ConnectedComponentsComputation.java | 2 +- .../logicng/graphs/datastructures/Graph.java | 1 + .../logicng/graphs/datastructures/Node.java | 15 +-- .../java/org/logicng/solvers/CleaneLing.java | 26 ++--- .../org/logicng/solvers/MaxSATSolver.java | 4 +- .../java/org/logicng/solvers/MiniSat.java | 104 +++++++++--------- .../solvers/datastructures/CLClause.java | 3 +- .../solvers/datastructures/MSClause.java | 4 +- .../solvers/datastructures/MSSoftClause.java | 2 +- .../solvers/maxsat/algorithms/IncWBO.java | 2 +- .../solvers/maxsat/algorithms/LinearSU.java | 4 +- .../solvers/maxsat/algorithms/LinearUS.java | 2 +- .../solvers/maxsat/algorithms/MSU3.java | 2 +- .../solvers/maxsat/algorithms/MaxSAT.java | 45 ++++---- .../solvers/maxsat/algorithms/WBO.java | 16 +-- .../solvers/maxsat/algorithms/WMSU3.java | 4 +- .../solvers/maxsat/encodings/Encoder.java | 7 +- .../maxsat/encodings/ModularTotalizer.java | 4 +- .../encodings/SequentialWeightCounter.java | 4 +- .../solvers/maxsat/encodings/Totalizer.java | 2 +- .../CCIncrementalFormulaTest.java | 2 +- .../CCIncrementalSolverTest.java | 2 +- .../org/logicng/formulas/FormulaTest.java | 32 +++--- .../java/org/logicng/formulas/NNFTest.java | 5 +- .../org/logicng/formulas/RestrictionTest.java | 4 +- .../graphs/datastructures/GraphTest.java | 28 ++--- .../logicng/predicates/DNFPredicateTest.java | 2 +- .../solvers/maxsat/PartialMaxSATTest.java | 7 +- .../maxsat/PartialWeightedMaxSATTest.java | 9 +- .../solvers/maxsat/PureMaxSATTest.java | 6 +- 42 files changed, 315 insertions(+), 311 deletions(-) diff --git a/README.md b/README.md index 008a8a8e..12b95d0c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ LogicNG is released in the Maven Central Repository. To include it just add org.logicng logicng - 1.2 + 1.3 ``` to you Maven POM. @@ -59,8 +59,11 @@ final Tristate result = miniSat.sat(); The library is released under the Apache License and therefore is free to use in any private, educational, or commercial projects. Commercial support is available. Please contact Christoph Zengler at logicng@escsol.com for further details. ## Changelog -### Version 1.3 (Release xxx) +### Version 1.3 (Release October 2017) +* MiniSat and Glucose have a new option for proof tracing. A DRUP implementation stores all the necessary information for generating a proof for unsatisfiable formulas after solving them. The new method can be found in the SAT solver class: `unsatCore()` * Unsat Cores are now parametrized with the proposition type +* A new simplifier which applies the distributive law was added: `DistributiveSimplifier` +* Some minor bug-fixes in handling corner cases of cardinality and pseudo-Boolean constraints ### Version 1.2 (Release July 2017) * Introduced an extended formula factory which is able to return to a previously saved state and delete old formulas (and get them garbage collected) diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java b/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java index fab864c4..bd204074 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCAMOBimander.java @@ -63,13 +63,13 @@ */ final class CCAMOBimander implements CCAtMostOne { - private EncodingResult result; private final LNGVector> groups; private final LNGVector bits; + private final int m; + private EncodingResult result; private int numberOfBits; private int twoPowNBits; private int k; - private final int m; /** * Constructs the bimander AMO encoder with a given number of groups. diff --git a/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java b/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java index b1eeee5f..8fcfeaf9 100644 --- a/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java +++ b/src/main/java/org/logicng/cardinalityconstraints/CCAMOCommander.java @@ -63,11 +63,11 @@ */ final class CCAMOCommander implements CCAtMostOne { - private EncodingResult result; private final int k; private final LNGVector literals; private final LNGVector nextLiterals; private final LNGVector currentLiterals; + private EncodingResult result; /** * Constructs the commander AMO encoder with a given group size. diff --git a/src/main/java/org/logicng/datastructures/EncodingAuxiliaryVariable.java b/src/main/java/org/logicng/datastructures/EncodingAuxiliaryVariable.java index fc0206ed..bf3bddb1 100644 --- a/src/main/java/org/logicng/datastructures/EncodingAuxiliaryVariable.java +++ b/src/main/java/org/logicng/datastructures/EncodingAuxiliaryVariable.java @@ -36,6 +36,8 @@ *

* This variable is used, if the result is added directly to a solver. In this case no variable on the factory has * to be created. + * @version 1.1 + * @since 1.1 */ final class EncodingAuxiliaryVariable extends Variable { diff --git a/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java b/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java index e8a41ebe..0b459699 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java +++ b/src/main/java/org/logicng/explanations/unsatcores/MUSGeneration.java @@ -57,6 +57,7 @@ public MUSGeneration() { * Computes a MUS for the given propositions with the default algorithm and the default configuration. * @param propositions the propositions * @param f the formula factory + * @param the type of the MUSes propositions * @return the MUS */ public UNSATCore computeMUS(final List propositions, final FormulaFactory f) { @@ -68,6 +69,7 @@ public UNSATCore computeMUS(final List proposition * @param propositions the propositions * @param f the formula factory * @param config the MUS configuration + * @param the type of the MUSes propositions * @return the MUS */ public UNSATCore computeMUS(final List propositions, final FormulaFactory f, final MUSConfig config) { diff --git a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java index 99ba963f..ecc422b5 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java +++ b/src/main/java/org/logicng/explanations/unsatcores/UNSATCore.java @@ -35,6 +35,7 @@ /** * An unsatisfiable core (can be a minimal unsatisfiable sub-formula). + * @param the type of the core's propositions * @version 1.3 * @since 1.1 */ diff --git a/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java b/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java index bf9a4377..4d12bde0 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java +++ b/src/main/java/org/logicng/explanations/unsatcores/algorithms/MUSAlgorithm.java @@ -47,6 +47,7 @@ abstract class MUSAlgorithm { * @param propositions the propositions * @param f the formula factory * @param config the MUS configuration + * @param the type of the MUSes propositions * @return the MUS */ public abstract UNSATCore computeMUS(final List propositions, final FormulaFactory f, diff --git a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java index ee51dbe2..2b786da3 100644 --- a/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java +++ b/src/main/java/org/logicng/explanations/unsatcores/drup/DRUPTrim.java @@ -69,20 +69,6 @@ public final class DRUPTrim { private static final int EXTRA = 2; private static final int MARK = 3; - public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof) { - final DRUPResult result = new DRUPResult(); - Solver s = new Solver(originalProblem, proof); - boolean parseReturnValue = s.parse(); - if (!parseReturnValue) { - result.trivialUnsat = true; - result.unsatCore = new LNGVector<>(); - } else { - result.trivialUnsat = false; - result.unsatCore = s.verify(); - } - return result; - } - private static int getHash(int[] _marks, int mark, final LNGIntVector input) { int sum = 0; int xor = 0; @@ -100,28 +86,43 @@ private static int index(int lit) { return lit > 0 ? lit * 2 : (-lit * 2) ^ 1; } + /** + * Computes the DRUP result for a given problem in terms of original clauses and the generated proof. + * @param originalProblem the clauses of the original problem + * @param proof the clauses of the proof + * @return the result of the DRUP execution from which the UNSAT core can be generated + */ + public DRUPResult compute(final LNGVector originalProblem, final LNGVector proof) { + final DRUPResult result = new DRUPResult(); + Solver s = new Solver(originalProblem, proof); + boolean parseReturnValue = s.parse(); + if (!parseReturnValue) { + result.trivialUnsat = true; + result.unsatCore = new LNGVector<>(); + } else { + result.trivialUnsat = false; + result.unsatCore = s.verify(); + } + return result; + } + private static class Solver { private final LNGVector originalProblem; private final LNGVector proof; private final LNGVector core; - + private final boolean delete; private LNGIntVector DB; private int nVars; private int nClauses; - private int[] falseStack; private int[] reason; private int[] internalFalse; private int forcedPtr; private int processedPtr; private int assignedPtr; - private LNGIntVector adlist; private LNGIntVector[] wlist; - - private final boolean delete; - private int count; private int adlemmas; private int lemmas; diff --git a/src/main/java/org/logicng/formulas/ExtendedFormulaFactory.java b/src/main/java/org/logicng/formulas/ExtendedFormulaFactory.java index 5b296031..366d213c 100644 --- a/src/main/java/org/logicng/formulas/ExtendedFormulaFactory.java +++ b/src/main/java/org/logicng/formulas/ExtendedFormulaFactory.java @@ -49,8 +49,52 @@ */ public class ExtendedFormulaFactory extends FormulaFactory { - private int nextStateId; private final LNGIntVector validStates = new LNGIntVector(); + private int nextStateId; + + /** + * Shrinks a given map to a given size + * @param map the map to be shrunk + * @param newSize the new size, the map shall be shrunk to + */ + private static void shrinkMap(final Map map, int newSize) { + if (!(map instanceof LinkedHashMap)) + throw new IllegalStateException("Cannot shrink a map which is not of type LinkedHashMap"); + if (newSize > map.size()) + throw new IllegalStateException("Cannot shrink a map of size " + map.size() + " to new size " + newSize); + Iterator> entryIterator = map.entrySet().iterator(); + int count = 0; + while (count < newSize) { + entryIterator.next(); + count++; + } + while (entryIterator.hasNext()) { + entryIterator.next(); + entryIterator.remove(); + } + } + + /** + * Shrinks a given set to a given size + * @param set the set to be shrunk + * @param newSize the new size, the set shall be shrunk to + */ + private static void shrinkSet(final Set set, int newSize) { + if (!(set instanceof LinkedHashSet)) + throw new IllegalStateException("Cannot shrink a set which is not of type LinkedHashSet"); + if (newSize > set.size()) + throw new IllegalStateException("Cannot shrink a set of size " + set.size() + " to new size " + newSize); + Iterator entryIterator = set.iterator(); + int count = 0; + while (count < newSize) { + entryIterator.next(); + count++; + } + while (entryIterator.hasNext()) { + entryIterator.next(); + entryIterator.remove(); + } + } @Override public void clear() { @@ -174,48 +218,4 @@ private void clearCaches() { for (Formula formula : this.pbConstraints.values()) formula.clearCaches(); } - - /** - * Shrinks a given map to a given size - * @param map the map to be shrunk - * @param newSize the new size, the map shall be shrunk to - */ - private static void shrinkMap(final Map map, int newSize) { - if (!(map instanceof LinkedHashMap)) - throw new IllegalStateException("Cannot shrink a map which is not of type LinkedHashMap"); - if (newSize > map.size()) - throw new IllegalStateException("Cannot shrink a map of size " + map.size() + " to new size " + newSize); - Iterator> entryIterator = map.entrySet().iterator(); - int count = 0; - while (count < newSize) { - entryIterator.next(); - count++; - } - while (entryIterator.hasNext()) { - entryIterator.next(); - entryIterator.remove(); - } - } - - /** - * Shrinks a given set to a given size - * @param set the set to be shrunk - * @param newSize the new size, the set shall be shrunk to - */ - private static void shrinkSet(final Set set, int newSize) { - if (!(set instanceof LinkedHashSet)) - throw new IllegalStateException("Cannot shrink a set which is not of type LinkedHashSet"); - if (newSize > set.size()) - throw new IllegalStateException("Cannot shrink a set of size " + set.size() + " to new size " + newSize); - Iterator entryIterator = set.iterator(); - int count = 0; - while (count < newSize) { - entryIterator.next(); - count++; - } - while (entryIterator.hasNext()) { - entryIterator.next(); - entryIterator.remove(); - } - } } diff --git a/src/main/java/org/logicng/formulas/FormulaFactory.java b/src/main/java/org/logicng/formulas/FormulaFactory.java index 0dee5d3e..c06ccb7a 100644 --- a/src/main/java/org/logicng/formulas/FormulaFactory.java +++ b/src/main/java/org/logicng/formulas/FormulaFactory.java @@ -88,6 +88,7 @@ public class FormulaFactory { private final PBEncoder pbEncoder; private final CNFEncoder cnfEncoder; private final PseudoBooleanParser parser; + private final boolean[] formulaAdditionResult; Map posLiterals; Map negLiterals; Set generatedVariables; @@ -103,11 +104,10 @@ public class FormulaFactory { Map, Or> ors4; Map, Or> orsN; Map pbConstraints; - private boolean cnfCheck; - private final boolean[] formulaAdditionResult; int ccCounter; int pbCounter; int cnfCounter; + private boolean cnfCheck; /** * Constructor for a new formula factory. @@ -1030,26 +1030,6 @@ public FormulaFactoryStatistics statistics() { return statistics; } - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("Name: ").append(this.name).append("\n"); - sb.append("Positive Literals: ").append(this.posLiterals.size()).append("\n"); - sb.append("Negative Literals: ").append(this.negLiterals.size()).append("\n"); - sb.append("Negations: ").append(this.nots.size()).append("\n"); - sb.append("Implications: ").append(this.implications.size()).append("\n"); - sb.append("Equivalences: ").append(this.equivalences.size()).append("\n"); - sb.append("Conjunctions (2): ").append(this.ands2.size()).append("\n"); - sb.append("Conjunctions (3): ").append(this.ands3.size()).append("\n"); - sb.append("Conjunctions (4): ").append(this.ands4.size()).append("\n"); - sb.append("Conjunctions (>4): ").append(this.andsN.size()).append("\n"); - sb.append("Disjunctions (2): ").append(this.ors2.size()).append("\n"); - sb.append("Disjunctions (3): ").append(this.ors3.size()).append("\n"); - sb.append("Disjunctions (4): ").append(this.ors4.size()).append("\n"); - sb.append("Disjunctions (>4): ").append(this.orsN.size()).append("\n"); - return sb.toString(); - } - /** * Helper class for the operands of a pseudo-Boolean constraint. */ @@ -1092,6 +1072,26 @@ public boolean equals(final Object other) { } } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append("Name: ").append(this.name).append("\n"); + sb.append("Positive Literals: ").append(this.posLiterals.size()).append("\n"); + sb.append("Negative Literals: ").append(this.negLiterals.size()).append("\n"); + sb.append("Negations: ").append(this.nots.size()).append("\n"); + sb.append("Implications: ").append(this.implications.size()).append("\n"); + sb.append("Equivalences: ").append(this.equivalences.size()).append("\n"); + sb.append("Conjunctions (2): ").append(this.ands2.size()).append("\n"); + sb.append("Conjunctions (3): ").append(this.ands3.size()).append("\n"); + sb.append("Conjunctions (4): ").append(this.ands4.size()).append("\n"); + sb.append("Conjunctions (>4): ").append(this.andsN.size()).append("\n"); + sb.append("Disjunctions (2): ").append(this.ors2.size()).append("\n"); + sb.append("Disjunctions (3): ").append(this.ors3.size()).append("\n"); + sb.append("Disjunctions (4): ").append(this.ors4.size()).append("\n"); + sb.append("Disjunctions (>4): ").append(this.orsN.size()).append("\n"); + return sb.toString(); + } + /** * A class for statistics of the formula factory. */ @@ -1314,4 +1314,6 @@ public String toString() { '}'; } } + + } diff --git a/src/main/java/org/logicng/formulas/PBConstraint.java b/src/main/java/org/logicng/formulas/PBConstraint.java index 21a16225..c9aca146 100644 --- a/src/main/java/org/logicng/formulas/PBConstraint.java +++ b/src/main/java/org/logicng/formulas/PBConstraint.java @@ -80,13 +80,12 @@ public void remove() { private final CType comparator; private final int rhs; private final boolean isCC; + private final boolean isTrivialFalse; + private final boolean isTrivialTrue; private ImmutableFormulaList encoding; private int hashCode; private int maxWeight; - private final boolean isTrivialFalse; - private final boolean isTrivialTrue; - /** * Constructs a new pseudo-Boolean constraint. * @param literals the literals @@ -158,6 +157,43 @@ private static int gcd(final int small, final int big) { return small == 0 ? big : gcd(big % small, small); } + /** + * Internal helper for checking if a given coefficient-sum min- and max-value can comply with a given right-hand-side + * according to this PBConstraint's comparator. + * @param minValue the minimum coefficient sum + * @param maxValue the maximum coefficient sum + * @param rhs the right-hand-side + * @param comparator the comparator + * @return {@link Tristate#TRUE} if the constraint is true, {@link Tristate#FALSE} if it is false and + * {@link Tristate#UNDEF} if both are still possible + */ + static Tristate evaluateCoeffs(final int minValue, final int maxValue, final int rhs, final CType comparator) { + int status = 0; + if (rhs >= minValue) + status++; + if (rhs > minValue) + status++; + if (rhs >= maxValue) + status++; + if (rhs > maxValue) + status++; + + switch (comparator) { + case EQ: + return (status == 0 || status == 4) ? Tristate.FALSE : Tristate.UNDEF; + case LE: + return status >= 3 ? Tristate.TRUE : (status < 1 ? Tristate.FALSE : Tristate.UNDEF); + case LT: + return status > 3 ? Tristate.TRUE : (status <= 1 ? Tristate.FALSE : Tristate.UNDEF); + case GE: + return status <= 1 ? Tristate.TRUE : (status > 3 ? Tristate.FALSE : Tristate.UNDEF); + case GT: + return status < 1 ? Tristate.TRUE : (status >= 3 ? Tristate.FALSE : Tristate.UNDEF); + default: + throw new IllegalStateException("Unknown pseudo-Boolean comparator"); + } + } + /** * Returns the literals of this constraint. * @return the literals of this constraint @@ -441,43 +477,6 @@ else if (fixed == Tristate.FALSE) return this.f.pbc(this.comparator, newRHS, newLits, newCoeffs); } - /** - * Internal helper for checking if a given coefficient-sum min- and max-value can comply with a given right-hand-side - * according to this PBConstraint's comparator. - * @param minValue the minimum coefficient sum - * @param maxValue the maximum coefficient sum - * @param rhs the right-hand-side - * @param comparator the comparator - * @return {@link Tristate#TRUE} if the constraint is true, {@link Tristate#FALSE} if it is false and - * {@link Tristate#UNDEF} if both are still possible - */ - static Tristate evaluateCoeffs(final int minValue, final int maxValue, final int rhs, final CType comparator) { - int status = 0; - if (rhs >= minValue) - status++; - if (rhs > minValue) - status++; - if (rhs >= maxValue) - status++; - if (rhs > maxValue) - status++; - - switch (comparator) { - case EQ: - return (status == 0 || status == 4) ? Tristate.FALSE : Tristate.UNDEF; - case LE: - return status >= 3 ? Tristate.TRUE : (status < 1 ? Tristate.FALSE : Tristate.UNDEF); - case LT: - return status > 3 ? Tristate.TRUE : (status <= 1 ? Tristate.FALSE : Tristate.UNDEF); - case GE: - return status <= 1 ? Tristate.TRUE : (status > 3 ? Tristate.FALSE : Tristate.UNDEF); - case GT: - return status < 1 ? Tristate.TRUE : (status >= 3 ? Tristate.FALSE : Tristate.UNDEF); - default: - throw new IllegalStateException("Unknown pseudo-Boolean comparator"); - } - } - @Override public boolean containsNode(final Formula formula) { if (this == formula || this.equals(formula)) diff --git a/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java b/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java index c3f4c23e..d6bb7dcd 100644 --- a/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java +++ b/src/main/java/org/logicng/graphs/algorithms/BronKerbosch.java @@ -42,6 +42,7 @@ /** * This class implements the Bron-Kerbosch-Algorithm, used to compute all maximal Cliques of a Graph. Requires that the * ids of the nodes are comparable. + * @param the node type of the graph * @version 1.2 * @since 1.2 */ diff --git a/src/main/java/org/logicng/graphs/algorithms/ConnectedComponentsComputation.java b/src/main/java/org/logicng/graphs/algorithms/ConnectedComponentsComputation.java index ca83843d..bbbdb6fd 100644 --- a/src/main/java/org/logicng/graphs/algorithms/ConnectedComponentsComputation.java +++ b/src/main/java/org/logicng/graphs/algorithms/ConnectedComponentsComputation.java @@ -44,7 +44,7 @@ public class ConnectedComponentsComputation { /** * Computes the set of connected components of a graph, where each component is represented by a set of nodes. * @param graph the graph - * @param the type of the graph content + * @param the type of the graph content * @return the set of sets of nodes representing the connected components */ public static Set>> compute(final Graph graph) { diff --git a/src/main/java/org/logicng/graphs/datastructures/Graph.java b/src/main/java/org/logicng/graphs/datastructures/Graph.java index 1d0b2e22..6bd6b8ee 100644 --- a/src/main/java/org/logicng/graphs/datastructures/Graph.java +++ b/src/main/java/org/logicng/graphs/datastructures/Graph.java @@ -35,6 +35,7 @@ /** * A generic graph. Two graphs are only equal if they really are the same object. + * @param the element type of the graph's nodes * @version 1.2 * @since 1.2 */ diff --git a/src/main/java/org/logicng/graphs/datastructures/Node.java b/src/main/java/org/logicng/graphs/datastructures/Node.java index b4f52a8e..0126ce53 100644 --- a/src/main/java/org/logicng/graphs/datastructures/Node.java +++ b/src/main/java/org/logicng/graphs/datastructures/Node.java @@ -33,6 +33,7 @@ /** * A generic node of a graph. + * @param the element type of the node * @version 1.2 * @since 1.2 */ @@ -98,6 +99,13 @@ public Graph graph() { return graph; } + @Override + public int hashCode() { + int result = graph.hashCode(); + result = 31 * result + (content != null ? content.hashCode() : 0); + return result; + } + @Override public boolean equals(Object o) { if (this == o) @@ -108,13 +116,6 @@ public boolean equals(Object o) { return graph.equals(node.graph) && (content != null ? content.equals(node.content) : node.content == null); } - @Override - public int hashCode() { - int result = graph.hashCode(); - result = 31 * result + (content != null ? content.hashCode() : 0); - return result; - } - @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/logicng/solvers/CleaneLing.java b/src/main/java/org/logicng/solvers/CleaneLing.java index 9151382e..c3421824 100644 --- a/src/main/java/org/logicng/solvers/CleaneLing.java +++ b/src/main/java/org/logicng/solvers/CleaneLing.java @@ -284,6 +284,19 @@ public void loadState(SolverState state) { throw new UnsupportedOperationException("The CleaneLing solver does not support state loading/saving"); } + @Override + public SortedSet knownVariables() { + final SortedSet result = new TreeSet<>(); + for (final String name : this.name2idx.keySet()) + result.add(this.f.variable(name)); + return result; + } + + @Override + public UNSATCore unsatCore() { + throw new UnsupportedOperationException("CleaneLing cannot compute unsat cores at the moment"); + } + /** * Adds a collection of literals to the solver. * @param literals the literals @@ -360,19 +373,6 @@ public String createNewVariableOnSolver(final String prefix) { return varName; } - @Override - public UNSATCore unsatCore() { - throw new UnsupportedOperationException("CleaneLing cannot compute unsat cores at the moment"); - } - - @Override - public SortedSet knownVariables() { - final SortedSet result = new TreeSet<>(); - for (final String name : this.name2idx.keySet()) - result.add(this.f.variable(name)); - return result; - } - @Override public String toString() { return String.format("CleaneLing{result=%s, idx2name=%s}", this.result, this.idx2name); diff --git a/src/main/java/org/logicng/solvers/MaxSATSolver.java b/src/main/java/org/logicng/solvers/MaxSATSolver.java index a13baba7..98fab64d 100644 --- a/src/main/java/org/logicng/solvers/MaxSATSolver.java +++ b/src/main/java/org/logicng/solvers/MaxSATSolver.java @@ -60,12 +60,12 @@ public final class MaxSATSolver { private enum Algorithm {WBO, INC_WBO, LINEAR_SU, LINEAR_US, MSU3, WMSU3} + private final MaxSATConfig configuration; + private final Algorithm algorithm; private MaxSAT.MaxSATResult result; private MaxSAT solver; private SortedMap var2index; private SortedMap index2var; - private final MaxSATConfig configuration; - private final Algorithm algorithm; /** * Constructs a new MaxSAT solver with a given configuration. diff --git a/src/main/java/org/logicng/solvers/MiniSat.java b/src/main/java/org/logicng/solvers/MiniSat.java index af7cd1f4..5e6b18d1 100644 --- a/src/main/java/org/logicng/solvers/MiniSat.java +++ b/src/main/java/org/logicng/solvers/MiniSat.java @@ -86,8 +86,8 @@ private enum SolverStyle {MINISAT, GLUCOSE, MINICARD} private final CCEncoder ccEncoder; private final SolverStyle style; private final LNGIntVector validStates; - private boolean incremental; private final boolean initialPhase; + private boolean incremental; private int nextStateId; /** @@ -374,6 +374,57 @@ public void loadState(final SolverState state) { this.result = UNDEF; } + @Override + public SortedSet knownVariables() { + final SortedSet result = new TreeSet<>(); + final int nVars = this.solver.nVars(); + for (final Map.Entry entry : this.solver.name2idx().entrySet()) + if (entry.getValue() < nVars) + result.add(this.f.variable(entry.getKey())); + return result; + } + + @Override + public UNSATCore unsatCore() { + if (!this.config.proofGeneration()) + throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); + if (this.result == TRUE) + throw new IllegalStateException("An unsat core can only be generated if the formula is solved and is UNSAT"); + if (this.result == Tristate.UNDEF) { + throw new IllegalStateException("Cannot generate an unsat core before the formula was solved."); + } + if (this.underlyingSolver() instanceof MiniCard) + throw new IllegalStateException("Cannot compute an unsat core with MiniCard."); + if (this.underlyingSolver() instanceof GlucoseSyrup && this.config.incremental()) + throw new IllegalStateException("Cannot compute an unsat core with Glucose in incremental mode."); + + DRUPTrim trimmer = new DRUPTrim(); + + Map clause2proposition = new HashMap<>(); + final LNGVector clauses = new LNGVector<>(this.underlyingSolver().pgOriginalClauses().size()); + for (MiniSatStyleSolver.ProofInformation pi : this.underlyingSolver().pgOriginalClauses()) { + clauses.push(pi.clause()); + final Formula clause = getFormulaForVector(pi.clause()); + Proposition proposition = pi.proposition(); + if (proposition == null) + proposition = new StandardProposition(clause); + clause2proposition.put(clause, proposition); + } + + if (containsEmptyClause(clauses)) { + final Proposition emptyClause = clause2proposition.get(f.falsum()); + return new UNSATCore<>(Collections.singletonList(emptyClause), true); + } + + final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof()); + if (result.trivialUnsat()) + return handleTrivialCase(); + final LinkedHashSet propositions = new LinkedHashSet<>(); + for (LNGIntVector vector : result.unsatCore()) + propositions.add(clause2proposition.get(getFormulaForVector(vector))); + return new UNSATCore<>(new ArrayList<>(propositions), false); + } + /** * Generates a clause vector of a collection of literals. * @param literals the literals @@ -432,47 +483,6 @@ public boolean initialPhase() { return this.initialPhase; } - @Override - public UNSATCore unsatCore() { - if (!this.config.proofGeneration()) - throw new IllegalStateException("Cannot generate an unsat core if proof generation is not turned on"); - if (this.result == TRUE) - throw new IllegalStateException("An unsat core can only be generated if the formula is solved and is UNSAT"); - if (this.result == Tristate.UNDEF) { - throw new IllegalStateException("Cannot generate an unsat core before the formula was solved."); - } - if (this.underlyingSolver() instanceof MiniCard) - throw new IllegalStateException("Cannot compute an unsat core with MiniCard."); - if (this.underlyingSolver() instanceof GlucoseSyrup && this.config.incremental()) - throw new IllegalStateException("Cannot compute an unsat core with Glucose in incremental mode."); - - DRUPTrim trimmer = new DRUPTrim(); - - Map clause2proposition = new HashMap<>(); - final LNGVector clauses = new LNGVector<>(this.underlyingSolver().pgOriginalClauses().size()); - for (MiniSatStyleSolver.ProofInformation pi : this.underlyingSolver().pgOriginalClauses()) { - clauses.push(pi.clause()); - final Formula clause = getFormulaForVector(pi.clause()); - Proposition proposition = pi.proposition(); - if (proposition == null) - proposition = new StandardProposition(clause); - clause2proposition.put(clause, proposition); - } - - if (containsEmptyClause(clauses)) { - final Proposition emptyClause = clause2proposition.get(f.falsum()); - return new UNSATCore<>(Collections.singletonList(emptyClause), true); - } - - final DRUPTrim.DRUPResult result = trimmer.compute(clauses, this.underlyingSolver().pgProof()); - if (result.trivialUnsat()) - return handleTrivialCase(); - final LinkedHashSet propositions = new LinkedHashSet<>(); - for (LNGIntVector vector : result.unsatCore()) - propositions.add(clause2proposition.get(getFormulaForVector(vector))); - return new UNSATCore<>(new ArrayList<>(propositions), false); - } - private UNSATCore handleTrivialCase() { final LNGVector clauses = this.underlyingSolver().pgOriginalClauses(); for (int i = 0; i < clauses.size(); i++) @@ -505,16 +515,6 @@ private Formula getFormulaForVector(LNGIntVector vector) { return f.or(literals); } - @Override - public SortedSet knownVariables() { - final SortedSet result = new TreeSet<>(); - final int nVars = this.solver.nVars(); - for (final Map.Entry entry : this.solver.name2idx().entrySet()) - if (entry.getValue() < nVars) - result.add(this.f.variable(entry.getKey())); - return result; - } - @Override public String toString() { return String.format("MiniSat{result=%s, incremental=%s}", this.result, this.incremental); diff --git a/src/main/java/org/logicng/solvers/datastructures/CLClause.java b/src/main/java/org/logicng/solvers/datastructures/CLClause.java index d9942fe9..ecf8819e 100644 --- a/src/main/java/org/logicng/solvers/datastructures/CLClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/CLClause.java @@ -74,7 +74,7 @@ public int compare(final CLClause c1, CLClause c2) { return Long.compare(c2.activity, c1.activity); } }; - + private final LNGIntVector lits; private int glue; private boolean redundant; private boolean remove; @@ -83,7 +83,6 @@ public int compare(final CLClause c1, CLClause c2) { private boolean dumped; private boolean satisfied; private long activity; - private final LNGIntVector lits; /** * Constructs a new clause with default size 2. diff --git a/src/main/java/org/logicng/solvers/datastructures/MSClause.java b/src/main/java/org/logicng/solvers/datastructures/MSClause.java index 558908e3..615f6da6 100644 --- a/src/main/java/org/logicng/solvers/datastructures/MSClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/MSClause.java @@ -86,14 +86,14 @@ public int compare(final MSClause x, final MSClause y) { }; private final LNGIntVector data; - private double activity; private final boolean learnt; + private final boolean isAtMost; + private double activity; private int szWithoutSelectors; private boolean seen; private long lbd; private boolean canBeDel; private boolean oneWatched; - private final boolean isAtMost; private int atMostWatchers; /** diff --git a/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java b/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java index c9cc2b9f..b4b2e897 100644 --- a/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java +++ b/src/main/java/org/logicng/solvers/datastructures/MSSoftClause.java @@ -59,9 +59,9 @@ public final class MSSoftClause { private final LNGIntVector clause; + private final LNGIntVector relaxationVars; private int weight; private int assumptionVar; - private final LNGIntVector relaxationVars; /** * Constructs a new soft clause. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java index d0b18eae..52dcefd9 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/IncWBO.java @@ -77,8 +77,8 @@ public final class IncWBO extends WBO { private final Encoder encoder; private final LNGBooleanVector incSoft; - private boolean firstBuild; private final PrintStream output; + private boolean firstBuild; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java index 50c1c765..0f7f5419 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearSU.java @@ -69,13 +69,13 @@ */ public final class LinearSU extends MaxSAT { - private MiniSatStyleSolver solver; private final Encoder encoder; private final boolean bmoMode; // Enables BMO mode. private final LNGIntVector objFunction; // Literals to be used in the constraint that excludes models. private final LNGIntVector coeffs; // Coefficients of the literals that are used in the constraint that excludes models. - private boolean isBmo; // Stores if the formula is BMO or not. private final PrintStream output; + private MiniSatStyleSolver solver; + private boolean isBmo; // Stores if the formula is BMO or not. /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java index 914068ed..1d1e88cc 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/LinearUS.java @@ -65,11 +65,11 @@ */ public final class LinearUS extends MaxSAT { - private MiniSatStyleSolver solver; private final Encoder encoder; private final MaxSATConfig.IncrementalStrategy incrementalStrategy; private final LNGIntVector objFunction; private final PrintStream output; + private MiniSatStyleSolver solver; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java index de61fb7c..f889b3bf 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/MSU3.java @@ -71,13 +71,13 @@ */ public final class MSU3 extends MaxSAT { - private MiniSatStyleSolver solver; private final Encoder encoder; private final IncrementalStrategy incrementalStrategy; private final LNGIntVector objFunction; private final SortedMap coreMapping; private final LNGBooleanVector activeSoft; private final PrintStream output; + private MiniSatStyleSolver solver; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java index b3656c12..d444134e 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/MaxSAT.java @@ -98,28 +98,31 @@ public enum MaxSATResult { UNSATISFIABLE, OPTIMUM, UNDEF } - protected final LNGVector softClauses; - protected final LNGVector hardClauses; - protected int hardWeight; - protected ProblemType problemType; - protected int nbVars; - protected int nbSoft; - protected int nbHard; - protected int nbInitialVariables; protected final LNGBooleanVector model; - protected int nbCores; - protected int nbSymmetryClauses; - protected long sumSizeCores; - protected int nbSatisfiable; - protected int ubCost; - protected int lbCost; - protected int currentWeight; + final LNGVector softClauses; + final LNGVector hardClauses; + final LNGIntVector orderWeights; + final SolverType solverType; protected Verbosity verbosity; - protected final LNGIntVector orderWeights; - protected final SolverType solverType; - protected MaxSATHandler handler; + int hardWeight; + ProblemType problemType; + int nbVars; + int nbSoft; + int nbHard; + int nbInitialVariables; + int nbCores; + int nbSymmetryClauses; + long sumSizeCores; + int nbSatisfiable; + int ubCost; + int lbCost; + int currentWeight; + /** + * Constructor. + * @param config the solver configuration + */ protected MaxSAT(final MaxSATConfig config) { this.hardWeight = 0; this.hardClauses = new LNGVector<>(); @@ -427,15 +430,15 @@ public LNGBooleanVector model() { * Returns the current SAT handler or {@code null} if no MaxSAT handler was given. * @return the current SAT handler */ - protected SATHandler satHandler() { + SATHandler satHandler() { return handler == null ? null : handler.satHandler(); } - protected boolean foundLowerBound(final int lowerBound, final Assignment model) { + boolean foundLowerBound(final int lowerBound, final Assignment model) { return handler == null || handler.foundLowerBound(lowerBound, model); } - protected boolean foundUpperBound(final int upperBound, final Assignment model) { + boolean foundUpperBound(final int upperBound, final Assignment model) { return handler == null || handler.foundUpperBound(upperBound, model); } diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java index e11d5c0b..61b82117 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WBO.java @@ -78,6 +78,7 @@ */ public class WBO extends MaxSAT { + private final PrintStream output; protected MiniSatStyleSolver solver; protected int nbCurrentSoft; protected WeightStrategy weightStrategy; @@ -89,7 +90,6 @@ public class WBO extends MaxSAT { protected LNGVector relaxationMapping; protected Set> duplicatedSymmetryClauses; protected int symmetryBreakingLimit; - private final PrintStream output; /** * Constructs a new solver with default values. @@ -162,7 +162,7 @@ private MiniSatStyleSolver rebuildWeightSolver(final WeightStrategy strategy) { return s; } - protected MiniSatStyleSolver rebuildSolver() { + MiniSatStyleSolver rebuildSolver() { assert this.weightStrategy == WeightStrategy.NONE; final MiniSatStyleSolver s = newSATSolver(); for (int i = 0; i < nVars(); i++) @@ -191,7 +191,7 @@ private MiniSatStyleSolver rebuildHardSolver() { return s; } - protected void updateCurrentWeight(final WeightStrategy strategy) { + void updateCurrentWeight(final WeightStrategy strategy) { assert strategy == WeightStrategy.NORMAL || strategy == WeightStrategy.DIVERSIFY; if (strategy == WeightStrategy.NORMAL) currentWeight = this.findNextWeight(currentWeight); @@ -322,7 +322,7 @@ private void relaxCore(final LNGIntVector conflict, int weightCore, final LNGInt sumSizeCores += conflict.size(); } - protected int computeCostCore(final LNGIntVector conflict) { + int computeCostCore(final LNGIntVector conflict) { assert conflict.size() != 0; if (problemType == ProblemType.UNWEIGHTED) return 1; @@ -335,14 +335,14 @@ protected int computeCostCore(final LNGIntVector conflict) { return coreCost; } - protected void initSymmetry() { + void initSymmetry() { for (int i = 0; i < nSoft(); i++) { this.softMapping.push(new LNGIntVector()); this.relaxationMapping.push(new LNGIntVector()); } } - protected void symmetryLog(int p) { + void symmetryLog(int p) { if (nbSymmetryClauses < this.symmetryBreakingLimit) { while (this.softMapping.size() <= p) { this.softMapping.push(new LNGIntVector()); @@ -413,7 +413,7 @@ private void symmetryBreaking() { this.indexSoftCore.clear(); } - protected Tristate unsatSearch() { + Tristate unsatSearch() { assert this.assumptions.size() == 0; this.solver = this.rebuildHardSolver(); Tristate res = searchSATSolver(this.solver, satHandler(), this.assumptions); @@ -530,7 +530,7 @@ else if (res == FALSE) { } } - protected void initAssumptions(final LNGIntVector assumps) { + void initAssumptions(final LNGIntVector assumps) { for (int i = 0; i < nbSoft; i++) { final int l = newLiteral(false); softClauses.get(i).setAssumptionVar(l); diff --git a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java index 96b44b4a..1cbd4337 100644 --- a/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java +++ b/src/main/java/org/logicng/solvers/maxsat/algorithms/WMSU3.java @@ -75,8 +75,6 @@ public final class WMSU3 extends MaxSAT { final boolean bmoStrategy; - boolean isBmo; - private MiniSatStyleSolver solver; final private Encoder encoder; final private IncrementalStrategy incrementalStrategy; final private LNGIntVector assumptions; @@ -85,6 +83,8 @@ public final class WMSU3 extends MaxSAT { final private SortedMap coreMapping; final private LNGBooleanVector activeSoft; final private PrintStream output; + boolean isBmo; + private MiniSatStyleSolver solver; /** * Constructs a new solver with default values. diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java index 37fd4f2f..f77552a8 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Encoder.java @@ -64,15 +64,14 @@ */ public class Encoder { - private IncrementalStrategy incrementalStrategy; private final CardinalityEncoding cardinalityEncoding; - private PBEncoding pbEncoding; - private AMOEncoding amoEncoding; - private final Ladder ladder; private final ModularTotalizer mtotalizer; private final Totalizer totalizer; private final SequentialWeightCounter swc; + private IncrementalStrategy incrementalStrategy; + private PBEncoding pbEncoding; + private AMOEncoding amoEncoding; /** * Constructs a new Encoder. diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java index 63498937..5343bb21 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/ModularTotalizer.java @@ -68,10 +68,10 @@ final class ModularTotalizer extends Encoding { private static final int LIT_ERROR = -2; private final int h0; - private int modulo; - private LNGIntVector cardinalityInlits; private final LNGIntVector cardinalityUpoutlits; private final LNGIntVector cardinalityLwoutlits; + private int modulo; + private LNGIntVector cardinalityInlits; private int currentCardinalityRhs; /** diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java b/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java index 2c08c4f2..93d1b77d 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/SequentialWeightCounter.java @@ -66,10 +66,10 @@ final class SequentialWeightCounter extends Encoding { private final LNGIntVector pbOutlits; - private int currentPbRhs; - private int currentLitBlocking; private final LNGIntVector unitLits; private final LNGIntVector unitCoeffs; + private int currentPbRhs; + private int currentLitBlocking; private LNGVector seqAuxiliaryInc; private LNGIntVector litsInc; private LNGIntVector coeffsInc; diff --git a/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java b/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java index a442a31e..2aa1f091 100644 --- a/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java +++ b/src/main/java/org/logicng/solvers/maxsat/encodings/Totalizer.java @@ -72,8 +72,8 @@ final class Totalizer extends Encoding { private final LNGVector totalizerIterativeOutput; private final LNGIntVector totalizerIterativeRhs; private final int blocking; - private LNGIntVector cardinalityInlits; private final LNGIntVector cardinalityOutlits; + private LNGIntVector cardinalityInlits; private MaxSATConfig.IncrementalStrategy incrementalStrategy; private int currentCardinalityRhs; private boolean joinMode; diff --git a/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalFormulaTest.java b/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalFormulaTest.java index d6820acb..4551f210 100644 --- a/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalFormulaTest.java +++ b/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalFormulaTest.java @@ -51,8 +51,8 @@ public class CCIncrementalFormulaTest { private final FormulaFactory f = new FormulaFactory(); - private CCEncoder[] encoders; private final SATSolver[] solvers; + private CCEncoder[] encoders; public CCIncrementalFormulaTest() { encoders = new CCEncoder[3]; diff --git a/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalSolverTest.java b/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalSolverTest.java index 2cd191ad..a17d77c3 100644 --- a/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalSolverTest.java +++ b/src/test/java/org/logicng/cardinalityconstraints/CCIncrementalSolverTest.java @@ -49,8 +49,8 @@ public class CCIncrementalSolverTest { private final FormulaFactory f = new FormulaFactory(); - private CCConfig[] configs; private final SATSolver[] solvers; + private CCConfig[] configs; public CCIncrementalSolverTest() { configs = new CCConfig[3]; diff --git a/src/test/java/org/logicng/formulas/FormulaTest.java b/src/test/java/org/logicng/formulas/FormulaTest.java index d566c7ff..714f354e 100644 --- a/src/test/java/org/logicng/formulas/FormulaTest.java +++ b/src/test/java/org/logicng/formulas/FormulaTest.java @@ -46,6 +46,22 @@ */ public class FormulaTest { + private enum MyOwnCacheKey implements CacheEntry { + MYKEY1("My Key 1"), + MYKEY2("My Key 2"); + + private String description; + + MyOwnCacheKey(final String description) { + this.description = description; + } + + @Override + public String description() { + return "MyOwnCacheKey{description=" + description + "}"; + } + } + @Test public void testStringContains() { final FormulaFactory f = new FormulaFactory(); @@ -100,20 +116,4 @@ public void testCType() { Assert.assertTrue(Arrays.asList(CType.values()).contains(CType.valueOf("GT"))); Assert.assertEquals(5, CType.values().length); } - - private enum MyOwnCacheKey implements CacheEntry { - MYKEY1("My Key 1"), - MYKEY2("My Key 2"); - - private String description; - - MyOwnCacheKey(final String description) { - this.description = description; - } - - @Override - public String description() { - return "MyOwnCacheKey{description=" + description + "}"; - } - } } diff --git a/src/test/java/org/logicng/formulas/NNFTest.java b/src/test/java/org/logicng/formulas/NNFTest.java index 53e25b3e..b47798ac 100644 --- a/src/test/java/org/logicng/formulas/NNFTest.java +++ b/src/test/java/org/logicng/formulas/NNFTest.java @@ -27,14 +27,13 @@ /////////////////////////////////////////////////////////////////////////// package org.logicng.formulas; -import org.logicng.io.parsers.ParserException; -import org.logicng.io.parsers.PropositionalParser; import org.junit.Assert; import org.junit.Test; +import org.logicng.io.parsers.ParserException; +import org.logicng.io.parsers.PropositionalParser; /** * Unit Tests for NNF conversion. - * * @version 1.0 * @since 1.0 */ diff --git a/src/test/java/org/logicng/formulas/RestrictionTest.java b/src/test/java/org/logicng/formulas/RestrictionTest.java index 3bcd608b..c08fbb10 100644 --- a/src/test/java/org/logicng/formulas/RestrictionTest.java +++ b/src/test/java/org/logicng/formulas/RestrictionTest.java @@ -28,11 +28,11 @@ package org.logicng.formulas; +import org.junit.Assert; +import org.junit.Test; import org.logicng.datastructures.Assignment; import org.logicng.io.parsers.ParserException; import org.logicng.io.parsers.PropositionalParser; -import org.junit.Assert; -import org.junit.Test; import java.util.Arrays; diff --git a/src/test/java/org/logicng/graphs/datastructures/GraphTest.java b/src/test/java/org/logicng/graphs/datastructures/GraphTest.java index a44eef19..8a5f76f0 100644 --- a/src/test/java/org/logicng/graphs/datastructures/GraphTest.java +++ b/src/test/java/org/logicng/graphs/datastructures/GraphTest.java @@ -45,6 +45,20 @@ */ public class GraphTest { + public static Graph getLongGraph(String id) throws IOException { + Graph g = new Graph<>(id + "-Long"); + + final BufferedReader reader = new BufferedReader(new FileReader("tests/graphs/graph" + id + ".txt")); + + while (reader.ready()) { + final String line = reader.readLine().trim(); + String[] nodePair = line.split(":"); + g.connect(g.node(Long.valueOf(nodePair[0])), g.node(Long.valueOf(nodePair[1]))); + } + + return g; + } + @Test public void testLongGraph() { Graph g = new Graph("Graph with Long nodes."); @@ -115,18 +129,4 @@ public void testTwoGraphs() { g1.connect(a, b); } - public static Graph getLongGraph(String id) throws IOException { - Graph g = new Graph<>(id + "-Long"); - - final BufferedReader reader = new BufferedReader(new FileReader("tests/graphs/graph" + id + ".txt")); - - while (reader.ready()) { - final String line = reader.readLine().trim(); - String[] nodePair = line.split(":"); - g.connect(g.node(Long.valueOf(nodePair[0])), g.node(Long.valueOf(nodePair[1]))); - } - - return g; - } - } diff --git a/src/test/java/org/logicng/predicates/DNFPredicateTest.java b/src/test/java/org/logicng/predicates/DNFPredicateTest.java index 35f96954..2de6bbe7 100644 --- a/src/test/java/org/logicng/predicates/DNFPredicateTest.java +++ b/src/test/java/org/logicng/predicates/DNFPredicateTest.java @@ -61,7 +61,7 @@ public void test() { } @Test - public void testToString(){ + public void testToString() { Assert.assertEquals("DNFPredicate", dnfPredicate.toString()); } } diff --git a/src/test/java/org/logicng/solvers/maxsat/PartialMaxSATTest.java b/src/test/java/org/logicng/solvers/maxsat/PartialMaxSATTest.java index 95716306..3664db9f 100644 --- a/src/test/java/org/logicng/solvers/maxsat/PartialMaxSATTest.java +++ b/src/test/java/org/logicng/solvers/maxsat/PartialMaxSATTest.java @@ -55,10 +55,6 @@ */ public class PartialMaxSATTest { - private final PrintStream logStream; - - private final FormulaFactory f = new FormulaFactory(); - private static final String[] files = new String[]{ "c1355_F176gat-1278gat@1.wcnf", "c1355_F1001gat-1048gat@1.wcnf", @@ -69,10 +65,11 @@ public class PartialMaxSATTest { "normalized-s3-3-3-3pb.wcnf", "term1_gr_2pin_w4.shuffled.cnf" }; - private static final int[] results = new int[]{ 13, 21, 33, 33, 36, 36, 36, 0 }; + private final PrintStream logStream; + private final FormulaFactory f = new FormulaFactory(); public PartialMaxSATTest() throws FileNotFoundException { logStream = new PrintStream("tests/partialmaxsat/log.txt"); diff --git a/src/test/java/org/logicng/solvers/maxsat/PartialWeightedMaxSATTest.java b/src/test/java/org/logicng/solvers/maxsat/PartialWeightedMaxSATTest.java index 41a56f4e..b019bf90 100644 --- a/src/test/java/org/logicng/solvers/maxsat/PartialWeightedMaxSATTest.java +++ b/src/test/java/org/logicng/solvers/maxsat/PartialWeightedMaxSATTest.java @@ -55,21 +55,15 @@ */ public class PartialWeightedMaxSATTest { - private final PrintStream logStream; - - private final FormulaFactory f = new FormulaFactory(); - private static final String[] files = new String[]{ "8.wcsp.log.wcnf", "54.wcsp.log.wcnf", "404.wcsp.log.wcnf", "term1_gr_2pin_w4.shuffled.cnf" }; - private static final int[] results = new int[]{ 2, 37, 114, 0 }; - private static final String[] bmoFiles = new String[]{ "normalized-factor-size=9-P=11-Q=283.opb.wcnf", "normalized-factor-size=9-P=11-Q=53.opb.wcnf", @@ -78,10 +72,11 @@ public class PartialWeightedMaxSATTest { "normalized-factor-size=9-P=17-Q=487.opb.wcnf", "normalized-factor-size=9-P=23-Q=293.opb.wcnf" }; - private static final int[] bmoResults = new int[]{ 11, 11, 13, 17, 17, 23 }; + private final PrintStream logStream; + private final FormulaFactory f = new FormulaFactory(); public PartialWeightedMaxSATTest() throws FileNotFoundException { logStream = new PrintStream("tests/partialweightedmaxsat/log.txt"); diff --git a/src/test/java/org/logicng/solvers/maxsat/PureMaxSATTest.java b/src/test/java/org/logicng/solvers/maxsat/PureMaxSATTest.java index b188e32f..b17655a9 100644 --- a/src/test/java/org/logicng/solvers/maxsat/PureMaxSATTest.java +++ b/src/test/java/org/logicng/solvers/maxsat/PureMaxSATTest.java @@ -59,10 +59,6 @@ */ public class PureMaxSATTest { - private final PrintStream logStream; - - private final FormulaFactory f = new FormulaFactory(); - private static final String[] files = new String[]{ "c5315-bug-gate-0.dimacs.seq.filtered.cnf", "c6288-bug-gate-0.dimacs.seq.filtered.cnf", @@ -72,6 +68,8 @@ public class PureMaxSATTest { "mot_comb3._red-gate-0.dimacs.seq.filtered.cnf", "s15850-bug-onevec-gate-0.dimacs.seq.filtered.cnf" }; + private final PrintStream logStream; + private final FormulaFactory f = new FormulaFactory(); public PureMaxSATTest() throws FileNotFoundException { logStream = new PrintStream("tests/maxsat/log.txt");