port the minisat sequential part into charm parallel satisfiablity problem
authorYanhua YanhuaSunLaptop <yanhuasun@yanhua-suns-macbook-pro.local>
Sun, 28 Mar 2010 19:08:18 +0000 (14:08 -0500)
committerYanhua YanhuaSunLaptop <yanhuasun@yanhua-suns-macbook-pro.local>
Sun, 28 Mar 2010 19:08:18 +0000 (14:08 -0500)
17 files changed:
examples/charm++/satisfiability/Makefile
examples/charm++/satisfiability/Solver.C [deleted file]
examples/charm++/satisfiability/Solver.h [deleted file]
examples/charm++/satisfiability/core_sequential/Makefile [new file with mode: 0644]
examples/charm++/satisfiability/core_sequential/Solver.C [new file with mode: 0644]
examples/charm++/satisfiability/core_sequential/Solver.h [new file with mode: 0644]
examples/charm++/satisfiability/core_sequential/SolverTypes.h [moved from examples/charm++/satisfiability/SolverTypes.h with 71% similarity]
examples/charm++/satisfiability/core_sequential/depend.mk [new file with mode: 0644]
examples/charm++/satisfiability/example/example.cnf [moved from examples/charm++/satisfiability/example.cnf with 100% similarity]
examples/charm++/satisfiability/example/example_100.cnf [moved from examples/charm++/satisfiability/example_50.cnf with 56% similarity]
examples/charm++/satisfiability/example/example_1000.cnf [new file with mode: 0644]
examples/charm++/satisfiability/example/example_4000.cnf [new file with mode: 0644]
examples/charm++/satisfiability/example/example_6000.cnf [new file with mode: 0644]
examples/charm++/satisfiability/example/example_8000.cnf [moved from examples/charm++/satisfiability/example_9000.cnf with 87% similarity]
examples/charm++/satisfiability/example/example_simple.cnf [moved from examples/charm++/satisfiability/example_simple.cnf with 100% similarity]
examples/charm++/satisfiability/main.C
examples/charm++/satisfiability/main.ci

index ae849affef24d737c1bff09d27f47f09dbdc8de1..13655b7fc77939db51c36e6f81787153c5bcb729 100644 (file)
@@ -1,24 +1,34 @@
+MTL       = mtl
+EXEC      = par_sat
+SEQ              = core_sequential
 #CHARMDIR = /Users/yanhuasun/PPL/charm/charm-6.1.2/multicore-darwin-x86_64
 OPTS = -g
-CHARMC = charmc $(OPTS)  
+CXX = charmc   
 default: all
-all: sat
+all: $(EXEC)
 
-sat : main.o Solver.o 
-       $(CHARMC) -lz -language charm++  -o sat main.o Solver.o
+CFLAGS    = $(OPTS) -I$(MTL)  -I$(SEQ) -ffloat-store
+LFLAGS    =  -lz -language charm++
+COPTIMIZE = -O3
 
-main.o : main.C main.decl.h main.def.h 
-       $(CHARMC) -o main.o main.C 
+CXX_COMPILE = $(CXX) $(CFLAGS)
+
+CXX_LD = $(CXX) $(LFLAGS)
 
-Solver.o : Solver.C SolverTypes.h Solver.h
-       $(CHARMC) -o Solver.o Solver.C
+$(EXEC): $(SEQ)/Solver.o par_Solver.o main.o
+       $(CXX_LD) $(LFLAGS) -o $(EXEC) $(SEQ)/Solver.o par_Solver.o main.o
 
-#util.o : util.C
-#      $(CHARMC) -o util.o util.c
+main.o : main.C main.decl.h main.def.h 
+       $(CXX_COMPILE) -o main.o -c main.C
+
+par_Solver.o : par_Solver.C par_SolverTypes.h par_Solver.h mtl/Vec.h mtl/minisatHeap.h  mtl/Alg.h $(SEQ)/SolverTypes.h mtl/Sort.h main.decl.h main.def.h 
+       $(CXX_COMPILE) -o par_Solver.o -c par_Solver.C
 
 main.def.h main.decl.h : main.ci
-       $(CHARMC) main.ci
+       $(CXX) main.ci
+
+$(SEQ)/Solver.o: $(SEQ)/Solver.C $(SEQ)/Solver.h mtl/Vec.h mtl/minisatHeap.h  mtl/Alg.h $(SEQ)/SolverTypes.h mtl/Sort.h
+       $(CXX_COMPILE) -o $(SEQ)/Solver.o -c $(SEQ)/Solver.C 
 
 clean:
-       rm *.o *.def.h *.decl.h
-       rm  sat
+       @rm -f $(EXEC) *.def.h *.decl.h *.o $(SEQ)/*.o charmrun
diff --git a/examples/charm++/satisfiability/Solver.C b/examples/charm++/satisfiability/Solver.C
deleted file mode 100644 (file)
index 7e0f094..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-#include "main.decl.h"
-#include "SolverTypes.h"
-#include "Solver.h"
-#include <map>
-#include <vector>
-
-using namespace std;
-
-extern CProxy_Main mainProxy;
-extern int grainsize;
-
-SolverState::SolverState()
-{
-    unsolved_clauses = 0; 
-    var_frequency = 0;
-}
-
-inline int SolverState::nVars()
-{
-    return var_frequency; 
-}
-
-int SolverState::clausesSize()
-{
-    return clauses.size();
-}
-Var SolverState::newVar(bool sign, bool dvar)
-{
-    int v = nVars();
-    var_frequency++;
-    return v;
-}
-
-void SolverState::attachClause(Clause& c)
-{
-
-}
-
-int SolverState::unsolvedClauses()
-{
-    int unsolved = 0;
-    for(int i=0; i< clauses.size(); i++)
-    {
-        if(clauses[i].size() > 0)
-            unsolved++;
-    }
-
-    return unsolved;
-}
-
-void SolverState::printSolution()
-{
-    for(int _i=0; _i<var_size; _i++)
-    {
-        CkPrintf("%d\n", occurrence[_i]);
-    }
-}
-
-/* add clause, before adding, check unit conflict */
-bool SolverState::addClause(CkVec<Lit>& ps)
-{
-    /*TODO precheck is needed here */
-    if(ps.size() == 1)//unit clause
-    {
-        for(int _i=0; _i<unit_clause_index.size(); _i++)
-        {
-            int index = unit_clause_index[_i];
-
-            Clause unit = clauses[index];
-            Lit     unit_lit = unit[0];
-
-            if(unit_lit == ~ps[0])
-            {
-   
-                CkPrintf("clause conflict between %d and %d\n", index, clauses.size());
-                return false;
-            }
-            /*else if(unit_lit == ps[0])
-            {
-                return true;
-            }*/
-        }
-       /* all unit clauses are checked, no repeat, no conflict */
-        unit_clause_index.push_back(clauses.size());
-    }else{
-    //check whether the clause is already satisfiable in any case
-    /* if x and ~x exist in the same clause, this clause is already satisfiable, we do not have to deal with it */
-   
-    for(int i=0; i< ps.size(); i++)
-    {
-        Lit lit = ps[i];
-
-        for(int j=0; j<i; j++)
-        {
-            if(lit == ~ps[j])
-            {
-                CkPrintf("This clause is already satisfiable\n");
-                for(int _i=0; _i<ps.size(); _i++)
-                {
-                   occurrence[abs(toInt(ps[_i])-1)]--; 
-                   if(toInt(ps[_i]) > 0)
-                       positive_occurrence[abs(toInt(ps[_i])-1)]--; 
-                }
-                return true;
-            }
-        }
-    }
-    }
-    clauses.push_back(Clause());
-    clauses[clauses.size()-1].attachdata(ps, false);
-    unsolved_clauses++;
-    // build the linklist for each literal pointing to the clause, where the literal occurs
-    for(int i=0; i< ps.size(); i++)
-    {
-        Lit lit = ps[i];
-
-        if(toInt(lit) > 0)
-            whichClauses[2*toInt(lit)-2].push_back(clauses.size()-1);
-        else
-            whichClauses[-2*toInt(lit)-1].push_back(clauses.size()-1);
-
-    }
-
-    return true;
-}
-
-void SolverState::assignclause(CkVec<Clause>& cls )
-{
-    clauses.removeAll();
-    for(int i=0; i<cls.size(); i++)
-    {
-        clauses.push_back( cls[i]);
-    }
-}
-
-/* *********** Solver chare */
-
-Solver::Solver(SolverState* state_msg)
-{
-
-    /* Which variable get assigned  */
-    Lit lit = state_msg->assigned_lit;
-#ifdef DEBUG    
-    CkPrintf("\n\nNew chare: literal = %d, occurrence size=%d, level=%d \n", toInt(lit), state_msg->occurrence.size(), state_msg->level);
-#endif    
-    SolverState *next_state = copy_solverstate(state_msg);
-    
-    //Unit clauses
-    /* use this value to propagate the clauses */
-    // deal with the clauses where this literal is
-    int _unit_ = -1;
-    while(1){
-        int pp_ = 1;
-        int pp_i_ = 2;
-        int pp_j_ = 1;
-
-        if(toInt(lit) < 0)
-        {
-            pp_ = -1;
-            pp_i_ = 1;
-            pp_j_ = 2;
-        }
-
-        next_state->occurrence[pp_*toInt(lit)-1] = -pp_i_;
-    
-        //CkPrintf(" index=%d, total size=%d, original msg size=%d\n", pp_*2*toInt(lit)-pp_i_, next_state->whichClauses.size(), state_msg->whichClauses.size());
-
-        CkVec<int> &inClauses = next_state->whichClauses[pp_*2*toInt(lit)-pp_i_];
-        CkVec<int> &inClauses_opposite = next_state->whichClauses[pp_*2*toInt(lit)-pp_j_];
-
-    // literal with same sign, remove all these clauses
-       for(int j=0; j<inClauses.size(); j++)
-       {
-           int cl_index = inClauses[j];
-
-           Clause& cl_ = next_state->clauses[cl_index];
-           //for all the literals in this clauses, the occurrence decreases by 1
-           for(int k=0; k< cl_.size(); k++)
-           {
-               Lit lit_ = cl_[k];
-               if(toInt(lit_) == toInt(lit))
-                   continue;
-               next_state->occurrence[abs(toInt(lit_)) - 1]--;
-               if(toInt(lit_) > 0)
-               {
-                   next_state->positive_occurrence[toInt(lit_)-1]--;
-                   //remove the clause index for the literal
-                   for(int _i = 0; _i<next_state->whichClauses[2*toInt(lit_)-2].size(); _i++)
-                   {
-                       if(next_state->whichClauses[2*toInt(lit_)-2][_i] == cl_index)
-                       {
-                           next_state->whichClauses[2*toInt(lit_)-2].remove(_i);
-                           break;
-                       }
-                   }
-               }else
-               {
-                   for(int _i = 0; _i<next_state->whichClauses[-2*toInt(lit_)-1].size(); _i++)
-                   {
-                       if(next_state->whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
-                       {
-                           next_state->whichClauses[-2*toInt(lit_)-1].remove(_i);
-                           break;
-                       }
-                   }
-               }
-           } //finish dealing with all literal in the clause
-           next_state->clauses[cl_index].resize(0);
-       } //finish dealing with clauses where the literal occur the same
-       /* opposite to the literal */
-       for(int j=0; j<inClauses_opposite.size(); j++)
-       {
-           int cl_index_ = inClauses_opposite[j];
-           Clause& cl_neg = next_state->clauses[cl_index_];
-           cl_neg.remove(-toInt(lit));
-
-           /*becomes a unit clause */
-           if(cl_neg.size() == 1)
-           {
-               next_state->unit_clause_index.push_back(cl_index_);
-           }else if (cl_neg.size() == 0)
-           {
-               return;
-           }
-       }
-
-       _unit_++;
-       if(_unit_ == next_state->unit_clause_index.size())
-           break;
-       Clause cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
-
-       while(cl.size() == 0){
-           _unit_++;
-           if(_unit_ == next_state->unit_clause_index.size())
-               break;
-           cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
-       };
-
-       if(_unit_ == next_state->unit_clause_index.size())
-           break;
-       lit = cl[0];
-    }
-    /***************/
-
-    int unsolved = next_state->unsolvedClauses();
-    if(unsolved == 0)
-    {
-        CkPrintf("One solution found in parallel processing \n");
-        //next_state->printSolution();
-        mainProxy.done(next_state->occurrence);
-        return;
-    }
-    int max_index = get_max_element(next_state->occurrence);
-#ifdef DEBUG
-    CkPrintf("max index = %d\n", max_index);
-#endif
-    //if() left literal unassigned is larger than a grain size, parallel 
-    ///* When we start sequential 3SAT Grainsize problem*/
-   
-    /* the other branch */
-    SolverState *new_msg2 = copy_solverstate(next_state);;
-
-    next_state->level = state_msg->level+1;
-
-    int lower = state_msg->lower;
-    int higher = state_msg->higher;
-    int middle = (lower+higher)/2;
-    int positive_max = next_state->positive_occurrence[max_index];
-    if(positive_max >= next_state->occurrence[max_index] - positive_max)
-    {
-        next_state->assigned_lit = Lit(max_index+1);
-        next_state->occurrence[max_index] = -2;
-    }
-    else
-    {
-        next_state->assigned_lit = Lit(-max_index-1);
-        next_state->occurrence[max_index] = -1;
-    }
-    bool satisfiable_1 = true;
-
-    if(unsolved > grainsize)
-    {
-        next_state->lower = lower + 1;
-        next_state->higher = middle;
-        *((int *)CkPriorityPtr(next_state)) = lower+1;
-        CkSetQueueing(next_state, CK_QUEUEING_IFIFO);
-        CProxy_Solver::ckNew(next_state);
-    }
-    else //sequential
-    {
-        satisfiable_1 = seq_solve(next_state);
-        if(satisfiable_1)
-        {
-            return;
-        }
-    }
-
-    new_msg2->level = state_msg->level+1;
-    if(positive_max >= new_msg2->occurrence[max_index] - positive_max)
-    {
-        new_msg2->assigned_lit = Lit(-max_index-1);
-        new_msg2->occurrence[max_index] = -1;
-    }
-    else
-    {
-        new_msg2->assigned_lit = Lit(max_index+1);
-        new_msg2->occurrence[max_index] = -2;
-    }
-    unsolved = new_msg2->unsolvedClauses();
-    if(unsolved > grainsize)
-    {
-        new_msg2->lower = middle + 1;
-        new_msg2->higher = higher-1;
-        *((int *)CkPriorityPtr(new_msg2)) = middle+1;
-        CkSetQueueing(new_msg2, CK_QUEUEING_IFIFO);
-        CProxy_Solver::ckNew(new_msg2);
-    }
-    else
-    {
-        seq_solve(new_msg2);
-    }
-
-}
-
-/* Which literals are already assigned, which is assigned this interation, the unsolved clauses */
-/* should all these be passed as function parameters */
-/* solve the 3sat in sequence */
-
-long long int computes = 0;
-bool Solver::seq_solve(SolverState* state_msg)
-{
-    /* Which variable get assigned  */
-    Lit lit = state_msg->assigned_lit;
-       
-#ifdef DEBUG
-    CkPrintf("\n\n Computes=%d Sequential SAT New chare: literal = %d,  level=%d, unsolved clauses=%d\n", computes++, toInt(assigned_var), state_msg->level, state_msg->clauses.size());
-    //CkPrintf("\n\n Computes=%d Sequential SAT New chare: literal = %d, occurrence size=%d, level=%d \n", computes++, toInt(assigned_var), state_msg->occurrence.size(), state_msg->level);
-#endif
-    SolverState *next_state = copy_solverstate(state_msg);
-    
-    //Unit clauses
-    /* use this value to propagate the clauses */
-#ifdef DEBUG
-    CkPrintf(" remainning clause size is %d\n", (state_msg->clauses).size());
-#endif
-
-    int _unit_ = -1;
-    while(1){
-    int pp_ = 1;
-    int pp_i_ = 2;
-    int pp_j_ = 1;
-
-    if(toInt(lit) < 0)
-    {
-        pp_ = -1;
-        pp_i_ = 1;
-        pp_j_ = 2;
-    }
-
-    next_state->occurrence[pp_*toInt(lit)-1] = -pp_i_;
-    
-    CkVec<int> &inClauses = next_state->whichClauses[pp_*2*toInt(lit)-pp_i_];
-    CkVec<int> &inClauses_opposite = next_state->whichClauses[pp_*2*toInt(lit)-pp_j_];
-
-    // literal with same sign, remove all these clauses
-    for(int j=0; j<inClauses.size(); j++)
-    {
-        int cl_index = inClauses[j];
-
-        Clause& cl_ = next_state->clauses[cl_index];
-        //for all the literals in this clauses, the occurrence decreases by 1
-        for(int k=0; k< cl_.size(); k++)
-        {
-            Lit lit_ = cl_[k];
-            if(toInt(lit_) == toInt(lit))
-                continue;
-            next_state->occurrence[abs(toInt(lit_)) - 1]--;
-            if(toInt(lit_) > 0)
-            {
-                next_state->positive_occurrence[toInt(lit_)-1]--;
-                //remove the clause index for the literal
-                for(int _i = 0; _i<next_state->whichClauses[2*toInt(lit_)-2].size(); _i++)
-                {
-                    if(next_state->whichClauses[2*toInt(lit_)-2][_i] == cl_index)
-                    {
-                        next_state->whichClauses[2*toInt(lit_)-2].remove(_i);
-                        break;
-                    }
-                }
-            }else
-            {
-                for(int _i = 0; _i<next_state->whichClauses[-2*toInt(lit_)-1].size(); _i++)
-                {
-                    if(next_state->whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
-                    {
-                        next_state->whichClauses[-2*toInt(lit_)-1].remove(_i);
-                        break;
-                    }
-                }
-            }
-        }
-            next_state->clauses[cl_index].resize(0);
-    }
-   
-    for(int j=0; j<inClauses_opposite.size(); j++)
-    {
-        int cl_index_ = inClauses_opposite[j];
-        Clause& cl_neg = next_state->clauses[cl_index_];
-        cl_neg.remove(-toInt(lit));
-            //becomes a unit clause
-         if(cl_neg.size() == 1)
-         {
-             next_state->unit_clause_index.push_back(cl_index_);
-         }else if (cl_neg.size() == 0)
-         {
-                return false;
-         }
-    }
-   
-    _unit_++;
-    if(_unit_ == next_state->unit_clause_index.size())
-        break;
-    Clause cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
-    
-    while(cl.size() == 0){
-        _unit_++;
-        if(_unit_ == next_state->unit_clause_index.size())
-            break;
-        cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
-        
-    };
-
-    if(_unit_ == next_state->unit_clause_index.size())
-        break;
-    
-    lit = cl[0];
-    }
-   
-    int unsolved = next_state->unsolvedClauses();
-    if(unsolved == 0)
-    {
-        CkPrintf("One solution found in sequential processing, check the output file for assignment\n");
-        mainProxy.done(next_state->occurrence);
-        return true;
-    }
-    
-    /**********************/
-    
-        /* it would be better to insert the unit literal in order of their occurrence */
-        /* make a decision and then fire new tasks */
-        /* if there is unit clause, should choose these first??? TODO */
-        /* TODO which variable to pick up */
-        /*unit clause literal and also which occurrs most times */
-        int max_index =  get_max_element(next_state->occurrence);
-#ifdef DEBUG
-        CkPrintf("max index = %d\n", max_index);
-#endif
-        next_state->level = state_msg->level+1;
-
-        SolverState *new_msg2 = copy_solverstate(next_state);;
-        
-        int positive_max = next_state->positive_occurrence[max_index];
-        if(positive_max >= next_state->occurrence[max_index] - positive_max)
-        {
-            next_state->occurrence[max_index] = -2;
-            next_state->assigned_lit = Lit(max_index+1);
-        }
-        else
-        {
-            next_state->occurrence[max_index] = -1;
-            next_state->assigned_lit = Lit(-max_index-1);
-        } 
-
-        bool   satisfiable_1 = seq_solve(next_state);
-        if(satisfiable_1)
-        {
-            return true;
-        }
-        
-        new_msg2->level = state_msg->level+1;
-       
-        if(positive_max >= next_state->occurrence[max_index] - positive_max)
-        {
-            new_msg2->occurrence[max_index] = -1;
-            new_msg2->assigned_lit = Lit(-max_index-1);
-        }
-        else
-        {
-            new_msg2->occurrence[max_index] = -2;
-            new_msg2->assigned_lit = Lit(max_index+1);
-        } 
-            
-        bool satisfiable_0 = seq_solve(new_msg2);
-        if(satisfiable_0)
-        {
-            return true;
-        }
-
-        //CkPrintf("Unsatisfiable through sequential\n");
-        return false;
-
-}
diff --git a/examples/charm++/satisfiability/Solver.h b/examples/charm++/satisfiability/Solver.h
deleted file mode 100644 (file)
index a50ce60..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _SOLVER_H
-#define _SOLVER_H
-
-class SolverState : public CMessage_SolverState {
-
-private:
-
-public:
-
-    
-    SolverState();
-
-    int nVars();
-
-    int clausesSize();
-    
-    Var newVar (bool polarity = true, bool dvar = true);
-    
-    bool addClause(CkVec<Lit>& lits);
-
-    void attachClause(Clause& c);
-
-    void assignclause(CkVec<Clause>& );
-
-    int  unsolvedClauses();
-    
-    void printSolution();
-
-    CkVec<Clause>   clauses;
-    Lit             assigned_lit;
-    int             var_size;
-    int             unsolved_clauses;
-
-    int             var_frequency; // 1, -1, 1 freq = 3
-    CkVec<int>      unit_clause_index;
-    // -2 means true, -1 means false, 0 means anything, > 0 means occurrence
-    CkVec<int>      occurrence; 
-    CkVec<int>      positive_occurrence; 
-    //2 * N (positive, negative)
-    CkVec< CkVec< int > >   whichClauses;
-    int             level;
-   
-    int             lower;
-    int             higher;
-
-    //CkVec<Lit>      lit_state;
-    //vector<Lit> assigns;
-
-    /*
-    void pup(PUP::er &p) {
-    
-        p|assigns;
-        p|clauses;
-        p|assigned_lit;
-    }*/
-
-    friend SolverState* copy_solverstate( const SolverState* org)
-    {
-       SolverState *new_state = new (8*sizeof(int))SolverState;
-        
-       new_state->clauses.resize(org->clauses.size());
-       for(int _i=0; _i<org->clauses.size(); _i++)
-       {
-           new_state->clauses[_i] = Clause(org->clauses[_i]); 
-       }
-
-       new_state->var_size = org->var_size;
-
-       new_state->occurrence.resize(org->occurrence.size());
-       new_state->positive_occurrence.resize(org->occurrence.size());
-       for(int _i=0; _i<org->occurrence.size(); _i++){
-           new_state->occurrence[_i] = org->occurrence[_i];
-           new_state->positive_occurrence[_i] = org->occurrence[_i];
-       }
-       new_state->level = org->level;
-       int _size = org->whichClauses.size();
-       new_state->whichClauses.resize(_size); 
-       for(int i=0; i<_size; i++)
-       {
-           int _sub_size = org->whichClauses[i].size();
-           new_state->whichClauses[i].resize(_sub_size);
-
-           for(int j=0; j<_sub_size; j++)
-           {
-               new_state->whichClauses[i][j] = org->whichClauses[i][j];
-           }
-       }
-       return new_state;
-    }
-
-};
-
-
-class Solver : public CBase_Solver {
-
-private:
-
-    bool seq_solve(SolverState*);
-public:
-    Solver(SolverState*);
-
-};
-#endif
diff --git a/examples/charm++/satisfiability/core_sequential/Makefile b/examples/charm++/satisfiability/core_sequential/Makefile
new file mode 100644 (file)
index 0000000..0b520c2
--- /dev/null
@@ -0,0 +1,53 @@
+MTL       = ../mtl
+EXEC      = par_minisat
+
+#CHARMDIR = /Users/yanhuasun/PPL/charm/charm-6.1.2/multicore-darwin-x86_64
+OPTS = -g
+CXX ?= charmc $(OPTS)  
+default: all
+all: sat
+
+
+CXX       ?= g++
+CFLAGS    ?= -I$(MTL) -Wall -ffloat-store
+LFLAGS    ?= -Wall -lz -language charm++
+
+COPTIMIZE ?= -O3
+
+## Compile options
+%.o:                   CFLAGS +=$(COPTIMIZE) -ggdb -D DEBUG
+
+
+CSRCS     ?= $(wildcard *.C)
+CHDRS     ?= $(wildcard *.h)
+COBJS     ?= $(addsuffix .o, $(basename $(CSRCS)))
+
+
+$(EXEC):        $(COBJS)
+
+## Build rule
+%.o:   %.C
+       @echo Compiling: "$@ ( $< )"
+       @$(CXX) $(CFLAGS) -c -o $@ $<
+
+## Linking rules (standard/profile/debug/release)
+$(EXEC):
+       @echo Linking: "$@ ( $^ )"
+        @$(CXX) $^ $(LFLAGS) -o $@
+
+main.o : main.C main.decl.h main.def.h 
+
+par_Solver.o : par_Solver.C par_SolverTypes.h par_Solver.h Solver.C Solver.h
+
+main.def.h main.decl.h : main.ci
+       $(CHARMC) main.ci
+
+Solver.o: Solver.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h ../mtl/Sort.h ../mtl/Vec.h
+
+## Clean rule
+clean:
+       @rm -f $(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static \
+         $(COBJS) $(PCOBJS) $(DCOBJS) $(RCOBJS) *.core depend.mak lib$(LIB).a lib$(LIB)d.a
+
+
diff --git a/examples/charm++/satisfiability/core_sequential/Solver.C b/examples/charm++/satisfiability/core_sequential/Solver.C
new file mode 100644 (file)
index 0000000..8c87293
--- /dev/null
@@ -0,0 +1,776 @@
+/****************************************************************************************[Solver.C]
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+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.
+**************************************************************************************************/
+
+//#include <vector>
+#include "Solver.h"
+#include "Sort.h"
+#include <cmath>
+
+//using namespace std;
+
+//=================================================================================================
+// Constructor/Destructor:
+
+
+Solver::Solver() :
+
+    // Parameters: (formerly in 'SearchParams')
+    var_decay(1 / 0.95), clause_decay(1 / 0.999), random_var_freq(0.02)
+  , restart_first(100), restart_inc(1.5), learntsize_factor((double)1/(double)3), learntsize_inc(1.1)
+
+    // More parameters:
+    //
+  , expensive_ccmin  (true)
+  , polarity_mode    (polarity_false)
+  , verbosity        (0)
+
+    // Statistics: (formerly in 'SolverStats')
+    //
+  , starts(0), decisions(0), rnd_decisions(0), propagations(0), conflicts(0)
+  , clauses_literals(0), learnts_literals(0), max_literals(0), tot_literals(0)
+
+  , ok               (true)
+  , cla_inc          (1)
+  , var_inc          (1)
+  , qhead            (0)
+  , simpDB_assigns   (-1)
+  , simpDB_props     (0)
+  , order_heap       (VarOrderLt(activity))
+  , random_seed      (91648253)
+  , progress_estimate(0)
+  , remove_satisfied (true)
+{}
+
+
+Solver::~Solver()
+{
+    for (int i = 0; i < learnts.size(); i++) free(learnts[i]);
+    for (int i = 0; i < clauses.size(); i++) free(clauses[i]);
+}
+
+
+/******* framework of sequential solver */
+
+bool Solver::seq_processing(const vector< vector<int> >& clauses)
+{
+  //   translation from charm program data structure to minisat data structure 
+    
+    printf(" Now in sequential processing, clauses size:%d\n", clauses.size());
+    for(int i=0; i<clauses.size(); i++)
+    {
+        vector<int> cl = clauses[i];
+
+        vec<Lit> lits;
+        int parsed_lit, var;
+        for(int j=0; j<cl.size(); j++)
+        {
+            parsed_lit = cl[j];
+            var = abs(parsed_lit)-1;
+            while (var >= nVars()) newVar();
+            lits.push( (parsed_lit > 0) ? Lit(var) : ~Lit(var) );
+        }
+        addClause(lits); 
+    }
+    
+    simplify();
+
+    bool ret = solve();
+   
+    if(ret)
+        printf(" By sequential, satisfiable\n");
+    else
+        printf(" NOT SAT\n");
+    return ret;
+}
+//=================================================================================================
+// Minor methods:
+
+
+// Creates a new SAT variable in the solver. If 'decision_var' is cleared, variable will not be
+// used as a decision variable (NOTE! This has effects on the meaning of a SATISFIABLE result).
+//
+Var Solver::newVar(bool sign, bool dvar)
+{
+    int v = nVars();
+    watches   .push();          // (list for positive literal)
+    watches   .push();          // (list for negative literal)
+    reason    .push(NULL);
+    assigns   .push(toInt(l_Undef));
+    level     .push(-1);
+    activity  .push(0);
+    seen      .push(0);
+
+    polarity    .push((char)sign);
+    decision_var.push((char)dvar);
+
+    insertVarOrder(v);
+    return v;
+}
+
+
+bool Solver::addClause(vec<Lit>& ps)
+{
+    assert(decisionLevel() == 0);
+
+    if (!ok)
+        return false;
+    else{
+        // Check if clause is satisfied and remove false/duplicate literals:
+        sort(ps);
+        Lit p; int i, j;
+        for (i = j = 0, p = lit_Undef; i < ps.size(); i++)
+            if (value(ps[i]) == l_True || ps[i] == ~p)
+                return true;
+            else if (value(ps[i]) != l_False && ps[i] != p)
+                ps[j++] = p = ps[i];
+        ps.shrink(i - j);
+    }
+
+    if (ps.size() == 0)
+        return ok = false;
+    else if (ps.size() == 1){
+        assert(value(ps[0]) == l_Undef);
+        uncheckedEnqueue(ps[0]);
+        return ok = (propagate() == NULL);
+    }else{
+        Clause* c = Clause_new(ps, false);
+        clauses.push(c);
+        attachClause(*c);
+    }
+
+    return true;
+}
+
+
+void Solver::attachClause(Clause& c) {
+    assert(c.size() > 1);
+    watches[toInt(~c[0])].push(&c);
+    watches[toInt(~c[1])].push(&c);
+    if (c.learnt()) learnts_literals += c.size();
+    else            clauses_literals += c.size(); }
+
+
+void Solver::detachClause(Clause& c) {
+    assert(c.size() > 1);
+    assert(find(watches[toInt(~c[0])], &c));
+    assert(find(watches[toInt(~c[1])], &c));
+    remove(watches[toInt(~c[0])], &c);
+    remove(watches[toInt(~c[1])], &c);
+    if (c.learnt()) learnts_literals -= c.size();
+    else            clauses_literals -= c.size(); }
+
+
+void Solver::removeClause(Clause& c) {
+    detachClause(c);
+    free(&c); }
+
+
+bool Solver::satisfied(const Clause& c) const {
+    for (int i = 0; i < c.size(); i++)
+        if (value(c[i]) == l_True)
+            return true;
+    return false; }
+
+
+// Revert to the state at given level (keeping all assignment at 'level' but not beyond).
+//
+void Solver::cancelUntil(int level) {
+    if (decisionLevel() > level){
+        for (int c = trail.size()-1; c >= trail_lim[level]; c--){
+            Var     x  = var(trail[c]);
+            assigns[x] = toInt(l_Undef);
+            insertVarOrder(x); }
+        qhead = trail_lim[level];
+        trail.shrink(trail.size() - trail_lim[level]);
+        trail_lim.shrink(trail_lim.size() - level);
+    } }
+
+
+//=================================================================================================
+// Major methods:
+
+
+Lit Solver::pickBranchLit(int polarity_mode, double random_var_freq)
+{
+    Var next = var_Undef;
+
+    // Random decision:
+    if (drand(random_seed) < random_var_freq && !order_heap.empty()){
+        next = order_heap[irand(random_seed,order_heap.size())];
+        if (toLbool(assigns[next]) == l_Undef && decision_var[next])
+            rnd_decisions++; }
+
+    // Activity based decision:
+    while (next == var_Undef || toLbool(assigns[next]) != l_Undef || !decision_var[next])
+        if (order_heap.empty()){
+            next = var_Undef;
+            break;
+        }else
+            next = order_heap.removeMin();
+
+    bool sign = false;
+    switch (polarity_mode){
+    case polarity_true:  sign = false; break;
+    case polarity_false: sign = true;  break;
+    case polarity_user:  sign = polarity[next]; break;
+    case polarity_rnd:   sign = irand(random_seed, 2); break;
+    default: assert(false); }
+
+    return next == var_Undef ? lit_Undef : Lit(next, sign);
+}
+
+
+/*_________________________________________________________________________________________________
+|
+|  analyze : (confl : Clause*) (out_learnt : vec<Lit>&) (out_btlevel : int&)  ->  [void]
+|  
+|  Description:
+|    Analyze conflict and produce a reason clause.
+|  
+|    Pre-conditions:
+|      * 'out_learnt' is assumed to be cleared.
+|      * Current decision level must be greater than root level.
+|  
+|    Post-conditions:
+|      * 'out_learnt[0]' is the asserting literal at level 'out_btlevel'.
+|  
+|  Effect:
+|    Will undo part of the trail, upto but not beyond the assumption of the current decision level.
+|________________________________________________________________________________________________@*/
+void Solver::analyze(Clause* confl, vec<Lit>& out_learnt, int& out_btlevel)
+{
+    int pathC = 0;
+    Lit p     = lit_Undef;
+
+    // Generate conflict clause:
+    //
+    out_learnt.push();      // (leave room for the asserting literal)
+    int index   = trail.size() - 1;
+    out_btlevel = 0;
+
+    do{
+        assert(confl != NULL);          // (otherwise should be UIP)
+        Clause& c = *confl;
+
+        if (c.learnt())
+            claBumpActivity(c);
+
+        for (int j = (p == lit_Undef) ? 0 : 1; j < c.size(); j++){
+            Lit q = c[j];
+
+            if (!seen[var(q)] && level[var(q)] > 0){
+                varBumpActivity(var(q));
+                seen[var(q)] = 1;
+                if (level[var(q)] >= decisionLevel())
+                    pathC++;
+                else{
+                    out_learnt.push(q);
+                    if (level[var(q)] > out_btlevel)
+                        out_btlevel = level[var(q)];
+                }
+            }
+        }
+
+        // Select next clause to look at:
+        while (!seen[var(trail[index--])]);
+        p     = trail[index+1];
+        confl = reason[var(p)];
+        seen[var(p)] = 0;
+        pathC--;
+
+    }while (pathC > 0);
+    out_learnt[0] = ~p;
+
+    // Simplify conflict clause:
+    //
+    int i, j;
+    if (expensive_ccmin){
+        uint32_t abstract_level = 0;
+        for (i = 1; i < out_learnt.size(); i++)
+            abstract_level |= abstractLevel(var(out_learnt[i])); // (maintain an abstraction of levels involved in conflict)
+
+        out_learnt.copyTo(analyze_toclear);
+        for (i = j = 1; i < out_learnt.size(); i++)
+            if (reason[var(out_learnt[i])] == NULL || !litRedundant(out_learnt[i], abstract_level))
+                out_learnt[j++] = out_learnt[i];
+    }else{
+        out_learnt.copyTo(analyze_toclear);
+        for (i = j = 1; i < out_learnt.size(); i++){
+            Clause& c = *reason[var(out_learnt[i])];
+            for (int k = 1; k < c.size(); k++)
+                if (!seen[var(c[k])] && level[var(c[k])] > 0){
+                    out_learnt[j++] = out_learnt[i];
+                    break; }
+        }
+    }
+    max_literals += out_learnt.size();
+    out_learnt.shrink(i - j);
+    tot_literals += out_learnt.size();
+
+    // Find correct backtrack level:
+    //
+    if (out_learnt.size() == 1)
+        out_btlevel = 0;
+    else{
+        int max_i = 1;
+        for (int i = 2; i < out_learnt.size(); i++)
+            if (level[var(out_learnt[i])] > level[var(out_learnt[max_i])])
+                max_i = i;
+        Lit p             = out_learnt[max_i];
+        out_learnt[max_i] = out_learnt[1];
+        out_learnt[1]     = p;
+        out_btlevel       = level[var(p)];
+    }
+
+
+    for (int j = 0; j < analyze_toclear.size(); j++) seen[var(analyze_toclear[j])] = 0;    // ('seen[]' is now cleared)
+}
+
+
+// Check if 'p' can be removed. 'abstract_levels' is used to abort early if the algorithm is
+// visiting literals at levels that cannot be removed later.
+bool Solver::litRedundant(Lit p, uint32_t abstract_levels)
+{
+    analyze_stack.clear(); analyze_stack.push(p);
+    int top = analyze_toclear.size();
+    while (analyze_stack.size() > 0){
+        assert(reason[var(analyze_stack.last())] != NULL);
+        Clause& c = *reason[var(analyze_stack.last())]; analyze_stack.pop();
+
+        for (int i = 1; i < c.size(); i++){
+            Lit p  = c[i];
+            if (!seen[var(p)] && level[var(p)] > 0){
+                if (reason[var(p)] != NULL && (abstractLevel(var(p)) & abstract_levels) != 0){
+                    seen[var(p)] = 1;
+                    analyze_stack.push(p);
+                    analyze_toclear.push(p);
+                }else{
+                    for (int j = top; j < analyze_toclear.size(); j++)
+                        seen[var(analyze_toclear[j])] = 0;
+                    analyze_toclear.shrink(analyze_toclear.size() - top);
+                    return false;
+                }
+            }
+        }
+    }
+
+    return true;
+}
+
+
+/*_________________________________________________________________________________________________
+|
+|  analyzeFinal : (p : Lit)  ->  [void]
+|  
+|  Description:
+|    Specialized analysis procedure to express the final conflict in terms of assumptions.
+|    Calculates the (possibly empty) set of assumptions that led to the assignment of 'p', and
+|    stores the result in 'out_conflict'.
+|________________________________________________________________________________________________@*/
+void Solver::analyzeFinal(Lit p, vec<Lit>& out_conflict)
+{
+    out_conflict.clear();
+    out_conflict.push(p);
+
+    if (decisionLevel() == 0)
+        return;
+
+    seen[var(p)] = 1;
+
+    for (int i = trail.size()-1; i >= trail_lim[0]; i--){
+        Var x = var(trail[i]);
+        if (seen[x]){
+            if (reason[x] == NULL){
+                assert(level[x] > 0);
+                out_conflict.push(~trail[i]);
+            }else{
+                Clause& c = *reason[x];
+                for (int j = 1; j < c.size(); j++)
+                    if (level[var(c[j])] > 0)
+                        seen[var(c[j])] = 1;
+            }
+            seen[x] = 0;
+        }
+    }
+
+    seen[var(p)] = 0;
+}
+
+
+void Solver::uncheckedEnqueue(Lit p, Clause* from)
+{
+    assert(value(p) == l_Undef);
+    assigns [var(p)] = toInt(lbool(!sign(p)));  // <<== abstract but not uttermost effecient
+    level   [var(p)] = decisionLevel();
+    reason  [var(p)] = from;
+    trail.push(p);
+}
+
+
+/*_________________________________________________________________________________________________
+|
+|  propagate : [void]  ->  [Clause*]
+|  
+|  Description:
+|    Propagates all enqueued facts. If a conflict arises, the conflicting clause is returned,
+|    otherwise NULL.
+|  
+|    Post-conditions:
+|      * the propagation queue is empty, even if there was a conflict.
+|________________________________________________________________________________________________@*/
+Clause* Solver::propagate()
+{
+    Clause* confl     = NULL;
+    int     num_props = 0;
+
+    while (qhead < trail.size()){
+        Lit            p   = trail[qhead++];     // 'p' is enqueued fact to propagate.
+        vec<Clause*>&  ws  = watches[toInt(p)];
+        Clause         **i, **j, **end;
+        num_props++;
+
+        for (i = j = (Clause**)ws, end = i + ws.size();  i != end;){
+            Clause& c = **i++;
+
+            // Make sure the false literal is data[1]:
+            Lit false_lit = ~p;
+            if (c[0] == false_lit)
+                c[0] = c[1], c[1] = false_lit;
+
+            assert(c[1] == false_lit);
+
+            // If 0th watch is true, then clause is already satisfied.
+            Lit first = c[0];
+            if (value(first) == l_True){
+                *j++ = &c;
+            }else{
+                // Look for new watch:
+                for (int k = 2; k < c.size(); k++)
+                    if (value(c[k]) != l_False){
+                        c[1] = c[k]; c[k] = false_lit;
+                        watches[toInt(~c[1])].push(&c);
+                        goto FoundWatch; }
+
+                // Did not find watch -- clause is unit under assignment:
+                *j++ = &c;
+                if (value(first) == l_False){
+                    confl = &c;
+                    qhead = trail.size();
+                    // Copy the remaining watches:
+                    while (i < end)
+                        *j++ = *i++;
+                }else
+                    uncheckedEnqueue(first, &c);
+            }
+        FoundWatch:;
+        }
+        ws.shrink(i - j);
+    }
+    propagations += num_props;
+    simpDB_props -= num_props;
+
+    return confl;
+}
+
+/*_________________________________________________________________________________________________
+|
+|  reduceDB : ()  ->  [void]
+|  
+|  Description:
+|    Remove half of the learnt clauses, minus the clauses locked by the current assignment. Locked
+|    clauses are clauses that are reason to some assignment. Binary clauses are never removed.
+|________________________________________________________________________________________________@*/
+struct reduceDB_lt { bool operator () (Clause* x, Clause* y) { return x->size() > 2 && (y->size() == 2 || x->activity() < y->activity()); } };
+void Solver::reduceDB()
+{
+    int     i, j;
+    double  extra_lim = cla_inc / learnts.size();    // Remove any clause below this activity
+
+    sort(learnts, reduceDB_lt());
+    for (i = j = 0; i < learnts.size() / 2; i++){
+        if (learnts[i]->size() > 2 && !locked(*learnts[i]))
+            removeClause(*learnts[i]);
+        else
+            learnts[j++] = learnts[i];
+    }
+    for (; i < learnts.size(); i++){
+        if (learnts[i]->size() > 2 && !locked(*learnts[i]) && learnts[i]->activity() < extra_lim)
+            removeClause(*learnts[i]);
+        else
+            learnts[j++] = learnts[i];
+    }
+    learnts.shrink(i - j);
+}
+
+
+void Solver::removeSatisfied(vec<Clause*>& cs)
+{
+    int i,j;
+    for (i = j = 0; i < cs.size(); i++){
+        if (satisfied(*cs[i]))
+            removeClause(*cs[i]);
+        else
+            cs[j++] = cs[i];
+    }
+    cs.shrink(i - j);
+}
+
+
+/*_________________________________________________________________________________________________
+|
+|  simplify : [void]  ->  [bool]
+|  
+|  Description:
+|    Simplify the clause database according to the current top-level assigment. Currently, the only
+|    thing done here is the removal of satisfied clauses, but more things can be put here.
+|________________________________________________________________________________________________@*/
+bool Solver::simplify()
+{
+    assert(decisionLevel() == 0);
+
+    if (!ok || propagate() != NULL)
+        return ok = false;
+
+    if (nAssigns() == simpDB_assigns || (simpDB_props > 0))
+        return true;
+
+    // Remove satisfied clauses:
+    removeSatisfied(learnts);
+    if (remove_satisfied)        // Can be turned off.
+        removeSatisfied(clauses);
+
+    // Remove fixed variables from the variable heap:
+    order_heap.filter(VarFilter(*this));
+
+    simpDB_assigns = nAssigns();
+    simpDB_props   = clauses_literals + learnts_literals;   // (shouldn't depend on stats really, but it will do for now)
+
+    return true;
+}
+
+
+/*_________________________________________________________________________________________________
+|
+|  search : (nof_conflicts : int) (nof_learnts : int) (params : const SearchParams&)  ->  [lbool]
+|  
+|  Description:
+|    Search for a model the specified number of conflicts, keeping the number of learnt clauses
+|    below the provided limit. NOTE! Use negative value for 'nof_conflicts' or 'nof_learnts' to
+|    indicate infinity.
+|  
+|  Output:
+|    'l_True' if a partial assigment that is consistent with respect to the clauseset is found. If
+|    all variables are decision variables, this means that the clause set is satisfiable. 'l_False'
+|    if the clause set is unsatisfiable. 'l_Undef' if the bound on number of conflicts is reached.
+|________________________________________________________________________________________________@*/
+lbool Solver::search(int nof_conflicts, int nof_learnts)
+{
+    assert(ok);
+    int         backtrack_level;
+    int         conflictC = 0;
+    vec<Lit>    learnt_clause;
+
+    starts++;
+
+    bool first = true;
+
+    for (;;){
+        Clause* confl = propagate();
+        if (confl != NULL){
+            // CONFLICT
+            conflicts++; conflictC++;
+            if (decisionLevel() == 0) return l_False;
+
+            first = false;
+
+            learnt_clause.clear();
+            analyze(confl, learnt_clause, backtrack_level);
+            cancelUntil(backtrack_level);
+            assert(value(learnt_clause[0]) == l_Undef);
+
+            if (learnt_clause.size() == 1){
+                uncheckedEnqueue(learnt_clause[0]);
+            }else{
+                Clause* c = Clause_new(learnt_clause, true);
+                learnts.push(c);
+                attachClause(*c);
+                claBumpActivity(*c);
+                uncheckedEnqueue(learnt_clause[0], c);
+            }
+
+            varDecayActivity();
+            claDecayActivity();
+
+        }else{
+            // NO CONFLICT
+
+            if (nof_conflicts >= 0 && conflictC >= nof_conflicts){
+                // Reached bound on number of conflicts:
+                progress_estimate = progressEstimate();
+                cancelUntil(0);
+                return l_Undef; }
+
+            // Simplify the set of problem clauses:
+            if (decisionLevel() == 0 && !simplify())
+                return l_False;
+
+            if (nof_learnts >= 0 && learnts.size()-nAssigns() >= nof_learnts)
+                // Reduce the set of learnt clauses:
+                reduceDB();
+
+            Lit next = lit_Undef;
+            while (decisionLevel() < assumptions.size()){
+                // Perform user provided assumption:
+                Lit p = assumptions[decisionLevel()];
+                if (value(p) == l_True){
+                    // Dummy decision level:
+                    newDecisionLevel();
+                }else if (value(p) == l_False){
+                    analyzeFinal(~p, conflict);
+                    return l_False;
+                }else{
+                    next = p;
+                    break;
+                }
+            }
+
+            if (next == lit_Undef){
+                // New variable decision:
+                decisions++;
+                next = pickBranchLit(polarity_mode, random_var_freq);
+
+                if (next == lit_Undef)
+                    // Model found:
+                    return l_True;
+            }
+
+            // Increase decision level and enqueue 'next'
+            assert(value(next) == l_Undef);
+            newDecisionLevel();
+            uncheckedEnqueue(next);
+        }
+    }
+}
+
+
+double Solver::progressEstimate() const
+{
+    double  progress = 0;
+    double  F = 1.0 / nVars();
+
+    for (int i = 0; i <= decisionLevel(); i++){
+        int beg = i == 0 ? 0 : trail_lim[i - 1];
+        int end = i == decisionLevel() ? trail.size() : trail_lim[i];
+        progress += pow(F, i) * (end - beg);
+    }
+
+    return progress / nVars();
+}
+
+
+bool Solver::solve(const vec<Lit>& assumps)
+{
+    model.clear();
+    conflict.clear();
+
+    if (!ok) return false;
+
+    assumps.copyTo(assumptions);
+
+    double  nof_conflicts = restart_first;
+    double  nof_learnts   = nClauses() * learntsize_factor;
+    lbool   status        = l_Undef;
+
+    if (verbosity >= 1){
+        reportf("============================[ Search Statistics ]==============================\n");
+        reportf("| Conflicts |          ORIGINAL         |          LEARNT          | Progress |\n");
+        reportf("|           |    Vars  Clauses Literals |    Limit  Clauses Lit/Cl |          |\n");
+        reportf("===============================================================================\n");
+    }
+
+    // Search:
+    while (status == l_Undef){
+        if (verbosity >= 1)
+            reportf("| %9d | %7d %8d %8d | %8d %8d %6.0f | %6.3f %% |\n", (int)conflicts, order_heap.size(), nClauses(), (int)clauses_literals, (int)nof_learnts, nLearnts(), (double)learnts_literals/nLearnts(), progress_estimate*100), fflush(stdout);
+        status = search((int)nof_conflicts, (int)nof_learnts);
+        nof_conflicts *= restart_inc;
+        nof_learnts   *= learntsize_inc;
+    }
+
+    if (verbosity >= 1)
+        reportf("===============================================================================\n");
+
+
+    if (status == l_True){
+        // Extend & copy model:
+        model.growTo(nVars());
+        for (int i = 0; i < nVars(); i++) model[i] = value(i);
+#ifndef NDEBUG
+        verifyModel();
+#endif
+    }else{
+        assert(status == l_False);
+        if (conflict.size() == 0)
+            ok = false;
+    }
+
+    cancelUntil(0);
+    return status == l_True;
+}
+
+//=================================================================================================
+// Debug methods:
+
+
+void Solver::verifyModel()
+{
+    bool failed = false;
+    for (int i = 0; i < clauses.size(); i++){
+        assert(clauses[i]->mark() == 0);
+        Clause& c = *clauses[i];
+        for (int j = 0; j < c.size(); j++)
+            if (modelValue(c[j]) == l_True)
+                goto next;
+
+        reportf("unsatisfied clause: ");
+        printClause(*clauses[i]);
+        reportf("\n");
+        failed = true;
+    next:;
+    }
+
+    assert(!failed);
+
+    reportf("Verified %d original clauses.\n", clauses.size());
+}
+
+
+void Solver::checkLiteralCount()
+{
+    // Check that sizes are calculated correctly:
+    int cnt = 0;
+    for (int i = 0; i < clauses.size(); i++)
+        if (clauses[i]->mark() == 0)
+            cnt += clauses[i]->size();
+
+    if ((int)clauses_literals != cnt){
+        fprintf(stderr, "literal count: %d, real value = %d\n", (int)clauses_literals, cnt);
+        assert((int)clauses_literals == cnt);
+    }
+}
diff --git a/examples/charm++/satisfiability/core_sequential/Solver.h b/examples/charm++/satisfiability/core_sequential/Solver.h
new file mode 100644 (file)
index 0000000..b32b6e8
--- /dev/null
@@ -0,0 +1,307 @@
+/****************************************************************************************[Solver.h]
+MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
+
+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.
+**************************************************************************************************/
+
+#ifndef Solver_h
+#define Solver_h
+
+#include <cstdio>
+
+#include "Vec.h"
+#include "minisatHeap.h"
+#include "Alg.h"
+
+#include "SolverTypes.h"
+
+#include <vector>
+
+using namespace std;
+
+//=================================================================================================
+// Solver -- the main class:
+
+
+class Solver {
+public:
+
+    // Constructor/Destructor:
+    //
+    Solver();
+    ~Solver();
+
+    bool seq_processing(const vector< vector<int> >& clauses);
+
+    // Problem specification:
+    //
+    Var     newVar    (bool polarity = true, bool dvar = true); // Add a new variable with parameters specifying variable mode.
+    bool    addClause (vec<Lit>& ps);                           // Add a clause to the solver. NOTE! 'ps' may be shrunk by this method!
+
+    // Solving:
+    //
+    bool    simplify     ();                        // Removes already satisfied clauses.
+    bool    solve        (const vec<Lit>& assumps); // Search for a model that respects a given set of assumptions.
+    bool    solve        ();                        // Search without assumptions.
+    bool    okay         () const;                  // FALSE means solver is in a conflicting state
+
+    // Variable mode:
+    // 
+    void    setPolarity    (Var v, bool b); // Declare which polarity the decision heuristic should use for a variable. Requires mode 'polarity_user'.
+    void    setDecisionVar (Var v, bool b); // Declare if a variable should be eligible for selection in the decision heuristic.
+
+    // Read state:
+    //
+    lbool   value      (Var x) const;       // The current value of a variable.
+    lbool   value      (Lit p) const;       // The current value of a literal.
+    lbool   modelValue (Lit p) const;       // The value of a literal in the last model. The last call to solve must have been satisfiable.
+    int     nAssigns   ()      const;       // The current number of assigned literals.
+    int     nClauses   ()      const;       // The current number of original clauses.
+    int     nLearnts   ()      const;       // The current number of learnt clauses.
+    int     nVars      ()      const;       // The current number of variables.
+
+    // Extra results: (read-only member variable)
+    //
+    vec<lbool> model;             // If problem is satisfiable, this vector contains the model (if any).
+    vec<Lit>   conflict;          // If problem is unsatisfiable (possibly under assumptions),
+                                  // this vector represent the final conflict clause expressed in the assumptions.
+
+    // Mode of operation:
+    //
+    double    var_decay;          // Inverse of the variable activity decay factor.                                            (default 1 / 0.95)
+    double    clause_decay;       // Inverse of the clause activity decay factor.                                              (1 / 0.999)
+    double    random_var_freq;    // The frequency with which the decision heuristic tries to choose a random variable.        (default 0.02)
+    int       restart_first;      // The initial restart limit.                                                                (default 100)
+    double    restart_inc;        // The factor with which the restart limit is multiplied in each restart.                    (default 1.5)
+    double    learntsize_factor;  // The intitial limit for learnt clauses is a factor of the original clauses.                (default 1 / 3)
+    double    learntsize_inc;     // The limit for learnt clauses is multiplied with this factor each restart.                 (default 1.1)
+    bool      expensive_ccmin;    // Controls conflict clause minimization.                                                    (default TRUE)
+    int       polarity_mode;      // Controls which polarity the decision heuristic chooses. See enum below for allowed modes. (default polarity_false)
+    int       verbosity;          // Verbosity level. 0=silent, 1=some progress report                                         (default 0)
+
+    enum { polarity_true = 0, polarity_false = 1, polarity_user = 2, polarity_rnd = 3 };
+
+    // Statistics: (read-only member variable)
+    //
+    uint64_t starts, decisions, rnd_decisions, propagations, conflicts;
+    uint64_t clauses_literals, learnts_literals, max_literals, tot_literals;
+
+protected:
+
+    // Helper structures:
+    //
+    struct VarOrderLt {
+        const vec<double>&  activity;
+        bool operator () (Var x, Var y) const { return activity[x] > activity[y]; }
+        VarOrderLt(const vec<double>&  act) : activity(act) { }
+    };
+
+    friend class VarFilter;
+    struct VarFilter {
+        const Solver& s;
+        VarFilter(const Solver& _s) : s(_s) {}
+        bool operator()(Var v) const { return toLbool(s.assigns[v]) == l_Undef && s.decision_var[v]; }
+    };
+
+    // Solver state:
+    //
+    bool                ok;               // If FALSE, the constraints are already unsatisfiable. No part of the solver state may be used!
+    vec<Clause*>        clauses;          // List of problem clauses.
+    vec<Clause*>        learnts;          // List of learnt clauses.
+    double              cla_inc;          // Amount to bump next clause with.
+    vec<double>         activity;         // A heuristic measurement of the activity of a variable.
+    double              var_inc;          // Amount to bump next variable with.
+    vec<vec<Clause*> >  watches;          // 'watches[lit]' is a list of constraints watching 'lit' (will go there if literal becomes true).
+    vec<char>           assigns;          // The current assignments (lbool:s stored as char:s).
+    vec<char>           polarity;         // The preferred polarity of each variable.
+    vec<char>           decision_var;     // Declares if a variable is eligible for selection in the decision heuristic.
+    vec<Lit>            trail;            // Assignment stack; stores all assigments made in the order they were made.
+    vec<int>            trail_lim;        // Separator indices for different decision levels in 'trail'.
+    vec<Clause*>        reason;           // 'reason[var]' is the clause that implied the variables current value, or 'NULL' if none.
+    vec<int>            level;            // 'level[var]' contains the level at which the assignment was made.
+    int                 qhead;            // Head of queue (as index into the trail -- no more explicit propagation queue in MiniSat).
+    int                 simpDB_assigns;   // Number of top-level assignments since last execution of 'simplify()'.
+    int64_t             simpDB_props;     // Remaining number of propagations that must be made before next execution of 'simplify()'.
+    vec<Lit>            assumptions;      // Current set of assumptions provided to solve by the user.
+    Heap<VarOrderLt>    order_heap;       // A priority queue of variables ordered with respect to the variable activity.
+    double              random_seed;      // Used by the random variable selection.
+    double              progress_estimate;// Set by 'search()'.
+    bool                remove_satisfied; // Indicates whether possibly inefficient linear scan for satisfied clauses should be performed in 'simplify'.
+
+    // Temporaries (to reduce allocation overhead). Each variable is prefixed by the method in which it is
+    // used, exept 'seen' wich is used in several places.
+    //
+    vec<char>           seen;
+    vec<Lit>            analyze_stack;
+    vec<Lit>            analyze_toclear;
+    vec<Lit>            add_tmp;
+
+    // Main internal methods:
+    //
+    void     insertVarOrder   (Var x);                                                 // Insert a variable in the decision order priority queue.
+    Lit      pickBranchLit    (int polarity_mode, double random_var_freq);             // Return the next decision variable.
+    void     newDecisionLevel ();                                                      // Begins a new decision level.
+    void     uncheckedEnqueue (Lit p, Clause* from = NULL);                            // Enqueue a literal. Assumes value of literal is undefined.
+    bool     enqueue          (Lit p, Clause* from = NULL);                            // Test if fact 'p' contradicts current state, enqueue otherwise.
+    Clause*  propagate        ();                                                      // Perform unit propagation. Returns possibly conflicting clause.
+    void     cancelUntil      (int level);                                             // Backtrack until a certain level.
+    void     analyze          (Clause* confl, vec<Lit>& out_learnt, int& out_btlevel); // (bt = backtrack)
+    void     analyzeFinal     (Lit p, vec<Lit>& out_conflict);                         // COULD THIS BE IMPLEMENTED BY THE ORDINARIY "analyze" BY SOME REASONABLE GENERALIZATION?
+    bool     litRedundant     (Lit p, uint32_t abstract_levels);                       // (helper method for 'analyze()')
+    lbool    search           (int nof_conflicts, int nof_learnts);                    // Search for a given number of conflicts.
+    void     reduceDB         ();                                                      // Reduce the set of learnt clauses.
+    void     removeSatisfied  (vec<Clause*>& cs);                                      // Shrink 'cs' to contain only non-satisfied clauses.
+
+    // Maintaining Variable/Clause activity:
+    //
+    void     varDecayActivity ();                      // Decay all variables with the specified factor. Implemented by increasing the 'bump' value instead.
+    void     varBumpActivity  (Var v);                 // Increase a variable with the current 'bump' value.
+    void     claDecayActivity ();                      // Decay all clauses with the specified factor. Implemented by increasing the 'bump' value instead.
+    void     claBumpActivity  (Clause& c);             // Increase a clause with the current 'bump' value.
+
+    // Operations on clauses:
+    //
+    void     attachClause     (Clause& c);             // Attach a clause to watcher lists.
+    void     detachClause     (Clause& c);             // Detach a clause to watcher lists.
+    void     removeClause     (Clause& c);             // Detach and free a clause.
+    bool     locked           (const Clause& c) const; // Returns TRUE if a clause is a reason for some implication in the current state.
+    bool     satisfied        (const Clause& c) const; // Returns TRUE if a clause is satisfied in the current state.
+
+    // Misc:
+    //
+    int      decisionLevel    ()      const; // Gives the current decisionlevel.
+    uint32_t abstractLevel    (Var x) const; // Used to represent an abstraction of sets of decision levels.
+    double   progressEstimate ()      const; // DELETE THIS ?? IT'S NOT VERY USEFUL ...
+
+    // Debug:
+    void     printLit         (Lit l);
+    template<class C>
+    void     printClause      (const C& c);
+    void     verifyModel      ();
+    void     checkLiteralCount();
+
+    // Static helpers:
+    //
+
+    // Returns a random float 0 <= x < 1. Seed must never be 0.
+    static inline double drand(double& seed) {
+        seed *= 1389796;
+        int q = (int)(seed / 2147483647);
+        seed -= (double)q * 2147483647;
+        return seed / 2147483647; }
+
+    // Returns a random integer 0 <= x < size. Seed must never be 0.
+    static inline int irand(double& seed, int size) {
+        return (int)(drand(seed) * size); }
+};
+
+
+//=================================================================================================
+// Implementation of inline methods:
+
+
+inline void Solver::insertVarOrder(Var x) {
+    if (!order_heap.inHeap(x) && decision_var[x]) order_heap.insert(x); }
+
+inline void Solver::varDecayActivity() { var_inc *= var_decay; }
+inline void Solver::varBumpActivity(Var v) {
+    if ( (activity[v] += var_inc) > 1e100 ) {
+        // Rescale:
+        for (int i = 0; i < nVars(); i++)
+            activity[i] *= 1e-100;
+        var_inc *= 1e-100; }
+
+    // Update order_heap with respect to new activity:
+    if (order_heap.inHeap(v))
+        order_heap.decrease(v); }
+
+inline void Solver::claDecayActivity() { cla_inc *= clause_decay; }
+inline void Solver::claBumpActivity (Clause& c) {
+        if ( (c.activity() += cla_inc) > 1e20 ) {
+            // Rescale:
+            for (int i = 0; i < learnts.size(); i++)
+                learnts[i]->activity() *= 1e-20;
+            cla_inc *= 1e-20; } }
+
+inline bool     Solver::enqueue         (Lit p, Clause* from)   { return value(p) != l_Undef ? value(p) != l_False : (uncheckedEnqueue(p, from), true); }
+inline bool     Solver::locked          (const Clause& c) const { return reason[var(c[0])] == &c && value(c[0]) == l_True; }
+inline void     Solver::newDecisionLevel()                      { trail_lim.push(trail.size()); }
+
+inline int      Solver::decisionLevel ()      const   { return trail_lim.size(); }
+inline uint32_t Solver::abstractLevel (Var x) const   { return 1 << (level[x] & 31); }
+inline lbool    Solver::value         (Var x) const   { return toLbool(assigns[x]); }
+inline lbool    Solver::value         (Lit p) const   { return toLbool(assigns[var(p)]) ^ sign(p); }
+inline lbool    Solver::modelValue    (Lit p) const   { return model[var(p)] ^ sign(p); }
+inline int      Solver::nAssigns      ()      const   { return trail.size(); }
+inline int      Solver::nClauses      ()      const   { return clauses.size(); }
+inline int      Solver::nLearnts      ()      const   { return learnts.size(); }
+inline int      Solver::nVars         ()      const   { return assigns.size(); }
+inline void     Solver::setPolarity   (Var v, bool b) { polarity    [v] = (char)b; }
+inline void     Solver::setDecisionVar(Var v, bool b) { decision_var[v] = (char)b; if (b) { insertVarOrder(v); } }
+inline bool     Solver::solve         ()              { vec<Lit> tmp; return solve(tmp); }
+inline bool     Solver::okay          ()      const   { return ok; }
+
+
+
+//=================================================================================================
+// Debug + etc:
+
+
+#define reportf(format, args...) ( fflush(stdout), fprintf(stderr, format, ## args), fflush(stderr) )
+
+static inline void logLit(FILE* f, Lit l)
+{
+    fprintf(f, "%sx%d", sign(l) ? "~" : "", var(l)+1);
+}
+
+static inline void logLits(FILE* f, const vec<Lit>& ls)
+{
+    fprintf(f, "[ ");
+    if (ls.size() > 0){
+        logLit(f, ls[0]);
+        for (int i = 1; i < ls.size(); i++){
+            fprintf(f, ", ");
+            logLit(f, ls[i]);
+        }
+    }
+    fprintf(f, "] ");
+}
+
+static inline const char* showBool(bool b) { return b ? "true" : "false"; }
+
+
+// Just like 'assert()' but expression will be evaluated in the release version as well.
+static inline void check(bool expr) { assert(expr); }
+
+
+inline void Solver::printLit(Lit l)
+{
+    reportf("%s%d:%c", sign(l) ? "-" : "", var(l)+1, value(l) == l_True ? '1' : (value(l) == l_False ? '0' : 'X'));
+}
+
+
+template<class C>
+inline void Solver::printClause(const C& c)
+{
+    for (int i = 0; i < c.size(); i++){
+        printLit(c[i]);
+        fprintf(stderr, " ");
+    }
+}
+
+
+//=================================================================================================
+#endif
similarity index 71%
rename from examples/charm++/satisfiability/SolverTypes.h
rename to examples/charm++/satisfiability/core_sequential/SolverTypes.h
index e11ed2911c25e8337af84bd9f2ea3de4afe9ebcb..47e302390f00dc3ada056a08231acde14781f2d6 100644 (file)
@@ -24,24 +24,6 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA
 #include <cassert>
 #include <stdint.h>
 
-
-template<class V> 
-int get_max_element(const V& ps) {
-
-    int max_index = -1;
-    int max = -1;
-    for(int __i=0; __i<ps.size(); __i++)
-    {
-        if(ps[__i] > max)
-        {
-            max = ps[__i];
-            max_index = __i;
-        }
-    }
-    return max_index;
-}
-
-
 //=================================================================================================
 // Variables, literals, lifted booleans, clauses:
 
@@ -55,10 +37,9 @@ typedef int Var;
 
 class Lit {
     int     x;
-public:
-    Lit() : x(var_Undef)                                              { }   // (lit_Undef)
-    Lit(Var var) {x = var;};
-    Lit(Var var, bool sign)   {x=sign?var:-var; }
+ public:
+    Lit() : x(2*var_Undef)                                              { }   // (lit_Undef)
+    explicit Lit(Var var, bool sign = false) : x((var+var) + (int)sign) { }
 
     // Don't use these for constructing/deconstructing literals. Use the normal constructors instead.
     friend int  toInt       (Lit p);  // Guarantees small, positive integers suitable for array indexing.
@@ -72,17 +53,12 @@ public:
     bool operator == (Lit p) const { return x == p.x; }
     bool operator != (Lit p) const { return x != p.x; }
     bool operator <  (Lit p) const { return x < p.x;  } // '<' guarantees that p, ~p are adjacent in the ordering.
-
-
-    void pup(PUP::er &p) {
-        p|x;
-    }
 };
 
 inline  int  toInt       (Lit p)           { return p.x; }
 inline  Lit  toLit       (int i)           { Lit p; p.x = i; return p; }
-inline  Lit  operator   ~(Lit p)           { Lit q; q.x = -p.x; return q; }
-inline  bool sign        (Lit p)           { return p.x >1?true:false; }
+inline  Lit  operator   ~(Lit p)           { Lit q; q.x = p.x ^ 1; return q; }
+inline  bool sign        (Lit p)           { return p.x & 1; }
 inline  int  var         (Lit p)           { return p.x >> 1; }
 inline  Lit  unsign      (Lit p)           { Lit q; q.x = p.x & ~1; return q; }
 inline  Lit  id          (Lit p, bool sgn) { Lit q; q.x = p.x ^ (int)sgn; return q; }
@@ -123,74 +99,51 @@ const lbool l_Undef = toLbool( 0);
 
 
 class Clause {
-    CkVec<Lit>  data;
+    uint32_t size_etc;
+    union { float act; uint32_t abst; } extra;
+    Lit     data[0];
 
 public:
-   
-     Clause(){data.removeAll();}
-   
-     Clause(const Clause& corg)
-     {
-         data.resize(corg.size());
-        for(int _i=0; _i<data.size(); _i++)
-        {
-            data[_i] = corg[_i];
-        }
-     }
     void calcAbstraction() {
-    }
+        uint32_t abstraction = 0;
+        for (int i = 0; i < size(); i++)
+            abstraction |= 1 << (var(data[i]) & 31);
+        extra.abst = abstraction;  }
 
     // NOTE: This constructor cannot be used directly (doesn't allocate enough memory).
     template<class V>
     Clause(const V& ps, bool learnt) {
-        data.resize(ps.size());
-        for (int i = 0; i < ps.size(); i++) data[i] = ps[i];
-    }
-    
-    template<class V>
-    void attachdata(const V& ps, bool learnt)
-    {
-        data.resize(ps.size());
+        size_etc = (ps.size() << 3) | (uint32_t)learnt;
         for (int i = 0; i < ps.size(); i++) data[i] = ps[i];
-    }
+        if (learnt) extra.act = 0; else calcAbstraction(); }
 
-    void remove(int v){
-        for(int i=0; i<data.size(); i++)
-        {
-            if(toInt(data[i]) == v)
-            {
-                data.remove(i);
-                return;
-            }
-        }
-    }
     // -- use this function instead:
-    int          size        ()      const   { return data.size(); }
-    void         shrink      (int i)         { }
+    template<class V>
+    friend Clause* Clause_new(const V& ps, bool learnt = false) {
+        assert(sizeof(Lit)      == sizeof(uint32_t));
+        assert(sizeof(float)    == sizeof(uint32_t));
+        void* mem = malloc(sizeof(Clause) + sizeof(uint32_t)*(ps.size()));
+        return new (mem) Clause(ps, learnt); }
+
+    int          size        ()      const   { return size_etc >> 3; }
+    void         shrink      (int i)         { assert(i <= size()); size_etc = (((size_etc >> 3) - i) << 3) | (size_etc & 7); }
     void         pop         ()              { shrink(1); }
-    bool         learnt      ()      const   {  }
-    uint32_t     mark        ()      const   { return 1; }
-    void         mark        (uint32_t m)    {  }
+    bool         learnt      ()      const   { return size_etc & 1; }
+    uint32_t     mark        ()      const   { return (size_etc >> 1) & 3; }
+    void         mark        (uint32_t m)    { size_etc = (size_etc & ~6) | ((m & 3) << 1); }
     const Lit&   last        ()      const   { return data[size()-1]; }
 
     // NOTE: somewhat unsafe to change the clause in-place! Must manually call 'calcAbstraction' afterwards for
     //       subsumption operations to behave correctly.
     Lit&         operator [] (int i)         { return data[i]; }
     Lit          operator [] (int i) const   { return data[i]; }
-    //operator const Lit* (void) const         { return data; }
+    operator const Lit* (void) const         { return data; }
 
-    float       activity    ()              { return 1; }
-    uint32_t     abstraction () const { return 1; }
+    float&       activity    ()              { return extra.act; }
+    uint32_t     abstraction () const { return extra.abst; }
 
     Lit          subsumes    (const Clause& other) const;
     void         strengthen  (Lit p);
-
-
-    void        resize  (int __size)  {data.resize(__size); }
-    void pup(PUP::er &p) {
-        for(int i=0; i<size(); i++)
-            p|data[i];
-    }
 };
 
 
@@ -209,14 +162,36 @@ public:
 |________________________________________________________________________________________________@*/
 inline Lit Clause::subsumes(const Clause& other) const
 {
+    if (other.size() < size() || (extra.abst & ~other.extra.abst) != 0)
         return lit_Error;
+
+    Lit        ret = lit_Undef;
+    const Lit* c  = (const Lit*)(*this);
+    const Lit* d  = (const Lit*)other;
+
+    for (int i = 0; i < size(); i++) {
+        // search for c[i] or ~c[i]
+        for (int j = 0; j < other.size(); j++)
+            if (c[i] == d[j])
+                goto ok;
+            else if (ret == lit_Undef && c[i] == ~d[j]){
+                ret = c[i];
+                goto ok;
+            }
+
+        // did not find it
+        return lit_Error;
+    ok:;
+    }
+
+    return ret;
 }
 
 
 inline void Clause::strengthen(Lit p)
 {
-    //remove(*this, p);
-    //calcAbstraction();
+    remove(*this, p);
+    calcAbstraction();
 }
 
 #endif
diff --git a/examples/charm++/satisfiability/core_sequential/depend.mk b/examples/charm++/satisfiability/core_sequential/depend.mk
new file mode 100644 (file)
index 0000000..bb089f6
--- /dev/null
@@ -0,0 +1,16 @@
+Main.o: Main.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h
+Solver.o: Solver.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h ../mtl/Sort.h ../mtl/Vec.h
+Main.op: Main.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h
+Solver.op: Solver.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h ../mtl/Sort.h ../mtl/Vec.h
+Main.od: Main.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h
+Solver.od: Solver.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h ../mtl/Sort.h ../mtl/Vec.h
+Main.or: Main.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h
+Solver.or: Solver.C Solver.h ../mtl/Vec.h ../mtl/Heap.h ../mtl/Vec.h \
+  ../mtl/Alg.h SolverTypes.h ../mtl/Sort.h ../mtl/Vec.h
similarity index 56%
rename from examples/charm++/satisfiability/example_50.cnf
rename to examples/charm++/satisfiability/example/example_100.cnf
index f281f4dfe98e1852b4d08e95ca7841ed9be3ff3c..7933544584b58c0b65c4b2ab7a0ceb7e5277c741 100644 (file)
@@ -1,6 +1,6 @@
 c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
 c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
-p cnf 3500 50
+p cnf 3500 100
 -1765 -1070 0
 -1298 -3068 0
 -2907 -225 0
@@ -51,3 +51,53 @@ p cnf 3500 50
 -2600 -1685 0
 1904 -207 0
 2535 -59 0
+-3251 307 0
+2898 -289 0
+-1644 -65 0
+-3232 -3141 0
+1094 -2553 0
+635 1633 0
+-2556 -3267 0
+1658 -2147 0
+2450 1886 0
+853 358 0
+2710 1705 0
+-3275 -1764 0
+2827 1061 0
+1552 -2501 0
+1032 -2196 0
+2093 599 0
+-3297 2888 0
+-1159 3146 0
+-167 -2808 0
+2696 808 0
+1887 -1984 0
+-1062 545 0
+-3251 1283 0
+83 2885 0
+-865 -528 0
+-2017 2391 0
+1523 -2124 0
+2769 -2741 0
+-1300 -1093 0
+-2209 954 0
+-878 -303 0
+618 840 0
+1959 5 0
+-1540 -2659 0
+593 281 0
+-713 1017 0
+746 873 0
+-247 -1414 0
+564 -2085 0
+1404 2663 0
+-791 -338 0
+-1563 -1893 0
+777 2017 0
+1696 -2 0
+1643 1896 0
+2701 -3013 0
+1526 -945 0
+-1021 -2791 0
+2775 642 0
+2624 -2992 0
diff --git a/examples/charm++/satisfiability/example/example_1000.cnf b/examples/charm++/satisfiability/example/example_1000.cnf
new file mode 100644 (file)
index 0000000..33943aa
--- /dev/null
@@ -0,0 +1,1003 @@
+c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
+c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
+p cnf 3500 1000
+-1765 -1070 0
+-1298 -3068 0
+-2907 -225 0
+776 -3004 0
+578 1958 0
+-1372 1977 0
+1900 -2858 0
+-1841 -488 0
+-104 -1745 0
+-599 -1021 0
+-424 -88 0
+2289 1997 0
+-2443 2011 0
+-910 -1746 0
+-174 3232 0
+2267 -2120 0
+1778 272 0
+1676 -2380 0
+-2538 -3299 0
+-2059 691 0
+2248 -1315 0
+-3189 2467 0
+664 -1877 0
+2418 1800 0
+-861 -3070 0
+3364 -1135 0
+917 -227 0
+2728 -476 0
+-119 -1132 0
+-1351 -3170 0
+-2297 1445 0
+-2043 -1910 0
+1816 1939 0
+3429 582 0
+-507 -320 0
+1726 -1209 0
+2585 -1652 0
+-2440 -2450 0
+-2867 2451 0
+-139 813 0
+2340 135 0
+-2325 -3113 0
+1524 -2565 0
+727 -1593 0
+2614 247 0
+1065 -2790 0
+3091 -1842 0
+-2600 -1685 0
+1904 -207 0
+2535 -59 0
+-3251 307 0
+2898 -289 0
+-1644 -65 0
+-3232 -3141 0
+1094 -2553 0
+635 1633 0
+-2556 -3267 0
+1658 -2147 0
+2450 1886 0
+853 358 0
+2710 1705 0
+-3275 -1764 0
+2827 1061 0
+1552 -2501 0
+1032 -2196 0
+2093 599 0
+-3297 2888 0
+-1159 3146 0
+-167 -2808 0
+2696 808 0
+1887 -1984 0
+-1062 545 0
+-3251 1283 0
+83 2885 0
+-865 -528 0
+-2017 2391 0
+1523 -2124 0
+2769 -2741 0
+-1300 -1093 0
+-2209 954 0
+-878 -303 0
+618 840 0
+1959 5 0
+-1540 -2659 0
+593 281 0
+-713 1017 0
+746 873 0
+-247 -1414 0
+564 -2085 0
+1404 2663 0
+-791 -338 0
+-1563 -1893 0
+777 2017 0
+1696 -2 0
+1643 1896 0
+2701 -3013 0
+1526 -945 0
+-1021 -2791 0
+2775 642 0
+2624 -2992 0
+1208 -1390 0
+1041 1844 0
+-2265 -1072 0
+49 1230 0
+2182 -1004 0
+-2282 1514 0
+3423 -2393 0
+1189 2447 0
+3392 1800 0
+-1727 115 0
+-382 1957 0
+-1772 2005 0
+-1860 156 0
+3303 -2197 0
+-323 2272 0
+-2972 408 0
+-1554 -295 0
+-2350 -272 0
+1597 3162 0
+-1915 321 0
+1175 -915 0
+-2145 -702 0
+-701 -479 0
+691 -3036 0
+3093 2025 0
+-240 1173 0
+1026 1704 0
+-2502 -3214 0
+2501 1152 0
+-240 -113 0
+1326 1112 0
+1477 760 0
+-477 3011 0
+-1581 -2553 0
+-1519 2046 0
+-2781 695 0
+2387 -2927 0
+-200 66 0
+130 41 0
+1825 -2675 0
+85 3018 0
+-2869 772 0
+-2827 1407 0
+1075 -388 0
+-448 2587 0
+-2853 2173 0
+330 1088 0
+-3014 955 0
+2448 -1263 0
+-2542 2703 0
+1350 -475 0
+-2710 -2386 0
+-677 305 0
+625 3011 0
+1190 -3109 0
+-860 -300 0
+1036 1623 0
+-96 1945 0
+-1434 371 0
+3282 301 0
+729 -487 0
+3081 -2308 0
+-595 -1473 0
+2480 -1261 0
+3335 92 0
+-208 1377 0
+-956 -2285 0
+-1003 1195 0
+3190 -3085 0
+-1678 41 0
+-309 -227 0
+-3286 -2803 0
+-871 3052 0
+-1430 2720 0
+-2675 3121 0
+-590 1909 0
+-2496 3050 0
+3385 -2946 0
+1104 2982 0
+1160 511 0
+-1677 -3109 0
+-990 -1991 0
+-333 341 0
+-2426 -1202 0
+242 2096 0
+342 -321 0
+-1214 2335 0
+-2085 904 0
+-2907 3368 0
+2840 560 0
+3469 -595 0
+-3150 -317 0
+2547 19 0
+-453 -834 0
+-141 -540 0
+-2514 2487 0
+1955 2317 0
+-713 967 0
+-276 3076 0
+-3357 3317 0
+2303 1793 0
+-174 921 0
+2295 -2539 0
+-2903 3230 0
+380 -2651 0
+-1422 1773 0
+-1679 1623 0
+-1239 439 0
+1275 2796 0
+-1358 -1762 0
+1676 1461 0
+2325 2436 0
+-3236 296 0
+1704 2855 0
+-3415 1417 0
+-2417 1194 0
+587 1639 0
+-705 2096 0
+700 -3459 0
+-1246 -2228 0
+480 2138 0
+-1091 -2065 0
+-2470 -2158 0
+1837 1577 0
+340 868 0
+3115 3425 0
+-3020 -3338 0
+-2278 -1746 0
+-1089 -1440 0
+1876 -3184 0
+-3486 2231 0
+1692 747 0
+22 -3076 0
+1078 3450 0
+-2884 -1361 0
+1853 -918 0
+3490 1621 0
+2363 2711 0
+3145 -672 0
+1747 3367 0
+-3032 1404 0
+-2443 -1206 0
+-1141 -3487 0
+-2174 -2435 0
+3262 529 0
+-1859 973 0
+-1179 2839 0
+3062 -1193 0
+2148 3203 0
+-449 2915 0
+3475 1083 0
+306 -811 0
+571 -2192 0
+1078 432 0
+1308 1682 0
+-2475 -3463 0
+1971 -2212 0
+-573 -509 0
+-1028 -2695 0
+1608 -1401 0
+1345 -1107 0
+-3256 1179 0
+-1309 -1933 0
+-2235 -1405 0
+1559 3125 0
+1742 -2679 0
+-1724 602 0
+-1879 -2009 0
+2094 2146 0
+-1154 -2913 0
+-2685 -2745 0
+-3239 2125 0
+-765 3429 0
+1882 1776 0
+-981 3435 0
+-880 2583 0
+-1559 -1322 0
+1054 1674 0
+2079 1658 0
+1568 3115 0
+2031 1339 0
+-2151 -516 0
+1992 2491 0
+2394 -2343 0
+2803 -3164 0
+898 594 0
+-2257 1293 0
+2533 -2656 0
+450 1475 0
+108 -2233 0
+2441 -1470 0
+2797 -1786 0
+-476 -2455 0
+-2788 850 0
+1799 -1868 0
+3050 1895 0
+1517 -2600 0
+-1860 224 0
+-2556 -2135 0
+-2005 452 0
+1871 355 0
+-2454 2702 0
+-3347 -1583 0
+2092 -2896 0
+-3346 -1734 0
+3328 -2506 0
+151 -735 0
+1560 1136 0
+-592 -1088 0
+-2695 296 0
+-1358 1937 0
+1856 58 0
+3328 -3407 0
+-249 2038 0
+52 -2555 0
+-459 1542 0
+1680 -594 0
+2918 3415 0
+-2768 -725 0
+-3183 -2825 0
+2574 2666 0
+-1644 -3222 0
+475 3307 0
+2466 1983 0
+478 1519 0
+-3466 671 0
+3284 -358 0
+2179 -2477 0
+-2414 575 0
+2845 -2252 0
+-2573 753 0
+3407 -2182 0
+1812 -280 0
+1633 -1011 0
+2347 882 0
+-1050 2277 0
+-1500 519 0
+-3149 663 0
+-1329 -258 0
+-650 1620 0
+-2640 -738 0
+2849 2188 0
+3116 2720 0
+2927 628 0
+-849 -1769 0
+418 -2718 0
+346 -2982 0
+1916 -3456 0
+3000 -1828 0
+2441 544 0
+84 -2722 0
+-1260 435 0
+997 2606 0
+-1135 3160 0
+1299 -2476 0
+-243 -769 0
+-3125 2091 0
+3112 -622 0
+-2397 2704 0
+3194 2266 0
+-1843 -2104 0
+-3194 958 0
+-906 706 0
+-2365 -890 0
+571 554 0
+2113 3376 0
+-1020 1167 0
+-2219 1403 0
+1302 -38 0
+1771 1987 0
+928 -324 0
+666 1781 0
+-692 1418 0
+-10 314 0
+-373 -1742 0
+-1412 -3153 0
+3151 208 0
+-685 -597 0
+1385 1405 0
+2133 -3286 0
+2020 -2129 0
+2496 -3059 0
+423 -1961 0
+945 -1047 0
+1303 -2016 0
+3448 99 0
+32 -3382 0
+1189 1488 0
+-870 -1739 0
+-2559 2734 0
+2598 1315 0
+2807 -636 0
+-115 2595 0
+-1763 1395 0
+698 458 0
+-943 1595 0
+-2062 1678 0
+-1130 -602 0
+2106 269 0
+-777 2021 0
+-55 954 0
+-309 112 0
+-124 -2892 0
+2515 2879 0
+820 2198 0
+-1968 -2176 0
+-1215 1985 0
+3349 -2883 0
+-1621 1720 0
+-2684 2936 0
+2401 374 0
+-3314 -2492 0
+-809 -2582 0
+-488 3350 0
+-202 -194 0
+-2340 3453 0
+3412 2389 0
+4 1903 0
+652 319 0
+2030 1098 0
+-500 2116 0
+-1437 -2691 0
+300 -1688 0
+-2459 -3099 0
+3313 1466 0
+312 -2220 0
+-2146 -1427 0
+1849 -14 0
+-2704 3337 0
+-594 -2278 0
+-1910 -32 0
+-2106 -3239 0
+1618 1735 0
+-1074 -2891 0
+2992 395 0
+-3342 -189 0
+2537 -3184 0
+2551 -523 0
+2427 -1829 0
+185 2951 0
+-2772 231 0
+-1639 -65 0
+439 -2471 0
+-867 2825 0
+2684 -3033 0
+971 2696 0
+611 -930 0
+-2591 2598 0
+-1566 -2207 0
+-2450 -835 0
+2730 -3169 0
+2464 3498 0
+-1502 -3383 0
+3086 2369 0
+-102 -991 0
+-179 -1054 0
+-2916 1448 0
+2032 -1253 0
+-2088 -1356 0
+3414 2699 0
+885 387 0
+-1659 -666 0
+2555 952 0
+1745 977 0
+-1766 3025 0
+1207 -1558 0
+1698 -845 0
+-768 -3027 0
+-2625 2122 0
+2669 2544 0
+-944 -956 0
+2000 -348 0
+857 562 0
+-649 -1858 0
+-1533 -458 0
+-2746 -451 0
+-3397 -2655 0
+1860 -789 0
+1693 -1992 0
+177 -457 0
+2212 3098 0
+3138 1707 0
+-657 -3470 0
+-2148 1773 0
+2994 1110 0
+-2625 656 0
+142 1009 0
+1487 -1352 0
+2484 -3058 0
+2404 -3292 0
+3428 -2963 0
+-183 620 0
+-2162 -1028 0
+-127 -2103 0
+831 -587 0
+-1077 -2515 0
+2888 2182 0
+3336 -1351 0
+1735 1840 0
+2049 1593 0
+688 -1997 0
+804 -1083 0
+211 452 0
+-108 1348 0
+1538 1286 0
+2003 1138 0
+3450 2155 0
+1935 -2708 0
+-2868 3436 0
+1804 -1806 0
+2688 -3301 0
+-1724 2290 0
+-1178 -1136 0
+2711 -3418 0
+1749 1158 0
+2320 -2806 0
+-1569 1859 0
+259 1886 0
+-2422 -2241 0
+2835 -408 0
+1105 192 0
+-316 2975 0
+2182 2248 0
+-997 2688 0
+794 2438 0
+1211 -498 0
+2511 -778 0
+268 2356 0
+2729 -1688 0
+-2656 -1608 0
+1794 -2338 0
+1907 1856 0
+2572 -252 0
+-1617 414 0
+3488 -2471 0
+2377 1629 0
+374 -1148 0
+-977 867 0
+3110 2060 0
+1230 -716 0
+-1208 584 0
+1718 -3451 0
+2188 -1961 0
+248 2668 0
+-3404 -151 0
+-3071 151 0
+721 697 0
+-2626 -2253 0
+-2380 3157 0
+332 -2302 0
+-2028 -83 0
+852 -2897 0
+3067 1637 0
+-564 -1817 0
+-498 -3236 0
+425 3455 0
+1323 3402 0
+-2719 -674 0
+-2967 22 0
+7 -1074 0
+-2466 2210 0
+-997 -814 0
+-3039 1117 0
+2536 -2768 0
+683 -2012 0
+1373 1147 0
+3441 1157 0
+587 -3020 0
+1441 2581 0
+-2255 432 0
+442 -1757 0
+-2619 -3336 0
+194 -3202 0
+1032 -2405 0
+2017 -920 0
+-2292 -2155 0
+-2169 2669 0
+-1128 2717 0
+-1147 1047 0
+-1998 -66 0
+-2729 257 0
+616 -1234 0
+2723 1735 0
+2592 -1745 0
+-1624 -2184 0
+513 -821 0
+2373 1926 0
+2749 -3061 0
+1759 2238 0
+2478 1506 0
+2124 -3214 0
+-129 -2476 0
+2372 1003 0
+-2559 1045 0
+-191 2300 0
+1461 -1417 0
+1677 2092 0
+126 2355 0
+3337 -3465 0
+27 1718 0
+99 -1783 0
+1044 588 0
+2296 673 0
+-1247 3475 0
+-2243 -78 0
+2163 1117 0
+1001 -1966 0
+21 3425 0
+2903 2777 0
+-1033 1680 0
+-2751 -84 0
+941 -3421 0
+-2124 -2051 0
+-2431 -2787 0
+748 -959 0
+1434 -889 0
+2589 1283 0
+-29 3450 0
+-1814 -3277 0
+92 -2437 0
+-3195 3003 0
+-654 -2058 0
+41 2170 0
+-398 2311 0
+3223 -3109 0
+-3056 2530 0
+-3092 624 0
+-2003 -1899 0
+-548 -323 0
+-190 2603 0
+1896 -1705 0
+-830 -1780 0
+-609 303 0
+-946 1533 0
+-1638 221 0
+1717 1838 0
+20 3465 0
+1041 440 0
+340 1730 0
+2659 1722 0
+-1398 -3430 0
+-1357 -2881 0
+-119 3134 0
+1720 -599 0
+-132 1949 0
+-3131 608 0
+1031 1139 0
+2346 -3456 0
+1385 -2586 0
+-1348 2235 0
+1567 3301 0
+3340 -1526 0
+962 1143 0
+-2361 562 0
+586 81 0
+1061 3174 0
+-3422 1686 0
+725 -2736 0
+2289 2078 0
+2936 -2099 0
+77 -990 0
+1491 2329 0
+-3252 -1507 0
+2446 -3257 0
+-3440 137 0
+-1863 -2956 0
+1909 -2780 0
+-1636 1742 0
+-1119 650 0
+782 1186 0
+1888 1345 0
+-373 3200 0
+2545 -976 0
+2709 1558 0
+-1964 -2463 0
+-2216 1812 0
+-3436 2444 0
+1939 -1251 0
+2821 1160 0
+197 -4 0
+696 -149 0
+1409 -1022 0
+2544 -3472 0
+-688 -1092 0
+744 1340 0
+-164 3009 0
+1685 -2676 0
+1528 1124 0
+-158 2128 0
+2977 -1438 0
+-3133 -3279 0
+3192 944 0
+906 -3119 0
+-1374 -552 0
+3296 -1441 0
+2406 46 0
+335 -629 0
+-1822 1832 0
+-3476 1775 0
+-2480 -103 0
+-1502 -953 0
+2348 -2433 0
+1232 -3466 0
+-2936 2700 0
+2183 -3081 0
+1895 -1958 0
+3021 1537 0
+2950 1885 0
+1361 326 0
+841 2351 0
+3131 -2209 0
+-2326 -2336 0
+-1237 -1513 0
+3329 1501 0
+202 1350 0
+1178 -603 0
+2571 2745 0
+-186 1984 0
+411 2382 0
+2101 245 0
+3134 -2969 0
+1727 2311 0
+507 1581 0
+-3395 721 0
+-3111 -2377 0
+1561 -3112 0
+1553 -1208 0
+-3211 -3491 0
+-3209 -2306 0
+429 -3363 0
+1277 2619 0
+-126 -136 0
+3306 3033 0
+-3372 -3338 0
+1138 -1577 0
+2497 192 0
+-1026 -139 0
+-113 -2389 0
+1445 -2561 0
+-1348 -1307 0
+1708 -2519 0
+3484 3002 0
+-3401 1968 0
+-2645 -1102 0
+1156 -1625 0
+1243 -2658 0
+-2021 758 0
+-915 -1021 0
+-2904 701 0
+-2396 508 0
+-1281 1194 0
+1135 -596 0
+37 59 0
+-2734 -467 0
+-935 -1122 0
+3290 971 0
+2182 -2081 0
+-1873 3373 0
+1564 79 0
+-3362 -1489 0
+2894 1178 0
+764 -3381 0
+2869 48 0
+-3145 1852 0
+2689 -2902 0
+-3020 715 0
+-341 282 0
+1467 101 0
+3317 2988 0
+2923 -2278 0
+371 1450 0
+-3343 -1841 0
+233 93 0
+-517 836 0
+-1600 1060 0
+-2887 427 0
+2438 -3283 0
+2783 -652 0
+-886 -3169 0
+1902 -3260 0
+2752 -1886 0
+659 -626 0
+338 -1824 0
+-2846 -2427 0
+2165 -144 0
+-770 1101 0
+2896 2385 0
+2278 3431 0
+-1996 1299 0
+-1038 -1412 0
+-110 1100 0
+1987 -1238 0
+2235 2099 0
+2176 1161 0
+467 -2868 0
+2188 775 0
+-1116 3338 0
+497 -29 0
+-985 61 0
+-1154 122 0
+2679 2893 0
+-1919 -2925 0
+-598 -1630 0
+-1592 3469 0
+977 1361 0
+1055 -2080 0
+-2517 -1510 0
+-3438 -58 0
+-351 469 0
+4 -1154 0
+-2185 3387 0
+1688 -2983 0
+3160 638 0
+-2232 2753 0
+-1357 1417 0
+2394 -410 0
+925 1514 0
+771 -1529 0
+1952 3231 0
+-1270 2804 0
+57 -1644 0
+2659 -35 0
+-1659 -1810 0
+2926 -3297 0
+3096 -1278 0
+478 3321 0
+722 -2568 0
+-2266 2921 0
+1813 -1110 0
+1961 -1487 0
+2596 -672 0
+2014 -2371 0
+1779 -1976 0
+2956 -1185 0
+-1349 2168 0
+-2124 -2436 0
+-2653 -1408 0
+-1189 -1233 0
+2690 -2305 0
+-2373 -2814 0
+1324 2907 0
+-3086 956 0
+-845 1049 0
+-1212 3405 0
+29 -1478 0
+707 1501 0
+-1114 -1100 0
+-1480 -637 0
+-1703 -82 0
+636 -2223 0
+660 949 0
+3255 -2236 0
+-2166 1001 0
+2923 2769 0
+2807 -522 0
+782 90 0
+1203 -272 0
+-1208 3320 0
+2265 -239 0
+1621 -1802 0
+2687 -3160 0
+-1805 2645 0
+-2796 -1898 0
+-826 -2562 0
+-2158 368 0
+-1828 1733 0
+-954 2611 0
+946 2862 0
+216 -2242 0
+-1449 -3131 0
+1053 -822 0
+-15 407 0
+-2718 -2038 0
+961 1638 0
+2242 -989 0
+-1662 -3320 0
+-2872 397 0
+3447 1564 0
+-1555 -2878 0
+2269 241 0
+-558 2533 0
+2548 3433 0
+1419 -977 0
+-1272 1458 0
+-2858 1462 0
+-1881 304 0
+1911 1503 0
+-2966 2166 0
+521 -1542 0
+-1868 -859 0
+2395 -2868 0
+-2633 808 0
+-2680 1295 0
+-1795 995 0
+-1279 -884 0
+741 -767 0
+-747 -831 0
+-282 2402 0
+-25 2841 0
+2594 -1146 0
+-2418 -2833 0
+-538 -917 0
+-2825 2561 0
+1349 1327 0
+2136 1210 0
+-346 1592 0
+1880 3026 0
+-1081 -2747 0
+-3112 711 0
+-2407 -1967 0
+3426 1796 0
+-854 3369 0
+-1779 -1905 0
+1189 -2495 0
+929 -542 0
+-2692 2008 0
+-1867 2454 0
+844 -2504 0
+-1946 -2043 0
+-422 2288 0
+-2988 -825 0
+689 244 0
+1839 -126 0
+-573 -3335 0
+1350 -3213 0
+-3208 -2963 0
+3015 -953 0
+-3416 2136 0
+433 80 0
+2779 2739 0
+1108 -2148 0
+1497 620 0
+-770 1541 0
+2548 2130 0
+2508 -1999 0
+-2823 1826 0
+-95 877 0
+2228 -491 0
+-2980 1516 0
+1121 -324 0
+2467 2367 0
+2867 -77 0
+579 796 0
+2710 3157 0
+1026 2178 0
+-649 -3088 0
+-1806 -1105 0
+3239 1316 0
+-3292 -220 0
+-1179 1031 0
+-2373 1660 0
+948 886 0
+1850 1726 0
+-2231 2626 0
+2417 -3463 0
+-1658 -861 0
+1461 607 0
+1378 -898 0
+3465 1832 0
+-373 2885 0
+2280 1220 0
+2423 -1547 0
+576 -3495 0
+2788 182 0
+1936 3389 0
+2427 64 0
+3344 3302 0
+-1112 2438 0
+-296 -902 0
+-502 558 0
+-458 3310 0
+-1408 -495 0
+-781 -3157 0
+1170 2097 0
+1615 -1229 0
+-1085 2617 0
+-322 -598 0
+2467 -1901 0
+1707 2671 0
+-1702 2958 0
+-49 2188 0
+-2335 -2232 0
+2683 3174 0
+-126 -1647 0
+2309 1271 0
+3399 -700 0
+1381 1220 0
+-3035 2063 0
+-3292 803 0
+1535 2574 0
+2994 984 0
+-1038 66 0
+1374 1121 0
+-1008 2878 0
+-1690 -1970 0
+-1274 -809 0
+-1282 -3191 0
+1145 -33 0
+-1012 257 0
+-147 -1896 0
diff --git a/examples/charm++/satisfiability/example/example_4000.cnf b/examples/charm++/satisfiability/example/example_4000.cnf
new file mode 100644 (file)
index 0000000..5074113
--- /dev/null
@@ -0,0 +1,4003 @@
+c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
+c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
+p cnf 3500 4000
+-1765 -1070 0
+-1298 -3068 0
+-2907 -225 0
+776 -3004 0
+578 1958 0
+-1372 1977 0
+1900 -2858 0
+-1841 -488 0
+-104 -1745 0
+-599 -1021 0
+-424 -88 0
+2289 1997 0
+-2443 2011 0
+-910 -1746 0
+-174 3232 0
+2267 -2120 0
+1778 272 0
+1676 -2380 0
+-2538 -3299 0
+-2059 691 0
+2248 -1315 0
+-3189 2467 0
+664 -1877 0
+2418 1800 0
+-861 -3070 0
+3364 -1135 0
+917 -227 0
+2728 -476 0
+-119 -1132 0
+-1351 -3170 0
+-2297 1445 0
+-2043 -1910 0
+1816 1939 0
+3429 582 0
+-507 -320 0
+1726 -1209 0
+2585 -1652 0
+-2440 -2450 0
+-2867 2451 0
+-139 813 0
+2340 135 0
+-2325 -3113 0
+1524 -2565 0
+727 -1593 0
+2614 247 0
+1065 -2790 0
+3091 -1842 0
+-2600 -1685 0
+1904 -207 0
+2535 -59 0
+-3251 307 0
+2898 -289 0
+-1644 -65 0
+-3232 -3141 0
+1094 -2553 0
+635 1633 0
+-2556 -3267 0
+1658 -2147 0
+2450 1886 0
+853 358 0
+2710 1705 0
+-3275 -1764 0
+2827 1061 0
+1552 -2501 0
+1032 -2196 0
+2093 599 0
+-3297 2888 0
+-1159 3146 0
+-167 -2808 0
+2696 808 0
+1887 -1984 0
+-1062 545 0
+-3251 1283 0
+83 2885 0
+-865 -528 0
+-2017 2391 0
+1523 -2124 0
+2769 -2741 0
+-1300 -1093 0
+-2209 954 0
+-878 -303 0
+618 840 0
+1959 5 0
+-1540 -2659 0
+593 281 0
+-713 1017 0
+746 873 0
+-247 -1414 0
+564 -2085 0
+1404 2663 0
+-791 -338 0
+-1563 -1893 0
+777 2017 0
+1696 -2 0
+1643 1896 0
+2701 -3013 0
+1526 -945 0
+-1021 -2791 0
+2775 642 0
+2624 -2992 0
+1208 -1390 0
+1041 1844 0
+-2265 -1072 0
+49 1230 0
+2182 -1004 0
+-2282 1514 0
+3423 -2393 0
+1189 2447 0
+3392 1800 0
+-1727 115 0
+-382 1957 0
+-1772 2005 0
+-1860 156 0
+3303 -2197 0
+-323 2272 0
+-2972 408 0
+-1554 -295 0
+-2350 -272 0
+1597 3162 0
+-1915 321 0
+1175 -915 0
+-2145 -702 0
+-701 -479 0
+691 -3036 0
+3093 2025 0
+-240 1173 0
+1026 1704 0
+-2502 -3214 0
+2501 1152 0
+-240 -113 0
+1326 1112 0
+1477 760 0
+-477 3011 0
+-1581 -2553 0
+-1519 2046 0
+-2781 695 0
+2387 -2927 0
+-200 66 0
+130 41 0
+1825 -2675 0
+85 3018 0
+-2869 772 0
+-2827 1407 0
+1075 -388 0
+-448 2587 0
+-2853 2173 0
+330 1088 0
+-3014 955 0
+2448 -1263 0
+-2542 2703 0
+1350 -475 0
+-2710 -2386 0
+-677 305 0
+625 3011 0
+1190 -3109 0
+-860 -300 0
+1036 1623 0
+-96 1945 0
+-1434 371 0
+3282 301 0
+729 -487 0
+3081 -2308 0
+-595 -1473 0
+2480 -1261 0
+3335 92 0
+-208 1377 0
+-956 -2285 0
+-1003 1195 0
+3190 -3085 0
+-1678 41 0
+-309 -227 0
+-3286 -2803 0
+-871 3052 0
+-1430 2720 0
+-2675 3121 0
+-590 1909 0
+-2496 3050 0
+3385 -2946 0
+1104 2982 0
+1160 511 0
+-1677 -3109 0
+-990 -1991 0
+-333 341 0
+-2426 -1202 0
+242 2096 0
+342 -321 0
+-1214 2335 0
+-2085 904 0
+-2907 3368 0
+2840 560 0
+3469 -595 0
+-3150 -317 0
+2547 19 0
+-453 -834 0
+-141 -540 0
+-2514 2487 0
+1955 2317 0
+-713 967 0
+-276 3076 0
+-3357 3317 0
+2303 1793 0
+-174 921 0
+2295 -2539 0
+-2903 3230 0
+380 -2651 0
+-1422 1773 0
+-1679 1623 0
+-1239 439 0
+1275 2796 0
+-1358 -1762 0
+1676 1461 0
+2325 2436 0
+-3236 296 0
+1704 2855 0
+-3415 1417 0
+-2417 1194 0
+587 1639 0
+-705 2096 0
+700 -3459 0
+-1246 -2228 0
+480 2138 0
+-1091 -2065 0
+-2470 -2158 0
+1837 1577 0
+340 868 0
+3115 3425 0
+-3020 -3338 0
+-2278 -1746 0
+-1089 -1440 0
+1876 -3184 0
+-3486 2231 0
+1692 747 0
+22 -3076 0
+1078 3450 0
+-2884 -1361 0
+1853 -918 0
+3490 1621 0
+2363 2711 0
+3145 -672 0
+1747 3367 0
+-3032 1404 0
+-2443 -1206 0
+-1141 -3487 0
+-2174 -2435 0
+3262 529 0
+-1859 973 0
+-1179 2839 0
+3062 -1193 0
+2148 3203 0
+-449 2915 0
+3475 1083 0
+306 -811 0
+571 -2192 0
+1078 432 0
+1308 1682 0
+-2475 -3463 0
+1971 -2212 0
+-573 -509 0
+-1028 -2695 0
+1608 -1401 0
+1345 -1107 0
+-3256 1179 0
+-1309 -1933 0
+-2235 -1405 0
+1559 3125 0
+1742 -2679 0
+-1724 602 0
+-1879 -2009 0
+2094 2146 0
+-1154 -2913 0
+-2685 -2745 0
+-3239 2125 0
+-765 3429 0
+1882 1776 0
+-981 3435 0
+-880 2583 0
+-1559 -1322 0
+1054 1674 0
+2079 1658 0
+1568 3115 0
+2031 1339 0
+-2151 -516 0
+1992 2491 0
+2394 -2343 0
+2803 -3164 0
+898 594 0
+-2257 1293 0
+2533 -2656 0
+450 1475 0
+108 -2233 0
+2441 -1470 0
+2797 -1786 0
+-476 -2455 0
+-2788 850 0
+1799 -1868 0
+3050 1895 0
+1517 -2600 0
+-1860 224 0
+-2556 -2135 0
+-2005 452 0
+1871 355 0
+-2454 2702 0
+-3347 -1583 0
+2092 -2896 0
+-3346 -1734 0
+3328 -2506 0
+151 -735 0
+1560 1136 0
+-592 -1088 0
+-2695 296 0
+-1358 1937 0
+1856 58 0
+3328 -3407 0
+-249 2038 0
+52 -2555 0
+-459 1542 0
+1680 -594 0
+2918 3415 0
+-2768 -725 0
+-3183 -2825 0
+2574 2666 0
+-1644 -3222 0
+475 3307 0
+2466 1983 0
+478 1519 0
+-3466 671 0
+3284 -358 0
+2179 -2477 0
+-2414 575 0
+2845 -2252 0
+-2573 753 0
+3407 -2182 0
+1812 -280 0
+1633 -1011 0
+2347 882 0
+-1050 2277 0
+-1500 519 0
+-3149 663 0
+-1329 -258 0
+-650 1620 0
+-2640 -738 0
+2849 2188 0
+3116 2720 0
+2927 628 0
+-849 -1769 0
+418 -2718 0
+346 -2982 0
+1916 -3456 0
+3000 -1828 0
+2441 544 0
+84 -2722 0
+-1260 435 0
+997 2606 0
+-1135 3160 0
+1299 -2476 0
+-243 -769 0
+-3125 2091 0
+3112 -622 0
+-2397 2704 0
+3194 2266 0
+-1843 -2104 0
+-3194 958 0
+-906 706 0
+-2365 -890 0
+571 554 0
+2113 3376 0
+-1020 1167 0
+-2219 1403 0
+1302 -38 0
+1771 1987 0
+928 -324 0
+666 1781 0
+-692 1418 0
+-10 314 0
+-373 -1742 0
+-1412 -3153 0
+3151 208 0
+-685 -597 0
+1385 1405 0
+2133 -3286 0
+2020 -2129 0
+2496 -3059 0
+423 -1961 0
+945 -1047 0
+1303 -2016 0
+3448 99 0
+32 -3382 0
+1189 1488 0
+-870 -1739 0
+-2559 2734 0
+2598 1315 0
+2807 -636 0
+-115 2595 0
+-1763 1395 0
+698 458 0
+-943 1595 0
+-2062 1678 0
+-1130 -602 0
+2106 269 0
+-777 2021 0
+-55 954 0
+-309 112 0
+-124 -2892 0
+2515 2879 0
+820 2198 0
+-1968 -2176 0
+-1215 1985 0
+3349 -2883 0
+-1621 1720 0
+-2684 2936 0
+2401 374 0
+-3314 -2492 0
+-809 -2582 0
+-488 3350 0
+-202 -194 0
+-2340 3453 0
+3412 2389 0
+4 1903 0
+652 319 0
+2030 1098 0
+-500 2116 0
+-1437 -2691 0
+300 -1688 0
+-2459 -3099 0
+3313 1466 0
+312 -2220 0
+-2146 -1427 0
+1849 -14 0
+-2704 3337 0
+-594 -2278 0
+-1910 -32 0
+-2106 -3239 0
+1618 1735 0
+-1074 -2891 0
+2992 395 0
+-3342 -189 0
+2537 -3184 0
+2551 -523 0
+2427 -1829 0
+185 2951 0
+-2772 231 0
+-1639 -65 0
+439 -2471 0
+-867 2825 0
+2684 -3033 0
+971 2696 0
+611 -930 0
+-2591 2598 0
+-1566 -2207 0
+-2450 -835 0
+2730 -3169 0
+2464 3498 0
+-1502 -3383 0
+3086 2369 0
+-102 -991 0
+-179 -1054 0
+-2916 1448 0
+2032 -1253 0
+-2088 -1356 0
+3414 2699 0
+885 387 0
+-1659 -666 0
+2555 952 0
+1745 977 0
+-1766 3025 0
+1207 -1558 0
+1698 -845 0
+-768 -3027 0
+-2625 2122 0
+2669 2544 0
+-944 -956 0
+2000 -348 0
+857 562 0
+-649 -1858 0
+-1533 -458 0
+-2746 -451 0
+-3397 -2655 0
+1860 -789 0
+1693 -1992 0
+177 -457 0
+2212 3098 0
+3138 1707 0
+-657 -3470 0
+-2148 1773 0
+2994 1110 0
+-2625 656 0
+142 1009 0
+1487 -1352 0
+2484 -3058 0
+2404 -3292 0
+3428 -2963 0
+-183 620 0
+-2162 -1028 0
+-127 -2103 0
+831 -587 0
+-1077 -2515 0
+2888 2182 0
+3336 -1351 0
+1735 1840 0
+2049 1593 0
+688 -1997 0
+804 -1083 0
+211 452 0
+-108 1348 0
+1538 1286 0
+2003 1138 0
+3450 2155 0
+1935 -2708 0
+-2868 3436 0
+1804 -1806 0
+2688 -3301 0
+-1724 2290 0
+-1178 -1136 0
+2711 -3418 0
+1749 1158 0
+2320 -2806 0
+-1569 1859 0
+259 1886 0
+-2422 -2241 0
+2835 -408 0
+1105 192 0
+-316 2975 0
+2182 2248 0
+-997 2688 0
+794 2438 0
+1211 -498 0
+2511 -778 0
+268 2356 0
+2729 -1688 0
+-2656 -1608 0
+1794 -2338 0
+1907 1856 0
+2572 -252 0
+-1617 414 0
+3488 -2471 0
+2377 1629 0
+374 -1148 0
+-977 867 0
+3110 2060 0
+1230 -716 0
+-1208 584 0
+1718 -3451 0
+2188 -1961 0
+248 2668 0
+-3404 -151 0
+-3071 151 0
+721 697 0
+-2626 -2253 0
+-2380 3157 0
+332 -2302 0
+-2028 -83 0
+852 -2897 0
+3067 1637 0
+-564 -1817 0
+-498 -3236 0
+425 3455 0
+1323 3402 0
+-2719 -674 0
+-2967 22 0
+7 -1074 0
+-2466 2210 0
+-997 -814 0
+-3039 1117 0
+2536 -2768 0
+683 -2012 0
+1373 1147 0
+3441 1157 0
+587 -3020 0
+1441 2581 0
+-2255 432 0
+442 -1757 0
+-2619 -3336 0
+194 -3202 0
+1032 -2405 0
+2017 -920 0
+-2292 -2155 0
+-2169 2669 0
+-1128 2717 0
+-1147 1047 0
+-1998 -66 0
+-2729 257 0
+616 -1234 0
+2723 1735 0
+2592 -1745 0
+-1624 -2184 0
+513 -821 0
+2373 1926 0
+2749 -3061 0
+1759 2238 0
+2478 1506 0
+2124 -3214 0
+-129 -2476 0
+2372 1003 0
+-2559 1045 0
+-191 2300 0
+1461 -1417 0
+1677 2092 0
+126 2355 0
+3337 -3465 0
+27 1718 0
+99 -1783 0
+1044 588 0
+2296 673 0
+-1247 3475 0
+-2243 -78 0
+2163 1117 0
+1001 -1966 0
+21 3425 0
+2903 2777 0
+-1033 1680 0
+-2751 -84 0
+941 -3421 0
+-2124 -2051 0
+-2431 -2787 0
+748 -959 0
+1434 -889 0
+2589 1283 0
+-29 3450 0
+-1814 -3277 0
+92 -2437 0
+-3195 3003 0
+-654 -2058 0
+41 2170 0
+-398 2311 0
+3223 -3109 0
+-3056 2530 0
+-3092 624 0
+-2003 -1899 0
+-548 -323 0
+-190 2603 0
+1896 -1705 0
+-830 -1780 0
+-609 303 0
+-946 1533 0
+-1638 221 0
+1717 1838 0
+20 3465 0
+1041 440 0
+340 1730 0
+2659 1722 0
+-1398 -3430 0
+-1357 -2881 0
+-119 3134 0
+1720 -599 0
+-132 1949 0
+-3131 608 0
+1031 1139 0
+2346 -3456 0
+1385 -2586 0
+-1348 2235 0
+1567 3301 0
+3340 -1526 0
+962 1143 0
+-2361 562 0
+586 81 0
+1061 3174 0
+-3422 1686 0
+725 -2736 0
+2289 2078 0
+2936 -2099 0
+77 -990 0
+1491 2329 0
+-3252 -1507 0
+2446 -3257 0
+-3440 137 0
+-1863 -2956 0
+1909 -2780 0
+-1636 1742 0
+-1119 650 0
+782 1186 0
+1888 1345 0
+-373 3200 0
+2545 -976 0
+2709 1558 0
+-1964 -2463 0
+-2216 1812 0
+-3436 2444 0
+1939 -1251 0
+2821 1160 0
+197 -4 0
+696 -149 0
+1409 -1022 0
+2544 -3472 0
+-688 -1092 0
+744 1340 0
+-164 3009 0
+1685 -2676 0
+1528 1124 0
+-158 2128 0
+2977 -1438 0
+-3133 -3279 0
+3192 944 0
+906 -3119 0
+-1374 -552 0
+3296 -1441 0
+2406 46 0
+335 -629 0
+-1822 1832 0
+-3476 1775 0
+-2480 -103 0
+-1502 -953 0
+2348 -2433 0
+1232 -3466 0
+-2936 2700 0
+2183 -3081 0
+1895 -1958 0
+3021 1537 0
+2950 1885 0
+1361 326 0
+841 2351 0
+3131 -2209 0
+-2326 -2336 0
+-1237 -1513 0
+3329 1501 0
+202 1350 0
+1178 -603 0
+2571 2745 0
+-186 1984 0
+411 2382 0
+2101 245 0
+3134 -2969 0
+1727 2311 0
+507 1581 0
+-3395 721 0
+-3111 -2377 0
+1561 -3112 0
+1553 -1208 0
+-3211 -3491 0
+-3209 -2306 0
+429 -3363 0
+1277 2619 0
+-126 -136 0
+3306 3033 0
+-3372 -3338 0
+1138 -1577 0
+2497 192 0
+-1026 -139 0
+-113 -2389 0
+1445 -2561 0
+-1348 -1307 0
+1708 -2519 0
+3484 3002 0
+-3401 1968 0
+-2645 -1102 0
+1156 -1625 0
+1243 -2658 0
+-2021 758 0
+-915 -1021 0
+-2904 701 0
+-2396 508 0
+-1281 1194 0
+1135 -596 0
+37 59 0
+-2734 -467 0
+-935 -1122 0
+3290 971 0
+2182 -2081 0
+-1873 3373 0
+1564 79 0
+-3362 -1489 0
+2894 1178 0
+764 -3381 0
+2869 48 0
+-3145 1852 0
+2689 -2902 0
+-3020 715 0
+-341 282 0
+1467 101 0
+3317 2988 0
+2923 -2278 0
+371 1450 0
+-3343 -1841 0
+233 93 0
+-517 836 0
+-1600 1060 0
+-2887 427 0
+2438 -3283 0
+2783 -652 0
+-886 -3169 0
+1902 -3260 0
+2752 -1886 0
+659 -626 0
+338 -1824 0
+-2846 -2427 0
+2165 -144 0
+-770 1101 0
+2896 2385 0
+2278 3431 0
+-1996 1299 0
+-1038 -1412 0
+-110 1100 0
+1987 -1238 0
+2235 2099 0
+2176 1161 0
+467 -2868 0
+2188 775 0
+-1116 3338 0
+497 -29 0
+-985 61 0
+-1154 122 0
+2679 2893 0
+-1919 -2925 0
+-598 -1630 0
+-1592 3469 0
+977 1361 0
+1055 -2080 0
+-2517 -1510 0
+-3438 -58 0
+-351 469 0
+4 -1154 0
+-2185 3387 0
+1688 -2983 0
+3160 638 0
+-2232 2753 0
+-1357 1417 0
+2394 -410 0
+925 1514 0
+771 -1529 0
+1952 3231 0
+-1270 2804 0
+57 -1644 0
+2659 -35 0
+-1659 -1810 0
+2926 -3297 0
+3096 -1278 0
+478 3321 0
+722 -2568 0
+-2266 2921 0
+1813 -1110 0
+1961 -1487 0
+2596 -672 0
+2014 -2371 0
+1779 -1976 0
+2956 -1185 0
+-1349 2168 0
+-2124 -2436 0
+-2653 -1408 0
+-1189 -1233 0
+2690 -2305 0
+-2373 -2814 0
+1324 2907 0
+-3086 956 0
+-845 1049 0
+-1212 3405 0
+29 -1478 0
+707 1501 0
+-1114 -1100 0
+-1480 -637 0
+-1703 -82 0
+636 -2223 0
+660 949 0
+3255 -2236 0
+-2166 1001 0
+2923 2769 0
+2807 -522 0
+782 90 0
+1203 -272 0
+-1208 3320 0
+2265 -239 0
+1621 -1802 0
+2687 -3160 0
+-1805 2645 0
+-2796 -1898 0
+-826 -2562 0
+-2158 368 0
+-1828 1733 0
+-954 2611 0
+946 2862 0
+216 -2242 0
+-1449 -3131 0
+1053 -822 0
+-15 407 0
+-2718 -2038 0
+961 1638 0
+2242 -989 0
+-1662 -3320 0
+-2872 397 0
+3447 1564 0
+-1555 -2878 0
+2269 241 0
+-558 2533 0
+2548 3433 0
+1419 -977 0
+-1272 1458 0
+-2858 1462 0
+-1881 304 0
+1911 1503 0
+-2966 2166 0
+521 -1542 0
+-1868 -859 0
+2395 -2868 0
+-2633 808 0
+-2680 1295 0
+-1795 995 0
+-1279 -884 0
+741 -767 0
+-747 -831 0
+-282 2402 0
+-25 2841 0
+2594 -1146 0
+-2418 -2833 0
+-538 -917 0
+-2825 2561 0
+1349 1327 0
+2136 1210 0
+-346 1592 0
+1880 3026 0
+-1081 -2747 0
+-3112 711 0
+-2407 -1967 0
+3426 1796 0
+-854 3369 0
+-1779 -1905 0
+1189 -2495 0
+929 -542 0
+-2692 2008 0
+-1867 2454 0
+844 -2504 0
+-1946 -2043 0
+-422 2288 0
+-2988 -825 0
+689 244 0
+1839 -126 0
+-573 -3335 0
+1350 -3213 0
+-3208 -2963 0
+3015 -953 0
+-3416 2136 0
+433 80 0
+2779 2739 0
+1108 -2148 0
+1497 620 0
+-770 1541 0
+2548 2130 0
+2508 -1999 0
+-2823 1826 0
+-95 877 0
+2228 -491 0
+-2980 1516 0
+1121 -324 0
+2467 2367 0
+2867 -77 0
+579 796 0
+2710 3157 0
+1026 2178 0
+-649 -3088 0
+-1806 -1105 0
+3239 1316 0
+-3292 -220 0
+-1179 1031 0
+-2373 1660 0
+948 886 0
+1850 1726 0
+-2231 2626 0
+2417 -3463 0
+-1658 -861 0
+1461 607 0
+1378 -898 0
+3465 1832 0
+-373 2885 0
+2280 1220 0
+2423 -1547 0
+576 -3495 0
+2788 182 0
+1936 3389 0
+2427 64 0
+3344 3302 0
+-1112 2438 0
+-296 -902 0
+-502 558 0
+-458 3310 0
+-1408 -495 0
+-781 -3157 0
+1170 2097 0
+1615 -1229 0
+-1085 2617 0
+-322 -598 0
+2467 -1901 0
+1707 2671 0
+-1702 2958 0
+-49 2188 0
+-2335 -2232 0
+2683 3174 0
+-126 -1647 0
+2309 1271 0
+3399 -700 0
+1381 1220 0
+-3035 2063 0
+-3292 803 0
+1535 2574 0
+2994 984 0
+-1038 66 0
+1374 1121 0
+-1008 2878 0
+-1690 -1970 0
+-1274 -809 0
+-1282 -3191 0
+1145 -33 0
+-1012 257 0
+-147 -1896 0
+-1659 2793 0
+-1336 1554 0
+-2766 -751 0
+555 -1605 0
+-3170 1153 0
+-60 1453 0
+-2202 -3121 0
+-2032 -369 0
+1032 2856 0
+1830 1894 0
+-933 1636 0
+703 3324 0
+-1035 1187 0
+2161 2166 0
+-848 -3211 0
+3302 3069 0
+3240 3202 0
+-3335 2666 0
+739 2254 0
+-540 -1814 0
+-3052 2669 0
+-2140 2574 0
+-3121 2366 0
+-2364 256 0
+-858 -173 0
+1552 1459 0
+139 232 0
+-2289 2254 0
+1546 -53 0
+-2757 3172 0
+1411 1799 0
+-471 -2378 0
+2011 2021 0
+1889 -2353 0
+-191 -2706 0
+1129 820 0
+2882 2859 0
+3498 1015 0
+1068 -1682 0
+1368 -2866 0
+-3109 3441 0
+1365 -25 0
+-1377 -534 0
+689 1680 0
+2225 2208 0
+69 130 0
+2535 2673 0
+2371 280 0
+-3424 -3477 0
+2514 2842 0
+2731 2895 0
+1229 -3489 0
+-2112 2175 0
+-1919 3315 0
+617 -1355 0
+-1026 1467 0
+-1856 2237 0
+-1444 1259 0
+1454 -593 0
+1727 -2635 0
+-2778 -2519 0
+114 -2149 0
+1321 217 0
+-1638 3295 0
+-3126 -862 0
+109 -1742 0
+-2773 -744 0
+-2916 -1339 0
+-1188 -3390 0
+-2690 -2032 0
+-2042 -2857 0
+-431 -173 0
+-1182 1124 0
+-3154 2853 0
+-1700 3427 0
+-3475 -3308 0
+-1621 2464 0
+1735 1321 0
+3244 455 0
+-3328 -230 0
+1661 -2300 0
+719 241 0
+-1748 33 0
+-1431 -2885 0
+-3037 363 0
+2844 -1547 0
+-2360 -2760 0
+2629 -3197 0
+-843 2103 0
+148 478 0
+2510 -117 0
+-350 -3492 0
+-1349 1158 0
+2037 -3279 0
+1207 3085 0
+2028 -1124 0
+1278 931 0
+-2069 -3319 0
+-1919 1518 0
+-2937 -2155 0
+1864 -1478 0
+2517 1297 0
+294 557 0
+163 -1691 0
+1406 2864 0
+529 1052 0
+-2618 -1215 0
+-580 -2840 0
+-3181 -2843 0
+-2072 -2420 0
+1521 1187 0
+-1156 3122 0
+-1998 -2535 0
+-1667 1473 0
+2657 -2839 0
+2556 2178 0
+2995 -933 0
+2160 -433 0
+-2828 1862 0
+996 3044 0
+467 -2020 0
+2166 2919 0
+-2679 1057 0
+936 471 0
+-1255 1998 0
+1256 93 0
+-548 1067 0
+-3437 -1036 0
+2689 -2538 0
+-3047 -2675 0
+-714 -461 0
+3465 2081 0
+2335 -1132 0
+-3007 674 0
+-3179 1597 0
+-2350 19 0
+-2188 2892 0
+-1012 460 0
+2297 3375 0
+1852 3480 0
+2532 -777 0
+-2337 2092 0
+3189 -1630 0
+2821 -76 0
+-703 -3243 0
+1533 -3439 0
+1123 -2590 0
+-1768 161 0
+181 -2837 0
+2386 1031 0
+1617 613 0
+-808 -2446 0
+155 -3224 0
+-2391 2016 0
+2976 -2988 0
+174 -2043 0
+-584 -2870 0
+2808 1545 0
+-3060 -1862 0
+-2846 1877 0
+2996 -1187 0
+-1263 1899 0
+-807 -1981 0
+-1034 1333 0
+-1903 1088 0
+-1102 2135 0
+1289 1029 0
+1303 133 0
+1005 2684 0
+1022 -3005 0
+2469 -2809 0
+-2009 -1621 0
+-1343 1621 0
+-1839 3107 0
+751 260 0
+39 2852 0
+-1713 3310 0
+-3118 -1063 0
+799 2089 0
+1012 3218 0
+-2917 -1300 0
+-1594 881 0
+-1540 -899 0
+-1533 2622 0
+2285 2479 0
+1746 489 0
+412 1851 0
+2787 -279 0
+-2906 -3458 0
+-2484 3344 0
+1978 2103 0
+992 -3255 0
+-156 1679 0
+2274 944 0
+-1246 -610 0
+-863 2736 0
+-2465 -1268 0
+-31 -1972 0
+1853 2019 0
+-1798 2620 0
+-506 -353 0
+-2967 1966 0
+592 -1245 0
+-3462 -1722 0
+3173 -375 0
+-601 1711 0
+-2920 -1797 0
+2002 -3170 0
+1715 -1787 0
+1320 -1893 0
+2827 -3365 0
+-117 1715 0
+-1076 -2992 0
+-936 -628 0
+1431 1573 0
+3341 -2439 0
+1265 -2737 0
+-977 995 0
+767 -3091 0
+2446 672 0
+3395 1697 0
+-1365 -1185 0
+1249 -2727 0
+-499 2644 0
+-2390 848 0
+-3010 170 0
+2702 1160 0
+1066 1668 0
+1995 -1789 0
+-2188 2654 0
+-2230 -1024 0
+-45 -992 0
+2048 -2302 0
+182 1834 0
+2232 -1030 0
+-1324 757 0
+-2561 3177 0
+-2019 1184 0
+-710 -3477 0
+-2376 -3189 0
+2807 -2481 0
+-961 -2370 0
+306 -2988 0
+2597 1448 0
+2789 -2906 0
+3454 -2055 0
+-2797 1417 0
+-2999 -2595 0
+-3095 1793 0
+2389 -247 0
+562 824 0
+-3479 -1316 0
+-3395 575 0
+-1311 -511 0
+1161 2279 0
+3033 -2965 0
+-2949 -3183 0
+-1920 -1032 0
+3163 2140 0
+626 2409 0
+-676 369 0
+2112 2593 0
+-2807 432 0
+-2745 -1467 0
+-1152 530 0
+-1077 2052 0
+-3416 -381 0
+646 -1062 0
+2272 3307 0
+-2309 655 0
+271 -455 0
+-982 1707 0
+-3069 -1704 0
+297 -1385 0
+-946 753 0
+1055 -2913 0
+-3245 709 0
+1619 169 0
+-2450 1404 0
+2543 -2063 0
+1847 -2757 0
+-522 -2355 0
+-2407 3059 0
+1422 -3286 0
+1691 3220 0
+1858 -1698 0
+512 737 0
+-2712 1666 0
+-3066 3201 0
+-1564 1555 0
+-1663 431 0
+-84 -751 0
+-712 1584 0
+-360 3375 0
+2882 -426 0
+-3411 -3151 0
+-3013 3064 0
+1407 -1547 0
+-2231 -2653 0
+2195 -588 0
+-375 1975 0
+-1952 -1605 0
+-2461 -3427 0
+-621 -1847 0
+-2429 -1210 0
+-2528 -3403 0
+-1234 -72 0
+-2459 -2834 0
+2831 67 0
+-3157 2616 0
+-201 -988 0
+-2120 -954 0
+-745 1382 0
+-1419 1030 0
+340 -2581 0
+1762 -2132 0
+3223 -2374 0
+369 1496 0
+-533 -1390 0
+1818 -200 0
+1006 -2334 0
+-2867 1576 0
+965 -2505 0
+2571 -318 0
+-3334 1672 0
+682 772 0
+-2151 -366 0
+-1004 -3029 0
+2148 933 0
+-1726 1220 0
+3165 -1917 0
+1360 -1028 0
+-1426 -1395 0
+-2367 -3321 0
+828 1485 0
+-752 340 0
+-2876 913 0
+-280 -293 0
+2355 2180 0
+-944 -1407 0
+2407 -976 0
+1468 2291 0
+-982 -625 0
+1288 -1133 0
+2236 -1765 0
+676 -2460 0
+-767 -3244 0
+-847 579 0
+-452 -1028 0
+2350 713 0
+92 1565 0
+-2302 2043 0
+-1242 53 0
+2365 1448 0
+152 -1342 0
+2342 -753 0
+3473 1211 0
+1597 -2154 0
+3262 -3068 0
+-2916 3101 0
+1918 2575 0
+2167 -414 0
+1713 3317 0
+-175 -3347 0
+2348 -2470 0
+2981 -2133 0
+-1342 -1306 0
+-3310 1414 0
+-561 2509 0
+-1010 1545 0
+1178 -3276 0
+1930 1499 0
+-680 -1222 0
+-1591 -2903 0
+-1554 -189 0
+-1615 -3090 0
+2089 -1402 0
+-1521 2320 0
+808 550 0
+-1718 15 0
+-2516 2557 0
+-1091 38 0
+2667 -507 0
+-1828 2956 0
+2194 14 0
+-304 -2912 0
+-930 -348 0
+-2009 -1544 0
+-1599 1631 0
+2559 -1832 0
+-1894 2507 0
+-2434 638 0
+2820 1341 0
+-2985 734 0
+-714 -3061 0
+1442 -247 0
+-1705 2229 0
+-45 2489 0
+2899 2160 0
+3458 2959 0
+-3448 -2400 0
+1553 3346 0
+714 -1489 0
+-510 -1696 0
+113 2977 0
+-984 -2095 0
+3461 2215 0
+51 -2695 0
+2474 -2930 0
+1228 -2793 0
+-2181 -597 0
+2517 -1404 0
+2716 2786 0
+-2845 582 0
+2135 2723 0
+969 2182 0
+-13 -469 0
+-886 3181 0
+542 2256 0
+2569 2187 0
+-1039 -1983 0
+2852 3189 0
+-1860 -171 0
+-828 -2772 0
+464 2080 0
+-3000 -915 0
+-2038 -3100 0
+3329 -2890 0
+-3259 1251 0
+-437 596 0
+3349 -1626 0
+3119 -1517 0
+637 -1432 0
+-1857 -178 0
+-2017 1501 0
+-1563 -2713 0
+2264 -431 0
+-1402 1498 0
+-1793 1927 0
+-520 1494 0
+-40 1292 0
+-1771 -2292 0
+1246 2132 0
+1183 -629 0
+1807 2646 0
+-2086 958 0
+-266 1790 0
+-2828 -1942 0
+2707 -1264 0
+-1203 1264 0
+347 1756 0
+-1238 -1474 0
+-3445 2751 0
+1263 -2409 0
+3092 -2315 0
+-482 1787 0
+490 -665 0
+-3105 -639 0
+-1823 1480 0
+1280 -2604 0
+-73 3254 0
+-2063 -2864 0
+2861 574 0
+-2434 -3030 0
+-1910 1114 0
+-2123 -1466 0
+-647 6 0
+-2399 -3150 0
+964 -308 0
+1565 1181 0
+-1349 768 0
+-615 -3205 0
+-492 -539 0
+-2571 3060 0
+1451 -1644 0
+-2174 -2821 0
+696 2664 0
+-2799 -3186 0
+2099 930 0
+750 1738 0
+1453 -356 0
+781 -241 0
+-2981 -2580 0
+3176 -1292 0
+1529 -2631 0
+-800 -1475 0
+-2769 -2112 0
+3038 1260 0
+2626 -1513 0
+1531 2138 0
+136 -2665 0
+-3118 -183 0
+-912 -1973 0
+1629 -1110 0
+2350 916 0
+-71 2878 0
+-290 2603 0
+-2643 2831 0
+2457 -2590 0
+-2452 3219 0
+2086 1574 0
+1638 -1112 0
+2405 2375 0
+-701 -1672 0
+-2642 -2810 0
+-2015 -1062 0
+635 -3044 0
+-2925 -2949 0
+-954 1724 0
+-206 3078 0
+-1362 1586 0
+204 -3052 0
+532 -1129 0
+1001 17 0
+-2342 1222 0
+-2323 -3276 0
+-1692 2367 0
+-834 -1007 0
+-396 758 0
+-2350 -3443 0
+2670 1927 0
+-3261 1805 0
+-1503 369 0
+196 -102 0
+-1644 -284 0
+-912 1173 0
+-383 1906 0
+2238 2113 0
+-2920 1577 0
+2482 1283 0
+-2907 -810 0
+1796 1489 0
+-3380 -2416 0
+-3064 -2099 0
+-2018 -2677 0
+2353 -2163 0
+-1828 952 0
+120 1294 0
+-386 2628 0
+3015 2120 0
+-2389 186 0
+1124 1898 0
+-2789 -398 0
+2363 3413 0
+2799 1500 0
+-3099 -2444 0
+-1397 2166 0
+-2187 -307 0
+1822 3028 0
+-2777 -2587 0
+-2500 -206 0
+-2044 2053 0
+-983 760 0
+2847 566 0
+-1274 -1655 0
+-18 -1037 0
+-2453 -1284 0
+-1990 294 0
+3355 -2352 0
+618 3241 0
+-957 2182 0
+203 1046 0
+-1980 -1436 0
+-1162 336 0
+3036 1844 0
+-1990 -2515 0
+-2637 244 0
+-2270 1355 0
+484 -29 0
+-2784 -2162 0
+-275 -3261 0
+2569 1552 0
+-1715 131 0
+2032 2049 0
+510 923 0
+2276 2505 0
+-2314 3445 0
+108 -2861 0
+-2203 1819 0
+2716 3376 0
+3265 -1134 0
+-2651 -2965 0
+1974 -2439 0
+2664 8 0
+476 3074 0
+-2058 -965 0
+1555 -2031 0
+2653 -1700 0
+-1913 -714 0
+-2515 -723 0
+565 1737 0
+-1104 1206 0
+1696 -2162 0
+3213 -1012 0
+2410 -2038 0
+-1450 480 0
+3070 926 0
+1371 3073 0
+1310 -1665 0
+-3053 494 0
+148 -1501 0
+2282 -1129 0
+2055 -2754 0
+3403 -3367 0
+-926 -1557 0
+2442 733 0
+2438 2666 0
+-1766 3239 0
+2314 1775 0
+251 -2285 0
+2568 -2310 0
+1271 1942 0
+-2969 994 0
+-1127 -2162 0
+-623 -2055 0
+985 802 0
+-3031 -893 0
+-1979 2086 0
+-1216 16 0
+3071 1183 0
+1956 -950 0
+-402 -3146 0
+938 -3412 0
+3492 -1721 0
+-3289 2803 0
+-2290 2813 0
+2284 -2491 0
+1287 -894 0
+2349 2823 0
+-1455 274 0
+-668 816 0
+897 182 0
+1649 -2452 0
+-874 444 0
+-1093 -1511 0
+-3108 -2121 0
+748 -1207 0
+412 -1096 0
+1664 -1740 0
+948 -3246 0
+-1406 -3036 0
+462 1936 0
+-2913 434 0
+2351 976 0
+-498 1802 0
+162 1990 0
+1309 886 0
+-2150 -1353 0
+2829 -2335 0
+867 1345 0
+716 2799 0
+833 -2665 0
+2456 2241 0
+363 -943 0
+-959 -428 0
+-2460 -3164 0
+-2669 1579 0
+-2769 314 0
+1202 -3051 0
+3386 -3365 0
+3182 -1460 0
+-2835 -1716 0
+-730 -3402 0
+424 1478 0
+-1564 3126 0
+2481 -816 0
+3051 -2217 0
+2582 1779 0
+-686 -2307 0
+-2140 -313 0
+2666 2559 0
+-3279 2680 0
+94 2174 0
+-2245 -2756 0
+-3357 -1233 0
+-54 1201 0
+2750 -759 0
+-529 -759 0
+1286 -2783 0
+355 -2407 0
+768 -3022 0
+571 -1309 0
+250 2864 0
+2054 1042 0
+-572 -2693 0
+-2873 -795 0
+3269 -1723 0
+2039 571 0
+-1710 2320 0
+-2370 2707 0
+-2669 -2922 0
+-2635 2525 0
+2263 -806 0
+1668 -2294 0
+1677 1559 0
+-1145 -3022 0
+2221 1635 0
+1969 208 0
+-2911 -2360 0
+-92 1751 0
+3101 -490 0
+657 -2704 0
+3299 -2548 0
+2891 298 0
+-411 -2700 0
+2772 16 0
+2537 -727 0
+260 -1483 0
+1533 1129 0
+1256 -1021 0
+-1095 1997 0
+2139 2096 0
+726 1428 0
+703 2179 0
+-319 2368 0
+1881 -438 0
+-2324 2102 0
+-1899 1133 0
+3192 -3478 0
+1923 879 0
+-3368 2645 0
+-248 -310 0
+729 -1144 0
+-3029 2523 0
+3147 1931 0
+-746 -1038 0
+2692 2267 0
+3088 263 0
+1950 26 0
+-731 2764 0
+3013 -568 0
+1988 894 0
+-714 -3180 0
+2387 1897 0
+-1733 2694 0
+308 -775 0
+2363 956 0
+1135 1053 0
+-627 3189 0
+1210 749 0
+3406 -3383 0
+1146 372 0
+-2443 699 0
+2521 1508 0
+-2273 -977 0
+-2683 -556 0
+150 2424 0
+826 -3282 0
+-102 -3025 0
+1444 626 0
+2961 -3136 0
+-2797 -3365 0
+-108 1478 0
+-2871 -2600 0
+-2276 -879 0
+-1196 -334 0
+-326 2544 0
+3254 2155 0
+993 1196 0
+2934 -1859 0
+1902 -2331 0
+-1869 -793 0
+2954 -246 0
+-2333 1945 0
+-437 -927 0
+658 -2905 0
+-1372 -1939 0
+1661 346 0
+134 1336 0
+-608 2647 0
+-301 -709 0
+-3472 -1792 0
+143 598 0
+2300 2450 0
+-604 976 0
+1186 2328 0
+-499 3321 0
+2292 1166 0
+-1859 1726 0
+1029 2238 0
+-2736 -1971 0
+2839 1707 0
+-1807 -2206 0
+505 811 0
+-1196 -2109 0
+-3099 -2580 0
+1649 3288 0
+823 349 0
+-1361 1594 0
+-3238 -640 0
+2483 1037 0
+-379 -489 0
+-2480 1562 0
+2372 -35 0
+-1447 -3198 0
+1848 2328 0
+-2364 -406 0
+222 -146 0
+391 2190 0
+3030 2343 0
+-1776 586 0
+1046 1167 0
+443 1263 0
+-910 -1998 0
+512 1875 0
+-3448 3437 0
+3203 -1107 0
+-1305 1240 0
+-353 227 0
+-2446 391 0
+-2257 1679 0
+1743 2941 0
+2579 2988 0
+-3336 2865 0
+1550 -2269 0
+421 -2434 0
+-1834 2172 0
+-553 169 0
+716 -2477 0
+2024 1213 0
+-3232 -129 0
+124 -2605 0
+-3465 -1028 0
+1382 -1158 0
+2622 495 0
+-2393 2485 0
+2511 -2066 0
+3378 2135 0
+-479 -2677 0
+-1756 -2276 0
+3155 -2105 0
+-3265 752 0
+3092 2062 0
+1910 -1591 0
+-2507 -1954 0
+3435 1993 0
+-2852 -1015 0
+-2950 2827 0
+-3093 140 0
+1193 -1744 0
+2138 -2768 0
+-1350 1468 0
+-1014 -2740 0
+-509 1361 0
+2402 967 0
+2165 955 0
+-1724 1115 0
+1986 -200 0
+3162 1170 0
+325 -1369 0
+2558 2287 0
+-1841 -2926 0
+-2523 2593 0
+-686 2945 0
+-1142 -1825 0
+3417 250 0
+1492 -590 0
+-557 3155 0
+2566 -2681 0
+2089 1649 0
+2499 2300 0
+-789 -2093 0
+2303 -1557 0
+2442 -1797 0
+3226 2250 0
+-845 -3397 0
+-345 -817 0
+1183 46 0
+3207 3364 0
+588 -2426 0
+-2374 -1609 0
+2289 -1749 0
+2291 2297 0
+-2402 -3046 0
+1270 1680 0
+-2827 -2632 0
+569 -3029 0
+-952 -546 0
+-2435 1140 0
+-2060 3237 0
+-3386 -486 0
+726 -1532 0
+-392 -946 0
+1436 2252 0
+-2573 -3160 0
+-233 -3349 0
+2360 -391 0
+376 -1769 0
+2161 2547 0
+-2285 1381 0
+-290 -2395 0
+-2405 -229 0
+2927 -1502 0
+93 2328 0
+-2337 -3371 0
+-2846 2973 0
+-394 -893 0
+2598 1854 0
+-1101 1113 0
+1896 -1483 0
+1228 982 0
+-833 -273 0
+2527 -2381 0
+-1783 3379 0
+-372 1354 0
+3046 2357 0
+457 651 0
+1310 -174 0
+1617 358 0
+-964 -2118 0
+774 1863 0
+-2852 -1234 0
+-2514 2693 0
+2295 -2705 0
+-1519 1602 0
+-1989 -1866 0
+2930 -2554 0
+-2855 -383 0
+2171 -2685 0
+487 1245 0
+3005 1558 0
+1987 1051 0
+-617 2835 0
+927 -2710 0
+-3424 -749 0
+-2935 2906 0
+3376 -3127 0
+-2508 -3362 0
+-1309 313 0
+2181 -3301 0
+-515 -1902 0
+-335 -1798 0
+2875 -3037 0
+177 -414 0
+-1032 414 0
+912 2052 0
+1694 2016 0
+227 3172 0
+-952 2182 0
+2684 -1545 0
+-3025 867 0
+23 3253 0
+1322 1094 0
+-441 -953 0
+2010 2508 0
+1285 2976 0
+-252 -23 0
+-2137 1494 0
+-2648 1361 0
+142 224 0
+-1279 -196 0
+962 353 0
+-617 -1707 0
+1540 638 0
+2841 -1227 0
+-2226 3137 0
+1581 -544 0
+2111 -3185 0
+2084 1608 0
+-1029 -2517 0
+1321 47 0
+1907 -1150 0
+-1343 -2723 0
+-1597 -1443 0
+-3357 1400 0
+-2753 -1856 0
+-965 882 0
+-1923 -138 0
+622 -2602 0
+868 275 0
+2628 2279 0
+-1857 402 0
+-2207 -180 0
+-2886 -2794 0
+1997 -2343 0
+74 -161 0
+2665 -3224 0
+-3014 -2243 0
+-2995 2865 0
+1242 3064 0
+-1568 -1407 0
+-1778 1303 0
+876 -694 0
+2626 -1644 0
+116 1822 0
+-1365 -1770 0
+-1586 2211 0
+-901 2776 0
+-1518 -3421 0
+1382 69 0
+-1368 -3206 0
+-1616 -2283 0
+2716 -1361 0
+1169 1439 0
+-765 -2081 0
+1923 633 0
+-2038 3235 0
+-1775 2177 0
+-565 -135 0
+-3230 -413 0
+-3021 3025 0
+1403 3442 0
+-1112 -332 0
+-3379 -2974 0
+-1516 1837 0
+-2511 -2933 0
+-2394 1757 0
+-1983 -1069 0
+-441 -2191 0
+-1557 510 0
+655 2203 0
+1805 -2451 0
+-884 -3111 0
+1299 -2970 0
+-2109 2315 0
+3395 2093 0
+-477 2179 0
+2916 -1202 0
+-30 604 0
+-1580 -1654 0
+-341 2358 0
+-307 1831 0
+-3054 -3006 0
+529 3284 0
+2382 3038 0
+1152 -1868 0
+643 -3015 0
+-2026 -1186 0
+-2433 -505 0
+1871 1654 0
+2980 -873 0
+-2758 -1014 0
+2619 3436 0
+1291 1451 0
+-775 -656 0
+2134 1665 0
+-1885 -304 0
+1004 -1681 0
+-3116 492 0
+-3210 -512 0
+-2058 2599 0
+-2251 -1782 0
+1514 2324 0
+779 -1213 0
+-2657 2920 0
+3474 643 0
+-153 1962 0
+2640 -2190 0
+-2921 1045 0
+-1837 1195 0
+-1764 3498 0
+506 1706 0
+2726 3322 0
+2224 -2289 0
+-1599 -2238 0
+-3224 -1936 0
+-2215 815 0
+2307 -402 0
+2027 3113 0
+-1608 -2195 0
+-2443 -33 0
+2481 -42 0
+3072 -1318 0
+-3207 1938 0
+2734 2472 0
+-1261 2111 0
+-3272 2320 0
+-3041 -2213 0
+3030 -3149 0
+-1067 2589 0
+-1970 -3432 0
+-160 -97 0
+-1122 934 0
+-1941 2170 0
+1268 -3091 0
+-2004 -2791 0
+-549 -44 0
+-2129 2253 0
+3039 -2274 0
+-555 -2592 0
+-1439 -559 0
+-3071 1592 0
+218 -1646 0
+2986 254 0
+3375 1650 0
+-2930 2602 0
+2587 2168 0
+-246 1318 0
+-1285 -1564 0
+1103 1693 0
+-837 41 0
+-774 -356 0
+-592 2652 0
+2408 2490 0
+-3129 1136 0
+2417 -1559 0
+-828 -1057 0
+2776 3251 0
+2588 434 0
+86 510 0
+2795 -699 0
+-1415 -3196 0
+846 -918 0
+-3284 -3463 0
+2099 -2543 0
+-269 -1487 0
+-2084 2717 0
+2709 2847 0
+2888 205 0
+-3233 1846 0
+733 340 0
+-1740 -1128 0
+-1322 1712 0
+-2463 -946 0
+-1618 -3216 0
+-3389 -2830 0
+2607 -78 0
+-2935 2918 0
+1187 -684 0
+61 3264 0
+1981 -2973 0
+1174 -1991 0
+-580 -117 0
+-768 3244 0
+2481 -2214 0
+1744 2083 0
+1389 -2357 0
+1078 2831 0
+96 -502 0
+2721 -560 0
+698 268 0
+-123 -1340 0
+-3331 -1020 0
+1686 -1005 0
+-2369 1023 0
+-1981 3003 0
+2657 -3345 0
+2496 -1677 0
+-1081 1159 0
+-1954 308 0
+-2553 -3360 0
+-929 -312 0
+724 -3242 0
+1688 -1281 0
+-2750 2721 0
+1530 -1439 0
+-2841 315 0
+1597 -3080 0
+-1949 -1387 0
+-302 2675 0
+-3033 230 0
+-1661 2064 0
+2636 -2656 0
+2182 3275 0
+3192 -2817 0
+711 -1937 0
+-1834 2036 0
+-1522 -3161 0
+126 2274 0
+1401 2697 0
+2123 -1201 0
+-2447 -2326 0
+-1064 3426 0
+537 -932 0
+1685 -1006 0
+-678 760 0
+-557 2591 0
+371 2494 0
+140 -3297 0
+-1168 -1224 0
+264 505 0
+-3011 -3171 0
+904 901 0
+1342 2385 0
+1194 356 0
+3262 -558 0
+-3043 2488 0
+-2476 -2941 0
+-1359 39 0
+-1381 -2064 0
+-384 366 0
+1125 124 0
+725 -384 0
+3329 -388 0
+1296 -81 0
+-3086 -3010 0
+-2966 1814 0
+-2756 3131 0
+-3342 1365 0
+2746 -3286 0
+-1968 -457 0
+1110 1167 0
+219 2676 0
+-769 749 0
+-1733 1080 0
+2939 628 0
+-706 246 0
+-3481 3422 0
+200 245 0
+1222 215 0
+2659 1244 0
+1575 -161 0
+1054 -795 0
+-1951 3272 0
+3415 2609 0
+49 -1844 0
+2907 1557 0
+3500 -2068 0
+1161 2586 0
+1804 -2542 0
+-486 -3350 0
+1258 -1594 0
+-3139 -1067 0
+3231 -3434 0
+1498 -3265 0
+-3262 657 0
+1644 158 0
+2487 -2805 0
+2535 1909 0
+-2275 1464 0
+704 1599 0
+-1940 3072 0
+3024 -1435 0
+1168 -208 0
+1832 2758 0
+3065 291 0
+-1216 2391 0
+-2202 -1902 0
+-2884 3340 0
+-1533 1260 0
+2247 -342 0
+1286 2725 0
+-915 -436 0
+545 2578 0
+-2926 1749 0
+-1823 -1033 0
+150 -2529 0
+284 -2738 0
+2984 2445 0
+128 386 0
+-153 1521 0
+1547 2456 0
+-2067 -2600 0
+-854 1595 0
+-1006 -2686 0
+912 319 0
+1502 1164 0
+-933 -2672 0
+2369 -1782 0
+1291 1388 0
+1441 -246 0
+620 -3298 0
+2464 -2913 0
+-906 271 0
+-2495 537 0
+2982 1013 0
+401 -2267 0
+-30 1549 0
+641 265 0
+-135 2884 0
+-2544 -2474 0
+2028 2356 0
+-677 951 0
+-2601 2010 0
+1257 -1194 0
+930 2757 0
+-1037 2829 0
+-3082 269 0
+1009 2075 0
+-1985 560 0
+323 2821 0
+3473 2425 0
+2105 2515 0
+-2860 1104 0
+-1292 1567 0
+2645 2999 0
+1078 -3191 0
+2503 -2224 0
+1760 -2248 0
+-2874 -2961 0
+1290 1013 0
+-247 -1045 0
+2549 -2411 0
+948 -1848 0
+-3482 -1587 0
+1788 -1808 0
+-1855 -1780 0
+-1727 -2707 0
+-3217 -165 0
+2335 -1500 0
+322 3076 0
+-2319 -3294 0
+2960 -1284 0
+1691 1295 0
+146 -1274 0
+-815 1387 0
+698 -494 0
+2761 915 0
+-2403 -850 0
+-1913 22 0
+2023 -2620 0
+-896 -260 0
+-3489 2913 0
+2013 -1334 0
+2351 2243 0
+-320 -1192 0
+146 -445 0
+-2685 -3430 0
+-1772 -1421 0
+2964 209 0
+3214 -255 0
+-421 936 0
+-3416 882 0
+2835 2959 0
+615 -1538 0
+-370 -1007 0
+-517 1308 0
+-608 -2932 0
+-1137 2047 0
+-1276 827 0
+2660 1427 0
+282 1474 0
+788 696 0
+979 -3298 0
+-630 -1475 0
+2621 1558 0
+-593 -1813 0
+-3086 3059 0
+-848 739 0
+1871 2026 0
+1724 -315 0
+-923 698 0
+1218 -2790 0
+3079 -595 0
+-951 -2040 0
+1548 2781 0
+-2585 -25 0
+2233 113 0
+-1272 3158 0
+540 247 0
+2528 2095 0
+382 -2279 0
+-1598 1868 0
+-2417 -2040 0
+1168 -2456 0
+-615 356 0
+-2995 580 0
+369 -1790 0
+361 1503 0
+3074 -2075 0
+-1100 -816 0
+1590 1517 0
+-1420 -2658 0
+-3040 -421 0
+-3028 -2568 0
+-1826 2793 0
+-1242 2929 0
+1077 -1987 0
+-1945 2192 0
+-2157 -2792 0
+-681 2112 0
+1464 -2755 0
+-31 888 0
+-2680 543 0
+-976 1238 0
+1474 729 0
+-2526 3452 0
+-3129 1259 0
+1194 -531 0
+-2402 -148 0
+1607 -789 0
+-1215 1208 0
+1302 -744 0
+-2169 -2693 0
+-892 -2376 0
+1888 -831 0
+-5 2237 0
+1145 1339 0
+3419 39 0
+-3458 3325 0
+192 -535 0
+2040 54 0
+-2371 -3452 0
+-2565 338 0
+-2142 -1476 0
+-1459 2539 0
+-1440 -2512 0
+-324 -2657 0
+-2904 -2875 0
+2918 -875 0
+-1858 2546 0
+-1608 3492 0
+-1958 -37 0
+-780 1295 0
+-1652 117 0
+-2643 2490 0
+-2465 -3490 0
+-1292 171 0
+-1690 572 0
+2100 47 0
+-2030 474 0
+2658 -1529 0
+2075 -2785 0
+-919 -3263 0
+138 1767 0
+616 1078 0
+-1153 2103 0
+-2212 -309 0
+2232 -50 0
+2552 -2200 0
+-3224 2343 0
+-3258 -527 0
+-1858 1323 0
+-729 1278 0
+-550 1634 0
+-2029 -3 0
+-2726 2150 0
+1631 2903 0
+2333 1998 0
+-352 1985 0
+1316 -1182 0
+-2208 427 0
+2340 -2019 0
+502 1629 0
+2074 -1504 0
+1128 -1559 0
+2651 2051 0
+2580 -1711 0
+-341 2441 0
+1853 -1806 0
+-1427 -1561 0
+2345 -1655 0
+3469 1123 0
+563 1057 0
+-2738 2716 0
+-141 2213 0
+319 -3030 0
+-519 2863 0
+-1660 373 0
+613 1423 0
+1685 1678 0
+-1727 -1962 0
+-2341 2781 0
+2103 -2963 0
+-2645 1092 0
+-328 -1609 0
+-1377 -2492 0
+-509 2571 0
+2959 941 0
+3482 2150 0
+579 1303 0
+-2923 -1602 0
+-3258 -1732 0
+3146 2073 0
+1822 3012 0
+1478 -1024 0
+-2831 2122 0
+-1367 -1634 0
+-2201 -1125 0
+201 -190 0
+1918 44 0
+-1761 -2586 0
+-3179 -2413 0
+-681 -2092 0
+1901 2822 0
+1484 1711 0
+391 -1807 0
+-2062 550 0
+418 -2044 0
+-2708 -2261 0
+-3227 43 0
+1110 -417 0
+-2848 -2777 0
+-694 1016 0
+324 1676 0
+1319 -2865 0
+-2817 414 0
+2537 912 0
+-347 2670 0
+3089 966 0
+-2825 3269 0
+1229 -1103 0
+107 437 0
+1502 -3162 0
+1209 -2843 0
+2749 2507 0
+1209 1051 0
+-1263 3234 0
+2258 606 0
+-287 -1539 0
+985 1819 0
+-1776 -3304 0
+1555 -3228 0
+2901 -399 0
+-411 -1407 0
+3465 2261 0
+-642 2209 0
+-1073 1321 0
+-2221 1044 0
+-1119 -3481 0
+3494 -3476 0
+1943 4 0
+-1823 527 0
+2550 -510 0
+2154 -619 0
+2964 -1784 0
+-1578 -2181 0
+174 -1869 0
+-1869 3062 0
+2218 2666 0
+-975 2328 0
+-2480 3216 0
+2054 -859 0
+-2275 3202 0
+-1969 -3048 0
+545 2309 0
+-3261 2725 0
+1435 -2518 0
+-1582 2434 0
+682 -1694 0
+-2485 -753 0
+-1694 -1611 0
+2338 2303 0
+2575 -1795 0
+2981 -813 0
+2910 -3325 0
+1176 1553 0
+-908 -1093 0
+2298 -1151 0
+-2301 -653 0
+421 520 0
+-566 1830 0
+-3335 -961 0
+-2474 235 0
+-3043 2006 0
+1532 343 0
+-1444 -820 0
+-756 -1382 0
+-927 671 0
+-717 -1538 0
+-1644 -3294 0
+3283 765 0
+1815 -3276 0
+-2369 -175 0
+-1612 557 0
+2467 43 0
+-340 -1385 0
+3214 1607 0
+1921 -1973 0
+1428 -1029 0
+-2009 3088 0
+-923 1189 0
+757 -1402 0
+183 -3116 0
+-2157 -1578 0
+423 3228 0
+1084 546 0
+-938 -2253 0
+-2378 -323 0
+-1602 -2334 0
+3257 2082 0
+-1679 -461 0
+2698 -2207 0
+-1723 -1962 0
+-134 -1818 0
+-582 517 0
+2410 -2759 0
+-2351 -2870 0
+-1828 -2046 0
+3149 -342 0
+1046 -1965 0
+982 2075 0
+-2934 -2187 0
+963 -2974 0
+-43 384 0
+-325 -1000 0
+1204 2158 0
+2052 -3197 0
+1548 -2366 0
+2088 145 0
+-1333 1536 0
+1535 2167 0
+3242 471 0
+2303 2217 0
+1016 858 0
+3375 -2665 0
+2216 -452 0
+2470 2325 0
+2927 2598 0
+1370 -2539 0
+314 1176 0
+-980 -2622 0
+-768 -1563 0
+-534 -2064 0
+-2257 -52 0
+-3111 1529 0
+-2737 -3499 0
+-1890 1716 0
+2046 1319 0
+2785 1520 0
+-420 693 0
+310 -203 0
+-1771 293 0
+2631 -419 0
+2447 -2473 0
+2955 -3040 0
+-80 -1025 0
+-1300 -2916 0
+-2127 2673 0
+-2865 1503 0
+-3130 2517 0
+116 -627 0
+-3353 3400 0
+-287 807 0
+-298 3230 0
+-876 3317 0
+2753 -1939 0
+-1865 3252 0
+-1736 -254 0
+1704 914 0
+-479 862 0
+252 -1131 0
+3500 2147 0
+5 378 0
+-953 1375 0
+-2258 811 0
+3395 2344 0
+-1945 3154 0
+-570 -3188 0
+-2184 -1370 0
+-1678 -3058 0
+-1980 -941 0
+2251 -2249 0
+-3443 1501 0
+625 -1435 0
+-101 1492 0
+1604 1491 0
+-1997 -2470 0
+-2877 -1858 0
+1962 -789 0
+-1614 1721 0
+2598 -1393 0
+-65 2290 0
+416 -836 0
+1460 2307 0
+-1687 131 0
+3304 -2420 0
+-1287 -2478 0
+2745 956 0
+-420 -1564 0
+-1676 650 0
+634 -611 0
+-311 -2050 0
+-694 3060 0
+-668 -2262 0
+-1687 1354 0
+-1938 2773 0
+-1158 2842 0
+-1189 -1425 0
+-1476 416 0
+-1453 283 0
+-1145 -2642 0
+1822 -266 0
+-2643 939 0
+428 3438 0
+1048 918 0
+2771 559 0
+-878 2533 0
+3439 -976 0
+-2658 2895 0
+1521 986 0
+1280 1743 0
+2136 3293 0
+960 -1918 0
+3054 976 0
+-3450 2762 0
+2822 -971 0
+-355 2958 0
+27 2539 0
+2367 -3015 0
+-2462 -684 0
+-18 150 0
+1578 -3 0
+1132 -1415 0
+-3001 -2433 0
+-2752 -1731 0
+-2333 -584 0
+-1550 -2201 0
+-2906 431 0
+-1986 2495 0
+-1705 -1590 0
+-1761 -3290 0
+1891 -1117 0
+-611 419 0
+116 -642 0
+1101 2177 0
+-2226 3429 0
+-3188 -774 0
+1420 -728 0
+1869 942 0
+2738 -1400 0
+-1406 -2792 0
+-2821 -3187 0
+2776 928 0
+971 -2212 0
+3280 2049 0
+-1850 880 0
+-3293 476 0
+-380 2380 0
+-193 3306 0
+-1605 -3435 0
+-1356 -2381 0
+-1719 -2984 0
+578 -2699 0
+-809 -2645 0
+-1900 3132 0
+1494 -564 0
+182 1200 0
+-3362 -2666 0
+-1997 44 0
+2639 -1714 0
+-1059 -2144 0
+990 2469 0
+-907 1668 0
+-612 587 0
+-2600 2580 0
+2921 -178 0
+-3292 1632 0
+-3248 -2147 0
+758 2674 0
+-2078 -1136 0
+-244 -1885 0
+-1534 -1649 0
+757 3094 0
+2473 1594 0
+3493 1193 0
+-3072 547 0
+-629 -2075 0
+-1364 -2191 0
+-2514 -2462 0
+-3047 1180 0
+-1337 481 0
+-545 2572 0
+1800 277 0
+-104 -1699 0
+-544 -3440 0
+3485 -14 0
+2705 3045 0
+3084 2554 0
+1498 1230 0
+1608 2579 0
+566 1278 0
+-180 -1403 0
+3250 2630 0
+3472 2232 0
+-1618 -1427 0
+2500 2122 0
+15 -2539 0
+152 -1529 0
+-974 -1388 0
+2282 1876 0
+-632 -1766 0
+-148 -3279 0
+2273 -2967 0
+1686 1770 0
+-1440 3322 0
+2426 -2309 0
+656 1053 0
+2986 -1470 0
+433 -720 0
+231 -2347 0
+-1703 -276 0
+-3402 -1587 0
+-2853 -2933 0
+-2758 -1678 0
+1938 -2851 0
+-2158 1540 0
+-555 3172 0
+-2757 -3289 0
+-331 846 0
+2109 1574 0
+-341 3240 0
+-2747 -3012 0
+647 -2607 0
+3183 1895 0
+2906 1023 0
+-84 -3120 0
+876 647 0
+-2899 -946 0
+-3225 -2837 0
+2102 -155 0
+1210 -2053 0
+3409 1129 0
+-2014 -1475 0
+-2963 2512 0
+1561 3322 0
+1878 697 0
+-1451 -574 0
+2381 -2801 0
+3490 -982 0
+-1802 -2712 0
+-761 2413 0
+1781 -561 0
+1082 799 -1149 0
+-1062 -1529 2652 0
+2363 500 3306 0
+2250 -91 1922 0
+2147 1075 -2259 0
+-268 -2018 2800 0
+-2562 -2265 1995 0
+999 3369 -3209 0
+-2979 1282 -3420 0
+-422 538 2493 0
+3131 -2637 326 0
+1314 2297 -3477 0
+1496 -1649 -2473 0
+-1039 3316 1521 0
+-2025 1801 -3438 0
+-1859 -52 -1217 0
+-2931 3263 2609 0
+2518 -714 1969 0
+-2024 1639 1828 0
+1574 -1601 -2914 0
+-666 1107 2267 0
+1095 1354 3424 0
+-596 1067 -3108 0
+-997 2541 3470 0
+-2295 1220 1417 0
+1934 -1906 2801 0
+1864 2368 1252 0
+-179 -1232 -3158 0
+780 2470 3290 0
+689 -483 -2479 0
+2542 -482 -452 0
+-1619 177 2032 0
+2777 -3275 3456 0
+-1348 86 556 0
+-2757 1958 3153 0
+1639 1848 3142 0
+-1903 -1115 1746 0
+7 1857 -1532 0
+2713 2548 -3197 0
+-2673 848 -2193 0
+-2067 -2696 -2452 0
+-2714 97 2934 0
+3475 -2865 -2721 0
+144 275 1231 0
+2296 2425 -1534 0
+144 -1449 -515 0
+1676 -1256 57 0
+-114 -128 -1862 0
+-374 -1281 -1198 0
+-619 -2915 -3136 0
+661 1049 -2618 0
+-2510 1292 2564 0
+953 -1379 2156 0
+429 1747 3177 0
+-721 -2937 3339 0
+1084 2352 -2608 0
+-196 2262 1881 0
+2836 503 414 0
+455 -1688 2552 0
+-1645 -1660 -3408 0
+-155 1997 -3125 0
+-475 -2721 1308 0
+562 435 1356 0
+223 -1691 512 0
+3275 514 3238 0
+-2933 1414 -2399 0
+-2533 -858 2110 0
+2854 -2808 236 0
+-637 2474 -2369 0
+-3068 1641 -78 0
+504 1271 -939 0
+-2955 3042 -1724 0
+-2478 822 866 0
+-2448 1516 329 0
+906 2528 -3479 0
+-425 -2115 2400 0
+-1864 -3024 -2167 0
+-3056 2326 2928 0
+-1435 1194 -3296 0
+3336 -1419 -3246 0
+1469 1879 -1865 0
+-3136 -2632 1634 0
+-408 2442 -1567 0
+-2424 -244 2452 0
+-1640 -739 -1151 0
+955 655 2702 0
+111 -2748 -1497 0
+-541 -2070 -1137 0
+-1350 3138 -178 0
+-1631 -877 1374 0
+-2854 1146 -1661 0
+2528 -2684 1015 0
+-2656 -2585 1036 0
+1361 281 479 0
+-3088 -2275 -979 0
+-2491 -2476 340 0
+482 2409 -1142 0
+346 1477 -1522 0
+-3150 1398 381 0
+389 -485 433 0
+2811 1795 -3058 0
+2424 -1502 3205 0
+1254 -2941 -2979 0
+-1743 -346 -2559 0
+1516 695 2110 0
+-3464 550 -3207 0
+-394 147 -3462 0
+-1039 -3400 -447 0
+1442 2007 -1830 0
+2514 512 -1846 0
+835 542 -68 0
+-1491 2379 2356 0
+1488 56 373 0
+766 2692 102 0
+337 -866 2323 0
+-3469 -1020 -1042 0
+-758 -1548 670 0
+1977 -297 45 0
+2535 -2484 83 0
+2747 1700 -1267 0
+-2822 180 -1745 0
+-1429 255 2139 0
+3380 -3081 -2647 0
+846 -436 3407 0
+-2416 937 -2764 0
+-1138 -3439 -2428 0
+2539 686 3333 0
+217 -3439 -3388 0
+-2923 767 -564 0
+377 3326 93 0
+16 1176 2548 0
+-1637 -459 879 0
+-1647 3 -892 0
+671 -624 -173 0
+-2110 665 1862 0
+-1025 1988 -1831 0
+2303 2621 -2290 0
+3053 1094 -2022 0
+2945 2301 629 0
+-1254 3023 1174 0
+2675 3261 899 0
+2197 -1559 -2463 0
+1317 785 1570 0
+-896 -1998 -1081 0
+2169 1865 752 0
+3075 1736 -1089 0
+-927 -2336 -1103 0
+2834 -3313 -1329 0
+2924 2395 1919 0
+-547 2309 2278 0
+-1949 2987 1187 0
+2819 -362 -1098 0
+-2952 384 -549 0
+-645 -436 1394 0
+-3015 2942 -851 0
+-1384 71 2983 0
+-1447 -3370 456 0
+3272 -1399 -2670 0
+1867 -1921 2855 0
+-1157 1754 692 0
+2317 1903 -2946 0
+-146 -187 -2699 0
+-983 -549 2626 0
+-829 -3034 3294 0
+-2563 -1256 1548 0
+3420 -522 -2752 0
+-3208 -858 2912 0
+-537 2527 2777 0
+-804 2644 2855 0
+2724 -3387 -2733 0
+2426 1798 974 0
+2915 -446 -576 0
+-329 -253 -2197 0
+-1008 -3134 3336 0
+2588 905 -3039 0
+407 -2789 1412 0
+3254 943 -1099 0
+-58 2631 783 0
+3339 -828 1941 0
+1960 3223 2 0
+-3001 1225 -2613 0
+2551 -3463 2566 0
+1512 2488 -2932 0
+-1971 1561 -2243 0
+-3461 -1030 66 0
+-2445 1440 1855 0
+-2805 2919 899 0
+-328 1106 3053 0
+2585 -3308 -821 0
+-646 -2752 -465 0
+-2706 -2384 3078 0
+1198 -1644 1650 0
+-2601 1452 -1293 0
+-744 2527 -1023 0
+2602 -628 3343 0
+-1172 501 -3195 0
+794 2462 1509 0
+1479 2589 -816 0
+-433 758 2111 0
+2805 3448 -3067 0
+-1024 2340 793 0
+1604 2926 524 0
+-1177 1544 -1431 0
+646 -418 1323 0
+3184 -241 -560 0
+2922 -545 3109 0
+-296 2923 -1777 0
+-656 -1948 3219 0
+1059 1741 -1768 0
+504 -191 -1082 0
+551 -2333 -2265 0
+-2432 3153 -2282 0
+-1801 883 1637 0
+126 965 671 0
+1430 -683 1919 0
+2370 2268 -65 0
+-3143 -93 -852 0
+-725 -1811 -2900 0
+2208 -2642 -1392 0
+2404 987 941 0
+-1351 1876 -1013 0
+-1151 937 3451 0
+-116 940 2283 0
+-1874 3365 -663 0
+828 578 2653 0
+1221 -1329 621 0
+1537 -2996 3014 0
+-762 122 1556 0
+2041 -3395 -945 0
+-3162 123 88 0
+-1757 -3278 -904 0
+-1925 2169 -1414 0
+-868 -1311 377 0
+3394 -2796 823 0
+344 2013 722 0
+3241 3408 -2062 0
+3417 3252 -1908 0
+-267 3341 264 0
+945 -2635 -3444 0
+480 -440 -754 0
+1092 -139 12 0
+1810 -2688 2013 0
+2726 370 358 0
+2784 789 1542 0
+-1874 1020 1014 0
+-3475 2267 3104 0
+-2315 2207 -2975 0
+2597 2999 -1267 0
+-98 -1157 -2468 0
+1620 -1219 3156 0
+-912 -837 3244 0
+-1957 1854 60 0
+-1382 28 2122 0
+-735 -1844 -3107 0
+1089 1653 -365 0
+-1040 -938 -955 0
+2317 2740 -74 0
+1998 -1955 -2334 0
+3319 -2797 1461 0
+-2474 128 1357 0
+-1934 1769 -772 0
+-52 2134 -258 0
+-2090 162 781 0
+1122 -2065 2262 0
+2820 2574 -1861 0
+-3441 -2827 3165 0
+-933 -3187 2507 0
+1774 -2200 1642 0
+930 -79 3180 0
+3019 -75 1948 0
+-2523 2229 -98 0
+-1948 -1609 -596 0
+1579 1712 -804 0
+3258 2616 -1228 0
+2176 -1295 2839 0
+-686 -1631 -210 0
+-1307 -2757 -291 0
+-31 -2221 2146 0
+1595 -1258 -1740 0
+-3006 3231 -2666 0
+-543 -929 -2765 0
+401 3296 3486 0
+3010 -1954 -1758 0
+-1255 -2504 564 0
+1496 1159 -870 0
+-295 175 -86 0
+-2362 11 -144 0
+-2243 13 -1384 0
+1296 1623 -1649 0
+1042 -2255 870 0
+-2524 -1036 -2388 0
+-2138 1608 3406 0
+-2144 1404 2844 0
+427 1924 -938 0
+-735 -3217 -679 0
+-2614 1751 2400 0
+-1271 1887 3185 0
+1129 441 -485 0
+1819 424 -2960 0
+-315 -3341 -3184 0
+-619 221 -2446 0
+-3008 158 -3094 0
+3187 1672 3254 0
+-3411 3067 1815 0
+1696 -2721 2161 0
+2055 1202 -1649 0
+-1396 364 -2551 0
+-1396 -680 -2364 0
+1723 -2006 2608 0
+-315 2449 2339 0
+-1940 389 -3169 0
+-3288 -3194 -2618 0
+109 980 80 0
+1221 2117 3091 0
+46 -2027 2941 0
+-104 -1759 -1022 0
+2530 2491 -961 0
+966 2121 -1857 0
+1789 -502 -2804 0
+1630 -3497 1844 0
+1022 818 -2440 0
+707 -2649 -192 0
+1306 1179 3103 0
+-2126 2613 1798 0
+-2719 -1266 84 0
+-2153 -1557 386 0
+-1310 -1964 790 0
+-568 3313 -2022 0
+1281 807 3274 0
+2310 2532 1707 0
+-3185 -221 -3331 0
+-1736 1700 1599 0
+-2355 -1085 -412 0
+-1582 253 2086 0
+-1492 -2518 970 0
+3138 -1085 1894 0
+466 -2055 329 0
+-1155 -2319 1349 0
+1846 -923 1818 0
+2124 -403 332 0
+-1867 -2026 -3329 0
+-366 548 -2460 0
+2573 -59 -2354 0
+-622 837 2798 0
+1052 -2462 2563 0
+-2826 2763 381 0
+-1770 2885 3167 0
+3194 -1958 -131 0
+-1160 1511 2297 0
+1149 2229 1302 0
+-2904 -2221 -1979 0
+1258 -3349 2566 0
+-2486 -1755 -2013 0
+-1755 2638 1667 0
+-573 -1283 -2926 0
+593 -3212 -996 0
+-1916 -1939 -2895 0
+-1279 -3264 2824 0
+1418 -1448 844 0
+1989 -2430 -718 0
+2355 684 -625 0
+256 432 803 0
+-3199 -1707 -1614 0
+1239 -2109 -85 0
+-2300 -869 -1844 0
+-3084 -2897 -2764 0
+1947 2561 -1714 0
+-2205 -1945 874 0
+1442 -3089 -1298 0
+3002 1746 -1327 0
+-1957 -787 1177 0
+-1374 -3070 -2002 0
+298 2695 -1118 0
+2300 2181 2609 0
+1561 76 2481 0
+3396 -2312 2291 0
+-733 3112 598 0
+-1586 -2319 3137 0
+-849 -2495 -324 0
+-3007 215 1691 0
+983 -132 -2268 0
+-3282 2587 3302 0
+1005 580 -2168 0
+3260 2153 2544 0
+-358 861 1632 0
+-3267 636 2408 0
+2321 -2403 1582 0
+1091 92 -2410 0
+1887 1775 -923 0
+-3015 2869 -1852 0
+2926 -114 1518 0
+2964 1210 -1745 0
+-571 1877 -1006 0
+-2921 -2955 -3431 0
+2014 1658 -3321 0
+2382 -1628 2807 0
+-1517 -3483 -636 0
+2017 1063 1868 0
+1180 1460 -2484 0
+1011 -836 2380 0
+2678 3403 257 0
+450 1478 999 0
+-2159 -3319 -3409 0
+-1790 -2974 -1722 0
+-1140 -2954 -1901 0
+2632 3094 -1883 0
+-1742 -1623 2764 0
+-1833 2137 1145 0
+3336 -3132 -2682 0
+-1267 586 2296 0
+2554 -63 461 0
+-1999 778 -1922 0
+-2743 1464 -1904 0
+-3423 2042 1050 0
+908 1545 -3037 0
+478 1768 -738 0
+2486 931 -2857 0
+3305 3105 3478 0
+-377 3248 -2955 0
+-142 -3113 1855 0
+2026 1240 2873 0
+-2521 1214 1622 0
+-2803 2669 2695 0
+416 -2546 -1989 0
+960 -2362 -316 0
+3222 -3048 2634 0
+2939 779 -1606 0
+-1222 -327 3315 0
+-3037 -2592 -393 0
+582 3211 -1925 0
+159 -2367 2607 0
+2126 3155 2697 0
+-1806 -2169 -808 0
+1653 2214 -2426 0
+-1826 459 -2450 0
+1561 -529 2314 0
+1927 -1681 -345 0
+-2842 1294 -781 0
+-3494 2445 3179 0
+1313 877 3039 0
+-654 -2435 1527 0
+-818 -2188 -1535 0
+-3375 -1181 2388 0
+-3269 -896 1088 0
+83 2078 671 0
+-786 2716 2506 0
+968 -696 2321 0
+2187 -3108 -3362 0
+-1829 -876 1845 0
+-3298 -864 2886 0
+-3492 -2857 -3391 0
+3450 1685 -512 0
+-2876 2700 2566 0
+979 2192 -119 0
+-318 2463 -1792 0
+2714 -2020 990 0
+433 2768 -1584 0
+-2623 -2477 -3443 0
+883 -2436 2775 0
+111 -2471 773 0
+923 -2544 -2057 0
+-1353 -972 -1107 0
+398 -14 -2051 0
+-917 -877 -2508 0
+2407 -3244 -1692 0
+2139 -503 2057 0
+-1216 -1549 -528 0
+-1242 -2885 -300 0
+1211 869 -1068 0
+-2240 2495 -1351 0
+-2500 3300 -1171 0
+2062 1765 1073 0
+-2765 -3217 70 0
+-84 1233 3368 0
+-828 -2274 -591 0
+-508 113 2594 0
+2164 171 -1264 0
+-2720 58 -2676 0
+2453 1407 -210 0
+-2485 -3382 859 0
+-1383 64 1674 0
+2779 311 765 0
+-693 2101 2420 0
+-876 -535 1557 0
+56 -1783 -1800 0
+410 507 -1177 0
+-3129 -2517 -3405 0
+-1513 -3264 1346 0
+1390 -56 -1004 0
+2669 2153 996 0
+92 134 -1878 0
+2778 -1766 -1445 0
+-1575 -2267 3070 0
+22 2334 2883 0
+1688 896 -3003 0
+793 3297 -193 0
+-2235 -3180 -1265 0
+-2170 580 677 0
+-1049 -1108 775 0
+3220 -2543 -2803 0
+2507 -1640 -1021 0
+477 -1302 256 0
+-1279 1906 3362 0
+2008 3281 -793 0
+106 -3018 -1128 0
+-1193 2416 2437 0
+1163 -3192 3068 0
+1531 2373 -2705 0
+2519 3145 -828 0
+2854 -950 -80 0
+-1191 2211 -603 0
+-42 560 730 0
+-3180 974 -2197 0
+787 -1391 -14 0
+869 -3151 1738 0
+-395 -1002 3034 0
+-252 -3370 2810 0
+938 -2860 1042 0
+2090 2771 -2258 0
+2198 2151 1444 0
+1577 -3316 -943 0
+683 -2426 2005 0
+1152 724 -1353 0
+-2068 92 -3422 0
+-622 1976 -467 0
+-3160 1758 1122 0
+2324 -395 2357 0
+-2984 -1841 -520 0
+-1971 3136 -426 0
+-913 1676 319 0
+2808 686 2953 0
+-266 112 3026 0
+-3058 -2477 -2716 0
+1092 2084 3249 0
+-285 -56 49 0
+-602 -353 -422 0
+-3094 1582 -1346 0
+-2173 115 2303 0
+-646 -516 -622 0
+1739 926 -2866 0
+2169 331 1255 0
+2326 1439 553 0
+-1513 189 -375 0
+958 -2385 250 0
+-1739 412 -282 0
+-138 -3245 1471 0
+-1221 -1847 703 0
+-1945 1624 344 0
+-1124 -3019 2775 0
+3015 1757 -177 0
+-3204 989 784 0
+447 2756 -1164 0
+1191 2175 -1741 0
+-1314 -319 2873 0
+601 607 2315 0
+-895 1098 -1466 0
+-844 385 704 0
+-58 1157 1210 0
+1249 -2262 -3355 0
+1161 -523 -2812 0
+2550 1355 -2091 0
+2028 -1232 -3033 0
+-461 -331 1822 0
+-1015 563 -1138 0
+-1412 873 -566 0
+-1270 -391 -3263 0
+-1944 1914 -703 0
+1611 -1036 -2781 0
+-3481 -2427 -73 0
+-960 -2362 -3418 0
+2016 2543 311 0
+-1386 595 1930 0
+1245 -2461 -1981 0
+-1637 -2038 2504 0
+-627 94 -1795 0
+2416 1198 -2716 0
+263 264 401 0
+-2155 2234 426 0
+-2856 2676 -2625 0
+-3 1642 -2741 0
+-107 247 3114 0
+2813 64 -734 0
+-1769 2109 -503 0
+1216 -1096 1252 0
+-2070 3472 -1351 0
+149 -868 2761 0
+3358 358 -1648 0
+385 -479 -418 0
+-1527 840 -2025 0
+2844 -3345 -806 0
+-2027 -2652 1349 0
+3377 -484 1127 0
+-1326 2048 504 0
+-2786 599 1154 0
+2216 3217 3312 0
+3256 -1476 -1233 0
+819 -530 -1344 0
+3435 -3167 -973 0
+-948 -2202 -384 0
+-669 -352 -1161 0
+907 2002 3324 0
+1705 -844 1945 0
+391 -1355 -362 0
+-229 2586 2854 0
+2285 -2069 407 0
+2799 645 195 0
+1034 -1110 634 0
+-563 1434 1082 0
+746 -3104 -240 0
+2801 2480 -1660 0
+1098 -699 2258 0
+2210 -2792 -1668 0
+-2873 950 -648 0
+2602 -3341 1224 0
+-1162 2604 1893 0
+3027 1720 -1231 0
+1119 -268 -3259 0
+-336 -665 -3439 0
+-3316 -2706 1244 0
+3237 953 -2546 0
+-3102 2335 2297 0
+-1799 -6 -326 0
+-501 2397 -1946 0
+-2478 1374 1418 0
+2112 1522 3494 0
+2411 2639 917 0
+1312 1351 1282 0
+1082 2337 -2948 0
+2313 2543 -108 0
+2804 1615 -1785 0
+1392 -1204 1940 0
+-1966 1337 1068 0
+-1493 -901 2128 0
+1111 2273 -1127 0
+-615 -1101 1254 0
+-338 80 3176 0
+-162 1770 -1459 0
+616 1487 3280 0
+-1864 1055 -1043 0
+3018 -2610 386 0
+2 -3010 2264 0
+2100 -828 -424 0
+-3207 -1737 2556 0
+-1308 2406 1556 0
+1043 -1605 1691 0
+-516 -2714 1774 0
+2711 404 743 0
+2324 1866 -1642 0
+-2076 -1840 -1811 0
+930 -968 3005 0
+-1025 -850 46 0
+-1717 -2996 2794 0
+-2946 687 2177 0
+-2233 1778 1734 0
+-467 2942 1697 0
+592 2467 -2960 0
+-565 -1770 -3295 0
+-299 2681 553 0
+3313 2110 3357 0
+1679 -3006 -1759 0
+66 424 -292 0
+-1546 -1059 917 0
+-878 95 2199 0
+-1415 3433 -102 0
+368 -113 -2900 0
+-1076 -721 -1999 0
+-1383 1869 3360 0
+3296 -499 795 0
+537 -1209 2235 0
+259 -3091 -2476 0
+-2242 -1957 1552 0
+-476 -501 -1876 0
+-1629 -1097 -1561 0
+-1325 601 2567 0
+344 1937 -3196 0
+-2426 -965 -1400 0
+1338 1950 719 0
+-2198 1996 974 0
+1685 2153 1331 0
+-1620 -544 -1609 0
+970 -2176 1417 0
+950 -1950 1093 0
+-3224 1515 3085 0
+1775 1285 54 0
+-1647 -789 -1731 0
+2429 -2932 1135 0
+1180 102 1483 0
+2297 985 2926 0
+-2798 1837 1628 0
+-3197 -65 -1965 0
+-2883 996 1998 0
+-3161 714 -2806 0
+-957 -3403 1913 0
+2509 -528 1792 0
+-2737 1931 1974 0
+-1097 1289 -170 0
+722 -2963 3092 0
+-132 370 -2489 0
+2861 -3492 -2342 0
+-2045 3272 -880 0
+871 -3102 568 0
+-1945 -3101 2726 0
+175 -3241 2890 0
+2827 -226 -2139 0
+1102 -646 1159 0
+-2620 -1 -689 0
+-1991 -1858 541 0
+784 -439 -1260 0
+-2753 -2078 -3404 0
+2045 1401 -1879 0
+-715 -1089 -3219 0
+1283 -911 -3301 0
+-723 -2166 1108 0
+990 512 -3337 0
+-285 1421 1072 0
+-745 -798 -2502 0
+110 2225 -3425 0
+-2471 -2609 -1809 0
+-1063 -576 2366 0
+-1989 2295 835 0
+3210 -1653 3412 0
+-1022 938 1042 0
+1772 1509 1149 0
+-1097 -2616 285 0
+2085 631 -2183 0
+-746 3043 2399 0
+3053 -2976 3167 0
+1353 529 2319 0
+-2679 -389 -1587 0
+3275 2947 1051 0
+-1869 -21 -694 0
+865 2340 -736 0
+857 -3444 -1449 0
+-3064 2178 2421 0
+625 436 -2600 0
+1700 -3282 2379 0
+-640 -721 -84 0
+1485 45 2326 0
+191 2121 -1841 0
+-2633 -3237 2536 0
+1055 -3304 2456 0
+-1312 1926 2574 0
+-3489 -2950 -1987 0
+1527 165 -1046 0
+-1189 970 3247 0
+-3262 -740 1637 0
+1747 2790 1480 0
+-2182 -2422 1503 0
+3407 3085 -3177 0
+2075 809 -1791 0
+-3048 1355 -1117 0
+-3482 2439 3036 0
+-1134 -1888 3348 0
+-963 -2919 3325 0
+1178 3461 -1443 0
+2540 3304 1278 0
+-3386 285 530 0
+-2743 1537 1718 0
+-1021 1138 3227 0
+3035 2862 -2890 0
+-1247 1795 -2324 0
+1972 832 1033 0
+2076 3025 1407 0
+-1496 422 2866 0
+96 1052 1895 0
+261 -2370 -693 0
+1627 -3402 -1421 0
+-319 1211 -107 0
+1085 1543 736 0
+1655 -3308 -288 0
+-3148 -1345 -2604 0
+-3211 -1202 3189 0
+-548 -2618 3350 0
+875 -827 2442 0
+-3326 -2394 3303 0
+-1336 -3230 1468 0
+1217 3063 792 0
+-1541 -2758 3097 0
+3382 42 -2888 0
+2270 3079 2346 0
+344 2332 2861 0
+2405 1479 -2997 0
+1218 -109 1695 0
+-3082 -177 2285 0
+2107 2278 -2218 0
+-1067 1305 -2634 0
+-198 -1243 6 0
+-446 -1776 1697 0
+-260 1547 -902 0
+-1 1385 -1193 0
+3401 2663 -2157 0
+1870 3336 -530 0
+351 -1064 1530 0
+2097 -538 -2225 0
+474 -947 1003 0
+-1961 -898 2109 0
+-2920 1909 91 0
+2596 -3414 -2568 0
+-2919 3232 1308 0
+-1396 682 140 0
+981 2588 -3223 0
+1432 1674 1896 0
+-2278 2205 -1150 0
+-133 -2438 525 0
+-1820 2026 762 0
+-685 765 119 0
+-968 -3129 -1390 0
+906 -2516 -2358 0
+884 733 2355 0
+65 -3178 3175 0
+-756 2181 133 0
+2007 -350 242 0
+-3159 1907 -758 0
+-2339 3254 1461 0
+-829 -2782 -116 0
+-945 2817 -2391 0
+1925 -549 2531 0
+-514 1938 863 0
+-3184 836 -2773 0
+-1545 323 -608 0
+-3283 -1310 1178 0
+-2047 -1097 -1877 0
+-3386 -2317 -1310 0
+1019 -2881 -430 0
+651 2255 2800 0
+1413 914 1681 0
+2922 1693 -2824 0
+647 -2459 1032 0
+-2643 -1262 -404 0
+677 -166 -2029 0
+2293 -2048 -2663 0
+-1797 -456 2603 0
+-58 2488 -2713 0
+2785 -2070 379 0
+2238 -28 -486 0
+1868 -1997 2484 0
+-644 -3243 770 0
+879 -2095 3344 0
+3386 -3162 3175 0
+-928 1095 815 0
+3013 858 3099 0
+2668 -623 1342 0
+1256 2219 2087 0
+1157 -1191 -427 0
+858 2778 2311 0
+-31 -2776 -3332 0
+-731 2616 -1409 0
+-2745 -2677 -2515 0
+26 -3235 989 0
+-2082 1517 -298 0
+1451 2149 -1217 0
+3100 -979 3301 0
+-2671 -1552 509 0
+-3111 738 -1750 0
+3007 -73 1690 0
+1349 698 -367 0
+-1978 -362 -2180 0
+1844 2707 3199 0
+-462 -249 -2154 0
+2926 -2328 -2682 0
+3367 -157 -528 0
+-2478 -489 -1962 0
+-3001 -520 201 0
+1923 3026 -1861 0
+668 3338 -784 0
+12 3050 1214 0
+-692 2583 3031 0
+348 -1350 -1239 0
+-1085 -2213 1831 0
+-2289 1860 -1994 0
+-1146 -3293 2174 0
+-772 1197 -545 0
+-900 3258 1759 0
+-300 658 -3453 0
+3086 -1487 -868 0
+587 1986 2708 0
+1385 24 -3335 0
+-3308 -1460 2983 0
+562 -2562 -2294 0
+208 -1256 -3323 0
+1674 -636 789 0
+818 -3323 -1254 0
+1408 -391 -626 0
+-2586 3155 -2407 0
+662 326 -808 0
+540 -558 -2641 0
+-1020 19 799 0
+-499 -2333 -1573 0
+-762 -646 2305 0
+2364 -2166 -1383 0
+-2838 -1955 -3099 0
+1242 1054 1460 0
+-2532 558 -2848 0
+822 2789 -526 0
+-1020 -1059 -2078 0
+-2659 865 -1311 0
+-2209 -1081 -312 0
+-1614 -999 707 0
+802 456 -2997 0
+-1683 371 202 0
+-1683 364 474 0
+3010 726 2445 0
+3130 -380 2729 0
+974 -2616 -120 0
+2411 2628 1043 0
+1730 2189 1772 0
+-267 -1844 -1871 0
+2029 1347 2128 0
+3495 605 -1032 0
+-1223 -2526 -2723 0
+3180 -2794 3045 0
+1030 2347 -802 0
+162 2218 -1738 0
+2083 448 -844 0
+3412 1421 2417 0
+-2506 1596 463 0
+-2864 950 -866 0
+-2429 1082 -2536 0
+-1992 -1053 -306 0
+418 462 -2654 0
+-2482 1473 -3457 0
+1717 3428 1031 0
+-918 1821 -1106 0
+-1318 1974 2037 0
+766 -2495 793 0
+-604 -3306 -352 0
+512 -2583 -1233 0
+1232 73 -649 0
+408 776 837 0
+1160 -1766 -2828 0
+1802 -2333 -2008 0
+1370 -1251 2958 0
+567 1134 241 0
+1818 249 -3030 0
+1904 -2687 -843 0
+-2727 1946 -751 0
+743 -2972 2573 0
+-976 -3118 -278 0
+392 507 -1188 0
+-1725 725 -3260 0
+2925 711 546 0
+-1824 -82 -3281 0
+-225 2294 -2866 0
+3202 1167 397 0
+-245 1945 -3032 0
+-2536 -691 -328 0
+-1208 -2524 -3447 0
+-444 3060 -15 0
+1808 -2182 -3424 0
+-1828 1199 -1138 0
+-1976 3187 3420 0
+403 -2165 -2417 0
+1731 -2283 2096 0
+215 -2012 -3377 0
+1474 2104 -1976 0
+-3402 3415 -3119 0
+3102 962 2949 0
+377 -2738 -2469 0
+-1455 1737 -1581 0
+1903 -3318 2226 0
+248 2246 -1716 0
+-3497 1886 3083 0
+836 2513 2618 0
+1406 666 539 0
+-1256 -1800 -2948 0
+2866 2653 -3357 0
+3476 -2186 -812 0
+3195 1728 1720 0
+-188 -1417 -2768 0
+3098 897 1595 0
+1922 40 -2573 0
+-1943 3250 908 0
+2397 2208 -2809 0
+1469 -53 -349 0
+-1341 -3343 1344 0
+2583 2399 840 0
+2518 518 3412 0
+2829 -2028 -2933 0
+-1964 -832 286 0
+1336 1127 -364 0
+-2616 2235 2068 0
+2985 2358 3353 0
+-1427 -1078 -717 0
+1290 -1410 1195 0
+3300 3322 209 0
+-3396 -3131 839 0
+1705 -2783 325 0
+2832 1816 -1705 0
+-919 -1711 -1615 0
+-524 -1937 2340 0
+-530 1470 866 0
+-1859 2632 3133 0
+-277 1207 -2874 0
+1124 2406 2620 0
+2240 -1933 3489 0
+-2821 3008 -680 0
+3099 -2943 180 0
+1685 1540 -2548 0
+2303 -1205 -3005 0
+1727 3469 2420 0
+933 476 -2531 0
+813 193 -859 0
+-2831 -828 -1935 0
+-1784 46 1945 0
+3313 1295 -331 0
+-3238 -1955 -1703 0
+1368 -3115 -2771 0
+-1931 -3017 2973 0
+-2633 2189 -745 0
+-2229 -805 338 0
+-238 2399 -289 0
+3178 3116 3215 0
+-3266 989 904 0
+734 -1717 2716 0
+56 3017 -1468 0
+1996 -3430 399 0
+-1495 1874 -2869 0
+3498 3234 1915 0
+1446 -675 -2070 0
+2122 -1334 -2986 0
+1494 1007 2376 0
+1641 1481 1482 0
+-1602 -3482 -2464 0
+-1974 -1045 -72 0
+2538 1740 -332 0
+3173 -2706 -3248 0
+2084 -1951 1402 0
+-914 1411 -838 0
+-2792 784 -1959 0
+3451 -3048 -1368 0
+2914 1705 1719 0
+200 2840 -367 0
+-2084 -244 -2175 0
+-368 -393 -1803 0
+-2007 3348 3442 0
+1434 -2254 -1475 0
+-1090 -774 -326 0
+-1170 -2420 -2402 0
+2494 2561 422 0
+-1738 -2616 -482 0
+-2799 -1913 1554 0
+-2025 1561 3071 0
+-439 -795 -2152 0
+453 -2466 -532 0
+376 -1815 353 0
+-2049 -712 -1205 0
+-348 -1407 2528 0
+295 1717 -2325 0
+786 -1515 2290 0
+-2638 -814 2157 0
+3249 819 -1167 0
+2726 -1752 3423 0
+-1610 -246 1306 0
+-196 1847 -1842 0
+-255 3302 1932 0
+-2236 -2664 -2141 0
+1578 1844 -1998 0
+609 -1983 -3434 0
+3425 -1880 -1838 0
+2407 -1201 3162 0
+-667 -1314 1452 0
+160 1320 -2858 0
+-268 3425 -821 0
+-2038 3486 -2516 0
+-639 -417 -131 0
+1472 1976 -627 0
+2739 2956 -2789 0
+-376 2280 -1806 0
+-158 346 -761 0
+1968 784 3238 0
+2462 -1713 494 0
+865 3125 291 0
+-2635 1970 -967 0
+-1015 -619 1268 0
+-722 2778 2119 0
+2421 -224 -2018 0
+-2972 -449 3204 0
+-1510 -1406 252 0
+254 -3496 -2627 0
+2251 -998 -1354 0
+543 696 906 0
+-1483 2096 -2973 0
+2671 637 961 0
+-2948 2155 -2085 0
+-706 1130 2363 0
+-1319 2757 171 0
+1228 539 -84 0
+1623 994 3330 0
+-3148 3167 -2220 0
+-3084 2587 1130 0
+-3196 -855 -963 0
+2614 2678 -2015 0
+-3165 -2015 -2397 0
+-2612 1122 347 0
+530 -2768 644 0
+-1067 2845 -2791 0
+2947 -2499 -1557 0
+-1386 -1150 1879 0
+1745 2090 3268 0
+-2708 -2367 -3414 0
+-2371 -3349 -2902 0
+2023 -1044 -973 0
+2034 -322 2258 0
+-3229 -3189 -3369 0
+755 3254 -1050 0
+2632 -648 -1636 0
+1620 -2397 1180 0
+1764 2227 2896 0
+784 -1488 943 0
+-3429 432 1319 0
+2849 1402 2930 0
+44 3196 -212 0
+-2310 589 559 0
+2021 2609 1815 0
+1363 -1749 1425 0
+3275 18 769 0
+713 496 3253 0
+-1284 -2682 -3098 0
+1855 1083 1625 0
+-1015 1140 -1282 0
+-2332 -3337 2232 0
+-1796 1418 3352 0
+-2999 -3232 -3007 0
+-1921 -947 2325 0
+-2400 -2060 -2603 0
+2604 897 283 0
+-3046 2572 -871 0
+-2132 59 2550 0
+-1193 -926 -472 0
+-1211 3089 2911 0
+3110 125 954 0
+134 -2486 -1462 0
+-1628 225 1957 0
+-1251 244 1787 0
+1925 87 -2767 0
+205 1510 2883 0
+736 -2962 -2220 0
+3077 -1016 2034 0
+-2575 -2621 1960 0
+-33 -405 1898 0
+-3116 2048 -2431 0
+89 945 -2888 0
+474 13 -2265 0
+-962 -1830 656 0
+-989 -673 807 0
+-1064 -1172 1547 0
+1041 3270 1186 0
+1650 -1621 3148 0
+208 -1723 -691 0
+-2326 3066 -3072 0
+-2068 -795 -247 0
+-3342 477 3272 0
+-2268 -3321 3083 0
+-773 78 1827 0
+-1373 2446 149 0
+-1311 -2653 1956 0
+-947 686 -1409 0
+-3086 -1878 -565 0
+2375 1250 332 0
+3220 228 2643 0
+-683 -2592 -2559 0
+2734 2845 1429 0
+376 930 421 0
+-214 -2832 1747 0
+1039 1367 132 0
+1642 -962 -649 0
+1781 26 -3301 0
+-1880 2468 2429 0
+804 2183 605 0
+3298 -1896 -2909 0
+1673 -2842 -1784 0
+-2654 -3373 -1191 0
+-633 -3349 2380 0
+2489 -1419 3318 0
+-1602 166 -779 0
+-2025 625 -1585 0
+-1356 -2473 -3418 0
+901 3233 -152 0
+-3026 -1795 312 0
+2968 -1228 1910 0
+-2708 957 1799 0
+-2240 -3281 883 0
+1375 249 2532 0
+3218 -3041 -3003 0
+3125 1765 -2103 0
+-2858 608 1142 0
+2856 2062 1094 0
+-2334 1227 74 0
+2982 -2316 -1304 0
+2374 788 1780 0
+813 700 -1451 0
+-327 1723 3443 0
+-1831 -1783 1358 0
+3315 1648 3361 0
+448 379 2873 0
+-625 3295 1605 0
+3166 -2052 818 0
diff --git a/examples/charm++/satisfiability/example/example_6000.cnf b/examples/charm++/satisfiability/example/example_6000.cnf
new file mode 100644 (file)
index 0000000..9f9684e
--- /dev/null
@@ -0,0 +1,6003 @@
+c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
+c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
+p cnf 3500 6000
+-1765 -1070 0
+-1298 -3068 0
+-2907 -225 0
+776 -3004 0
+578 1958 0
+-1372 1977 0
+1900 -2858 0
+-1841 -488 0
+-104 -1745 0
+-599 -1021 0
+-424 -88 0
+2289 1997 0
+-2443 2011 0
+-910 -1746 0
+-174 3232 0
+2267 -2120 0
+1778 272 0
+1676 -2380 0
+-2538 -3299 0
+-2059 691 0
+2248 -1315 0
+-3189 2467 0
+664 -1877 0
+2418 1800 0
+-861 -3070 0
+3364 -1135 0
+917 -227 0
+2728 -476 0
+-119 -1132 0
+-1351 -3170 0
+-2297 1445 0
+-2043 -1910 0
+1816 1939 0
+3429 582 0
+-507 -320 0
+1726 -1209 0
+2585 -1652 0
+-2440 -2450 0
+-2867 2451 0
+-139 813 0
+2340 135 0
+-2325 -3113 0
+1524 -2565 0
+727 -1593 0
+2614 247 0
+1065 -2790 0
+3091 -1842 0
+-2600 -1685 0
+1904 -207 0
+2535 -59 0
+-3251 307 0
+2898 -289 0
+-1644 -65 0
+-3232 -3141 0
+1094 -2553 0
+635 1633 0
+-2556 -3267 0
+1658 -2147 0
+2450 1886 0
+853 358 0
+2710 1705 0
+-3275 -1764 0
+2827 1061 0
+1552 -2501 0
+1032 -2196 0
+2093 599 0
+-3297 2888 0
+-1159 3146 0
+-167 -2808 0
+2696 808 0
+1887 -1984 0
+-1062 545 0
+-3251 1283 0
+83 2885 0
+-865 -528 0
+-2017 2391 0
+1523 -2124 0
+2769 -2741 0
+-1300 -1093 0
+-2209 954 0
+-878 -303 0
+618 840 0
+1959 5 0
+-1540 -2659 0
+593 281 0
+-713 1017 0
+746 873 0
+-247 -1414 0
+564 -2085 0
+1404 2663 0
+-791 -338 0
+-1563 -1893 0
+777 2017 0
+1696 -2 0
+1643 1896 0
+2701 -3013 0
+1526 -945 0
+-1021 -2791 0
+2775 642 0
+2624 -2992 0
+1208 -1390 0
+1041 1844 0
+-2265 -1072 0
+49 1230 0
+2182 -1004 0
+-2282 1514 0
+3423 -2393 0
+1189 2447 0
+3392 1800 0
+-1727 115 0
+-382 1957 0
+-1772 2005 0
+-1860 156 0
+3303 -2197 0
+-323 2272 0
+-2972 408 0
+-1554 -295 0
+-2350 -272 0
+1597 3162 0
+-1915 321 0
+1175 -915 0
+-2145 -702 0
+-701 -479 0
+691 -3036 0
+3093 2025 0
+-240 1173 0
+1026 1704 0
+-2502 -3214 0
+2501 1152 0
+-240 -113 0
+1326 1112 0
+1477 760 0
+-477 3011 0
+-1581 -2553 0
+-1519 2046 0
+-2781 695 0
+2387 -2927 0
+-200 66 0
+130 41 0
+1825 -2675 0
+85 3018 0
+-2869 772 0
+-2827 1407 0
+1075 -388 0
+-448 2587 0
+-2853 2173 0
+330 1088 0
+-3014 955 0
+2448 -1263 0
+-2542 2703 0
+1350 -475 0
+-2710 -2386 0
+-677 305 0
+625 3011 0
+1190 -3109 0
+-860 -300 0
+1036 1623 0
+-96 1945 0
+-1434 371 0
+3282 301 0
+729 -487 0
+3081 -2308 0
+-595 -1473 0
+2480 -1261 0
+3335 92 0
+-208 1377 0
+-956 -2285 0
+-1003 1195 0
+3190 -3085 0
+-1678 41 0
+-309 -227 0
+-3286 -2803 0
+-871 3052 0
+-1430 2720 0
+-2675 3121 0
+-590 1909 0
+-2496 3050 0
+3385 -2946 0
+1104 2982 0
+1160 511 0
+-1677 -3109 0
+-990 -1991 0
+-333 341 0
+-2426 -1202 0
+242 2096 0
+342 -321 0
+-1214 2335 0
+-2085 904 0
+-2907 3368 0
+2840 560 0
+3469 -595 0
+-3150 -317 0
+2547 19 0
+-453 -834 0
+-141 -540 0
+-2514 2487 0
+1955 2317 0
+-713 967 0
+-276 3076 0
+-3357 3317 0
+2303 1793 0
+-174 921 0
+2295 -2539 0
+-2903 3230 0
+380 -2651 0
+-1422 1773 0
+-1679 1623 0
+-1239 439 0
+1275 2796 0
+-1358 -1762 0
+1676 1461 0
+2325 2436 0
+-3236 296 0
+1704 2855 0
+-3415 1417 0
+-2417 1194 0
+587 1639 0
+-705 2096 0
+700 -3459 0
+-1246 -2228 0
+480 2138 0
+-1091 -2065 0
+-2470 -2158 0
+1837 1577 0
+340 868 0
+3115 3425 0
+-3020 -3338 0
+-2278 -1746 0
+-1089 -1440 0
+1876 -3184 0
+-3486 2231 0
+1692 747 0
+22 -3076 0
+1078 3450 0
+-2884 -1361 0
+1853 -918 0
+3490 1621 0
+2363 2711 0
+3145 -672 0
+1747 3367 0
+-3032 1404 0
+-2443 -1206 0
+-1141 -3487 0
+-2174 -2435 0
+3262 529 0
+-1859 973 0
+-1179 2839 0
+3062 -1193 0
+2148 3203 0
+-449 2915 0
+3475 1083 0
+306 -811 0
+571 -2192 0
+1078 432 0
+1308 1682 0
+-2475 -3463 0
+1971 -2212 0
+-573 -509 0
+-1028 -2695 0
+1608 -1401 0
+1345 -1107 0
+-3256 1179 0
+-1309 -1933 0
+-2235 -1405 0
+1559 3125 0
+1742 -2679 0
+-1724 602 0
+-1879 -2009 0
+2094 2146 0
+-1154 -2913 0
+-2685 -2745 0
+-3239 2125 0
+-765 3429 0
+1882 1776 0
+-981 3435 0
+-880 2583 0
+-1559 -1322 0
+1054 1674 0
+2079 1658 0
+1568 3115 0
+2031 1339 0
+-2151 -516 0
+1992 2491 0
+2394 -2343 0
+2803 -3164 0
+898 594 0
+-2257 1293 0
+2533 -2656 0
+450 1475 0
+108 -2233 0
+2441 -1470 0
+2797 -1786 0
+-476 -2455 0
+-2788 850 0
+1799 -1868 0
+3050 1895 0
+1517 -2600 0
+-1860 224 0
+-2556 -2135 0
+-2005 452 0
+1871 355 0
+-2454 2702 0
+-3347 -1583 0
+2092 -2896 0
+-3346 -1734 0
+3328 -2506 0
+151 -735 0
+1560 1136 0
+-592 -1088 0
+-2695 296 0
+-1358 1937 0
+1856 58 0
+3328 -3407 0
+-249 2038 0
+52 -2555 0
+-459 1542 0
+1680 -594 0
+2918 3415 0
+-2768 -725 0
+-3183 -2825 0
+2574 2666 0
+-1644 -3222 0
+475 3307 0
+2466 1983 0
+478 1519 0
+-3466 671 0
+3284 -358 0
+2179 -2477 0
+-2414 575 0
+2845 -2252 0
+-2573 753 0
+3407 -2182 0
+1812 -280 0
+1633 -1011 0
+2347 882 0
+-1050 2277 0
+-1500 519 0
+-3149 663 0
+-1329 -258 0
+-650 1620 0
+-2640 -738 0
+2849 2188 0
+3116 2720 0
+2927 628 0
+-849 -1769 0
+418 -2718 0
+346 -2982 0
+1916 -3456 0
+3000 -1828 0
+2441 544 0
+84 -2722 0
+-1260 435 0
+997 2606 0
+-1135 3160 0
+1299 -2476 0
+-243 -769 0
+-3125 2091 0
+3112 -622 0
+-2397 2704 0
+3194 2266 0
+-1843 -2104 0
+-3194 958 0
+-906 706 0
+-2365 -890 0
+571 554 0
+2113 3376 0
+-1020 1167 0
+-2219 1403 0
+1302 -38 0
+1771 1987 0
+928 -324 0
+666 1781 0
+-692 1418 0
+-10 314 0
+-373 -1742 0
+-1412 -3153 0
+3151 208 0
+-685 -597 0
+1385 1405 0
+2133 -3286 0
+2020 -2129 0
+2496 -3059 0
+423 -1961 0
+945 -1047 0
+1303 -2016 0
+3448 99 0
+32 -3382 0
+1189 1488 0
+-870 -1739 0
+-2559 2734 0
+2598 1315 0
+2807 -636 0
+-115 2595 0
+-1763 1395 0
+698 458 0
+-943 1595 0
+-2062 1678 0
+-1130 -602 0
+2106 269 0
+-777 2021 0
+-55 954 0
+-309 112 0
+-124 -2892 0
+2515 2879 0
+820 2198 0
+-1968 -2176 0
+-1215 1985 0
+3349 -2883 0
+-1621 1720 0
+-2684 2936 0
+2401 374 0
+-3314 -2492 0
+-809 -2582 0
+-488 3350 0
+-202 -194 0
+-2340 3453 0
+3412 2389 0
+4 1903 0
+652 319 0
+2030 1098 0
+-500 2116 0
+-1437 -2691 0
+300 -1688 0
+-2459 -3099 0
+3313 1466 0
+312 -2220 0
+-2146 -1427 0
+1849 -14 0
+-2704 3337 0
+-594 -2278 0
+-1910 -32 0
+-2106 -3239 0
+1618 1735 0
+-1074 -2891 0
+2992 395 0
+-3342 -189 0
+2537 -3184 0
+2551 -523 0
+2427 -1829 0
+185 2951 0
+-2772 231 0
+-1639 -65 0
+439 -2471 0
+-867 2825 0
+2684 -3033 0
+971 2696 0
+611 -930 0
+-2591 2598 0
+-1566 -2207 0
+-2450 -835 0
+2730 -3169 0
+2464 3498 0
+-1502 -3383 0
+3086 2369 0
+-102 -991 0
+-179 -1054 0
+-2916 1448 0
+2032 -1253 0
+-2088 -1356 0
+3414 2699 0
+885 387 0
+-1659 -666 0
+2555 952 0
+1745 977 0
+-1766 3025 0
+1207 -1558 0
+1698 -845 0
+-768 -3027 0
+-2625 2122 0
+2669 2544 0
+-944 -956 0
+2000 -348 0
+857 562 0
+-649 -1858 0
+-1533 -458 0
+-2746 -451 0
+-3397 -2655 0
+1860 -789 0
+1693 -1992 0
+177 -457 0
+2212 3098 0
+3138 1707 0
+-657 -3470 0
+-2148 1773 0
+2994 1110 0
+-2625 656 0
+142 1009 0
+1487 -1352 0
+2484 -3058 0
+2404 -3292 0
+3428 -2963 0
+-183 620 0
+-2162 -1028 0
+-127 -2103 0
+831 -587 0
+-1077 -2515 0
+2888 2182 0
+3336 -1351 0
+1735 1840 0
+2049 1593 0
+688 -1997 0
+804 -1083 0
+211 452 0
+-108 1348 0
+1538 1286 0
+2003 1138 0
+3450 2155 0
+1935 -2708 0
+-2868 3436 0
+1804 -1806 0
+2688 -3301 0
+-1724 2290 0
+-1178 -1136 0
+2711 -3418 0
+1749 1158 0
+2320 -2806 0
+-1569 1859 0
+259 1886 0
+-2422 -2241 0
+2835 -408 0
+1105 192 0
+-316 2975 0
+2182 2248 0
+-997 2688 0
+794 2438 0
+1211 -498 0
+2511 -778 0
+268 2356 0
+2729 -1688 0
+-2656 -1608 0
+1794 -2338 0
+1907 1856 0
+2572 -252 0
+-1617 414 0
+3488 -2471 0
+2377 1629 0
+374 -1148 0
+-977 867 0
+3110 2060 0
+1230 -716 0
+-1208 584 0
+1718 -3451 0
+2188 -1961 0
+248 2668 0
+-3404 -151 0
+-3071 151 0
+721 697 0
+-2626 -2253 0
+-2380 3157 0
+332 -2302 0
+-2028 -83 0
+852 -2897 0
+3067 1637 0
+-564 -1817 0
+-498 -3236 0
+425 3455 0
+1323 3402 0
+-2719 -674 0
+-2967 22 0
+7 -1074 0
+-2466 2210 0
+-997 -814 0
+-3039 1117 0
+2536 -2768 0
+683 -2012 0
+1373 1147 0
+3441 1157 0
+587 -3020 0
+1441 2581 0
+-2255 432 0
+442 -1757 0
+-2619 -3336 0
+194 -3202 0
+1032 -2405 0
+2017 -920 0
+-2292 -2155 0
+-2169 2669 0
+-1128 2717 0
+-1147 1047 0
+-1998 -66 0
+-2729 257 0
+616 -1234 0
+2723 1735 0
+2592 -1745 0
+-1624 -2184 0
+513 -821 0
+2373 1926 0
+2749 -3061 0
+1759 2238 0
+2478 1506 0
+2124 -3214 0
+-129 -2476 0
+2372 1003 0
+-2559 1045 0
+-191 2300 0
+1461 -1417 0
+1677 2092 0
+126 2355 0
+3337 -3465 0
+27 1718 0
+99 -1783 0
+1044 588 0
+2296 673 0
+-1247 3475 0
+-2243 -78 0
+2163 1117 0
+1001 -1966 0
+21 3425 0
+2903 2777 0
+-1033 1680 0
+-2751 -84 0
+941 -3421 0
+-2124 -2051 0
+-2431 -2787 0
+748 -959 0
+1434 -889 0
+2589 1283 0
+-29 3450 0
+-1814 -3277 0
+92 -2437 0
+-3195 3003 0
+-654 -2058 0
+41 2170 0
+-398 2311 0
+3223 -3109 0
+-3056 2530 0
+-3092 624 0
+-2003 -1899 0
+-548 -323 0
+-190 2603 0
+1896 -1705 0
+-830 -1780 0
+-609 303 0
+-946 1533 0
+-1638 221 0
+1717 1838 0
+20 3465 0
+1041 440 0
+340 1730 0
+2659 1722 0
+-1398 -3430 0
+-1357 -2881 0
+-119 3134 0
+1720 -599 0
+-132 1949 0
+-3131 608 0
+1031 1139 0
+2346 -3456 0
+1385 -2586 0
+-1348 2235 0
+1567 3301 0
+3340 -1526 0
+962 1143 0
+-2361 562 0
+586 81 0
+1061 3174 0
+-3422 1686 0
+725 -2736 0
+2289 2078 0
+2936 -2099 0
+77 -990 0
+1491 2329 0
+-3252 -1507 0
+2446 -3257 0
+-3440 137 0
+-1863 -2956 0
+1909 -2780 0
+-1636 1742 0
+-1119 650 0
+782 1186 0
+1888 1345 0
+-373 3200 0
+2545 -976 0
+2709 1558 0
+-1964 -2463 0
+-2216 1812 0
+-3436 2444 0
+1939 -1251 0
+2821 1160 0
+197 -4 0
+696 -149 0
+1409 -1022 0
+2544 -3472 0
+-688 -1092 0
+744 1340 0
+-164 3009 0
+1685 -2676 0
+1528 1124 0
+-158 2128 0
+2977 -1438 0
+-3133 -3279 0
+3192 944 0
+906 -3119 0
+-1374 -552 0
+3296 -1441 0
+2406 46 0
+335 -629 0
+-1822 1832 0
+-3476 1775 0
+-2480 -103 0
+-1502 -953 0
+2348 -2433 0
+1232 -3466 0
+-2936 2700 0
+2183 -3081 0
+1895 -1958 0
+3021 1537 0
+2950 1885 0
+1361 326 0
+841 2351 0
+3131 -2209 0
+-2326 -2336 0
+-1237 -1513 0
+3329 1501 0
+202 1350 0
+1178 -603 0
+2571 2745 0
+-186 1984 0
+411 2382 0
+2101 245 0
+3134 -2969 0
+1727 2311 0
+507 1581 0
+-3395 721 0
+-3111 -2377 0
+1561 -3112 0
+1553 -1208 0
+-3211 -3491 0
+-3209 -2306 0
+429 -3363 0
+1277 2619 0
+-126 -136 0
+3306 3033 0
+-3372 -3338 0
+1138 -1577 0
+2497 192 0
+-1026 -139 0
+-113 -2389 0
+1445 -2561 0
+-1348 -1307 0
+1708 -2519 0
+3484 3002 0
+-3401 1968 0
+-2645 -1102 0
+1156 -1625 0
+1243 -2658 0
+-2021 758 0
+-915 -1021 0
+-2904 701 0
+-2396 508 0
+-1281 1194 0
+1135 -596 0
+37 59 0
+-2734 -467 0
+-935 -1122 0
+3290 971 0
+2182 -2081 0
+-1873 3373 0
+1564 79 0
+-3362 -1489 0
+2894 1178 0
+764 -3381 0
+2869 48 0
+-3145 1852 0
+2689 -2902 0
+-3020 715 0
+-341 282 0
+1467 101 0
+3317 2988 0
+2923 -2278 0
+371 1450 0
+-3343 -1841 0
+233 93 0
+-517 836 0
+-1600 1060 0
+-2887 427 0
+2438 -3283 0
+2783 -652 0
+-886 -3169 0
+1902 -3260 0
+2752 -1886 0
+659 -626 0
+338 -1824 0
+-2846 -2427 0
+2165 -144 0
+-770 1101 0
+2896 2385 0
+2278 3431 0
+-1996 1299 0
+-1038 -1412 0
+-110 1100 0
+1987 -1238 0
+2235 2099 0
+2176 1161 0
+467 -2868 0
+2188 775 0
+-1116 3338 0
+497 -29 0
+-985 61 0
+-1154 122 0
+2679 2893 0
+-1919 -2925 0
+-598 -1630 0
+-1592 3469 0
+977 1361 0
+1055 -2080 0
+-2517 -1510 0
+-3438 -58 0
+-351 469 0
+4 -1154 0
+-2185 3387 0
+1688 -2983 0
+3160 638 0
+-2232 2753 0
+-1357 1417 0
+2394 -410 0
+925 1514 0
+771 -1529 0
+1952 3231 0
+-1270 2804 0
+57 -1644 0
+2659 -35 0
+-1659 -1810 0
+2926 -3297 0
+3096 -1278 0
+478 3321 0
+722 -2568 0
+-2266 2921 0
+1813 -1110 0
+1961 -1487 0
+2596 -672 0
+2014 -2371 0
+1779 -1976 0
+2956 -1185 0
+-1349 2168 0
+-2124 -2436 0
+-2653 -1408 0
+-1189 -1233 0
+2690 -2305 0
+-2373 -2814 0
+1324 2907 0
+-3086 956 0
+-845 1049 0
+-1212 3405 0
+29 -1478 0
+707 1501 0
+-1114 -1100 0
+-1480 -637 0
+-1703 -82 0
+636 -2223 0
+660 949 0
+3255 -2236 0
+-2166 1001 0
+2923 2769 0
+2807 -522 0
+782 90 0
+1203 -272 0
+-1208 3320 0
+2265 -239 0
+1621 -1802 0
+2687 -3160 0
+-1805 2645 0
+-2796 -1898 0
+-826 -2562 0
+-2158 368 0
+-1828 1733 0
+-954 2611 0
+946 2862 0
+216 -2242 0
+-1449 -3131 0
+1053 -822 0
+-15 407 0
+-2718 -2038 0
+961 1638 0
+2242 -989 0
+-1662 -3320 0
+-2872 397 0
+3447 1564 0
+-1555 -2878 0
+2269 241 0
+-558 2533 0
+2548 3433 0
+1419 -977 0
+-1272 1458 0
+-2858 1462 0
+-1881 304 0
+1911 1503 0
+-2966 2166 0
+521 -1542 0
+-1868 -859 0
+2395 -2868 0
+-2633 808 0
+-2680 1295 0
+-1795 995 0
+-1279 -884 0
+741 -767 0
+-747 -831 0
+-282 2402 0
+-25 2841 0
+2594 -1146 0
+-2418 -2833 0
+-538 -917 0
+-2825 2561 0
+1349 1327 0
+2136 1210 0
+-346 1592 0
+1880 3026 0
+-1081 -2747 0
+-3112 711 0
+-2407 -1967 0
+3426 1796 0
+-854 3369 0
+-1779 -1905 0
+1189 -2495 0
+929 -542 0
+-2692 2008 0
+-1867 2454 0
+844 -2504 0
+-1946 -2043 0
+-422 2288 0
+-2988 -825 0
+689 244 0
+1839 -126 0
+-573 -3335 0
+1350 -3213 0
+-3208 -2963 0
+3015 -953 0
+-3416 2136 0
+433 80 0
+2779 2739 0
+1108 -2148 0
+1497 620 0
+-770 1541 0
+2548 2130 0
+2508 -1999 0
+-2823 1826 0
+-95 877 0
+2228 -491 0
+-2980 1516 0
+1121 -324 0
+2467 2367 0
+2867 -77 0
+579 796 0
+2710 3157 0
+1026 2178 0
+-649 -3088 0
+-1806 -1105 0
+3239 1316 0
+-3292 -220 0
+-1179 1031 0
+-2373 1660 0
+948 886 0
+1850 1726 0
+-2231 2626 0
+2417 -3463 0
+-1658 -861 0
+1461 607 0
+1378 -898 0
+3465 1832 0
+-373 2885 0
+2280 1220 0
+2423 -1547 0
+576 -3495 0
+2788 182 0
+1936 3389 0
+2427 64 0
+3344 3302 0
+-1112 2438 0
+-296 -902 0
+-502 558 0
+-458 3310 0
+-1408 -495 0
+-781 -3157 0
+1170 2097 0
+1615 -1229 0
+-1085 2617 0
+-322 -598 0
+2467 -1901 0
+1707 2671 0
+-1702 2958 0
+-49 2188 0
+-2335 -2232 0
+2683 3174 0
+-126 -1647 0
+2309 1271 0
+3399 -700 0
+1381 1220 0
+-3035 2063 0
+-3292 803 0
+1535 2574 0
+2994 984 0
+-1038 66 0
+1374 1121 0
+-1008 2878 0
+-1690 -1970 0
+-1274 -809 0
+-1282 -3191 0
+1145 -33 0
+-1012 257 0
+-147 -1896 0
+-1659 2793 0
+-1336 1554 0
+-2766 -751 0
+555 -1605 0
+-3170 1153 0
+-60 1453 0
+-2202 -3121 0
+-2032 -369 0
+1032 2856 0
+1830 1894 0
+-933 1636 0
+703 3324 0
+-1035 1187 0
+2161 2166 0
+-848 -3211 0
+3302 3069 0
+3240 3202 0
+-3335 2666 0
+739 2254 0
+-540 -1814 0
+-3052 2669 0
+-2140 2574 0
+-3121 2366 0
+-2364 256 0
+-858 -173 0
+1552 1459 0
+139 232 0
+-2289 2254 0
+1546 -53 0
+-2757 3172 0
+1411 1799 0
+-471 -2378 0
+2011 2021 0
+1889 -2353 0
+-191 -2706 0
+1129 820 0
+2882 2859 0
+3498 1015 0
+1068 -1682 0
+1368 -2866 0
+-3109 3441 0
+1365 -25 0
+-1377 -534 0
+689 1680 0
+2225 2208 0
+69 130 0
+2535 2673 0
+2371 280 0
+-3424 -3477 0
+2514 2842 0
+2731 2895 0
+1229 -3489 0
+-2112 2175 0
+-1919 3315 0
+617 -1355 0
+-1026 1467 0
+-1856 2237 0
+-1444 1259 0
+1454 -593 0
+1727 -2635 0
+-2778 -2519 0
+114 -2149 0
+1321 217 0
+-1638 3295 0
+-3126 -862 0
+109 -1742 0
+-2773 -744 0
+-2916 -1339 0
+-1188 -3390 0
+-2690 -2032 0
+-2042 -2857 0
+-431 -173 0
+-1182 1124 0
+-3154 2853 0
+-1700 3427 0
+-3475 -3308 0
+-1621 2464 0
+1735 1321 0
+3244 455 0
+-3328 -230 0
+1661 -2300 0
+719 241 0
+-1748 33 0
+-1431 -2885 0
+-3037 363 0
+2844 -1547 0
+-2360 -2760 0
+2629 -3197 0
+-843 2103 0
+148 478 0
+2510 -117 0
+-350 -3492 0
+-1349 1158 0
+2037 -3279 0
+1207 3085 0
+2028 -1124 0
+1278 931 0
+-2069 -3319 0
+-1919 1518 0
+-2937 -2155 0
+1864 -1478 0
+2517 1297 0
+294 557 0
+163 -1691 0
+1406 2864 0
+529 1052 0
+-2618 -1215 0
+-580 -2840 0
+-3181 -2843 0
+-2072 -2420 0
+1521 1187 0
+-1156 3122 0
+-1998 -2535 0
+-1667 1473 0
+2657 -2839 0
+2556 2178 0
+2995 -933 0
+2160 -433 0
+-2828 1862 0
+996 3044 0
+467 -2020 0
+2166 2919 0
+-2679 1057 0
+936 471 0
+-1255 1998 0
+1256 93 0
+-548 1067 0
+-3437 -1036 0
+2689 -2538 0
+-3047 -2675 0
+-714 -461 0
+3465 2081 0
+2335 -1132 0
+-3007 674 0
+-3179 1597 0
+-2350 19 0
+-2188 2892 0
+-1012 460 0
+2297 3375 0
+1852 3480 0
+2532 -777 0
+-2337 2092 0
+3189 -1630 0
+2821 -76 0
+-703 -3243 0
+1533 -3439 0
+1123 -2590 0
+-1768 161 0
+181 -2837 0
+2386 1031 0
+1617 613 0
+-808 -2446 0
+155 -3224 0
+-2391 2016 0
+2976 -2988 0
+174 -2043 0
+-584 -2870 0
+2808 1545 0
+-3060 -1862 0
+-2846 1877 0
+2996 -1187 0
+-1263 1899 0
+-807 -1981 0
+-1034 1333 0
+-1903 1088 0
+-1102 2135 0
+1289 1029 0
+1303 133 0
+1005 2684 0
+1022 -3005 0
+2469 -2809 0
+-2009 -1621 0
+-1343 1621 0
+-1839 3107 0
+751 260 0
+39 2852 0
+-1713 3310 0
+-3118 -1063 0
+799 2089 0
+1012 3218 0
+-2917 -1300 0
+-1594 881 0
+-1540 -899 0
+-1533 2622 0
+2285 2479 0
+1746 489 0
+412 1851 0
+2787 -279 0
+-2906 -3458 0
+-2484 3344 0
+1978 2103 0
+992 -3255 0
+-156 1679 0
+2274 944 0
+-1246 -610 0
+-863 2736 0
+-2465 -1268 0
+-31 -1972 0
+1853 2019 0
+-1798 2620 0
+-506 -353 0
+-2967 1966 0
+592 -1245 0
+-3462 -1722 0
+3173 -375 0
+-601 1711 0
+-2920 -1797 0
+2002 -3170 0
+1715 -1787 0
+1320 -1893 0
+2827 -3365 0
+-117 1715 0
+-1076 -2992 0
+-936 -628 0
+1431 1573 0
+3341 -2439 0
+1265 -2737 0
+-977 995 0
+767 -3091 0
+2446 672 0
+3395 1697 0
+-1365 -1185 0
+1249 -2727 0
+-499 2644 0
+-2390 848 0
+-3010 170 0
+2702 1160 0
+1066 1668 0
+1995 -1789 0
+-2188 2654 0
+-2230 -1024 0
+-45 -992 0
+2048 -2302 0
+182 1834 0
+2232 -1030 0
+-1324 757 0
+-2561 3177 0
+-2019 1184 0
+-710 -3477 0
+-2376 -3189 0
+2807 -2481 0
+-961 -2370 0
+306 -2988 0
+2597 1448 0
+2789 -2906 0
+3454 -2055 0
+-2797 1417 0
+-2999 -2595 0
+-3095 1793 0
+2389 -247 0
+562 824 0
+-3479 -1316 0
+-3395 575 0
+-1311 -511 0
+1161 2279 0
+3033 -2965 0
+-2949 -3183 0
+-1920 -1032 0
+3163 2140 0
+626 2409 0
+-676 369 0
+2112 2593 0
+-2807 432 0
+-2745 -1467 0
+-1152 530 0
+-1077 2052 0
+-3416 -381 0
+646 -1062 0
+2272 3307 0
+-2309 655 0
+271 -455 0
+-982 1707 0
+-3069 -1704 0
+297 -1385 0
+-946 753 0
+1055 -2913 0
+-3245 709 0
+1619 169 0
+-2450 1404 0
+2543 -2063 0
+1847 -2757 0
+-522 -2355 0
+-2407 3059 0
+1422 -3286 0
+1691 3220 0
+1858 -1698 0
+512 737 0
+-2712 1666 0
+-3066 3201 0
+-1564 1555 0
+-1663 431 0
+-84 -751 0
+-712 1584 0
+-360 3375 0
+2882 -426 0
+-3411 -3151 0
+-3013 3064 0
+1407 -1547 0
+-2231 -2653 0
+2195 -588 0
+-375 1975 0
+-1952 -1605 0
+-2461 -3427 0
+-621 -1847 0
+-2429 -1210 0
+-2528 -3403 0
+-1234 -72 0
+-2459 -2834 0
+2831 67 0
+-3157 2616 0
+-201 -988 0
+-2120 -954 0
+-745 1382 0
+-1419 1030 0
+340 -2581 0
+1762 -2132 0
+3223 -2374 0
+369 1496 0
+-533 -1390 0
+1818 -200 0
+1006 -2334 0
+-2867 1576 0
+965 -2505 0
+2571 -318 0
+-3334 1672 0
+682 772 0
+-2151 -366 0
+-1004 -3029 0
+2148 933 0
+-1726 1220 0
+3165 -1917 0
+1360 -1028 0
+-1426 -1395 0
+-2367 -3321 0
+828 1485 0
+-752 340 0
+-2876 913 0
+-280 -293 0
+2355 2180 0
+-944 -1407 0
+2407 -976 0
+1468 2291 0
+-982 -625 0
+1288 -1133 0
+2236 -1765 0
+676 -2460 0
+-767 -3244 0
+-847 579 0
+-452 -1028 0
+2350 713 0
+92 1565 0
+-2302 2043 0
+-1242 53 0
+2365 1448 0
+152 -1342 0
+2342 -753 0
+3473 1211 0
+1597 -2154 0
+3262 -3068 0
+-2916 3101 0
+1918 2575 0
+2167 -414 0
+1713 3317 0
+-175 -3347 0
+2348 -2470 0
+2981 -2133 0
+-1342 -1306 0
+-3310 1414 0
+-561 2509 0
+-1010 1545 0
+1178 -3276 0
+1930 1499 0
+-680 -1222 0
+-1591 -2903 0
+-1554 -189 0
+-1615 -3090 0
+2089 -1402 0
+-1521 2320 0
+808 550 0
+-1718 15 0
+-2516 2557 0
+-1091 38 0
+2667 -507 0
+-1828 2956 0
+2194 14 0
+-304 -2912 0
+-930 -348 0
+-2009 -1544 0
+-1599 1631 0
+2559 -1832 0
+-1894 2507 0
+-2434 638 0
+2820 1341 0
+-2985 734 0
+-714 -3061 0
+1442 -247 0
+-1705 2229 0
+-45 2489 0
+2899 2160 0
+3458 2959 0
+-3448 -2400 0
+1553 3346 0
+714 -1489 0
+-510 -1696 0
+113 2977 0
+-984 -2095 0
+3461 2215 0
+51 -2695 0
+2474 -2930 0
+1228 -2793 0
+-2181 -597 0
+2517 -1404 0
+2716 2786 0
+-2845 582 0
+2135 2723 0
+969 2182 0
+-13 -469 0
+-886 3181 0
+542 2256 0
+2569 2187 0
+-1039 -1983 0
+2852 3189 0
+-1860 -171 0
+-828 -2772 0
+464 2080 0
+-3000 -915 0
+-2038 -3100 0
+3329 -2890 0
+-3259 1251 0
+-437 596 0
+3349 -1626 0
+3119 -1517 0
+637 -1432 0
+-1857 -178 0
+-2017 1501 0
+-1563 -2713 0
+2264 -431 0
+-1402 1498 0
+-1793 1927 0
+-520 1494 0
+-40 1292 0
+-1771 -2292 0
+1246 2132 0
+1183 -629 0
+1807 2646 0
+-2086 958 0
+-266 1790 0
+-2828 -1942 0
+2707 -1264 0
+-1203 1264 0
+347 1756 0
+-1238 -1474 0
+-3445 2751 0
+1263 -2409 0
+3092 -2315 0
+-482 1787 0
+490 -665 0
+-3105 -639 0
+-1823 1480 0
+1280 -2604 0
+-73 3254 0
+-2063 -2864 0
+2861 574 0
+-2434 -3030 0
+-1910 1114 0
+-2123 -1466 0
+-647 6 0
+-2399 -3150 0
+964 -308 0
+1565 1181 0
+-1349 768 0
+-615 -3205 0
+-492 -539 0
+-2571 3060 0
+1451 -1644 0
+-2174 -2821 0
+696 2664 0
+-2799 -3186 0
+2099 930 0
+750 1738 0
+1453 -356 0
+781 -241 0
+-2981 -2580 0
+3176 -1292 0
+1529 -2631 0
+-800 -1475 0
+-2769 -2112 0
+3038 1260 0
+2626 -1513 0
+1531 2138 0
+136 -2665 0
+-3118 -183 0
+-912 -1973 0
+1629 -1110 0
+2350 916 0
+-71 2878 0
+-290 2603 0
+-2643 2831 0
+2457 -2590 0
+-2452 3219 0
+2086 1574 0
+1638 -1112 0
+2405 2375 0
+-701 -1672 0
+-2642 -2810 0
+-2015 -1062 0
+635 -3044 0
+-2925 -2949 0
+-954 1724 0
+-206 3078 0
+-1362 1586 0
+204 -3052 0
+532 -1129 0
+1001 17 0
+-2342 1222 0
+-2323 -3276 0
+-1692 2367 0
+-834 -1007 0
+-396 758 0
+-2350 -3443 0
+2670 1927 0
+-3261 1805 0
+-1503 369 0
+196 -102 0
+-1644 -284 0
+-912 1173 0
+-383 1906 0
+2238 2113 0
+-2920 1577 0
+2482 1283 0
+-2907 -810 0
+1796 1489 0
+-3380 -2416 0
+-3064 -2099 0
+-2018 -2677 0
+2353 -2163 0
+-1828 952 0
+120 1294 0
+-386 2628 0
+3015 2120 0
+-2389 186 0
+1124 1898 0
+-2789 -398 0
+2363 3413 0
+2799 1500 0
+-3099 -2444 0
+-1397 2166 0
+-2187 -307 0
+1822 3028 0
+-2777 -2587 0
+-2500 -206 0
+-2044 2053 0
+-983 760 0
+2847 566 0
+-1274 -1655 0
+-18 -1037 0
+-2453 -1284 0
+-1990 294 0
+3355 -2352 0
+618 3241 0
+-957 2182 0
+203 1046 0
+-1980 -1436 0
+-1162 336 0
+3036 1844 0
+-1990 -2515 0
+-2637 244 0
+-2270 1355 0
+484 -29 0
+-2784 -2162 0
+-275 -3261 0
+2569 1552 0
+-1715 131 0
+2032 2049 0
+510 923 0
+2276 2505 0
+-2314 3445 0
+108 -2861 0
+-2203 1819 0
+2716 3376 0
+3265 -1134 0
+-2651 -2965 0
+1974 -2439 0
+2664 8 0
+476 3074 0
+-2058 -965 0
+1555 -2031 0
+2653 -1700 0
+-1913 -714 0
+-2515 -723 0
+565 1737 0
+-1104 1206 0
+1696 -2162 0
+3213 -1012 0
+2410 -2038 0
+-1450 480 0
+3070 926 0
+1371 3073 0
+1310 -1665 0
+-3053 494 0
+148 -1501 0
+2282 -1129 0
+2055 -2754 0
+3403 -3367 0
+-926 -1557 0
+2442 733 0
+2438 2666 0
+-1766 3239 0
+2314 1775 0
+251 -2285 0
+2568 -2310 0
+1271 1942 0
+-2969 994 0
+-1127 -2162 0
+-623 -2055 0
+985 802 0
+-3031 -893 0
+-1979 2086 0
+-1216 16 0
+3071 1183 0
+1956 -950 0
+-402 -3146 0
+938 -3412 0
+3492 -1721 0
+-3289 2803 0
+-2290 2813 0
+2284 -2491 0
+1287 -894 0
+2349 2823 0
+-1455 274 0
+-668 816 0
+897 182 0
+1649 -2452 0
+-874 444 0
+-1093 -1511 0
+-3108 -2121 0
+748 -1207 0
+412 -1096 0
+1664 -1740 0
+948 -3246 0
+-1406 -3036 0
+462 1936 0
+-2913 434 0
+2351 976 0
+-498 1802 0
+162 1990 0
+1309 886 0
+-2150 -1353 0
+2829 -2335 0
+867 1345 0
+716 2799 0
+833 -2665 0
+2456 2241 0
+363 -943 0
+-959 -428 0
+-2460 -3164 0
+-2669 1579 0
+-2769 314 0
+1202 -3051 0
+3386 -3365 0
+3182 -1460 0
+-2835 -1716 0
+-730 -3402 0
+424 1478 0
+-1564 3126 0
+2481 -816 0
+3051 -2217 0
+2582 1779 0
+-686 -2307 0
+-2140 -313 0
+2666 2559 0
+-3279 2680 0
+94 2174 0
+-2245 -2756 0
+-3357 -1233 0
+-54 1201 0
+2750 -759 0
+-529 -759 0
+1286 -2783 0
+355 -2407 0
+768 -3022 0
+571 -1309 0
+250 2864 0
+2054 1042 0
+-572 -2693 0
+-2873 -795 0
+3269 -1723 0
+2039 571 0
+-1710 2320 0
+-2370 2707 0
+-2669 -2922 0
+-2635 2525 0
+2263 -806 0
+1668 -2294 0
+1677 1559 0
+-1145 -3022 0
+2221 1635 0
+1969 208 0
+-2911 -2360 0
+-92 1751 0
+3101 -490 0
+657 -2704 0
+3299 -2548 0
+2891 298 0
+-411 -2700 0
+2772 16 0
+2537 -727 0
+260 -1483 0
+1533 1129 0
+1256 -1021 0
+-1095 1997 0
+2139 2096 0
+726 1428 0
+703 2179 0
+-319 2368 0
+1881 -438 0
+-2324 2102 0
+-1899 1133 0
+3192 -3478 0
+1923 879 0
+-3368 2645 0
+-248 -310 0
+729 -1144 0
+-3029 2523 0
+3147 1931 0
+-746 -1038 0
+2692 2267 0
+3088 263 0
+1950 26 0
+-731 2764 0
+3013 -568 0
+1988 894 0
+-714 -3180 0
+2387 1897 0
+-1733 2694 0
+308 -775 0
+2363 956 0
+1135 1053 0
+-627 3189 0
+1210 749 0
+3406 -3383 0
+1146 372 0
+-2443 699 0
+2521 1508 0
+-2273 -977 0
+-2683 -556 0
+150 2424 0
+826 -3282 0
+-102 -3025 0
+1444 626 0
+2961 -3136 0
+-2797 -3365 0
+-108 1478 0
+-2871 -2600 0
+-2276 -879 0
+-1196 -334 0
+-326 2544 0
+3254 2155 0
+993 1196 0
+2934 -1859 0
+1902 -2331 0
+-1869 -793 0
+2954 -246 0
+-2333 1945 0
+-437 -927 0
+658 -2905 0
+-1372 -1939 0
+1661 346 0
+134 1336 0
+-608 2647 0
+-301 -709 0
+-3472 -1792 0
+143 598 0
+2300 2450 0
+-604 976 0
+1186 2328 0
+-499 3321 0
+2292 1166 0
+-1859 1726 0
+1029 2238 0
+-2736 -1971 0
+2839 1707 0
+-1807 -2206 0
+505 811 0
+-1196 -2109 0
+-3099 -2580 0
+1649 3288 0
+823 349 0
+-1361 1594 0
+-3238 -640 0
+2483 1037 0
+-379 -489 0
+-2480 1562 0
+2372 -35 0
+-1447 -3198 0
+1848 2328 0
+-2364 -406 0
+222 -146 0
+391 2190 0
+3030 2343 0
+-1776 586 0
+1046 1167 0
+443 1263 0
+-910 -1998 0
+512 1875 0
+-3448 3437 0
+3203 -1107 0
+-1305 1240 0
+-353 227 0
+-2446 391 0
+-2257 1679 0
+1743 2941 0
+2579 2988 0
+-3336 2865 0
+1550 -2269 0
+421 -2434 0
+-1834 2172 0
+-553 169 0
+716 -2477 0
+2024 1213 0
+-3232 -129 0
+124 -2605 0
+-3465 -1028 0
+1382 -1158 0
+2622 495 0
+-2393 2485 0
+2511 -2066 0
+3378 2135 0
+-479 -2677 0
+-1756 -2276 0
+3155 -2105 0
+-3265 752 0
+3092 2062 0
+1910 -1591 0
+-2507 -1954 0
+3435 1993 0
+-2852 -1015 0
+-2950 2827 0
+-3093 140 0
+1193 -1744 0
+2138 -2768 0
+-1350 1468 0
+-1014 -2740 0
+-509 1361 0
+2402 967 0
+2165 955 0
+-1724 1115 0
+1986 -200 0
+3162 1170 0
+325 -1369 0
+2558 2287 0
+-1841 -2926 0
+-2523 2593 0
+-686 2945 0
+-1142 -1825 0
+3417 250 0
+1492 -590 0
+-557 3155 0
+2566 -2681 0
+2089 1649 0
+2499 2300 0
+-789 -2093 0
+2303 -1557 0
+2442 -1797 0
+3226 2250 0
+-845 -3397 0
+-345 -817 0
+1183 46 0
+3207 3364 0
+588 -2426 0
+-2374 -1609 0
+2289 -1749 0
+2291 2297 0
+-2402 -3046 0
+1270 1680 0
+-2827 -2632 0
+569 -3029 0
+-952 -546 0
+-2435 1140 0
+-2060 3237 0
+-3386 -486 0
+726 -1532 0
+-392 -946 0
+1436 2252 0
+-2573 -3160 0
+-233 -3349 0
+2360 -391 0
+376 -1769 0
+2161 2547 0
+-2285 1381 0
+-290 -2395 0
+-2405 -229 0
+2927 -1502 0
+93 2328 0
+-2337 -3371 0
+-2846 2973 0
+-394 -893 0
+2598 1854 0
+-1101 1113 0
+1896 -1483 0
+1228 982 0
+-833 -273 0
+2527 -2381 0
+-1783 3379 0
+-372 1354 0
+3046 2357 0
+457 651 0
+1310 -174 0
+1617 358 0
+-964 -2118 0
+774 1863 0
+-2852 -1234 0
+-2514 2693 0
+2295 -2705 0
+-1519 1602 0
+-1989 -1866 0
+2930 -2554 0
+-2855 -383 0
+2171 -2685 0
+487 1245 0
+3005 1558 0
+1987 1051 0
+-617 2835 0
+927 -2710 0
+-3424 -749 0
+-2935 2906 0
+3376 -3127 0
+-2508 -3362 0
+-1309 313 0
+2181 -3301 0
+-515 -1902 0
+-335 -1798 0
+2875 -3037 0
+177 -414 0
+-1032 414 0
+912 2052 0
+1694 2016 0
+227 3172 0
+-952 2182 0
+2684 -1545 0
+-3025 867 0
+23 3253 0
+1322 1094 0
+-441 -953 0
+2010 2508 0
+1285 2976 0
+-252 -23 0
+-2137 1494 0
+-2648 1361 0
+142 224 0
+-1279 -196 0
+962 353 0
+-617 -1707 0
+1540 638 0
+2841 -1227 0
+-2226 3137 0
+1581 -544 0
+2111 -3185 0
+2084 1608 0
+-1029 -2517 0
+1321 47 0
+1907 -1150 0
+-1343 -2723 0
+-1597 -1443 0
+-3357 1400 0
+-2753 -1856 0
+-965 882 0
+-1923 -138 0
+622 -2602 0
+868 275 0
+2628 2279 0
+-1857 402 0
+-2207 -180 0
+-2886 -2794 0
+1997 -2343 0
+74 -161 0
+2665 -3224 0
+-3014 -2243 0
+-2995 2865 0
+1242 3064 0
+-1568 -1407 0
+-1778 1303 0
+876 -694 0
+2626 -1644 0
+116 1822 0
+-1365 -1770 0
+-1586 2211 0
+-901 2776 0
+-1518 -3421 0
+1382 69 0
+-1368 -3206 0
+-1616 -2283 0
+2716 -1361 0
+1169 1439 0
+-765 -2081 0
+1923 633 0
+-2038 3235 0
+-1775 2177 0
+-565 -135 0
+-3230 -413 0
+-3021 3025 0
+1403 3442 0
+-1112 -332 0
+-3379 -2974 0
+-1516 1837 0
+-2511 -2933 0
+-2394 1757 0
+-1983 -1069 0
+-441 -2191 0
+-1557 510 0
+655 2203 0
+1805 -2451 0
+-884 -3111 0
+1299 -2970 0
+-2109 2315 0
+3395 2093 0
+-477 2179 0
+2916 -1202 0
+-30 604 0
+-1580 -1654 0
+-341 2358 0
+-307 1831 0
+-3054 -3006 0
+529 3284 0
+2382 3038 0
+1152 -1868 0
+643 -3015 0
+-2026 -1186 0
+-2433 -505 0
+1871 1654 0
+2980 -873 0
+-2758 -1014 0
+2619 3436 0
+1291 1451 0
+-775 -656 0
+2134 1665 0
+-1885 -304 0
+1004 -1681 0
+-3116 492 0
+-3210 -512 0
+-2058 2599 0
+-2251 -1782 0
+1514 2324 0
+779 -1213 0
+-2657 2920 0
+3474 643 0
+-153 1962 0
+2640 -2190 0
+-2921 1045 0
+-1837 1195 0
+-1764 3498 0
+506 1706 0
+2726 3322 0
+2224 -2289 0
+-1599 -2238 0
+-3224 -1936 0
+-2215 815 0
+2307 -402 0
+2027 3113 0
+-1608 -2195 0
+-2443 -33 0
+2481 -42 0
+3072 -1318 0
+-3207 1938 0
+2734 2472 0
+-1261 2111 0
+-3272 2320 0
+-3041 -2213 0
+3030 -3149 0
+-1067 2589 0
+-1970 -3432 0
+-160 -97 0
+-1122 934 0
+-1941 2170 0
+1268 -3091 0
+-2004 -2791 0
+-549 -44 0
+-2129 2253 0
+3039 -2274 0
+-555 -2592 0
+-1439 -559 0
+-3071 1592 0
+218 -1646 0
+2986 254 0
+3375 1650 0
+-2930 2602 0
+2587 2168 0
+-246 1318 0
+-1285 -1564 0
+1103 1693 0
+-837 41 0
+-774 -356 0
+-592 2652 0
+2408 2490 0
+-3129 1136 0
+2417 -1559 0
+-828 -1057 0
+2776 3251 0
+2588 434 0
+86 510 0
+2795 -699 0
+-1415 -3196 0
+846 -918 0
+-3284 -3463 0
+2099 -2543 0
+-269 -1487 0
+-2084 2717 0
+2709 2847 0
+2888 205 0
+-3233 1846 0
+733 340 0
+-1740 -1128 0
+-1322 1712 0
+-2463 -946 0
+-1618 -3216 0
+-3389 -2830 0
+2607 -78 0
+-2935 2918 0
+1187 -684 0
+61 3264 0
+1981 -2973 0
+1174 -1991 0
+-580 -117 0
+-768 3244 0
+2481 -2214 0
+1744 2083 0
+1389 -2357 0
+1078 2831 0
+96 -502 0
+2721 -560 0
+698 268 0
+-123 -1340 0
+-3331 -1020 0
+1686 -1005 0
+-2369 1023 0
+-1981 3003 0
+2657 -3345 0
+2496 -1677 0
+-1081 1159 0
+-1954 308 0
+-2553 -3360 0
+-929 -312 0
+724 -3242 0
+1688 -1281 0
+-2750 2721 0
+1530 -1439 0
+-2841 315 0
+1597 -3080 0
+-1949 -1387 0
+-302 2675 0
+-3033 230 0
+-1661 2064 0
+2636 -2656 0
+2182 3275 0
+3192 -2817 0
+711 -1937 0
+-1834 2036 0
+-1522 -3161 0
+126 2274 0
+1401 2697 0
+2123 -1201 0
+-2447 -2326 0
+-1064 3426 0
+537 -932 0
+1685 -1006 0
+-678 760 0
+-557 2591 0
+371 2494 0
+140 -3297 0
+-1168 -1224 0
+264 505 0
+-3011 -3171 0
+904 901 0
+1342 2385 0
+1194 356 0
+3262 -558 0
+-3043 2488 0
+-2476 -2941 0
+-1359 39 0
+-1381 -2064 0
+-384 366 0
+1125 124 0
+725 -384 0
+3329 -388 0
+1296 -81 0
+-3086 -3010 0
+-2966 1814 0
+-2756 3131 0
+-3342 1365 0
+2746 -3286 0
+-1968 -457 0
+1110 1167 0
+219 2676 0
+-769 749 0
+-1733 1080 0
+2939 628 0
+-706 246 0
+-3481 3422 0
+200 245 0
+1222 215 0
+2659 1244 0
+1575 -161 0
+1054 -795 0
+-1951 3272 0
+3415 2609 0
+49 -1844 0
+2907 1557 0
+3500 -2068 0
+1161 2586 0
+1804 -2542 0
+-486 -3350 0
+1258 -1594 0
+-3139 -1067 0
+3231 -3434 0
+1498 -3265 0
+-3262 657 0
+1644 158 0
+2487 -2805 0
+2535 1909 0
+-2275 1464 0
+704 1599 0
+-1940 3072 0
+3024 -1435 0
+1168 -208 0
+1832 2758 0
+3065 291 0
+-1216 2391 0
+-2202 -1902 0
+-2884 3340 0
+-1533 1260 0
+2247 -342 0
+1286 2725 0
+-915 -436 0
+545 2578 0
+-2926 1749 0
+-1823 -1033 0
+150 -2529 0
+284 -2738 0
+2984 2445 0
+128 386 0
+-153 1521 0
+1547 2456 0
+-2067 -2600 0
+-854 1595 0
+-1006 -2686 0
+912 319 0
+1502 1164 0
+-933 -2672 0
+2369 -1782 0
+1291 1388 0
+1441 -246 0
+620 -3298 0
+2464 -2913 0
+-906 271 0
+-2495 537 0
+2982 1013 0
+401 -2267 0
+-30 1549 0
+641 265 0
+-135 2884 0
+-2544 -2474 0
+2028 2356 0
+-677 951 0
+-2601 2010 0
+1257 -1194 0
+930 2757 0
+-1037 2829 0
+-3082 269 0
+1009 2075 0
+-1985 560 0
+323 2821 0
+3473 2425 0
+2105 2515 0
+-2860 1104 0
+-1292 1567 0
+2645 2999 0
+1078 -3191 0
+2503 -2224 0
+1760 -2248 0
+-2874 -2961 0
+1290 1013 0
+-247 -1045 0
+2549 -2411 0
+948 -1848 0
+-3482 -1587 0
+1788 -1808 0
+-1855 -1780 0
+-1727 -2707 0
+-3217 -165 0
+2335 -1500 0
+322 3076 0
+-2319 -3294 0
+2960 -1284 0
+1691 1295 0
+146 -1274 0
+-815 1387 0
+698 -494 0
+2761 915 0
+-2403 -850 0
+-1913 22 0
+2023 -2620 0
+-896 -260 0
+-3489 2913 0
+2013 -1334 0
+2351 2243 0
+-320 -1192 0
+146 -445 0
+-2685 -3430 0
+-1772 -1421 0
+2964 209 0
+3214 -255 0
+-421 936 0
+-3416 882 0
+2835 2959 0
+615 -1538 0
+-370 -1007 0
+-517 1308 0
+-608 -2932 0
+-1137 2047 0
+-1276 827 0
+2660 1427 0
+282 1474 0
+788 696 0
+979 -3298 0
+-630 -1475 0
+2621 1558 0
+-593 -1813 0
+-3086 3059 0
+-848 739 0
+1871 2026 0
+1724 -315 0
+-923 698 0
+1218 -2790 0
+3079 -595 0
+-951 -2040 0
+1548 2781 0
+-2585 -25 0
+2233 113 0
+-1272 3158 0
+540 247 0
+2528 2095 0
+382 -2279 0
+-1598 1868 0
+-2417 -2040 0
+1168 -2456 0
+-615 356 0
+-2995 580 0
+369 -1790 0
+361 1503 0
+3074 -2075 0
+-1100 -816 0
+1590 1517 0
+-1420 -2658 0
+-3040 -421 0
+-3028 -2568 0
+-1826 2793 0
+-1242 2929 0
+1077 -1987 0
+-1945 2192 0
+-2157 -2792 0
+-681 2112 0
+1464 -2755 0
+-31 888 0
+-2680 543 0
+-976 1238 0
+1474 729 0
+-2526 3452 0
+-3129 1259 0
+1194 -531 0
+-2402 -148 0
+1607 -789 0
+-1215 1208 0
+1302 -744 0
+-2169 -2693 0
+-892 -2376 0
+1888 -831 0
+-5 2237 0
+1145 1339 0
+3419 39 0
+-3458 3325 0
+192 -535 0
+2040 54 0
+-2371 -3452 0
+-2565 338 0
+-2142 -1476 0
+-1459 2539 0
+-1440 -2512 0
+-324 -2657 0
+-2904 -2875 0
+2918 -875 0
+-1858 2546 0
+-1608 3492 0
+-1958 -37 0
+-780 1295 0
+-1652 117 0
+-2643 2490 0
+-2465 -3490 0
+-1292 171 0
+-1690 572 0
+2100 47 0
+-2030 474 0
+2658 -1529 0
+2075 -2785 0
+-919 -3263 0
+138 1767 0
+616 1078 0
+-1153 2103 0
+-2212 -309 0
+2232 -50 0
+2552 -2200 0
+-3224 2343 0
+-3258 -527 0
+-1858 1323 0
+-729 1278 0
+-550 1634 0
+-2029 -3 0
+-2726 2150 0
+1631 2903 0
+2333 1998 0
+-352 1985 0
+1316 -1182 0
+-2208 427 0
+2340 -2019 0
+502 1629 0
+2074 -1504 0
+1128 -1559 0
+2651 2051 0
+2580 -1711 0
+-341 2441 0
+1853 -1806 0
+-1427 -1561 0
+2345 -1655 0
+3469 1123 0
+563 1057 0
+-2738 2716 0
+-141 2213 0
+319 -3030 0
+-519 2863 0
+-1660 373 0
+613 1423 0
+1685 1678 0
+-1727 -1962 0
+-2341 2781 0
+2103 -2963 0
+-2645 1092 0
+-328 -1609 0
+-1377 -2492 0
+-509 2571 0
+2959 941 0
+3482 2150 0
+579 1303 0
+-2923 -1602 0
+-3258 -1732 0
+3146 2073 0
+1822 3012 0
+1478 -1024 0
+-2831 2122 0
+-1367 -1634 0
+-2201 -1125 0
+201 -190 0
+1918 44 0
+-1761 -2586 0
+-3179 -2413 0
+-681 -2092 0
+1901 2822 0
+1484 1711 0
+391 -1807 0
+-2062 550 0
+418 -2044 0
+-2708 -2261 0
+-3227 43 0
+1110 -417 0
+-2848 -2777 0
+-694 1016 0
+324 1676 0
+1319 -2865 0
+-2817 414 0
+2537 912 0
+-347 2670 0
+3089 966 0
+-2825 3269 0
+1229 -1103 0
+107 437 0
+1502 -3162 0
+1209 -2843 0
+2749 2507 0
+1209 1051 0
+-1263 3234 0
+2258 606 0
+-287 -1539 0
+985 1819 0
+-1776 -3304 0
+1555 -3228 0
+2901 -399 0
+-411 -1407 0
+3465 2261 0
+-642 2209 0
+-1073 1321 0
+-2221 1044 0
+-1119 -3481 0
+3494 -3476 0
+1943 4 0
+-1823 527 0
+2550 -510 0
+2154 -619 0
+2964 -1784 0
+-1578 -2181 0
+174 -1869 0
+-1869 3062 0
+2218 2666 0
+-975 2328 0
+-2480 3216 0
+2054 -859 0
+-2275 3202 0
+-1969 -3048 0
+545 2309 0
+-3261 2725 0
+1435 -2518 0
+-1582 2434 0
+682 -1694 0
+-2485 -753 0
+-1694 -1611 0
+2338 2303 0
+2575 -1795 0
+2981 -813 0
+2910 -3325 0
+1176 1553 0
+-908 -1093 0
+2298 -1151 0
+-2301 -653 0
+421 520 0
+-566 1830 0
+-3335 -961 0
+-2474 235 0
+-3043 2006 0
+1532 343 0
+-1444 -820 0
+-756 -1382 0
+-927 671 0
+-717 -1538 0
+-1644 -3294 0
+3283 765 0
+1815 -3276 0
+-2369 -175 0
+-1612 557 0
+2467 43 0
+-340 -1385 0
+3214 1607 0
+1921 -1973 0
+1428 -1029 0
+-2009 3088 0
+-923 1189 0
+757 -1402 0
+183 -3116 0
+-2157 -1578 0
+423 3228 0
+1084 546 0
+-938 -2253 0
+-2378 -323 0
+-1602 -2334 0
+3257 2082 0
+-1679 -461 0
+2698 -2207 0
+-1723 -1962 0
+-134 -1818 0
+-582 517 0
+2410 -2759 0
+-2351 -2870 0
+-1828 -2046 0
+3149 -342 0
+1046 -1965 0
+982 2075 0
+-2934 -2187 0
+963 -2974 0
+-43 384 0
+-325 -1000 0
+1204 2158 0
+2052 -3197 0
+1548 -2366 0
+2088 145 0
+-1333 1536 0
+1535 2167 0
+3242 471 0
+2303 2217 0
+1016 858 0
+3375 -2665 0
+2216 -452 0
+2470 2325 0
+2927 2598 0
+1370 -2539 0
+314 1176 0
+-980 -2622 0
+-768 -1563 0
+-534 -2064 0
+-2257 -52 0
+-3111 1529 0
+-2737 -3499 0
+-1890 1716 0
+2046 1319 0
+2785 1520 0
+-420 693 0
+310 -203 0
+-1771 293 0
+2631 -419 0
+2447 -2473 0
+2955 -3040 0
+-80 -1025 0
+-1300 -2916 0
+-2127 2673 0
+-2865 1503 0
+-3130 2517 0
+116 -627 0
+-3353 3400 0
+-287 807 0
+-298 3230 0
+-876 3317 0
+2753 -1939 0
+-1865 3252 0
+-1736 -254 0
+1704 914 0
+-479 862 0
+252 -1131 0
+3500 2147 0
+5 378 0
+-953 1375 0
+-2258 811 0
+3395 2344 0
+-1945 3154 0
+-570 -3188 0
+-2184 -1370 0
+-1678 -3058 0
+-1980 -941 0
+2251 -2249 0
+-3443 1501 0
+625 -1435 0
+-101 1492 0
+1604 1491 0
+-1997 -2470 0
+-2877 -1858 0
+1962 -789 0
+-1614 1721 0
+2598 -1393 0
+-65 2290 0
+416 -836 0
+1460 2307 0
+-1687 131 0
+3304 -2420 0
+-1287 -2478 0
+2745 956 0
+-420 -1564 0
+-1676 650 0
+634 -611 0
+-311 -2050 0
+-694 3060 0
+-668 -2262 0
+-1687 1354 0
+-1938 2773 0
+-1158 2842 0
+-1189 -1425 0
+-1476 416 0
+-1453 283 0
+-1145 -2642 0
+1822 -266 0
+-2643 939 0
+428 3438 0
+1048 918 0
+2771 559 0
+-878 2533 0
+3439 -976 0
+-2658 2895 0
+1521 986 0
+1280 1743 0
+2136 3293 0
+960 -1918 0
+3054 976 0
+-3450 2762 0
+2822 -971 0
+-355 2958 0
+27 2539 0
+2367 -3015 0
+-2462 -684 0
+-18 150 0
+1578 -3 0
+1132 -1415 0
+-3001 -2433 0
+-2752 -1731 0
+-2333 -584 0
+-1550 -2201 0
+-2906 431 0
+-1986 2495 0
+-1705 -1590 0
+-1761 -3290 0
+1891 -1117 0
+-611 419 0
+116 -642 0
+1101 2177 0
+-2226 3429 0
+-3188 -774 0
+1420 -728 0
+1869 942 0
+2738 -1400 0
+-1406 -2792 0
+-2821 -3187 0
+2776 928 0
+971 -2212 0
+3280 2049 0
+-1850 880 0
+-3293 476 0
+-380 2380 0
+-193 3306 0
+-1605 -3435 0
+-1356 -2381 0
+-1719 -2984 0
+578 -2699 0
+-809 -2645 0
+-1900 3132 0
+1494 -564 0
+182 1200 0
+-3362 -2666 0
+-1997 44 0
+2639 -1714 0
+-1059 -2144 0
+990 2469 0
+-907 1668 0
+-612 587 0
+-2600 2580 0
+2921 -178 0
+-3292 1632 0
+-3248 -2147 0
+758 2674 0
+-2078 -1136 0
+-244 -1885 0
+-1534 -1649 0
+757 3094 0
+2473 1594 0
+3493 1193 0
+-3072 547 0
+-629 -2075 0
+-1364 -2191 0
+-2514 -2462 0
+-3047 1180 0
+-1337 481 0
+-545 2572 0
+1800 277 0
+-104 -1699 0
+-544 -3440 0
+3485 -14 0
+2705 3045 0
+3084 2554 0
+1498 1230 0
+1608 2579 0
+566 1278 0
+-180 -1403 0
+3250 2630 0
+3472 2232 0
+-1618 -1427 0
+2500 2122 0
+15 -2539 0
+152 -1529 0
+-974 -1388 0
+2282 1876 0
+-632 -1766 0
+-148 -3279 0
+2273 -2967 0
+1686 1770 0
+-1440 3322 0
+2426 -2309 0
+656 1053 0
+2986 -1470 0
+433 -720 0
+231 -2347 0
+-1703 -276 0
+-3402 -1587 0
+-2853 -2933 0
+-2758 -1678 0
+1938 -2851 0
+-2158 1540 0
+-555 3172 0
+-2757 -3289 0
+-331 846 0
+2109 1574 0
+-341 3240 0
+-2747 -3012 0
+647 -2607 0
+3183 1895 0
+2906 1023 0
+-84 -3120 0
+876 647 0
+-2899 -946 0
+-3225 -2837 0
+2102 -155 0
+1210 -2053 0
+3409 1129 0
+-2014 -1475 0
+-2963 2512 0
+1561 3322 0
+1878 697 0
+-1451 -574 0
+2381 -2801 0
+3490 -982 0
+-1802 -2712 0
+-761 2413 0
+1781 -561 0
+1082 799 -1149 0
+-1062 -1529 2652 0
+2363 500 3306 0
+2250 -91 1922 0
+2147 1075 -2259 0
+-268 -2018 2800 0
+-2562 -2265 1995 0
+999 3369 -3209 0
+-2979 1282 -3420 0
+-422 538 2493 0
+3131 -2637 326 0
+1314 2297 -3477 0
+1496 -1649 -2473 0
+-1039 3316 1521 0
+-2025 1801 -3438 0
+-1859 -52 -1217 0
+-2931 3263 2609 0
+2518 -714 1969 0
+-2024 1639 1828 0
+1574 -1601 -2914 0
+-666 1107 2267 0
+1095 1354 3424 0
+-596 1067 -3108 0
+-997 2541 3470 0
+-2295 1220 1417 0
+1934 -1906 2801 0
+1864 2368 1252 0
+-179 -1232 -3158 0
+780 2470 3290 0
+689 -483 -2479 0
+2542 -482 -452 0
+-1619 177 2032 0
+2777 -3275 3456 0
+-1348 86 556 0
+-2757 1958 3153 0
+1639 1848 3142 0
+-1903 -1115 1746 0
+7 1857 -1532 0
+2713 2548 -3197 0
+-2673 848 -2193 0
+-2067 -2696 -2452 0
+-2714 97 2934 0
+3475 -2865 -2721 0
+144 275 1231 0
+2296 2425 -1534 0
+144 -1449 -515 0
+1676 -1256 57 0
+-114 -128 -1862 0
+-374 -1281 -1198 0
+-619 -2915 -3136 0
+661 1049 -2618 0
+-2510 1292 2564 0
+953 -1379 2156 0
+429 1747 3177 0
+-721 -2937 3339 0
+1084 2352 -2608 0
+-196 2262 1881 0
+2836 503 414 0
+455 -1688 2552 0
+-1645 -1660 -3408 0
+-155 1997 -3125 0
+-475 -2721 1308 0
+562 435 1356 0
+223 -1691 512 0
+3275 514 3238 0
+-2933 1414 -2399 0
+-2533 -858 2110 0
+2854 -2808 236 0
+-637 2474 -2369 0
+-3068 1641 -78 0
+504 1271 -939 0
+-2955 3042 -1724 0
+-2478 822 866 0
+-2448 1516 329 0
+906 2528 -3479 0
+-425 -2115 2400 0
+-1864 -3024 -2167 0
+-3056 2326 2928 0
+-1435 1194 -3296 0
+3336 -1419 -3246 0
+1469 1879 -1865 0
+-3136 -2632 1634 0
+-408 2442 -1567 0
+-2424 -244 2452 0
+-1640 -739 -1151 0
+955 655 2702 0
+111 -2748 -1497 0
+-541 -2070 -1137 0
+-1350 3138 -178 0
+-1631 -877 1374 0
+-2854 1146 -1661 0
+2528 -2684 1015 0
+-2656 -2585 1036 0
+1361 281 479 0
+-3088 -2275 -979 0
+-2491 -2476 340 0
+482 2409 -1142 0
+346 1477 -1522 0
+-3150 1398 381 0
+389 -485 433 0
+2811 1795 -3058 0
+2424 -1502 3205 0
+1254 -2941 -2979 0
+-1743 -346 -2559 0
+1516 695 2110 0
+-3464 550 -3207 0
+-394 147 -3462 0
+-1039 -3400 -447 0
+1442 2007 -1830 0
+2514 512 -1846 0
+835 542 -68 0
+-1491 2379 2356 0
+1488 56 373 0
+766 2692 102 0
+337 -866 2323 0
+-3469 -1020 -1042 0
+-758 -1548 670 0
+1977 -297 45 0
+2535 -2484 83 0
+2747 1700 -1267 0
+-2822 180 -1745 0
+-1429 255 2139 0
+3380 -3081 -2647 0
+846 -436 3407 0
+-2416 937 -2764 0
+-1138 -3439 -2428 0
+2539 686 3333 0
+217 -3439 -3388 0
+-2923 767 -564 0
+377 3326 93 0
+16 1176 2548 0
+-1637 -459 879 0
+-1647 3 -892 0
+671 -624 -173 0
+-2110 665 1862 0
+-1025 1988 -1831 0
+2303 2621 -2290 0
+3053 1094 -2022 0
+2945 2301 629 0
+-1254 3023 1174 0
+2675 3261 899 0
+2197 -1559 -2463 0
+1317 785 1570 0
+-896 -1998 -1081 0
+2169 1865 752 0
+3075 1736 -1089 0
+-927 -2336 -1103 0
+2834 -3313 -1329 0
+2924 2395 1919 0
+-547 2309 2278 0
+-1949 2987 1187 0
+2819 -362 -1098 0
+-2952 384 -549 0
+-645 -436 1394 0
+-3015 2942 -851 0
+-1384 71 2983 0
+-1447 -3370 456 0
+3272 -1399 -2670 0
+1867 -1921 2855 0
+-1157 1754 692 0
+2317 1903 -2946 0
+-146 -187 -2699 0
+-983 -549 2626 0
+-829 -3034 3294 0
+-2563 -1256 1548 0
+3420 -522 -2752 0
+-3208 -858 2912 0
+-537 2527 2777 0
+-804 2644 2855 0
+2724 -3387 -2733 0
+2426 1798 974 0
+2915 -446 -576 0
+-329 -253 -2197 0
+-1008 -3134 3336 0
+2588 905 -3039 0
+407 -2789 1412 0
+3254 943 -1099 0
+-58 2631 783 0
+3339 -828 1941 0
+1960 3223 2 0
+-3001 1225 -2613 0
+2551 -3463 2566 0
+1512 2488 -2932 0
+-1971 1561 -2243 0
+-3461 -1030 66 0
+-2445 1440 1855 0
+-2805 2919 899 0
+-328 1106 3053 0
+2585 -3308 -821 0
+-646 -2752 -465 0
+-2706 -2384 3078 0
+1198 -1644 1650 0
+-2601 1452 -1293 0
+-744 2527 -1023 0
+2602 -628 3343 0
+-1172 501 -3195 0
+794 2462 1509 0
+1479 2589 -816 0
+-433 758 2111 0
+2805 3448 -3067 0
+-1024 2340 793 0
+1604 2926 524 0
+-1177 1544 -1431 0
+646 -418 1323 0
+3184 -241 -560 0
+2922 -545 3109 0
+-296 2923 -1777 0
+-656 -1948 3219 0
+1059 1741 -1768 0
+504 -191 -1082 0
+551 -2333 -2265 0
+-2432 3153 -2282 0
+-1801 883 1637 0
+126 965 671 0
+1430 -683 1919 0
+2370 2268 -65 0
+-3143 -93 -852 0
+-725 -1811 -2900 0
+2208 -2642 -1392 0
+2404 987 941 0
+-1351 1876 -1013 0
+-1151 937 3451 0
+-116 940 2283 0
+-1874 3365 -663 0
+828 578 2653 0
+1221 -1329 621 0
+1537 -2996 3014 0
+-762 122 1556 0
+2041 -3395 -945 0
+-3162 123 88 0
+-1757 -3278 -904 0
+-1925 2169 -1414 0
+-868 -1311 377 0
+3394 -2796 823 0
+344 2013 722 0
+3241 3408 -2062 0
+3417 3252 -1908 0
+-267 3341 264 0
+945 -2635 -3444 0
+480 -440 -754 0
+1092 -139 12 0
+1810 -2688 2013 0
+2726 370 358 0
+2784 789 1542 0
+-1874 1020 1014 0
+-3475 2267 3104 0
+-2315 2207 -2975 0
+2597 2999 -1267 0
+-98 -1157 -2468 0
+1620 -1219 3156 0
+-912 -837 3244 0
+-1957 1854 60 0
+-1382 28 2122 0
+-735 -1844 -3107 0
+1089 1653 -365 0
+-1040 -938 -955 0
+2317 2740 -74 0
+1998 -1955 -2334 0
+3319 -2797 1461 0
+-2474 128 1357 0
+-1934 1769 -772 0
+-52 2134 -258 0
+-2090 162 781 0
+1122 -2065 2262 0
+2820 2574 -1861 0
+-3441 -2827 3165 0
+-933 -3187 2507 0
+1774 -2200 1642 0
+930 -79 3180 0
+3019 -75 1948 0
+-2523 2229 -98 0
+-1948 -1609 -596 0
+1579 1712 -804 0
+3258 2616 -1228 0
+2176 -1295 2839 0
+-686 -1631 -210 0
+-1307 -2757 -291 0
+-31 -2221 2146 0
+1595 -1258 -1740 0
+-3006 3231 -2666 0
+-543 -929 -2765 0
+401 3296 3486 0
+3010 -1954 -1758 0
+-1255 -2504 564 0
+1496 1159 -870 0
+-295 175 -86 0
+-2362 11 -144 0
+-2243 13 -1384 0
+1296 1623 -1649 0
+1042 -2255 870 0
+-2524 -1036 -2388 0
+-2138 1608 3406 0
+-2144 1404 2844 0
+427 1924 -938 0
+-735 -3217 -679 0
+-2614 1751 2400 0
+-1271 1887 3185 0
+1129 441 -485 0
+1819 424 -2960 0
+-315 -3341 -3184 0
+-619 221 -2446 0
+-3008 158 -3094 0
+3187 1672 3254 0
+-3411 3067 1815 0
+1696 -2721 2161 0
+2055 1202 -1649 0
+-1396 364 -2551 0
+-1396 -680 -2364 0
+1723 -2006 2608 0
+-315 2449 2339 0
+-1940 389 -3169 0
+-3288 -3194 -2618 0
+109 980 80 0
+1221 2117 3091 0
+46 -2027 2941 0
+-104 -1759 -1022 0
+2530 2491 -961 0
+966 2121 -1857 0
+1789 -502 -2804 0
+1630 -3497 1844 0
+1022 818 -2440 0
+707 -2649 -192 0
+1306 1179 3103 0
+-2126 2613 1798 0
+-2719 -1266 84 0
+-2153 -1557 386 0
+-1310 -1964 790 0
+-568 3313 -2022 0
+1281 807 3274 0
+2310 2532 1707 0
+-3185 -221 -3331 0
+-1736 1700 1599 0
+-2355 -1085 -412 0
+-1582 253 2086 0
+-1492 -2518 970 0
+3138 -1085 1894 0
+466 -2055 329 0
+-1155 -2319 1349 0
+1846 -923 1818 0
+2124 -403 332 0
+-1867 -2026 -3329 0
+-366 548 -2460 0
+2573 -59 -2354 0
+-622 837 2798 0
+1052 -2462 2563 0
+-2826 2763 381 0
+-1770 2885 3167 0
+3194 -1958 -131 0
+-1160 1511 2297 0
+1149 2229 1302 0
+-2904 -2221 -1979 0
+1258 -3349 2566 0
+-2486 -1755 -2013 0
+-1755 2638 1667 0
+-573 -1283 -2926 0
+593 -3212 -996 0
+-1916 -1939 -2895 0
+-1279 -3264 2824 0
+1418 -1448 844 0
+1989 -2430 -718 0
+2355 684 -625 0
+256 432 803 0
+-3199 -1707 -1614 0
+1239 -2109 -85 0
+-2300 -869 -1844 0
+-3084 -2897 -2764 0
+1947 2561 -1714 0
+-2205 -1945 874 0
+1442 -3089 -1298 0
+3002 1746 -1327 0
+-1957 -787 1177 0
+-1374 -3070 -2002 0
+298 2695 -1118 0
+2300 2181 2609 0
+1561 76 2481 0
+3396 -2312 2291 0
+-733 3112 598 0
+-1586 -2319 3137 0
+-849 -2495 -324 0
+-3007 215 1691 0
+983 -132 -2268 0
+-3282 2587 3302 0
+1005 580 -2168 0
+3260 2153 2544 0
+-358 861 1632 0
+-3267 636 2408 0
+2321 -2403 1582 0
+1091 92 -2410 0
+1887 1775 -923 0
+-3015 2869 -1852 0
+2926 -114 1518 0
+2964 1210 -1745 0
+-571 1877 -1006 0
+-2921 -2955 -3431 0
+2014 1658 -3321 0
+2382 -1628 2807 0
+-1517 -3483 -636 0
+2017 1063 1868 0
+1180 1460 -2484 0
+1011 -836 2380 0
+2678 3403 257 0
+450 1478 999 0
+-2159 -3319 -3409 0
+-1790 -2974 -1722 0
+-1140 -2954 -1901 0
+2632 3094 -1883 0
+-1742 -1623 2764 0
+-1833 2137 1145 0
+3336 -3132 -2682 0
+-1267 586 2296 0
+2554 -63 461 0
+-1999 778 -1922 0
+-2743 1464 -1904 0
+-3423 2042 1050 0
+908 1545 -3037 0
+478 1768 -738 0
+2486 931 -2857 0
+3305 3105 3478 0
+-377 3248 -2955 0
+-142 -3113 1855 0
+2026 1240 2873 0
+-2521 1214 1622 0
+-2803 2669 2695 0
+416 -2546 -1989 0
+960 -2362 -316 0
+3222 -3048 2634 0
+2939 779 -1606 0
+-1222 -327 3315 0
+-3037 -2592 -393 0
+582 3211 -1925 0
+159 -2367 2607 0
+2126 3155 2697 0
+-1806 -2169 -808 0
+1653 2214 -2426 0
+-1826 459 -2450 0
+1561 -529 2314 0
+1927 -1681 -345 0
+-2842 1294 -781 0
+-3494 2445 3179 0
+1313 877 3039 0
+-654 -2435 1527 0
+-818 -2188 -1535 0
+-3375 -1181 2388 0
+-3269 -896 1088 0
+83 2078 671 0
+-786 2716 2506 0
+968 -696 2321 0
+2187 -3108 -3362 0
+-1829 -876 1845 0
+-3298 -864 2886 0
+-3492 -2857 -3391 0
+3450 1685 -512 0
+-2876 2700 2566 0
+979 2192 -119 0
+-318 2463 -1792 0
+2714 -2020 990 0
+433 2768 -1584 0
+-2623 -2477 -3443 0
+883 -2436 2775 0
+111 -2471 773 0
+923 -2544 -2057 0
+-1353 -972 -1107 0
+398 -14 -2051 0
+-917 -877 -2508 0
+2407 -3244 -1692 0
+2139 -503 2057 0
+-1216 -1549 -528 0
+-1242 -2885 -300 0
+1211 869 -1068 0
+-2240 2495 -1351 0
+-2500 3300 -1171 0
+2062 1765 1073 0
+-2765 -3217 70 0
+-84 1233 3368 0
+-828 -2274 -591 0
+-508 113 2594 0
+2164 171 -1264 0
+-2720 58 -2676 0
+2453 1407 -210 0
+-2485 -3382 859 0
+-1383 64 1674 0
+2779 311 765 0
+-693 2101 2420 0
+-876 -535 1557 0
+56 -1783 -1800 0
+410 507 -1177 0
+-3129 -2517 -3405 0
+-1513 -3264 1346 0
+1390 -56 -1004 0
+2669 2153 996 0
+92 134 -1878 0
+2778 -1766 -1445 0
+-1575 -2267 3070 0
+22 2334 2883 0
+1688 896 -3003 0
+793 3297 -193 0
+-2235 -3180 -1265 0
+-2170 580 677 0
+-1049 -1108 775 0
+3220 -2543 -2803 0
+2507 -1640 -1021 0
+477 -1302 256 0
+-1279 1906 3362 0
+2008 3281 -793 0
+106 -3018 -1128 0
+-1193 2416 2437 0
+1163 -3192 3068 0
+1531 2373 -2705 0
+2519 3145 -828 0
+2854 -950 -80 0
+-1191 2211 -603 0
+-42 560 730 0
+-3180 974 -2197 0
+787 -1391 -14 0
+869 -3151 1738 0
+-395 -1002 3034 0
+-252 -3370 2810 0
+938 -2860 1042 0
+2090 2771 -2258 0
+2198 2151 1444 0
+1577 -3316 -943 0
+683 -2426 2005 0
+1152 724 -1353 0
+-2068 92 -3422 0
+-622 1976 -467 0
+-3160 1758 1122 0
+2324 -395 2357 0
+-2984 -1841 -520 0
+-1971 3136 -426 0
+-913 1676 319 0
+2808 686 2953 0
+-266 112 3026 0
+-3058 -2477 -2716 0
+1092 2084 3249 0
+-285 -56 49 0
+-602 -353 -422 0
+-3094 1582 -1346 0
+-2173 115 2303 0
+-646 -516 -622 0
+1739 926 -2866 0
+2169 331 1255 0
+2326 1439 553 0
+-1513 189 -375 0
+958 -2385 250 0
+-1739 412 -282 0
+-138 -3245 1471 0
+-1221 -1847 703 0
+-1945 1624 344 0
+-1124 -3019 2775 0
+3015 1757 -177 0
+-3204 989 784 0
+447 2756 -1164 0
+1191 2175 -1741 0
+-1314 -319 2873 0
+601 607 2315 0
+-895 1098 -1466 0
+-844 385 704 0
+-58 1157 1210 0
+1249 -2262 -3355 0
+1161 -523 -2812 0
+2550 1355 -2091 0
+2028 -1232 -3033 0
+-461 -331 1822 0
+-1015 563 -1138 0
+-1412 873 -566 0
+-1270 -391 -3263 0
+-1944 1914 -703 0
+1611 -1036 -2781 0
+-3481 -2427 -73 0
+-960 -2362 -3418 0
+2016 2543 311 0
+-1386 595 1930 0
+1245 -2461 -1981 0
+-1637 -2038 2504 0
+-627 94 -1795 0
+2416 1198 -2716 0
+263 264 401 0
+-2155 2234 426 0
+-2856 2676 -2625 0
+-3 1642 -2741 0
+-107 247 3114 0
+2813 64 -734 0
+-1769 2109 -503 0
+1216 -1096 1252 0
+-2070 3472 -1351 0
+149 -868 2761 0
+3358 358 -1648 0
+385 -479 -418 0
+-1527 840 -2025 0
+2844 -3345 -806 0
+-2027 -2652 1349 0
+3377 -484 1127 0
+-1326 2048 504 0
+-2786 599 1154 0
+2216 3217 3312 0
+3256 -1476 -1233 0
+819 -530 -1344 0
+3435 -3167 -973 0
+-948 -2202 -384 0
+-669 -352 -1161 0
+907 2002 3324 0
+1705 -844 1945 0
+391 -1355 -362 0
+-229 2586 2854 0
+2285 -2069 407 0
+2799 645 195 0
+1034 -1110 634 0
+-563 1434 1082 0
+746 -3104 -240 0
+2801 2480 -1660 0
+1098 -699 2258 0
+2210 -2792 -1668 0
+-2873 950 -648 0
+2602 -3341 1224 0
+-1162 2604 1893 0
+3027 1720 -1231 0
+1119 -268 -3259 0
+-336 -665 -3439 0
+-3316 -2706 1244 0
+3237 953 -2546 0
+-3102 2335 2297 0
+-1799 -6 -326 0
+-501 2397 -1946 0
+-2478 1374 1418 0
+2112 1522 3494 0
+2411 2639 917 0
+1312 1351 1282 0
+1082 2337 -2948 0
+2313 2543 -108 0
+2804 1615 -1785 0
+1392 -1204 1940 0
+-1966 1337 1068 0
+-1493 -901 2128 0
+1111 2273 -1127 0
+-615 -1101 1254 0
+-338 80 3176 0
+-162 1770 -1459 0
+616 1487 3280 0
+-1864 1055 -1043 0
+3018 -2610 386 0
+2 -3010 2264 0
+2100 -828 -424 0
+-3207 -1737 2556 0
+-1308 2406 1556 0
+1043 -1605 1691 0
+-516 -2714 1774 0
+2711 404 743 0
+2324 1866 -1642 0
+-2076 -1840 -1811 0
+930 -968 3005 0
+-1025 -850 46 0
+-1717 -2996 2794 0
+-2946 687 2177 0
+-2233 1778 1734 0
+-467 2942 1697 0
+592 2467 -2960 0
+-565 -1770 -3295 0
+-299 2681 553 0
+3313 2110 3357 0
+1679 -3006 -1759 0
+66 424 -292 0
+-1546 -1059 917 0
+-878 95 2199 0
+-1415 3433 -102 0
+368 -113 -2900 0
+-1076 -721 -1999 0
+-1383 1869 3360 0
+3296 -499 795 0
+537 -1209 2235 0
+259 -3091 -2476 0
+-2242 -1957 1552 0
+-476 -501 -1876 0
+-1629 -1097 -1561 0
+-1325 601 2567 0
+344 1937 -3196 0
+-2426 -965 -1400 0
+1338 1950 719 0
+-2198 1996 974 0
+1685 2153 1331 0
+-1620 -544 -1609 0
+970 -2176 1417 0
+950 -1950 1093 0
+-3224 1515 3085 0
+1775 1285 54 0
+-1647 -789 -1731 0
+2429 -2932 1135 0
+1180 102 1483 0
+2297 985 2926 0
+-2798 1837 1628 0
+-3197 -65 -1965 0
+-2883 996 1998 0
+-3161 714 -2806 0
+-957 -3403 1913 0
+2509 -528 1792 0
+-2737 1931 1974 0
+-1097 1289 -170 0
+722 -2963 3092 0
+-132 370 -2489 0
+2861 -3492 -2342 0
+-2045 3272 -880 0
+871 -3102 568 0
+-1945 -3101 2726 0
+175 -3241 2890 0
+2827 -226 -2139 0
+1102 -646 1159 0
+-2620 -1 -689 0
+-1991 -1858 541 0
+784 -439 -1260 0
+-2753 -2078 -3404 0
+2045 1401 -1879 0
+-715 -1089 -3219 0
+1283 -911 -3301 0
+-723 -2166 1108 0
+990 512 -3337 0
+-285 1421 1072 0
+-745 -798 -2502 0
+110 2225 -3425 0
+-2471 -2609 -1809 0
+-1063 -576 2366 0
+-1989 2295 835 0
+3210 -1653 3412 0
+-1022 938 1042 0
+1772 1509 1149 0
+-1097 -2616 285 0
+2085 631 -2183 0
+-746 3043 2399 0
+3053 -2976 3167 0
+1353 529 2319 0
+-2679 -389 -1587 0
+3275 2947 1051 0
+-1869 -21 -694 0
+865 2340 -736 0
+857 -3444 -1449 0
+-3064 2178 2421 0
+625 436 -2600 0
+1700 -3282 2379 0
+-640 -721 -84 0
+1485 45 2326 0
+191 2121 -1841 0
+-2633 -3237 2536 0
+1055 -3304 2456 0
+-1312 1926 2574 0
+-3489 -2950 -1987 0
+1527 165 -1046 0
+-1189 970 3247 0
+-3262 -740 1637 0
+1747 2790 1480 0
+-2182 -2422 1503 0
+3407 3085 -3177 0
+2075 809 -1791 0
+-3048 1355 -1117 0
+-3482 2439 3036 0
+-1134 -1888 3348 0
+-963 -2919 3325 0
+1178 3461 -1443 0
+2540 3304 1278 0
+-3386 285 530 0
+-2743 1537 1718 0
+-1021 1138 3227 0
+3035 2862 -2890 0
+-1247 1795 -2324 0
+1972 832 1033 0
+2076 3025 1407 0
+-1496 422 2866 0
+96 1052 1895 0
+261 -2370 -693 0
+1627 -3402 -1421 0
+-319 1211 -107 0
+1085 1543 736 0
+1655 -3308 -288 0
+-3148 -1345 -2604 0
+-3211 -1202 3189 0
+-548 -2618 3350 0
+875 -827 2442 0
+-3326 -2394 3303 0
+-1336 -3230 1468 0
+1217 3063 792 0
+-1541 -2758 3097 0
+3382 42 -2888 0
+2270 3079 2346 0
+344 2332 2861 0
+2405 1479 -2997 0
+1218 -109 1695 0
+-3082 -177 2285 0
+2107 2278 -2218 0
+-1067 1305 -2634 0
+-198 -1243 6 0
+-446 -1776 1697 0
+-260 1547 -902 0
+-1 1385 -1193 0
+3401 2663 -2157 0
+1870 3336 -530 0
+351 -1064 1530 0
+2097 -538 -2225 0
+474 -947 1003 0
+-1961 -898 2109 0
+-2920 1909 91 0
+2596 -3414 -2568 0
+-2919 3232 1308 0
+-1396 682 140 0
+981 2588 -3223 0
+1432 1674 1896 0
+-2278 2205 -1150 0
+-133 -2438 525 0
+-1820 2026 762 0
+-685 765 119 0
+-968 -3129 -1390 0
+906 -2516 -2358 0
+884 733 2355 0
+65 -3178 3175 0
+-756 2181 133 0
+2007 -350 242 0
+-3159 1907 -758 0
+-2339 3254 1461 0
+-829 -2782 -116 0
+-945 2817 -2391 0
+1925 -549 2531 0
+-514 1938 863 0
+-3184 836 -2773 0
+-1545 323 -608 0
+-3283 -1310 1178 0
+-2047 -1097 -1877 0
+-3386 -2317 -1310 0
+1019 -2881 -430 0
+651 2255 2800 0
+1413 914 1681 0
+2922 1693 -2824 0
+647 -2459 1032 0
+-2643 -1262 -404 0
+677 -166 -2029 0
+2293 -2048 -2663 0
+-1797 -456 2603 0
+-58 2488 -2713 0
+2785 -2070 379 0
+2238 -28 -486 0
+1868 -1997 2484 0
+-644 -3243 770 0
+879 -2095 3344 0
+3386 -3162 3175 0
+-928 1095 815 0
+3013 858 3099 0
+2668 -623 1342 0
+1256 2219 2087 0
+1157 -1191 -427 0
+858 2778 2311 0
+-31 -2776 -3332 0
+-731 2616 -1409 0
+-2745 -2677 -2515 0
+26 -3235 989 0
+-2082 1517 -298 0
+1451 2149 -1217 0
+3100 -979 3301 0
+-2671 -1552 509 0
+-3111 738 -1750 0
+3007 -73 1690 0
+1349 698 -367 0
+-1978 -362 -2180 0
+1844 2707 3199 0
+-462 -249 -2154 0
+2926 -2328 -2682 0
+3367 -157 -528 0
+-2478 -489 -1962 0
+-3001 -520 201 0
+1923 3026 -1861 0
+668 3338 -784 0
+12 3050 1214 0
+-692 2583 3031 0
+348 -1350 -1239 0
+-1085 -2213 1831 0
+-2289 1860 -1994 0
+-1146 -3293 2174 0
+-772 1197 -545 0
+-900 3258 1759 0
+-300 658 -3453 0
+3086 -1487 -868 0
+587 1986 2708 0
+1385 24 -3335 0
+-3308 -1460 2983 0
+562 -2562 -2294 0
+208 -1256 -3323 0
+1674 -636 789 0
+818 -3323 -1254 0
+1408 -391 -626 0
+-2586 3155 -2407 0
+662 326 -808 0
+540 -558 -2641 0
+-1020 19 799 0
+-499 -2333 -1573 0
+-762 -646 2305 0
+2364 -2166 -1383 0
+-2838 -1955 -3099 0
+1242 1054 1460 0
+-2532 558 -2848 0
+822 2789 -526 0
+-1020 -1059 -2078 0
+-2659 865 -1311 0
+-2209 -1081 -312 0
+-1614 -999 707 0
+802 456 -2997 0
+-1683 371 202 0
+-1683 364 474 0
+3010 726 2445 0
+3130 -380 2729 0
+974 -2616 -120 0
+2411 2628 1043 0
+1730 2189 1772 0
+-267 -1844 -1871 0
+2029 1347 2128 0
+3495 605 -1032 0
+-1223 -2526 -2723 0
+3180 -2794 3045 0
+1030 2347 -802 0
+162 2218 -1738 0
+2083 448 -844 0
+3412 1421 2417 0
+-2506 1596 463 0
+-2864 950 -866 0
+-2429 1082 -2536 0
+-1992 -1053 -306 0
+418 462 -2654 0
+-2482 1473 -3457 0
+1717 3428 1031 0
+-918 1821 -1106 0
+-1318 1974 2037 0
+766 -2495 793 0
+-604 -3306 -352 0
+512 -2583 -1233 0
+1232 73 -649 0
+408 776 837 0
+1160 -1766 -2828 0
+1802 -2333 -2008 0
+1370 -1251 2958 0
+567 1134 241 0
+1818 249 -3030 0
+1904 -2687 -843 0
+-2727 1946 -751 0
+743 -2972 2573 0
+-976 -3118 -278 0
+392 507 -1188 0
+-1725 725 -3260 0
+2925 711 546 0
+-1824 -82 -3281 0
+-225 2294 -2866 0
+3202 1167 397 0
+-245 1945 -3032 0
+-2536 -691 -328 0
+-1208 -2524 -3447 0
+-444 3060 -15 0
+1808 -2182 -3424 0
+-1828 1199 -1138 0
+-1976 3187 3420 0
+403 -2165 -2417 0
+1731 -2283 2096 0
+215 -2012 -3377 0
+1474 2104 -1976 0
+-3402 3415 -3119 0
+3102 962 2949 0
+377 -2738 -2469 0
+-1455 1737 -1581 0
+1903 -3318 2226 0
+248 2246 -1716 0
+-3497 1886 3083 0
+836 2513 2618 0
+1406 666 539 0
+-1256 -1800 -2948 0
+2866 2653 -3357 0
+3476 -2186 -812 0
+3195 1728 1720 0
+-188 -1417 -2768 0
+3098 897 1595 0
+1922 40 -2573 0
+-1943 3250 908 0
+2397 2208 -2809 0
+1469 -53 -349 0
+-1341 -3343 1344 0
+2583 2399 840 0
+2518 518 3412 0
+2829 -2028 -2933 0
+-1964 -832 286 0
+1336 1127 -364 0
+-2616 2235 2068 0
+2985 2358 3353 0
+-1427 -1078 -717 0
+1290 -1410 1195 0
+3300 3322 209 0
+-3396 -3131 839 0
+1705 -2783 325 0
+2832 1816 -1705 0
+-919 -1711 -1615 0
+-524 -1937 2340 0
+-530 1470 866 0
+-1859 2632 3133 0
+-277 1207 -2874 0
+1124 2406 2620 0
+2240 -1933 3489 0
+-2821 3008 -680 0
+3099 -2943 180 0
+1685 1540 -2548 0
+2303 -1205 -3005 0
+1727 3469 2420 0
+933 476 -2531 0
+813 193 -859 0
+-2831 -828 -1935 0
+-1784 46 1945 0
+3313 1295 -331 0
+-3238 -1955 -1703 0
+1368 -3115 -2771 0
+-1931 -3017 2973 0
+-2633 2189 -745 0
+-2229 -805 338 0
+-238 2399 -289 0
+3178 3116 3215 0
+-3266 989 904 0
+734 -1717 2716 0
+56 3017 -1468 0
+1996 -3430 399 0
+-1495 1874 -2869 0
+3498 3234 1915 0
+1446 -675 -2070 0
+2122 -1334 -2986 0
+1494 1007 2376 0
+1641 1481 1482 0
+-1602 -3482 -2464 0
+-1974 -1045 -72 0
+2538 1740 -332 0
+3173 -2706 -3248 0
+2084 -1951 1402 0
+-914 1411 -838 0
+-2792 784 -1959 0
+3451 -3048 -1368 0
+2914 1705 1719 0
+200 2840 -367 0
+-2084 -244 -2175 0
+-368 -393 -1803 0
+-2007 3348 3442 0
+1434 -2254 -1475 0
+-1090 -774 -326 0
+-1170 -2420 -2402 0
+2494 2561 422 0
+-1738 -2616 -482 0
+-2799 -1913 1554 0
+-2025 1561 3071 0
+-439 -795 -2152 0
+453 -2466 -532 0
+376 -1815 353 0
+-2049 -712 -1205 0
+-348 -1407 2528 0
+295 1717 -2325 0
+786 -1515 2290 0
+-2638 -814 2157 0
+3249 819 -1167 0
+2726 -1752 3423 0
+-1610 -246 1306 0
+-196 1847 -1842 0
+-255 3302 1932 0
+-2236 -2664 -2141 0
+1578 1844 -1998 0
+609 -1983 -3434 0
+3425 -1880 -1838 0
+2407 -1201 3162 0
+-667 -1314 1452 0
+160 1320 -2858 0
+-268 3425 -821 0
+-2038 3486 -2516 0
+-639 -417 -131 0
+1472 1976 -627 0
+2739 2956 -2789 0
+-376 2280 -1806 0
+-158 346 -761 0
+1968 784 3238 0
+2462 -1713 494 0
+865 3125 291 0
+-2635 1970 -967 0
+-1015 -619 1268 0
+-722 2778 2119 0
+2421 -224 -2018 0
+-2972 -449 3204 0
+-1510 -1406 252 0
+254 -3496 -2627 0
+2251 -998 -1354 0
+543 696 906 0
+-1483 2096 -2973 0
+2671 637 961 0
+-2948 2155 -2085 0
+-706 1130 2363 0
+-1319 2757 171 0
+1228 539 -84 0
+1623 994 3330 0
+-3148 3167 -2220 0
+-3084 2587 1130 0
+-3196 -855 -963 0
+2614 2678 -2015 0
+-3165 -2015 -2397 0
+-2612 1122 347 0
+530 -2768 644 0
+-1067 2845 -2791 0
+2947 -2499 -1557 0
+-1386 -1150 1879 0
+1745 2090 3268 0
+-2708 -2367 -3414 0
+-2371 -3349 -2902 0
+2023 -1044 -973 0
+2034 -322 2258 0
+-3229 -3189 -3369 0
+755 3254 -1050 0
+2632 -648 -1636 0
+1620 -2397 1180 0
+1764 2227 2896 0
+784 -1488 943 0
+-3429 432 1319 0
+2849 1402 2930 0
+44 3196 -212 0
+-2310 589 559 0
+2021 2609 1815 0
+1363 -1749 1425 0
+3275 18 769 0
+713 496 3253 0
+-1284 -2682 -3098 0
+1855 1083 1625 0
+-1015 1140 -1282 0
+-2332 -3337 2232 0
+-1796 1418 3352 0
+-2999 -3232 -3007 0
+-1921 -947 2325 0
+-2400 -2060 -2603 0
+2604 897 283 0
+-3046 2572 -871 0
+-2132 59 2550 0
+-1193 -926 -472 0
+-1211 3089 2911 0
+3110 125 954 0
+134 -2486 -1462 0
+-1628 225 1957 0
+-1251 244 1787 0
+1925 87 -2767 0
+205 1510 2883 0
+736 -2962 -2220 0
+3077 -1016 2034 0
+-2575 -2621 1960 0
+-33 -405 1898 0
+-3116 2048 -2431 0
+89 945 -2888 0
+474 13 -2265 0
+-962 -1830 656 0
+-989 -673 807 0
+-1064 -1172 1547 0
+1041 3270 1186 0
+1650 -1621 3148 0
+208 -1723 -691 0
+-2326 3066 -3072 0
+-2068 -795 -247 0
+-3342 477 3272 0
+-2268 -3321 3083 0
+-773 78 1827 0
+-1373 2446 149 0
+-1311 -2653 1956 0
+-947 686 -1409 0
+-3086 -1878 -565 0
+2375 1250 332 0
+3220 228 2643 0
+-683 -2592 -2559 0
+2734 2845 1429 0
+376 930 421 0
+-214 -2832 1747 0
+1039 1367 132 0
+1642 -962 -649 0
+1781 26 -3301 0
+-1880 2468 2429 0
+804 2183 605 0
+3298 -1896 -2909 0
+1673 -2842 -1784 0
+-2654 -3373 -1191 0
+-633 -3349 2380 0
+2489 -1419 3318 0
+-1602 166 -779 0
+-2025 625 -1585 0
+-1356 -2473 -3418 0
+901 3233 -152 0
+-3026 -1795 312 0
+2968 -1228 1910 0
+-2708 957 1799 0
+-2240 -3281 883 0
+1375 249 2532 0
+3218 -3041 -3003 0
+3125 1765 -2103 0
+-2858 608 1142 0
+2856 2062 1094 0
+-2334 1227 74 0
+2982 -2316 -1304 0
+2374 788 1780 0
+813 700 -1451 0
+-327 1723 3443 0
+-1831 -1783 1358 0
+3315 1648 3361 0
+448 379 2873 0
+-625 3295 1605 0
+3166 -2052 818 0
+703 -769 -2205 0
+-842 2966 650 0
+-1942 1561 2333 0
+978 1118 781 0
+-2018 1152 1833 0
+2562 1118 1522 0
+1957 1842 -1353 0
+749 -88 -2114 0
+3243 1876 -365 0
+83 -3102 -2950 0
+-3204 -471 1843 0
+643 -855 1722 0
+1474 2002 1280 0
+-481 -208 1883 0
+-1513 -2953 -3199 0
+2550 915 -222 0
+-1512 3056 -3348 0
+1075 248 -2882 0
+-191 2549 -2219 0
+-970 2896 1347 0
+-2826 -1997 3417 0
+-2996 -3083 -295 0
+-329 751 -945 0
+-2103 3495 -1534 0
+-2083 -2445 -2926 0
+-574 -688 2490 0
+-1288 -2032 1037 0
+-299 195 1941 0
+1181 2275 1695 0
+3388 2811 -1756 0
+2624 987 1398 0
+414 1962 55 0
+1272 864 1402 0
+-2606 3348 -257 0
+1688 1819 2476 0
+3235 -2403 -1409 0
+698 -2986 -769 0
+-2158 3392 -8 0
+-2327 375 494 0
+217 775 -3180 0
+-2110 1349 -135 0
+-1313 1081 3491 0
+-337 390 1670 0
+-1522 3010 -2671 0
+2528 -2185 -1422 0
+3053 -1278 1043 0
+-160 -2245 3153 0
+-3090 884 -219 0
+-377 3050 137 0
+-3390 1607 2467 0
+438 -3058 2921 0
+-3129 2956 -821 0
+609 2599 -390 0
+-546 -1057 -653 0
+2316 357 -2616 0
+-3449 -1342 -1270 0
+-108 -343 2771 0
+2173 1574 -1372 0
+-588 2730 2013 0
+-2836 -424 -1251 0
+2515 2593 -706 0
+1119 -1260 -377 0
+2624 -409 320 0
+2661 198 2550 0
+-1773 -3040 -1579 0
+1736 1989 -950 0
+-1190 8 -29 0
+-2978 -2934 -3350 0
+-1668 659 -902 0
+576 1595 1370 0
+905 -267 -433 0
+2087 3284 571 0
+2479 2465 3435 0
+1664 -1326 -3467 0
+-2032 1400 658 0
+-3299 -2375 -955 0
+-1281 -930 1635 0
+877 -1548 -2524 0
+-2156 3085 -3010 0
+-2207 94 -1667 0
+2877 2313 -1531 0
+1060 -2807 -376 0
+3489 -1554 -1094 0
+3019 -1264 -3230 0
+2154 -2314 -2043 0
+2998 -1945 -3171 0
+-1577 2787 2719 0
+-1825 914 744 0
+456 -1756 -2865 0
+2492 3421 -264 0
+1786 3384 -1571 0
+-206 284 -531 0
+2654 -2210 -2233 0
+-2073 -3215 -907 0
+-1813 -596 1205 0
+198 -621 -3220 0
+3135 1839 -2917 0
+-2921 1224 -2136 0
+-1084 2644 -1037 0
+3378 3450 1082 0
+-1333 -643 -1360 0
+645 -288 -913 0
+1353 1774 -1964 0
+-2533 1118 -346 0
+-1727 1503 696 0
+2830 363 -482 0
+-335 2716 110 0
+-326 -461 539 0
+2508 -1972 1247 0
+2280 2541 -1150 0
+2866 1765 -452 0
+1450 -3372 -1408 0
+-793 -1444 332 0
+-178 1553 -2965 0
+-967 2274 -2026 0
+-3244 403 -1118 0
+-254 1640 3232 0
+-107 1280 -1778 0
+-33 -950 -605 0
+-886 -2159 -1579 0
+3083 -2075 2830 0
+-839 2260 -3208 0
+-2025 -2516 1365 0
+-1416 2748 2983 0
+2780 -1424 -27 0
+-2123 -824 3094 0
+-390 3235 -2910 0
+1140 -2756 -1239 0
+-949 2017 -1520 0
+-49 -1868 -2238 0
+-975 1504 -1557 0
+-1951 1529 -1095 0
+1128 -2374 -2390 0
+1004 2767 -35 0
+1020 -1585 -1556 0
+1282 1182 -828 0
+-382 -1184 965 0
+2850 -1012 2476 0
+-1835 -3239 -2999 0
+-1887 -3357 3405 0
+293 -441 -471 0
+712 547 -2764 0
+674 -103 335 0
+1586 -2557 3270 0
+1098 2573 -1626 0
+-2366 -164 3392 0
+575 1487 -2500 0
+2633 2862 -1358 0
+1814 -1865 -769 0
+-2926 -3290 2820 0
+976 3333 991 0
+-1773 329 2687 0
+509 -2502 -1055 0
+3066 3303 239 0
+-3064 2437 -1663 0
+768 3440 -277 0
+325 -2496 1808 0
+3482 1 -2186 0
+2842 423 -3181 0
+3215 326 2097 0
+-407 -1126 -3465 0
+1277 3451 943 0
+1954 -575 3408 0
+3009 -1011 -1894 0
+-593 -3436 -260 0
+-2906 1397 1014 0
+-1933 1650 -2563 0
+142 -17 2971 0
+3476 -2675 2412 0
+1678 -2677 -423 0
+147 104 360 0
+-2904 3408 -675 0
+-145 -3486 -1532 0
+-87 1936 -2493 0
+329 352 2284 0
+-2442 -602 -473 0
+162 -3253 -929 0
+2539 1244 -1235 0
+1981 -783 582 0
+-1264 -446 -415 0
+2389 -1660 -1902 0
+-451 -2008 2132 0
+-632 509 -194 0
+-1151 3065 2591 0
+1709 1056 -1968 0
+1383 -827 -346 0
+-1674 1291 -1001 0
+-3117 1092 8 0
+-1869 -3460 3092 0
+1579 -2903 3453 0
+604 -2227 -878 0
+658 -3369 2732 0
+-1871 2501 -2474 0
+-748 -167 2275 0
+3257 1058 2987 0
+531 2346 1521 0
+1829 -2274 -628 0
+-2566 -354 -1960 0
+575 -169 -3415 0
+-499 -2796 2331 0
+2567 2373 2118 0
+-1135 -2573 -2143 0
+1413 -2198 2775 0
+1093 -3365 591 0
+-205 -2950 2645 0
+-1783 1141 -3124 0
+1049 -203 -666 0
+-3321 -54 -345 0
+-2675 2678 -2699 0
+2318 -857 2404 0
+-46 1713 1341 0
+944 -2094 -2511 0
+-3492 1337 850 0
+2875 3118 2563 0
+1821 -1720 3147 0
+2679 1309 879 0
+-2227 -1539 -2968 0
+79 -2882 3005 0
+-3096 -255 931 0
+1530 -697 -1929 0
+372 35 -1998 0
+829 2735 1545 0
+2918 -1661 -3039 0
+-2529 44 1848 0
+-2100 -226 -3126 0
+3139 3260 -1677 0
+-587 -2483 -1374 0
+2022 2150 -3090 0
+-1348 -823 1401 0
+-2365 2547 -2797 0
+-1244 -2170 2110 0
+-2761 -2852 -2517 0
+2270 1517 -1221 0
+-2608 -3224 -458 0
+2600 1126 -1913 0
+-318 -2857 -660 0
+-2833 662 -1664 0
+-2910 -716 -1353 0
+2032 1003 390 0
+2880 -784 1135 0
+-927 2353 -438 0
+-1750 2932 -1954 0
+-2089 1528 -2289 0
+1240 -3340 2576 0
+-203 -3219 2461 0
+-183 2305 171 0
+2046 2512 831 0
+2573 2329 2222 0
+3481 -1938 -2204 0
+-51 2969 -3393 0
+-623 -1816 -2609 0
+-2169 -405 -2632 0
+-2147 -654 2306 0
+2093 -2836 -2108 0
+-1543 -445 -1928 0
+-2940 -411 1976 0
+-3240 -674 -1825 0
+1380 1511 1446 0
+1408 2603 568 0
+2283 -3368 -3123 0
+3064 -845 317 0
+2994 -3465 -201 0
+3473 -2260 -113 0
+-1799 244 -2263 0
+2111 -2922 -272 0
+-274 -1606 -3310 0
+-438 1978 2972 0
+-2191 259 927 0
+-1156 -1890 -126 0
+-2210 1698 715 0
+675 -1805 -2107 0
+-703 -918 2946 0
+1359 -3333 -2587 0
+1988 3485 1640 0
+1031 -2348 -1981 0
+1197 551 1436 0
+1115 -1701 -1319 0
+2422 -2782 -795 0
+3014 -2111 -3160 0
+3109 599 -3418 0
+1518 1734 614 0
+-1225 1808 261 0
+-570 2303 -1436 0
+-1721 2380 447 0
+581 2730 2011 0
+-259 260 2096 0
+1662 2602 -2745 0
+3095 -2043 -3166 0
+-1495 928 -1717 0
+-2414 -1430 3476 0
+790 3469 -2226 0
+1923 1885 -356 0
+-386 943 1848 0
+2407 1995 217 0
+-1209 -2507 -774 0
+-2580 2716 -2613 0
+1113 1828 2059 0
+-627 2133 1373 0
+2179 323 -114 0
+884 3170 461 0
+2373 -2006 -2088 0
+3030 2152 -2698 0
+40 -3155 1394 0
+-2653 1308 -745 0
+15 -2744 1519 0
+-126 -2745 1979 0
+-3248 -1033 -2865 0
+-2610 55 1578 0
+3293 -1521 206 0
+2521 -393 3403 0
+-1469 -2302 2159 0
+2045 2289 306 0
+-3308 -1058 1680 0
+-1311 3366 -2572 0
+-1596 -291 3357 0
+398 -222 2038 0
+-3479 -786 160 0
+-420 -507 -3329 0
+-613 159 -470 0
+549 -823 553 0
+1032 -2004 149 0
+134 -1123 -2394 0
+-2011 -1249 -791 0
+1203 -2216 1880 0
+591 1251 -3267 0
+-2092 -2752 2052 0
+-1136 3027 -3104 0
+40 -1233 631 0
+-2365 -3426 -3195 0
+266 733 1699 0
+-3318 1298 -885 0
+-1970 2034 -779 0
+-3416 3252 2106 0
+-3172 -2217 2051 0
+1403 -2196 -332 0
+-2635 -683 2719 0
+-282 -88 2684 0
+453 -1684 248 0
+-588 1260 3017 0
+1214 -2127 -3055 0
+-303 2607 -2621 0
+2553 -3013 -1717 0
+-6 -1295 -2375 0
+-1980 -1462 -2266 0
+3050 1897 -3388 0
+-633 140 1176 0
+-1565 2162 2869 0
+3274 -2548 1064 0
+-2611 -885 -2782 0
+1550 -3129 -507 0
+1396 3206 880 0
+-795 -1110 22 0
+-3335 3352 864 0
+-305 459 546 0
+838 -2072 -2041 0
+3482 217 -1471 0
+-570 40 1722 0
+-2157 -3357 439 0
+2924 -695 -1932 0
+-3123 3336 3236 0
+772 -1812 -2905 0
+2085 2049 1653 0
+2186 1826 2317 0
+-2763 -3007 1622 0
+-1198 -708 -2939 0
+2910 161 -1198 0
+1004 -3040 1906 0
+-3322 1500 2633 0
+-412 -2056 -1853 0
+1356 -1422 584 0
+2507 -1070 1214 0
+-2232 2049 -1770 0
+-2963 -1045 -3239 0
+1278 2073 67 0
+11 -3475 -3487 0
+2293 550 1660 0
+2129 -480 2162 0
+-1131 341 -2586 0
+-2352 -228 197 0
+1349 -1718 1641 0
+-1881 -697 -295 0
+693 -2747 3101 0
+-3422 3033 -2907 0
+341 2483 -2682 0
+863 -2887 1853 0
+-784 1460 2663 0
+336 -679 1028 0
+992 1010 -1212 0
+2643 -2174 -2120 0
+-805 -1886 -2063 0
+1218 -471 -827 0
+932 2988 -745 0
+1889 -1465 -2261 0
+-3314 728 3029 0
+3343 2330 523 0
+1966 238 -918 0
+-2069 -2227 3459 0
+-2071 -1208 1245 0
+-2711 -1371 -3046 0
+2785 1231 1117 0
+2506 -3494 2019 0
+308 -2760 -2143 0
+2006 -1065 749 0
+-3181 3368 -3398 0
+-1950 2302 796 0
+-1435 3001 -2545 0
+2339 -2106 -1887 0
+817 -1462 -106 0
+690 -2169 -838 0
+-3470 -1249 -2469 0
+-2190 -1846 -1831 0
+-3209 243 -2268 0
+2563 2523 -1464 0
+-2733 2415 2710 0
+3468 2540 -1451 0
+3261 1910 -1830 0
+-2496 910 3353 0
+1369 -2761 2939 0
+3020 -2878 73 0
+1687 -1267 -1257 0
+-2234 2857 2623 0
+884 -2725 -857 0
+-1470 -1493 2618 0
+1455 3102 -572 0
+2919 -3215 -2985 0
+-3402 -1988 -2362 0
+445 -2728 -1538 0
+2247 -2311 -238 0
+-1170 -66 2524 0
+446 2896 -2628 0
+1132 598 -1788 0
+-730 2704 1902 0
+43 249 -887 0
+-282 -2178 2827 0
+-984 3144 3432 0
+2759 -1301 -684 0
+2815 -1821 1370 0
+2759 -870 266 0
+3493 311 893 0
+3372 -2909 2257 0
+1787 -405 -1372 0
+2676 -2500 -2704 0
+-1218 1782 1469 0
+343 -2594 -132 0
+291 1863 3019 0
+2540 -2134 -893 0
+531 692 -1064 0
+3400 -1857 868 0
+229 -1287 1864 0
+-2808 -1422 1853 0
+1790 -2246 336 0
+429 -3206 -396 0
+1015 3050 1977 0
+2696 1628 1526 0
+-1900 2146 2004 0
+761 -1391 717 0
+-2644 -2592 2265 0
+3117 -3283 -2650 0
+3084 465 2326 0
+1203 2824 546 0
+-347 -1621 812 0
+-3463 -3483 2304 0
+2042 2026 1087 0
+-84 -3020 1882 0
+-2538 -2571 -2933 0
+3189 -922 1517 0
+146 -1689 -534 0
+-2375 2413 901 0
+2076 -669 1532 0
+-3441 2135 2432 0
+-2127 -1347 3429 0
+1283 843 203 0
+3463 453 3478 0
+-2374 2337 149 0
+-2092 939 -2600 0
+2293 -1989 776 0
+3003 -1992 -1529 0
+-1723 1272 366 0
+28 -3303 -2281 0
+2733 40 1598 0
+-41 -367 531 0
+-447 3200 -379 0
+1133 -2719 776 0
+-153 -2323 3167 0
+-3407 1975 2570 0
+2586 -464 1140 0
+-594 -1027 524 0
+1521 -6 560 0
+324 1585 668 0
+250 150 -520 0
+-2297 -1830 -2558 0
+254 -1055 -3444 0
+2685 3235 -2204 0
+-3472 1006 -1675 0
+-2807 -2246 649 0
+-2176 2371 -2206 0
+3475 -1079 -239 0
+2608 -2488 -2113 0
+-2635 219 141 0
+-1813 -318 2403 0
+-3324 412 1584 0
+123 -1576 -2588 0
+-2225 1237 537 0
+2403 1935 -3311 0
+1015 1521 2182 0
+2299 1502 -700 0
+-1828 1144 -2024 0
+1718 1926 -1959 0
+2804 -2133 3483 0
+3312 -67 -2331 0
+-1755 -753 -340 0
+-2842 -2274 -2070 0
+716 -1544 3241 0
+-1603 864 281 0
+-2178 1845 -1425 0
+992 1804 -2936 0
+-3196 -809 -2761 0
+-2765 3166 -2617 0
+811 1950 -954 0
+2521 -2323 -1876 0
+-1539 3427 1112 0
+1985 -1638 -2776 0
+-2172 -875 2850 0
+1242 -709 -1834 0
+-1922 -1294 1718 0
+991 -2536 -3098 0
+-278 955 875 0
+2814 2271 1383 0
+-179 1780 -2316 0
+2550 -967 1480 0
+12 2441 3387 0
+-2695 -120 -2080 0
+-379 541 1582 0
+-769 -1048 2648 0
+2660 600 2040 0
+2810 1050 -1098 0
+-289 -1102 440 0
+1403 -1075 -3467 0
+367 -917 -3283 0
+1278 1762 2569 0
+-457 2352 129 0
+2444 240 825 0
+3226 -1498 671 0
+-3458 -2199 -2453 0
+-939 -924 2108 0
+-3001 -1870 572 0
+-1801 2415 3059 0
+-2719 1966 -85 0
+-2180 174 916 0
+2860 -2857 -1054 0
+275 529 2407 0
+643 -615 2746 0
+-2795 -2958 2681 0
+-397 -3083 2240 0
+-3197 -2352 -1883 0
+-519 461 802 0
+-2148 73 -1000 0
+-2936 1284 1555 0
+-1934 -1825 -2522 0
+-2015 2163 1273 0
+773 -2702 2838 0
+600 1446 747 0
+-3491 2739 2574 0
+-1738 -2745 -2525 0
+626 485 -1906 0
+-3332 -47 -411 0
+2536 -869 1683 0
+2926 1797 2947 0
+2958 -1879 1247 0
+468 -1942 -1160 0
+-2708 3026 -25 0
+2139 -947 3041 0
+1122 -802 -1131 0
+-289 -1433 2791 0
+-3070 1051 -710 0
+-1859 3201 2672 0
+1321 2285 817 0
+1397 792 -1356 0
+-2446 -2511 312 0
+3057 1559 1393 0
+2817 2186 1136 0
+-2242 -2667 1225 0
+2852 -1921 1318 0
+2065 1422 641 0
+-2875 -1615 -804 0
+3202 2759 -2636 0
+-3245 -2851 2404 0
+-2395 3196 -1897 0
+593 -1276 1536 0
+247 -2113 1844 0
+-1369 3035 3432 0
+1021 48 2088 0
+947 706 1797 0
+1655 3064 903 0
+1346 2009 3011 0
+-2873 1897 1505 0
+-1078 -1504 -2897 0
+-76 -1073 985 0
+-3384 1758 -2069 0
+547 -309 3372 0
+2907 698 -1652 0
+3131 -1228 -354 0
+-1225 967 -1211 0
+-1666 1091 542 0
+2583 3073 -144 0
+2711 -2189 -854 0
+2110 3069 -1619 0
+462 -351 1641 0
+-3380 -2655 -3230 0
+629 785 1704 0
+3146 -478 823 0
+2175 1815 2770 0
+1665 -2776 1159 0
+-75 722 -2008 0
+2425 2763 2839 0
+-637 1881 -819 0
+-2445 -2136 1236 0
+692 -1137 -1415 0
+884 -3333 718 0
+2057 -978 2852 0
+-2286 2800 1102 0
+3371 -3111 805 0
+3412 246 -1464 0
+3342 -3149 453 0
+-1516 9 329 0
+-2809 -2847 -3281 0
+-2226 -494 1657 0
+2683 2794 -2615 0
+1089 -3105 -2131 0
+-1104 -2566 2640 0
+-472 -2008 556 0
+-267 -1438 1119 0
+2058 -1162 3230 0
+-2109 -2732 1556 0
+-1770 -1509 -272 0
+229 2597 563 0
+-524 -2434 1590 0
+-1556 -354 1499 0
+2992 902 1820 0
+86 1618 923 0
+2243 2633 -3387 0
+991 525 2371 0
+-3478 -2262 -3143 0
+415 367 -1358 0
+-275 2274 -3039 0
+-281 -848 -3121 0
+-2609 -1144 -536 0
+-1747 -440 845 0
+768 2716 2576 0
+-3319 -2017 -1241 0
+1790 3336 -936 0
+-3371 -67 3177 0
+1027 1117 1931 0
+-1548 -3219 -331 0
+-1336 -1644 -2243 0
+1406 906 3168 0
+698 -1885 -552 0
+-1368 -2984 3045 0
+-944 611 1854 0
+2957 -1091 -3040 0
+-485 365 2188 0
+3232 -3071 -150 0
+3176 -1701 -501 0
+-573 2336 2107 0
+2125 378 2664 0
+-3049 -863 -1038 0
+3446 2436 -2385 0
+-3139 603 -1220 0
+-2583 -2547 -2975 0
+-2107 -2717 1314 0
+-2401 -1528 -776 0
+2813 -3335 238 0
+-834 779 -1214 0
+-2538 -290 -1715 0
+-2738 -1363 2805 0
+334 -38 -1468 0
+-927 1534 -2529 0
+2980 -1647 -1297 0
+2257 3157 -1919 0
+2310 1692 3110 0
+-2848 -2701 1805 0
+199 1448 3493 0
+-4 -338 -3232 0
+-1011 1968 1034 0
+-2039 1542 15 0
+-1226 -1095 -2248 0
+-1094 2131 680 0
+-3017 -1596 -2333 0
+-1488 -3315 510 0
+-342 691 -2778 0
+3035 -68 -930 0
+28 1263 1065 0
+-782 2624 -436 0
+-205 1299 1879 0
+-867 857 -604 0
+2262 -638 767 0
+1145 -92 2952 0
+848 1738 -2611 0
+1429 596 -2833 0
+-1036 1195 1756 0
+-2026 1935 -2847 0
+-731 3495 -2898 0
+-1978 -3180 -218 0
+2389 1604 873 0
+1959 1136 300 0
+1450 3408 1489 0
+-2585 -3245 -3041 0
+2025 -2888 -1734 0
+-494 -1251 -106 0
+3034 530 -1716 0
+-59 -3155 3049 0
+-2721 -3362 1212 0
+1608 -921 1441 0
+-600 3277 531 0
+472 1946 732 0
+-1831 -3327 -757 0
+2628 1508 -2442 0
+-1891 2456 1544 0
+-1966 2330 493 0
+-1625 2924 1966 0
+-232 946 1782 0
+2933 1679 -3399 0
+160 -1169 -1101 0
+3012 -1356 1309 0
+-1202 -2812 3003 0
+-781 -1574 -3292 0
+-3428 764 165 0
+2227 -2451 2941 0
+-2609 -3118 794 0
+-2311 360 -2620 0
+-2899 3096 1626 0
+-827 -2111 3161 0
+-2252 2600 1783 0
+-1254 -992 -1355 0
+-1799 -281 1787 0
+-2019 -2801 2157 0
+-1001 2480 -1073 0
+1887 527 -1028 0
+3025 -3201 3153 0
+-2302 1220 108 0
+-1983 692 -241 0
+-2209 2331 -852 0
+-3328 -3228 -224 0
+2664 3036 266 0
+3419 -639 1649 0
+-645 -2874 -1415 0
+-684 -855 -1312 0
+2918 945 -1494 0
+3400 917 -3021 0
+-2124 -249 -579 0
+10 2029 -2559 0
+2496 -66 2757 0
+1557 2516 -1320 0
+-169 -1166 655 0
+-2266 -127 -2042 0
+911 -1928 -1434 0
+2882 729 280 0
+824 -2160 836 0
+348 1198 2089 0
+2200 1131 -3368 0
+-3031 -1723 218 0
+-2444 -85 -2546 0
+3158 2200 3207 0
+1795 -540 1568 0
+1345 3482 -2594 0
+2146 -628 82 0
+-24 -443 -2199 0
+472 2857 -173 0
+-2207 -2618 -1460 0
+1875 953 1779 0
+1706 -2170 793 0
+-3178 1277 924 0
+3109 -1831 -567 0
+-1528 -471 2021 0
+-1331 -1234 -2251 0
+-2328 -3437 -2789 0
+-3249 -1544 2586 0
+1000 363 1159 0
+-1334 -204 -3332 0
+233 2618 -3445 0
+979 -1824 -3270 0
+1643 -77 -543 0
+2155 -1356 -873 0
+3447 -1701 -510 0
+-2375 2695 2209 0
+-2861 -1413 -601 0
+-2296 -701 -1931 0
+1535 -2786 3102 0
+-1905 -2365 -3199 0
+1638 -116 -66 0
+-3473 -2011 -611 0
+-2568 -1355 1778 0
+1012 370 2703 0
+-455 3019 1212 0
+2192 -1291 183 0
+1131 783 1540 0
+-2252 -799 377 0
+-3392 2389 -1684 0
+232 2697 1457 0
+-2468 -3258 -2456 0
+1616 -95 3227 0
+292 2243 -2085 0
+-167 -506 -2238 0
+645 828 2220 0
+-250 2433 -1446 0
+-3448 1473 1960 0
+-1677 -3177 -3341 0
+-3038 -238 -2562 0
+-2233 1444 3048 0
+-1844 1350 -3305 0
+2163 -2357 -3295 0
+1335 -3068 1891 0
+2773 -2916 1472 0
+1985 1682 -3264 0
+91 -1027 2383 0
+736 584 -1181 0
+409 1850 -27 0
+-2885 1669 2309 0
+-776 -3345 721 0
+-187 -1216 -2252 0
+2044 -1144 2581 0
+3006 1340 -2966 0
+-1596 665 1149 0
+-2905 -265 -882 0
+-2358 1797 -2281 0
+-171 -37 3452 0
+-139 2106 -811 0
+2844 -421 -2171 0
+2980 3495 -825 0
+-730 1945 3254 0
+-3075 1550 -1238 0
+-2228 958 -2854 0
+-2405 675 -2205 0
+-896 921 -1429 0
+-1767 -1426 1185 0
+937 1104 370 0
+487 218 -3431 0
+-3213 -1769 -1661 0
+-3232 2157 3447 0
+2397 2243 -1924 0
+1502 686 -1846 0
+-1448 153 -277 0
+-1237 -2419 376 0
+3478 -3137 759 0
+-2219 -1295 -3478 0
+889 -2578 -585 0
+2629 -3256 197 0
+-2865 21 -938 0
+-2364 -504 3049 0
+1583 -918 -2729 0
+2596 -2373 -1691 0
+-2596 -1489 101 0
+2384 3118 1250 0
+-2800 1469 2113 0
+1066 2785 3073 0
+2877 2131 341 0
+1207 -1141 1788 0
+880 707 -3075 0
+-1052 -2069 2178 0
+-39 877 1725 0
+-1337 2618 -2851 0
+-289 2395 -3252 0
+-2670 1354 1129 0
+1831 -3304 -1202 0
+-1080 -1724 563 0
+-2406 -1049 1867 0
+981 -957 -84 0
+559 1340 2628 0
+2841 -1149 1357 0
+1125 -89 893 0
+2796 2551 1321 0
+-744 3073 2177 0
+-2408 2409 -1148 0
+-2715 -2494 -3132 0
+-2713 2788 -105 0
+3453 -3479 3245 0
+3421 101 2188 0
+2649 -1512 1343 0
+-3093 -3148 -921 0
+-2437 36 2935 0
+-1904 -3040 -1891 0
+3181 -3272 1305 0
+2058 3056 -2010 0
+-2729 -1456 -189 0
+-1655 -2510 850 0
+-1830 1332 1136 0
+-652 -1534 597 0
+-2384 -3292 2723 0
+-2837 3404 -826 0
+-3168 2719 670 0
+621 -2822 -368 0
+-1674 1274 -1443 0
+-2546 -1024 2264 0
+639 2197 2392 0
+-635 -2003 -736 0
+-3422 1671 -3307 0
+-3201 3057 -1189 0
+2843 -1325 2572 0
+-612 -1689 252 0
+2331 2639 -739 0
+-5 -1230 3404 0
+-212 -2518 -578 0
+767 441 -287 0
+-2180 2722 207 0
+-948 -360 3371 0
+-3461 -1759 1549 0
+2226 1266 -1528 0
+-1449 -1764 -886 0
+-1401 2948 -3433 0
+-96 -2192 968 0
+-1553 -1937 -2118 0
+-1473 -1745 2087 0
+1082 -2067 1924 0
+-1394 2517 447 0
+497 3330 -997 0
+-1250 1724 2361 0
+3171 1185 3071 0
+-1187 -3306 3497 0
+-2705 1554 -2232 0
+-670 -2543 -1916 0
+1296 -2589 -2852 0
+-3361 1782 437 0
+-816 -2005 -1378 0
+-2350 3391 2303 0
+-2404 1351 -3472 0
+1486 2933 787 0
+-2023 1306 1692 0
+1656 -3367 -3128 0
+2161 -1826 -2381 0
+-674 -102 2730 0
+1791 1340 -1289 0
+-7 2773 114 0
+-3055 3472 1930 0
+-665 1577 2641 0
+3119 1741 1839 0
+3293 -1686 -1351 0
+-3259 -2785 2670 0
+-3497 1168 1646 0
+-3067 187 -1301 0
+1600 -2641 639 0
+-811 -1108 -1564 0
+-1970 -315 -354 0
+-652 1708 318 0
+-1416 -2163 1028 0
+-929 -882 -2467 0
+-1048 -1953 2273 0
+-1113 1339 -1995 0
+-912 2043 -965 0
+2472 -2245 -482 0
+1098 -2398 1479 0
+1 1142 -1181 0
+1969 656 222 0
+1501 -1796 -252 0
+2403 1641 358 0
+919 -32 3435 0
+1182 536 -1888 0
+2237 511 164 0
+2042 1864 -1707 0
+-3098 1339 -1757 0
+3361 -3151 2492 0
+1402 -3020 -2496 0
+155 -1763 623 0
+1397 -90 3002 0
+-1876 2406 -338 0
+1409 3338 -89 0
+-645 2502 3428 0
+1570 -2728 747 0
+1758 2515 -1903 0
+-144 -1115 3492 0
+3212 1649 -2460 0
+1878 3228 -3267 0
+2375 3237 1169 0
+-1453 -2626 -1275 0
+-2482 1306 468 0
+-1548 2698 3228 0
+1434 -1261 -2483 0
+-816 2364 -2960 0
+1035 2959 1378 0
+-1187 2151 -456 0
+290 -2798 1699 0
+-1143 630 -793 0
+3431 969 -2160 0
+-2327 -1340 -3353 0
+-2518 -3076 32 0
+287 -2034 3308 0
+2109 -3365 -3353 0
+-2351 2265 2077 0
+248 618 2688 0
+803 1510 -2874 0
+411 -1862 2746 0
+2677 2619 -593 0
+-3198 -2255 2762 0
+2886 -1735 -1095 0
+473 -2628 2277 0
+22 -1662 1631 0
+-53 -2262 3348 0
+-1642 -2296 1507 0
+1228 1066 -895 0
+-384 -558 -3348 0
+1513 2020 -1753 0
+582 958 -976 0
+2196 350 -3014 0
+2549 -2749 203 0
+2274 -1509 -98 0
+-2165 1226 1285 0
+-835 1283 1208 0
+2598 1376 -895 0
+1304 1630 57 0
+695 2420 -1662 0
+59 -628 -1011 0
+-763 277 137 0
+-804 1388 -2182 0
+3068 2226 -537 0
+-3030 1113 3434 0
+966 3101 1277 0
+-5 2456 585 0
+-1767 -1827 -67 0
+1937 492 831 0
+-2945 2260 2309 0
+-3332 -2186 1368 0
+43 -2002 1654 0
+-1590 -474 3074 0
+423 -173 2173 0
+-1943 1363 -2174 0
+2895 -3446 1437 0
+1542 2686 -477 0
+-2629 -760 1982 0
+141 -1844 -3319 0
+-1317 -2132 2464 0
+2850 2811 -3439 0
+609 -2227 -1524 0
+633 1269 -254 0
+1726 -2154 708 0
+-585 234 -1203 0
+22 1056 -3347 0
+-81 -2474 249 0
+-1511 -1149 2274 0
+2529 -1796 568 0
+-3154 1027 -368 0
+2585 2781 3223 0
+1134 -3083 2110 0
+605 -712 2899 0
+3155 3483 3109 0
+454 1701 -2650 0
+-210 -2458 -1875 0
+2118 -1983 -3116 0
+1530 -713 1973 0
+1726 2038 3078 0
+2258 -909 1511 0
+2527 -1793 1211 0
+-165 -3176 1527 0
+2741 -3012 -1798 0
+-65 -3112 -1730 0
+-249 2720 -946 0
+-1216 -2451 1457 0
+3176 3489 270 0
+2144 -1072 -2964 0
+3140 2891 -1631 0
+1940 1608 -3036 0
+-1890 2525 -260 0
+1001 -2104 -2786 0
+-2504 -1884 3085 0
+2943 -875 -1975 0
+3454 -884 1574 0
+-614 -1171 -803 0
+-121 -1365 2792 0
+1098 -2079 -1870 0
+828 -887 146 0
+-708 -3277 1661 0
+-2011 1314 1914 0
+1111 419 -758 0
+3125 -1504 -1337 0
+3367 1185 -368 0
+-115 -1430 -2666 0
+-1242 1864 857 0
+1171 -2311 -942 0
+-1298 1424 -2270 0
+-2674 -1425 -2889 0
+-1689 -2866 2896 0
+2707 3208 3192 0
+-1348 2531 2450 0
+3228 -538 3049 0
+411 -1443 2580 0
+-127 -335 385 0
+1525 367 663 0
+1796 920 2170 0
+798 117 -3048 0
+643 -1887 1794 0
+2918 -1734 1413 0
+-2983 1711 -668 0
+3408 885 3289 0
+-697 -1451 -1923 0
+478 -956 -1152 0
+-3331 1169 -321 0
+183 -2019 -3152 0
+-767 -1650 386 0
+-1205 -2025 -1895 0
+153 -3014 1237 0
+358 1233 2631 0
+-609 -1356 1206 0
+1813 566 123 0
+-1400 -2033 483 0
+372 -2799 1745 0
+-550 1603 129 0
+3336 46 3363 0
+2199 3223 1637 0
+215 -1174 -2960 0
+2673 2292 3216 0
+2508 2638 -2048 0
+-1342 -4 -3075 0
+-2638 1542 -1037 0
+2206 2713 3497 0
+-1535 2004 1142 0
+863 1984 758 0
+2767 2414 -3486 0
+-2636 261 1484 0
+354 2548 68 0
+1740 1714 1929 0
+-1962 -3004 -2791 0
+976 -2361 1326 0
+1878 -1470 -1138 0
+3434 -3141 -1058 0
+-1526 1311 3040 0
+2594 2530 1946 0
+-2360 -377 2812 0
+66 -2164 -3326 0
+988 -1292 -2241 0
+-337 1647 5 0
+-1386 -2687 1197 0
+2235 -555 -1276 0
+-814 1055 -2876 0
+2778 641 -991 0
+2918 3148 -2974 0
+2251 -1274 2570 0
+3 -2620 2991 0
+-2619 -2909 -1426 0
+-2358 -2755 -1447 0
+1175 -3237 747 0
+-1507 3424 -2945 0
+-2788 -2117 -726 0
+1840 2152 1839 0
+-3435 -2143 -545 0
+1361 1184 2368 0
+-3084 1428 -3155 0
+2000 320 -850 0
+2224 890 -437 0
+953 3425 -3060 0
+3185 2189 2018 0
+-2798 -1431 -1109 0
+-1597 -27 225 0
+-2961 65 3324 0
+-3078 -872 -371 0
+-3472 -1351 923 0
+3216 1470 946 0
+2231 2185 -959 0
+3134 1358 -769 0
+-198 -1958 -3349 0
+-1500 2384 1980 0
+-2719 -28 -2842 0
+3265 -16 -330 0
+860 -1394 -3160 0
+3399 2510 927 0
+686 -2179 1778 0
+2876 -2353 1684 0
+-377 -3266 3398 0
+-1367 -58 2974 0
+1424 3075 1230 0
+-2791 -2929 -1484 0
+2127 -2202 -264 0
+-2673 -1834 -1033 0
+-2534 -2488 -1660 0
+-2309 1335 -16 0
+-2385 -979 -775 0
+-3020 -3322 -380 0
+2107 -725 -1991 0
+-2170 656 115 0
+3119 -1899 -806 0
+-17 -1220 1505 0
+-3457 1395 -2745 0
+-3363 -1327 -1791 0
+2344 842 1619 0
+1816 -3379 -2190 0
+-2128 -376 3201 0
+-1842 2904 2935 0
+1512 3500 -3384 0
+2655 -2251 1727 0
+952 -1606 256 0
+-1516 2502 2231 0
+271 -1859 310 0
+-1822 -591 -1159 0
+112 2701 309 0
+2732 970 -2091 0
+1133 108 1997 0
+-2337 -2912 -1941 0
+1990 -1542 -2084 0
+-3054 -3013 1057 0
+-3182 1082 -1125 0
+-1876 -3279 2393 0
+823 -543 1925 0
+-3455 -2745 -2994 0
+-696 -22 1301 0
+30 -1367 -1633 0
+784 1249 1992 0
+-2337 1370 -3048 0
+-1862 209 -998 0
+-2433 -2248 -1902 0
+33 -1031 -3042 0
+390 -2672 -886 0
+-1779 -477 -2601 0
+-2943 -3025 2068 0
+2852 2216 3455 0
+-1648 2547 -1386 0
+-1841 -2412 -3414 0
+-2175 -3020 1341 0
+2675 3083 -435 0
+-2722 2650 -1386 0
+-2053 2591 -2211 0
+3187 -2253 1564 0
+1895 -359 -2888 0
+-35 2483 -761 0
+-1266 -2704 -1419 0
+-3019 -122 1070 0
+-2586 -2884 2854 0
+-4 -1185 -2663 0
+-2062 -2635 -2314 0
+-462 -3378 495 0
+254 -1267 -2123 0
+-2708 3091 2546 0
+3038 193 -2913 0
+-1295 -2052 2519 0
+324 945 -2646 0
+1497 1452 -3274 0
+-1598 -1281 -1072 0
+-133 -2877 -1332 0
+3180 -263 3054 0
+-2596 2262 -78 0
+1479 805 -836 0
+-3003 3059 -123 0
+-1111 -1240 -580 0
+-2776 -1696 1991 0
+-2319 1127 1126 0
+2487 -2778 2033 0
+369 2547 -2319 0
+557 -2925 -416 0
+867 -264 2728 0
+312 3340 2627 0
+2642 -69 -1403 0
+-2033 -137 1699 0
+249 -2385 551 0
+-3177 -2490 -480 0
+-2194 -3264 -2229 0
+2999 502 -3290 0
+1670 -177 2901 0
+763 629 2821 0
+2446 -2597 2437 0
+3153 -368 -3164 0
+-1806 -467 2231 0
+-713 -2077 2207 0
+2763 -1126 -2615 0
+-1072 -2942 2995 0
+3245 3009 -2064 0
+-2709 1835 -2678 0
+-3431 -965 -778 0
+-3485 -2640 -3433 0
+1555 3314 1172 0
+2876 1956 -1029 0
+1557 -889 3412 0
+-457 3455 -1850 0
+-1093 774 -2943 0
+1985 -1709 1994 0
+-1107 -298 253 0
+81 1563 -1701 0
+-1035 1316 78 0
+-3201 1938 1685 0
+-791 1801 2353 0
+2413 -362 -3403 0
+-1949 719 -1926 0
+2929 -1967 2643 0
+-1868 -3255 253 0
+-737 730 2131 0
+1090 2016 -1518 0
+-13 -2856 -3231 0
+-1527 -1429 86 0
+3361 2915 -2258 0
+-1054 710 2031 0
+-1367 383 -1070 0
+1801 -1867 -1812 0
+2437 756 3332 0
+936 -2794 -2808 0
+-17 -1045 2145 0
+-67 -2694 -3394 0
+-2350 1345 -2850 0
+-2313 -2995 2151 0
+-409 -2519 -3436 0
+-1253 -2187 -680 0
+-1872 843 -1195 0
+1328 -2430 -760 0
+-2329 65 -2641 0
+-1150 -1802 2752 0
+1994 1690 -2801 0
+1512 -3116 2237 0
+-3089 -855 2737 0
+297 1187 -3388 0
+-2577 -3376 1206 0
+-2615 -3131 -379 0
+-3174 -104 -744 0
+100 2405 -2350 0
+2568 3205 3009 0
+581 631 2962 0
+-3083 1535 2882 0
+1645 304 1844 0
+-588 -1379 2897 0
+-1132 2876 2219 0
+-430 968 3255 0
+-2895 2506 2051 0
+2843 942 1944 0
+-693 -1229 -2023 0
+-2300 -2590 492 0
+558 607 -1980 0
+-1955 -3200 -2305 0
+2848 1946 -1293 0
+3075 2921 -557 0
+1430 1099 1030 0
+-1828 -2511 -3113 0
+-2795 -2365 2528 0
+744 2817 2164 0
+-3079 2595 2543 0
+-442 2507 992 0
+-3130 -1624 1753 0
+-3130 -2804 -42 0
+3164 -206 -3475 0
+3089 609 2053 0
+1835 124 535 0
+-877 -434 -2304 0
+-237 3233 429 0
+1371 560 2573 0
+-445 -88 845 0
+-705 1134 -20 0
+1943 -1832 3397 0
+-1062 2569 -3173 0
+569 3089 -2619 0
+-1663 -823 617 0
+390 847 2149 0
+-3191 -1762 2967 0
+-2157 -1792 1323 0
+-721 2508 3020 0
+2471 1190 -2933 0
+-1461 -3128 1345 0
+3173 -2367 -2556 0
+3093 2362 2437 0
+2848 2077 -3467 0
+3481 -2779 -2231 0
+-2976 2033 -2499 0
+-880 -912 105 0
+-1580 -1180 1080 0
+-626 3273 -2281 0
+-799 -2177 3431 0
+2289 1099 2010 0
+698 2267 2635 0
+1577 2067 1155 0
+-2871 74 983 0
+-2382 -1116 -1860 0
+1965 452 1469 0
+-3159 1850 276 0
+-796 1698 1108 0
+2510 1133 -3121 0
+1437 398 3060 0
+97 -2904 1087 0
+-3010 -3039 2671 0
+-2344 1667 2829 0
+3394 -3251 -921 0
+3143 1373 1409 0
+2296 2456 -2054 0
+-2572 -787 -2923 0
+1926 3422 2308 0
+2866 1089 3227 0
+1988 -866 -2909 0
+-792 280 3403 0
+3288 -398 1086 0
+-531 1587 3103 0
+3203 2595 1584 0
+2801 -1691 3431 0
+2441 -2803 -470 0
+-1555 -1680 832 0
+1772 2276 -1814 0
+-253 -846 2308 0
+1669 -2501 -1774 0
+-958 -3154 3436 0
+2966 -380 3441 0
+-411 -2572 -1572 0
+-1065 2401 -1171 0
+840 2816 -2698 0
+-2271 1804 -416 0
+-2048 3229 1027 0
+-138 1382 624 0
+-95 -1277 -99 0
+-203 -1786 -778 0
+608 -1139 -1473 0
+-651 -1436 2447 0
+-49 -399 -1793 0
+-883 2710 1107 0
+-246 -604 376 0
+-571 124 -3069 0
+-2062 1154 3466 0
+92 2632 -1386 0
+272 2174 -3403 0
+2240 -2672 -1170 0
+-555 -1061 -283 0
+1452 -1633 3353 0
+-307 1962 1829 0
+2953 -442 -3255 0
+-1407 -492 -1338 0
+125 -3402 2570 0
+-1815 -2530 -3126 0
+-1545 -2327 -2870 0
+-3353 -2756 -449 0
+-638 -1005 -2432 0
+-2790 734 242 0
+-2876 -324 2003 0
+-787 3382 53 0
+-268 1573 199 0
+2035 376 -1965 0
+1882 -1864 445 0
+-2418 661 1725 0
+-2690 2711 2124 0
+1822 2669 -1916 0
+1916 -204 -3490 0
+1598 -3422 986 0
+2067 -188 -2644 0
+1891 923 905 0
+-365 1938 -2621 0
+-2401 -804 3328 0
+-1273 2664 1387 0
+1561 -52 2681 0
+160 -1028 2172 0
+-629 -1159 -2070 0
+2921 1316 -75 0
+1017 2569 2542 0
+329 -408 -2351 0
+-3074 -659 93 0
+-2534 1868 -3289 0
+472 1408 -2933 0
+2930 -2830 -629 0
+2453 2473 1336 0
+-2449 -333 1511 0
+-2439 1147 -736 0
+-1243 -144 2994 0
+633 -25 922 0
+-1833 -1609 -2735 0
+2129 -354 -1291 0
+2887 -2408 -1035 0
+-1469 850 1428 0
+-1188 2766 2023 0
+-1864 61 1161 0
+2917 978 2251 0
+1633 -2498 -2172 0
+183 2311 -1752 0
+-1375 -2299 650 0
+-827 1176 2485 0
+-182 2126 -1671 0
+-3428 -2515 -344 0
+2458 -1326 -1558 0
+-1506 2515 71 0
+-1125 2177 -1785 0
+-1137 3062 3125 0
+639 1036 1978 0
+839 1904 -2203 0
+-1740 -2893 -512 0
+-418 -361 436 0
+-255 -611 1334 0
+1049 -3288 1626 0
+3463 -2700 -1128 0
+-1827 1610 -122 0
+-683 257 3133 0
+3187 -2263 -3203 0
+-533 -2068 2835 0
+-2085 -2657 1163 0
+-2686 3152 -709 0
+-2917 312 -2433 0
+365 -3331 -2417 0
+2723 284 3269 0
+-1483 -2415 -3137 0
+-924 3066 3119 0
+-347 1665 -2208 0
+-602 -2717 -1699 0
+-3465 1083 -2211 0
+3366 -2705 833 0
+-2357 -1164 -2330 0
+-2196 -3317 3336 0
+958 1096 -869 0
+-1808 214 1082 0
+-242 -2618 -3227 0
+-1787 1706 505 0
+233 -3213 3061 0
+2073 -3485 692 0
+-2462 -1687 -1890 0
+1601 -215 -1577 0
+669 -2024 2814 0
+2910 1729 -3095 0
+-2170 1807 1336 0
+-3009 1498 -2974 0
+-463 -2018 1792 0
+618 3458 -1334 0
+1670 2316 -3365 0
+1187 77 690 0
+-1992 1710 -1393 0
+3376 -2256 2533 0
+1987 3007 2292 0
+1215 1583 -359 0
+-1940 -3483 -1039 0
+3429 -870 3019 0
+-2821 -618 1287 0
+2123 -2800 1717 0
+-2470 2053 2961 0
+-2001 456 3417 0
+2656 -1024 1485 0
+-2287 3435 2381 0
+2553 -994 2633 0
+-3444 -2140 -2155 0
+-907 3000 2639 0
+2856 -2763 -1818 0
+-920 1552 8 0
+2076 -1436 914 0
+-2279 -2171 -2854 0
+2518 1481 1622 0
+-1435 -2413 1356 0
+-1445 1334 -3130 0
+-3428 403 -1274 0
+1931 2173 970 0
+-1427 -1786 -2006 0
+-26 884 -638 0
+-3168 1014 -1578 0
+-2343 -2349 -2867 0
+-561 174 1898 0
+761 -1131 2731 0
+-2454 -3076 -1695 0
+2076 -2295 2363 0
+233 -1876 452 0
+2703 2540 -247 0
+520 762 53 0
+1286 -2749 -2343 0
+-1074 2305 -508 0
+-240 2374 3322 0
+-3358 -338 -1901 0
+-3334 1590 -570 0
+588 648 2717 0
+-780 408 159 0
+-753 -1657 -2513 0
+2451 503 -1266 0
+3372 -1322 -1696 0
+-3103 -247 -2120 0
+3240 3254 -2484 0
+-1063 -311 -2863 0
+697 1693 -1102 0
+102 -558 2434 0
+-3316 1036 2286 0
+-3025 -2555 2172 0
+2691 1275 2453 0
+2324 -2450 -849 0
+-3474 1024 2374 0
+-2785 -1993 -2251 0
+-3476 -2802 1055 0
+568 -1207 -3247 0
+2480 3309 2586 0
+1481 -1608 3092 0
+-2461 -2671 -2696 0
+1731 -3198 -1701 0
+-2505 -998 611 0
+371 -2814 -1020 0
+836 -959 -1503 0
+2925 -1416 16 0
+-1293 678 -465 0
+-1762 3394 2205 0
+-1963 443 3418 0
+-1981 -222 1425 0
+447 1740 2971 0
+1509 -1469 -256 0
+-1869 -3395 890 0
+-2027 119 2334 0
+-247 -911 -799 0
+-113 3185 3109 0
+109 -3418 3303 0
+11 -2191 -3434 0
+-2006 2433 929 0
+2160 2081 -1643 0
+1906 625 109 0
+-746 1349 1795 0
+-837 -2824 -1712 0
+-2608 -1217 2342 0
+-2805 -3320 570 0
+-765 -3218 -565 0
+-1621 -44 1974 0
+-622 -144 2337 0
+-2701 -2073 -2983 0
+2562 1914 174 0
+-344 1459 -2326 0
+-3387 -3334 3416 0
+1768 1117 482 0
+-268 1398 100 0
+3254 3169 -1543 0
+652 -780 -1947 0
+634 -52 1764 0
+2275 505 1944 0
+-3345 -668 1050 0
+-2123 3430 2471 0
+-1633 3359 1733 0
+-2017 -139 2834 0
+-2036 -1934 1500 0
+25 -2587 -2588 0
+-1461 -940 -3001 0
+2862 -3033 46 0
+-1025 -131 -630 0
+-3065 1073 1705 0
+1875 417 2422 0
+-1097 -714 1772 0
+1947 1349 -353 0
+2743 3456 2540 0
+2338 3250 103 0
+-2483 3183 2937 0
+2403 -2488 -2570 0
+-3331 1893 -2495 0
+2573 123 1112 0
+-3113 1267 3359 0
+-816 3345 -1740 0
+2604 -3315 -259 0
+-2350 -3401 1269 0
+-2988 634 2869 0
+-2272 1694 -1843 0
+-1406 -393 3157 0
+-532 2775 -351 0
+2731 -3123 3442 0
+1527 -1232 2539 0
+405 -3081 -1347 0
+151 581 504 0
+2675 2497 -1382 0
+-1482 -2047 -3243 0
+1996 1417 3430 0
+-327 1765 2434 0
+1330 -2364 3127 0
+-2146 -403 751 0
+489 2396 -3337 0
+-1023 -3408 -1559 0
+2895 173 1792 0
+-770 -1690 1531 0
+-2501 -118 -1318 0
+-1187 3101 841 0
+-2220 -1269 -803 0
+1965 1213 1356 0
+1244 2626 -1759 0
+749 832 163 0
+1735 455 1431 0
+773 -3158 2277 0
+-1368 -657 2879 0
+-2085 -637 55 0
+-1866 3155 1671 0
+1346 -1166 -1240 0
+3096 2745 553 0
+3214 2263 1001 0
+-2382 -2264 796 0
+-1912 -3122 -1858 0
+1383 1196 -1504 0
+1643 948 -353 0
+-2409 -3421 -437 0
+2813 507 2335 0
+394 -464 -2313 0
+-1306 2025 -2743 0
+1438 -1128 1773 0
+385 1547 1853 0
+1227 -1300 2741 0
+3036 -881 3149 0
+-2320 -3388 -3456 0
+-872 15 278 0
+-3479 2468 967 0
+7 -1985 -427 0
+-1441 -860 3462 0
+2014 1463 3125 0
+1031 -2811 -2495 0
+2832 -250 498 0
+-2619 3410 1811 0
+-2328 300 -2073 0
+-195 -2542 2487 0
+3075 -2663 1063 0
+1973 -630 2193 0
+3439 -1632 2414 0
+-186 3195 929 0
+-746 2353 2780 0
+-1954 -1357 -1240 0
+-2773 -2813 1935 0
+-1030 2816 -1723 0
+2605 2970 -2393 0
+565 1521 2925 0
+757 -3156 -2495 0
+-1033 -608 -1670 0
+-1850 916 -1861 0
+2893 1046 -3264 0
+-2760 3075 3246 0
+-1581 378 2615 0
+-2132 1139 491 0
+1781 -2008 -5 0
+1835 -1335 1759 0
+-2817 -1426 1799 0
+1391 1672 -1116 0
+1140 933 -2485 0
+-1588 -264 3462 0
+-465 -3165 1176 0
+2896 -2442 -2883 0
+1992 -620 2542 0
+-950 -1481 2461 0
+-3306 1232 -644 0
+-337 -2989 -2906 0
+1425 1156 3123 0
+1106 -1312 1778 0
+3460 -535 1110 0
+1906 43 985 0
+-830 1794 1322 0
+-983 1 -3112 0
+2677 1238 -2442 0
+842 2243 -341 0
+871 768 1884 0
+1599 -3073 3033 0
+1091 -140 2654 0
+714 469 2319 0
+-1467 -1811 1037 0
+-63 898 -2820 0
+-2582 1995 810 0
+3047 2042 -2991 0
+2939 -3026 2157 0
+2817 -1505 333 0
+3279 948 -1225 0
+-3457 -1185 -2459 0
+3478 395 1693 0
+3215 90 -1037 0
+1084 -2369 1480 0
+1629 -3097 1934 0
+-2843 1126 -342 0
+2522 2090 -2339 0
+-2802 1412 -1293 0
+1637 2802 1464 0
+-3207 2039 2168 0
+124 -2364 -2037 0
+1334 -3025 -474 0
+205 416 2666 0
+566 -584 -1308 0
+648 1639 318 0
+3159 -1816 -1691 0
+1228 1409 2947 0
+2615 1658 -1269 0
+-1239 1626 -1700 0
+370 448 -1533 0
+-2315 -1207 3214 0
+-982 2421 1693 0
+773 1519 339 0
+-3253 1121 3400 0
+-811 1668 2279 0
+-2024 893 1723 0
+-2626 -1547 -1595 0
+-3414 -547 1297 0
+-720 2462 2428 0
+1161 2631 997 0
+-2530 2502 -2749 0
+528 3429 -3421 0
+1813 -390 1266 0
+3243 2736 -326 0
+-1065 1402 815 0
+1604 -1918 -3266 0
+-1330 -3041 2367 0
+-2781 -2795 -3038 0
+-1356 -2546 -1485 0
+-2254 -857 2745 0
+2553 -1516 -1454 0
+-2136 -1574 541 0
+-1137 -1120 -2990 0
+992 -3437 -1436 0
+-2907 -471 -345 0
+1935 -563 -368 0
+-1232 1299 -680 0
+-3246 1659 -2248 0
+1522 1994 -3275 0
+2880 118 2945 0
+3064 -3360 1330 0
+2142 -2731 1866 0
+-1778 1726 2477 0
+1086 212 1957 0
+3008 2668 -1186 0
+87 -3491 876 0
+-173 381 -2956 0
+2813 359 -1171 0
+-1512 3333 1834 0
+1709 3126 -966 0
+-2987 1561 999 0
+-798 1953 575 0
+3425 2643 -926 0
+3118 -2568 -659 0
+-1240 2243 -3242 0
+-1677 761 -2206 0
+-2174 2931 681 0
+2036 3393 -888 0
+1490 3255 -3456 0
+-1459 2781 2060 0
+-3409 -1751 3473 0
+2428 -3460 2773 0
+1863 1246 -2485 0
+-2574 2639 1032 0
+-2741 -289 2691 0
+1043 2583 -3267 0
+3250 -1202 552 0
+-349 -1782 671 0
+-227 -1241 2071 0
+1959 1262 -3333 0
+1095 -3051 169 0
+2733 -1512 3127 0
+908 979 1569 0
+3455 -1392 -1161 0
+-3467 1275 1866 0
+-1681 -1983 3137 0
+549 2069 -2803 0
+624 -1670 2899 0
+-3250 -1534 549 0
+-1104 -2313 -1744 0
+3485 -138 -1156 0
+-617 -2143 265 0
+-881 -1656 2490 0
+2289 408 3381 0
+3015 -1471 3362 0
+2505 -3139 -1813 0
+2416 2499 1615 0
+-2504 -152 1546 0
+1715 -1381 -656 0
+3078 -2246 -1997 0
+764 1954 -142 0
+-1197 2696 -116 0
+2960 -3305 -3279 0
+-2252 -1684 -115 0
+-1394 -2509 -742 0
+2247 2006 1908 0
+967 1205 -3301 0
+972 439 2370 0
+-2127 -1711 -1254 0
+-2649 1518 -2787 0
+-2663 265 2234 0
+-3316 1777 3362 0
+-2340 837 -1609 0
+-2996 828 -545 0
+3031 1229 -1351 0
+3309 -2050 -1682 0
+-2246 -483 2517 0
+2100 -1177 -635 0
+2642 -3019 -1336 0
+2051 -3257 1916 0
+296 1621 1797 0
+-3129 1299 1065 0
+456 1672 2600 0
+-916 2436 -1711 0
+-497 -1139 42 0
+1360 -1278 2683 0
+-2782 -116 -2422 0
+-895 844 -1008 0
+-1372 -1684 -2357 0
+579 157 3105 0
+1271 -535 444 0
+-2122 -2027 -305 0
+-3416 325 265 0
+702 3255 1943 0
+2280 -1464 738 0
+-2634 -2034 1056 0
+2885 2203 -1913 0
+2360 207 2588 0
+-516 -2107 -2175 0
+2382 3071 -3390 0
+1415 2316 -2192 0
+2425 -3048 2987 0
+-134 -3289 1031 0
+811 -2166 -1817 0
+-3467 1794 -1044 0
+-3345 708 -2406 0
+2031 974 -2456 0
+3038 -2308 -2929 0
+1704 -1384 -3156 0
+-1210 -399 -2659 0
+-1188 400 -1162 0
+1293 635 -1271 0
+-2728 -2180 136 0
+-1372 1847 -2209 0
+2455 -1124 2921 0
+-795 2785 -2502 0
+501 -139 2561 0
+-725 -2218 -3323 0
+1012 -692 450 0
+-860 2817 -2257 0
+2266 -2845 747 0
+1997 2142 2382 0
+-45 2990 -2511 0
+-1115 -507 2881 0
+1205 -360 2225 0
+-2758 2168 -2541 0
+-450 -661 3173 0
+293 -2649 -1979 0
+-2596 -1682 1398 0
+-557 -1303 -3123 0
+32 -1017 -983 0
+-1614 1093 -524 0
+-1817 482 -599 0
+-2624 2053 2796 0
+1867 -2553 -769 0
+-3196 1055 -3000 0
+-768 -3470 3389 0
+-2626 -1309 -2670 0
+-2068 1602 -2599 0
+-572 -749 -635 0
+1798 -2318 -1041 0
+1390 -2932 -169 0
+-1851 1025 2401 0
+1566 -1988 1590 0
+564 2052 1784 0
+-2830 -3015 -2934 0
+3466 2364 2182 0
+-2216 1826 -192 0
+3435 -1695 -1425 0
+-3009 1945 3301 0
+746 -309 -778 0
+816 566 -140 0
+2211 -3280 -2096 0
+1263 -1728 453 0
+2742 -1640 -1521 0
+-1413 571 -2526 0
+-1464 -2092 -3020 0
+1276 -1087 2267 0
+1025 -1713 2987 0
+2405 -2126 -3413 0
+-1985 -2411 -3048 0
+-404 -1277 3040 0
+1227 -2528 -1869 0
+1996 1323 -2147 0
+-2374 3037 1595 0
+1145 -776 -2635 0
+-1491 -1333 2034 0
+65 -1687 2074 0
+-386 2949 -777 0
+-2518 2646 -649 0
+-1504 820 -1848 0
+-2601 -2992 2607 0
+-1306 -1286 1764 0
+3047 -427 358 0
+-591 855 1428 0
+475 -3297 1710 0
+-1248 -1483 -1244 0
+-2265 3262 2041 0
+3408 -174 -583 0
+-1539 3405 908 0
+-396 764 2677 0
+-1836 3284 -1164 0
+-409 76 -3478 0
+-1694 204 -220 0
+-2398 1959 651 0
+136 -750 1239 0
+-3373 -351 -2893 0
+683 -1442 3471 0
+-2874 1304 32 0
+-364 -3282 -1232 0
+1689 1479 2267 0
+2365 2292 -1795 0
+730 1485 3235 0
+91 -3120 -2186 0
+-2918 -2080 -1372 0
+-3131 1180 1999 0
+-327 2085 -79 0
+-802 -2855 2979 0
+242 1698 -964 0
+-3012 -2932 -3080 0
+-1403 -364 -320 0
+2528 -3225 3265 0
+1491 611 -2854 0
+3435 -3159 -2956 0
+2015 1003 559 0
+2250 3293 1044 0
+1476 -760 -1183 0
+1003 -1091 19 0
+-1703 -39 1585 0
+1983 1962 1546 0
+68 -982 2909 0
+-3473 -2097 2084 0
+-1256 -2453 1200 0
+2789 -2425 -764 0
+2322 609 2233 0
+3303 -2450 -2160 0
+2811 -2743 2865 0
+1187 -913 2966 0
+-2611 -1515 -1582 0
+2045 1525 1186 0
+-1308 -2557 -1773 0
+-2116 -3349 -2491 0
+2685 -3334 317 0
+2209 -1554 963 0
+2502 -38 -2161 0
+-782 2211 -226 0
+-1055 -1567 200 0
+-117 -735 2980 0
+-2750 -478 1913 0
+439 949 -1439 0
+-1699 3078 -2059 0
similarity index 87%
rename from examples/charm++/satisfiability/example_9000.cnf
rename to examples/charm++/satisfiability/example/example_8000.cnf
index 3618583fbd0322a52f1bea73573b617650885ebb..d42b49df9d2fc2b3e6fef7649764c864702649bb 100644 (file)
@@ -1,6 +1,6 @@
 c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
 c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
-p cnf 3500 9000
+p cnf 3500 8000
 -1765 -1070 0
 -1298 -3068 0
 -2907 -225 0
@@ -8001,1003 +8001,3 @@ p cnf 3500 9000
 -1755 1584 3095 0
 2742 -2928 371 0
 -2327 -1841 4 0
--3069 722 -2268 0
-1535 1030 1633 0
-431 -168 -1613 0
--98 2501 -938 0
--289 -736 -3413 0
-174 -2411 -1397 0
--3297 1164 950 0
--1542 2682 -3395 0
--1472 -1648 -3019 0
-3344 -2349 1936 0
-1319 1744 3005 0
-1406 2571 127 0
--1865 1401 -3379 0
--1841 1288 1822 0
--2573 613 2246 0
-184 -1159 293 0
-1567 3465 768 0
-657 1760 178 0
-3353 2988 2006 0
-1947 -2975 -2501 0
-1608 -1784 -1110 0
--3429 -274 3313 0
--3484 173 2527 0
--3382 -2369 -19 0
-679 1953 -1024 0
-1874 136 -1898 0
--2234 421 -1719 0
--48 -702 -3447 0
--571 2106 -2698 0
-313 590 -29 0
-3217 745 -2060 0
-1097 -968 3300 0
--1751 889 68 0
-2180 663 -77 0
--2910 -3236 2654 0
-1613 -1667 2223 0
-1498 1019 -1337 0
--1652 -666 -2039 0
--3375 1372 -1503 0
--398 -1838 -912 0
-3398 -3362 -1381 0
-1790 1904 -1844 0
-127 2827 2535 0
-1526 2084 -2947 0
-846 -1000 3478 0
-175 -935 -1439 0
-2120 -1694 2537 0
--263 -32 3457 0
--956 -1476 -880 0
--3126 767 909 0
--2536 619 -1119 0
--2286 1785 -261 0
--516 -3485 -114 0
-3115 -1424 608 0
-2014 529 -857 0
--25 -2520 -3363 0
-2700 3377 -2627 0
-1805 -661 191 0
-1731 -1842 -895 0
--1957 2682 2188 0
-423 3431 2855 0
--3081 1940 3038 0
--3095 -709 3133 0
-1029 703 -1018 0
--1820 -1006 1960 0
--1039 -1906 -1824 0
--761 -3315 -862 0
-267 695 -711 0
--1873 -1690 -1109 0
--673 -2182 -429 0
--1372 3023 -2435 0
-1038 -2752 2396 0
--204 569 136 0
-1225 -3018 1083 0
--2123 55 -3434 0
--1445 -1950 1082 0
--2314 580 2972 0
-1679 -2137 -573 0
--26 780 1213 0
--171 118 -638 0
--709 1356 -3050 0
-43 -1058 -3429 0
--97 -203 -354 0
--1005 2573 3423 0
-147 -120 -318 0
--316 2840 -184 0
-610 752 848 0
--2195 2287 3177 0
--3174 -3019 -2466 0
--2532 -3034 -2878 0
-3408 878 -1365 0
--1636 -1287 -141 0
-3068 -3078 1234 0
--995 3436 3153 0
--3455 -1514 -1334 0
-2841 -584 -489 0
-1280 423 1011 0
--1201 -2900 2433 0
-33 -1539 -441 0
-2370 3375 -3383 0
--1274 2450 -2941 0
--305 1562 -3287 0
-1291 -3152 1765 0
--1322 -2011 -1766 0
-552 -2846 1018 0
-1635 -1952 -648 0
-23 -2113 1680 0
-657 2886 159 0
--2392 2948 -842 0
-3354 -1848 1820 0
--1927 -1657 539 0
-1771 -3257 2146 0
-2281 -905 3110 0
--2816 2545 -2904 0
--3476 -1280 1956 0
--1190 -3054 -761 0
--1650 653 2914 0
--2842 2101 -3360 0
-1311 212 1439 0
--241 -2373 -3239 0
-1119 1211 -274 0
--764 1002 -3330 0
--715 -2110 2918 0
--1025 -1145 -1083 0
--852 498 -2843 0
-552 -1164 1132 0
-233 3361 3311 0
--1650 2362 3340 0
--2228 -2507 -2101 0
--2456 -1412 2676 0
-3189 -1214 -1489 0
--2290 -740 -2955 0
-1841 1076 1363 0
--2481 1780 3463 0
--1576 -3333 -1871 0
-240 2235 -2412 0
-299 1944 -3353 0
--1589 2504 -2395 0
-79 457 -2863 0
--2239 -2837 424 0
-1079 2766 -2116 0
--37 2880 -3452 0
-3379 -925 -704 0
--2748 -1195 2642 0
--124 1495 3451 0
--667 2581 843 0
--1611 110 2860 0
-221 -1602 -1621 0
-965 -3088 573 0
--2716 -109 -156 0
--2628 -1089 756 0
-2904 2810 3356 0
--3075 1408 1222 0
-3481 -396 845 0
--1797 -1665 -771 0
--1964 -2644 1606 0
--1483 2265 523 0
--2962 2196 -1272 0
--397 2104 820 0
-1761 3009 -1022 0
-1746 -177 2537 0
-788 2792 1312 0
-1671 -3410 -1643 0
--284 -2434 -2832 0
-1836 -2370 1018 0
-1623 -2876 -152 0
--82 -2432 -491 0
-2687 -1017 2528 0
-278 -1198 -1699 0
--2465 -1621 -1378 0
-1225 1901 -1301 0
--2514 -2992 756 0
--1688 2143 -2539 0
--1862 -482 -2027 0
-88 -2215 -2325 0
-846 -3093 -651 0
-1299 -2276 -1109 0
--772 -2973 -2000 0
--584 1327 3421 0
--3245 -845 -1715 0
-2051 3220 1808 0
--2536 33 -396 0
--842 437 581 0
--2326 -2798 2229 0
-6 -2725 -433 0
-520 -3500 626 0
-609 -1413 973 0
-1783 -2977 2130 0
--1156 1221 1107 0
--3170 -1923 -1963 0
-3334 -1338 -2722 0
--1641 1625 473 0
--1363 913 975 0
--896 -497 -2583 0
-2065 -2716 1147 0
--2841 162 -815 0
--2641 -2714 -2009 0
-3363 -1941 710 0
-317 1545 220 0
-2416 -2880 2771 0
-2810 -1507 2790 0
-2354 -1276 2696 0
-1253 3155 -3334 0
-2608 -1968 -963 0
--1280 973 -1509 0
--1185 -2355 -289 0
-1513 -76 709 0
--2572 1830 -1654 0
--2590 1813 -1414 0
-3245 -2653 3352 0
--960 -1480 -228 0
-1460 911 -1028 0
--806 -81 2326 0
-798 2496 2472 0
-1887 3102 -2934 0
--1701 490 -208 0
-1449 -2457 3202 0
--478 84 3142 0
-2294 324 -3051 0
-1699 -1511 2476 0
-754 -1337 -356 0
-1959 -3212 662 0
-901 -3420 -1699 0
--3393 1 1781 0
-3011 988 1279 0
-1966 -639 -3274 0
--1347 -2798 2649 0
-472 1100 -1033 0
-3453 -3289 1141 0
--3005 -1548 1673 0
--455 -1359 3440 0
-2088 -2865 2345 0
--1346 -2063 -3207 0
--1743 -520 3112 0
--3101 -2312 -3108 0
--475 -622 -1157 0
--2965 -1848 1130 0
--843 8 -1420 0
-2500 2874 -1193 0
-1181 1601 -1941 0
-476 -1271 748 0
-1660 2171 2542 0
-700 2275 -2790 0
-422 3356 -1309 0
--2280 -1841 2481 0
--1589 -2698 -554 0
--1785 -157 -2220 0
-255 -2583 126 0
--2724 162 -343 0
-127 458 -3003 0
--2250 2395 -450 0
-1391 1662 2689 0
--747 -3300 1973 0
-1702 474 -275 0
--3332 -3439 2369 0
--3228 -532 -2564 0
-1571 -3216 -2003 0
-112 -1848 2579 0
--3338 -1517 -2642 0
-1127 2193 -2764 0
-506 2180 -1114 0
-2019 -1698 2415 0
--638 2950 2439 0
-2806 2807 -2587 0
-2614 922 -1279 0
-2368 2677 -2823 0
-2290 -2974 -3075 0
--688 915 2698 0
--2165 2130 2825 0
-3420 1430 3244 0
-1027 -993 -3158 0
--494 -1656 -2436 0
-1856 1442 3261 0
-2624 2642 3397 0
--2469 403 658 0
-3107 -2258 1888 0
--914 364 -2349 0
-299 -2423 -3474 0
-2379 -609 -350 0
--3486 -322 -3217 0
-535 -2664 -3422 0
--1209 3433 -3404 0
-871 -2985 -1943 0
-1977 2055 2342 0
--3091 -1723 2715 0
--891 763 -2542 0
--1105 -1520 -1822 0
-3318 1626 2486 0
-2260 -890 48 0
-3220 2058 -3051 0
-2882 -1022 495 0
--828 313 2636 0
--271 1326 1755 0
-1965 1273 1329 0
--2585 -959 2490 0
-2414 950 2016 0
--3497 -3043 -1690 0
-2443 -1131 -357 0
-580 -3399 1674 0
--3173 2275 -1900 0
-1141 3136 -747 0
-35 -994 -1053 0
-1755 1144 -265 0
--2269 320 2696 0
--3394 2752 3001 0
-3433 1964 -2733 0
--1219 3454 -2344 0
--1396 -1003 -3483 0
-539 2110 919 0
--2852 175 2981 0
-3255 317 -2481 0
-929 -2316 2411 0
--1889 -1758 -2845 0
--657 493 741 0
-573 -2224 2196 0
-422 1118 -168 0
-287 -298 1978 0
--262 -3015 3257 0
-260 -2242 -3180 0
-2164 -3074 999 0
-2592 219 2159 0
--308 1482 1549 0
-3315 325 330 0
-1689 494 1342 0
--3413 -426 -892 0
--1256 -2846 192 0
-1860 -450 1106 0
-3300 -309 249 0
--205 1228 2367 0
-873 -2574 -1766 0
-2723 3448 994 0
-73 -639 -2694 0
--2521 2664 2617 0
--3468 1350 20 0
-264 -2496 2191 0
--2803 -281 -3482 0
--2889 -628 -576 0
--1772 2314 2426 0
--348 -752 -87 0
-1913 1664 3189 0
-1669 -1767 -1740 0
-3223 1802 1157 0
--171 -1974 -364 0
-414 3291 -2408 0
--1936 229 -1728 0
--453 2407 -1845 0
--468 1776 1917 0
-1148 2361 1071 0
-520 -3435 2649 0
-189 -3163 1184 0
--334 -1286 356 0
-3387 1197 3093 0
--1095 -1700 -362 0
--2679 755 -1192 0
-1456 -987 1798 0
--2508 -306 1372 0
-3423 1484 -2921 0
--733 1818 -470 0
--1703 3060 -2261 0
-2360 -2132 1333 0
--2016 2560 -633 0
--2983 1690 1675 0
--2043 -1625 -1340 0
-2539 1742 -1999 0
--2849 -718 -704 0
--1909 2391 1541 0
--1400 -79 1990 0
--700 -660 892 0
-918 1542 2028 0
--3162 -897 2857 0
-2430 820 -2234 0
-843 -3384 3223 0
--2675 2405 -2746 0
--1834 3227 -2824 0
--3414 3130 -2864 0
--2412 -252 -3113 0
-2092 -2619 -1376 0
--348 -2763 384 0
-2549 -2173 -2092 0
--529 -481 -2816 0
--2645 1636 -1458 0
--1881 -1703 -2025 0
-3340 129 -1625 0
-1111 2729 2948 0
-1280 -3326 -135 0
--1604 868 2175 0
--988 2375 1553 0
-2269 -3271 -494 0
--2909 -2068 -1389 0
-3458 1492 928 0
-2424 905 -2270 0
--2116 134 -2447 0
-1888 3078 112 0
--3054 -1677 1658 0
-3137 -2233 1398 0
-2755 2191 -112 0
--3239 -717 3217 0
--1558 878 -3263 0
-1207 508 -938 0
--2448 -280 1703 0
--840 1998 1116 0
-490 -837 726 0
--869 2158 3419 0
--2734 1237 509 0
-1907 -2749 637 0
--364 -1907 1007 0
-971 -377 -2702 0
-2360 -3386 1816 0
-2938 930 -791 0
-2849 -895 -1384 0
-3047 -3008 609 0
--976 -2009 -3387 0
--2454 -1280 -3264 0
-2143 -644 -3375 0
--1011 -632 -1320 0
-3436 262 -2320 0
--3457 -2450 1148 0
--3175 -1082 2440 0
--549 -46 655 0
-2626 -2644 71 0
--1772 1330 2949 0
--2903 -3445 -1370 0
--688 1193 1999 0
-2614 1215 239 0
--2580 -36 -2620 0
--2187 112 -2925 0
-166 -2466 -680 0
-1201 -1380 3136 0
--2526 -2425 -1409 0
-2110 -2027 2213 0
--2250 2038 916 0
--1922 -289 -1191 0
-1222 2335 1285 0
--2479 719 550 0
-567 -2616 1304 0
--239 -2227 2415 0
-238 723 -1723 0
--1493 -804 -2046 0
--2297 2398 -2428 0
-1643 -2106 -2086 0
-2086 -3464 1100 0
--455 -3215 1863 0
-3090 -882 183 0
-2481 -451 1995 0
--825 -2373 -895 0
-2840 -3283 -294 0
-1682 -2220 -1925 0
-2833 -437 -1908 0
-3141 -3098 2267 0
--2970 1730 2522 0
--2801 2105 1165 0
--3465 3146 741 0
-2765 -3085 286 0
-321 -2380 -18 0
--1511 -737 1329 0
-2364 -1620 -3212 0
--3367 2129 -1860 0
--1082 -2942 -827 0
--2158 -3154 -1066 0
-2184 2658 2316 0
-2679 1115 2148 0
--82 503 -1525 0
-1579 3487 -3274 0
-748 -1960 -2969 0
--71 -2101 1074 0
-3214 2095 -1051 0
--1655 2756 -3342 0
-1019 3388 -2441 0
--1819 1592 -89 0
--3302 2714 2888 0
--2819 539 3430 0
-2156 2721 -242 0
-2191 -483 2266 0
-1739 -2611 862 0
--890 -2858 -2566 0
--390 -1346 3297 0
--2518 2861 3363 0
--801 -863 631 0
-707 -212 -2199 0
-2516 1737 3192 0
-618 -2686 -1010 0
-3239 -935 -1765 0
-2201 -2850 349 0
-2691 -2349 872 0
-476 -636 -1760 0
--3015 408 840 0
-1183 -1444 3177 0
-2914 -2274 -1440 0
-2243 177 -34 0
-2138 935 2722 0
-3100 1570 -936 0
-1425 2988 -735 0
-2577 -1042 2410 0
-473 -3112 2243 0
--1697 154 -1824 0
--1610 -3261 2304 0
--1163 -554 -955 0
-2046 -981 978 0
--2107 2102 -234 0
--1730 2929 -3261 0
--1637 -1147 416 0
-2583 -1740 3477 0
--2767 1191 2977 0
-1700 -2757 -2433 0
--600 3377 -2546 0
--1281 -1009 -2079 0
--2376 -3003 -797 0
--3311 1501 -310 0
--3170 2560 -2311 0
--1916 -2155 -2938 0
--1430 -1881 3145 0
-363 1620 2637 0
-2844 2479 -3448 0
--1821 1297 -2043 0
-2374 -3018 -2251 0
-2228 -3174 -2619 0
-1068 -1339 2846 0
-1603 -2923 -3034 0
-3369 2488 2236 0
-1273 -1489 -2137 0
--3245 -420 -1474 0
-2237 -2520 -1728 0
--551 555 -411 0
-2844 1443 1444 0
-2860 1287 -7 0
--1088 788 2670 0
--1046 1302 -1481 0
-1931 2859 -2005 0
--2573 47 3178 0
--693 707 -3387 0
-1903 -464 2481 0
-1451 1039 92 0
-2280 1051 1007 0
--1407 903 -594 0
--2944 3119 -3266 0
-863 -478 858 0
-960 -2985 1559 0
-1017 -1597 -1977 0
--1622 2682 -1336 0
--3105 1062 -929 0
-2228 -2495 3118 0
-2164 -2159 -2575 0
-1223 -555 2158 0
-1922 -2414 2804 0
--878 1029 1632 0
--2767 249 -3065 0
-1612 -444 -3376 0
-487 3110 -418 0
--73 -2047 3442 0
--2736 258 -2760 0
--2222 2248 -286 0
-2337 40 2168 0
-2299 -1013 -197 0
--175 -269 -2756 0
--71 -1031 -2256 0
--2218 -2315 3447 0
-2777 999 1564 0
-2731 2321 -2270 0
--1674 2786 -1165 0
--2153 533 1564 0
--3473 265 -1246 0
-1389 -2494 3339 0
--2053 919 2814 0
--3390 2132 -2929 0
--1218 -1032 1264 0
--1038 -2876 -25 0
--1513 -1144 -300 0
--1063 -53 3226 0
--1668 -353 -2291 0
-96 1362 1758 0
--222 363 597 0
-219 1801 2616 0
--2346 -953 -2158 0
-1765 293 -626 0
-1898 2590 1848 0
--2385 -143 -1667 0
-3134 2849 -3249 0
--34 2142 -992 0
-1664 -1126 1373 0
-1039 -2471 -3028 0
-976 -2888 1159 0
-1858 2940 2226 0
--3171 1282 3246 0
--2611 1530 -3366 0
--1987 -2671 -1033 0
--1776 611 3127 0
--2218 -2561 2691 0
--846 -46 672 0
-901 1201 19 0
--1831 1971 -2963 0
-3200 1512 2402 0
--2080 2623 2777 0
--2428 673 -2250 0
-2265 1128 2080 0
--1032 3152 -1413 0
-2505 -352 -1423 0
-1655 372 1143 0
-2590 -3271 -2543 0
--1107 1670 -1273 0
-3381 -661 -1806 0
-2147 -3185 -1328 0
--1751 -1109 -259 0
--1771 2321 -2611 0
--60 -2670 2452 0
--1979 -2746 1865 0
-1212 1863 3009 0
-2003 -2672 -3382 0
--1862 -2278 -3193 0
--2045 1605 1482 0
-1655 2889 2600 0
-1951 -1765 1208 0
--3 -2533 2821 0
--2104 567 1865 0
-2270 -12 -1622 0
--931 -1453 676 0
--1573 -864 2939 0
-1110 1781 -2114 0
--2558 -2284 -1599 0
--3384 -1056 -743 0
-1388 -2453 1993 0
--3393 -2253 3402 0
-2828 1132 -1155 0
-2209 463 -3337 0
-1640 2430 -3115 0
-1872 -1345 -343 0
-451 -3403 -992 0
-895 -817 -1428 0
--1772 2183 1128 0
-795 -1740 1962 0
--2896 2357 -1156 0
-578 -2934 810 0
--285 -745 230 0
--3072 -2308 -736 0
-274 2703 -1255 0
--3367 -1497 -1391 0
-1422 -758 -2450 0
-1282 -3271 335 0
-699 -2003 -1660 0
--2943 768 446 0
-3309 2672 -2536 0
-457 2531 1314 0
--2782 -714 1122 0
-2554 954 -1326 0
--293 -1047 2913 0
--3083 1805 -526 0
-2816 -1297 -2198 0
-3327 1705 532 0
-1589 -1146 -640 0
--1656 -3240 1994 0
-695 -1873 329 0
-3339 3382 -1492 0
--245 -57 -1859 0
--1276 173 2490 0
--1392 1746 3348 0
--283 1814 -3041 0
--1054 -1787 514 0
-3013 1097 2708 0
-158 2902 -2904 0
-1143 2536 -1926 0
--3126 -2926 -863 0
--81 -1845 -2851 0
--1646 -3117 1932 0
-2198 -2808 -2419 0
--3491 -3007 -2949 0
-1410 140 -513 0
--3301 -2919 2461 0
-503 -1131 3349 0
-2444 1652 -145 0
-463 632 2662 0
--1401 2654 1406 0
--2543 -259 2851 0
--729 -3325 -3473 0
-1422 1718 667 0
--144 1998 1098 0
--856 -1730 -538 0
--3175 840 1541 0
-2652 -44 629 0
-2149 2432 -1623 0
-2229 -728 2543 0
-1886 823 -3407 0
-3249 -941 3016 0
-779 1250 -1143 0
-838 428 -158 0
--2869 317 -3113 0
--1921 2756 1613 0
--603 -2245 1950 0
--524 -427 51 0
--151 -1361 658 0
-2628 404 -122 0
-2303 -1515 1285 0
-722 -988 3431 0
--1226 2166 -2227 0
-3222 3104 -2956 0
-2600 288 -1527 0
--3020 2451 -1888 0
-661 -2124 -2075 0
--1086 -2508 -1453 0
--1966 -112 -2256 0
-1831 1650 -860 0
--2527 6 -1414 0
--1713 -1002 223 0
-2390 -2876 -1058 0
-2631 -2002 1092 0
--2309 -2113 1540 0
--134 -3351 -2044 0
-2033 3338 -592 0
-2610 1367 -878 0
--2813 -1947 2751 0
--2071 -2461 2016 0
--154 -1067 -2289 0
-1269 3366 -355 0
--1166 3439 1449 0
-1456 -826 -2074 0
--2942 -1634 -1327 0
-2404 -2300 1485 0
--3080 1909 -359 0
-3403 1727 556 0
--658 -436 -1915 0
-1559 -3153 -3259 0
--3342 2460 -2131 0
-3229 3198 -1156 0
--401 -1580 -899 0
--1803 648 -3040 0
--1247 418 791 0
-1879 -2338 -2773 0
-1283 2679 638 0
-1036 1391 -3166 0
--1252 -347 -206 0
--961 -985 2352 0
-1554 -2407 1569 0
--1359 -680 -331 0
-871 -2356 -483 0
--1052 3490 -133 0
--1285 1648 -2471 0
-544 -1231 916 0
--1130 2150 2812 0
--3126 348 2444 0
-502 -2564 -1392 0
--686 -289 -1445 0
-2834 -3284 -1440 0
-3362 2973 878 0
--992 2466 -2485 0
--2169 -1403 -3477 0
-428 -1971 2996 0
-3474 -1905 -2892 0
-456 -2414 1265 0
-2213 295 -96 0
-2587 2265 3496 0
-3285 -2903 -1138 0
--1672 -1228 -869 0
--3421 3373 1253 0
--2125 -3394 -1144 0
-1698 2253 -720 0
--2703 2672 2260 0
-1004 -1421 507 0
-2851 -114 2761 0
-360 1331 304 0
-243 2704 2463 0
-1244 -428 270 0
-724 -3119 -5 0
-934 553 -2078 0
--2413 1198 -2691 0
--2717 -2 1928 0
--1844 -630 -86 0
--1459 -2173 2954 0
--1202 1532 1433 0
--1567 -2546 -589 0
-765 1168 1726 0
-3232 2766 -2341 0
--1260 160 -1376 0
--2109 3500 831 0
-249 1778 -1662 0
-1030 -2172 -3193 0
-1792 467 -3285 0
-408 3106 976 0
--181 -58 3224 0
-1612 -3286 -2766 0
--2256 373 -2492 0
-1324 -2990 1840 0
-1098 318 2815 0
--1685 877 -3175 0
-2632 571 -1176 0
-364 -130 -857 0
-803 3404 -471 0
--3067 491 -2272 0
--1177 -2801 -2199 0
-2652 261 -247 0
--3058 1366 1348 0
--2309 903 -2442 0
-455 -2942 -1892 0
-751 -2170 -1621 0
--2526 -2198 495 0
--722 -3055 3240 0
-811 3052 -760 0
--3087 502 -2160 0
--742 1962 2961 0
-278 -855 -1272 0
-1420 -1403 -581 0
--1877 3190 -3104 0
-3423 1664 -1718 0
-2817 3232 1869 0
-1360 -1178 -1123 0
-65 942 -17 0
-2608 2912 -3323 0
--2747 1704 169 0
-1232 -2381 -764 0
-156 -2897 838 0
-281 3061 2368 0
-2744 1471 -274 0
-1169 1039 -430 0
--2795 -693 -2626 0
--2424 -79 -613 0
-2339 -1818 -2116 0
--1476 2160 14 0
--740 1953 556 0
-2985 -544 -1525 0
--1632 2450 2269 0
--2626 456 -3006 0
-1628 -432 428 0
--2721 -1628 -2944 0
--56 2034 2605 0
-268 -508 -2447 0
--2279 -383 2515 0
--1807 -870 929 0
--2683 -2464 -1322 0
--2994 -836 1976 0
-1585 677 -1460 0
-1368 -1195 2973 0
-1640 852 -17 0
--307 1930 8 0
-1179 1129 1028 0
-1955 1848 -1205 0
--2254 46 -823 0
-159 798 -1472 0
-2790 12 -1049 0
--971 3021 -742 0
-1704 -3161 1827 0
-3360 3437 530 0
--2924 -3222 1697 0
-1035 -2971 2207 0
--1066 -2747 1777 0
--1135 2683 -33 0
--1661 -1591 3297 0
--2357 2807 -2941 0
--3270 -1991 1521 0
--3260 375 -3174 0
--2493 2132 -1604 0
-2686 -2056 1361 0
--2895 1072 2294 0
--3205 -987 1304 0
-2393 -1594 69 0
-1418 -2075 738 0
--2214 3443 698 0
--2621 -1520 2294 0
-705 -2377 -195 0
--699 1243 1854 0
-60 -373 3321 0
--2313 -1033 2803 0
--57 -1823 2116 0
--1889 -2616 -1011 0
--945 1897 501 0
-3499 -21 2694 0
-1481 -1875 260 0
-744 3100 -1893 0
--3184 1035 -1047 0
--1609 254 679 0
--256 -1314 -1049 0
-117 2013 1543 0
--3168 -2590 1353 0
--983 1264 -3335 0
--563 802 -1449 0
--1571 -2159 -1980 0
--3392 -2238 -587 0
--677 2567 3022 0
-749 -1454 -2522 0
-824 -2732 -400 0
-3107 -2384 -1354 0
-1473 2960 -3150 0
--490 301 93 0
--3475 -326 -2854 0
--2717 2431 -1803 0
-2628 1300 -3174 0
--2376 400 1356 0
--1881 375 -1401 0
--2002 -1308 -2803 0
--1674 -839 467 0
--3434 -550 1107 0
-388 -1369 -1816 0
-835 1068 -2377 0
-1676 343 3206 0
--144 -1664 -1982 0
-123 -1725 -3149 0
--895 -2812 823 0
--1486 1324 2867 0
--1521 -1078 524 0
-1508 -2161 1650 0
-1801 2559 2445 0
--2856 -2244 -2101 0
--3295 -1224 2640 0
--1317 -1632 2523 0
--3177 -2823 -201 0
--2481 -2746 2026 0
--246 -1529 -49 0
--2056 -216 960 0
--369 15 -1171 0
-655 3067 2685 0
-951 1768 -3204 0
--1885 -1675 2439 0
-42 1566 -773 0
--3112 -1302 3142 0
-2164 3320 -274 0
-1498 669 -1419 0
--59 -322 -3216 0
-3457 254 -15 0
-548 -2167 -2753 0
--822 2104 3146 0
--3146 -101 908 0
-687 1322 2700 0
-268 -794 678 0
--1547 435 -3074 0
-2021 -1102 -1036 0
--3002 -1891 995 0
-1120 265 2690 0
--3478 -2121 -3477 0
--1580 -523 -1736 0
--1701 491 -881 0
-50 2208 -3483 0
-1239 1384 44 0
-969 -30 793 0
--2387 1529 886 0
--3006 22 -1888 0
--1523 1284 -377 0
--3432 2370 -3119 0
-1889 2434 176 0
--1924 -2097 1971 0
--3217 2068 1472 0
--640 2392 -3224 0
-3190 -884 971 0
-971 -1089 1277 0
--3130 326 3152 0
-1209 -273 -2605 0
--232 1239 1667 0
-1892 618 3415 0
-3278 -948 790 0
-2130 1924 2145 0
-1252 -942 -3129 0
-3269 3291 2483 0
-1969 -2814 151 0
-675 -114 795 0
-346 -1322 -1880 0
-343 3319 1156 0
-1332 -2808 -1930 0
--2580 2665 -2984 0
-1121 -2743 -1781 0
--2138 -2961 -895 0
-3425 972 -2523 0
--2690 -3050 1475 0
--288 -1877 -2447 0
-2268 1519 -1302 0
-1548 -1925 -3398 0
-2349 557 3064 0
-1947 3433 -752 0
-2976 -1962 -492 0
-2714 976 769 0
--531 2217 3325 0
--1775 -1935 -1994 0
-1911 253 -1937 0
--3250 -2043 2764 0
--2620 1792 2709 0
--2373 -1377 2195 0
--3202 -3375 2802 0
-3135 2307 -3055 0
--891 2155 1016 0
--1966 -3395 230 0
--2818 2344 -190 0
--1895 1508 1528 0
-137 -2021 -1049 0
-3186 880 -1371 0
--3259 2030 -93 0
--2257 1361 -105 0
--2139 -1443 269 0
-955 631 2848 0
--1050 -118 -874 0
--324 -1324 -286 0
-1112 -827 -143 0
--524 2931 2427 0
-1435 103 -2856 0
-246 -1984 -2335 0
-1851 3489 -1511 0
--1092 2817 1595 0
-2850 -1739 584 0
-1979 546 584 0
-1532 308 1192 0
--2872 1799 -2717 0
-3135 -2431 2226 0
-1909 2643 354 0
--813 1744 913 0
-1260 3157 2459 0
-709 -390 -1191 0
-2317 -3414 3276 0
index 715404866c0ba4bae4ebc704cd5b18c201128850..eabc2a907e5f0e13c7b2b49b5832394f56a23d32 100644 (file)
@@ -10,8 +10,8 @@
 #include "main.decl.h"
 #include "main.h"
 
-#include "SolverTypes.h"
-#include "Solver.h"
+#include "par_SolverTypes.h"
+#include "par_Solver.h"
 
 
 //#include "util.h"
@@ -88,7 +88,7 @@ int parseInt(StreamBuffer& in) {
     return neg ? -val : val; 
 }
 
-static void readClause(StreamBuffer& in, SolverState& S, CkVec<Lit>& lits) {
+static void readClause(StreamBuffer& in, par_SolverState& S, CkVec<par_Lit>& lits) {
     int     parsed_lit, var;
     lits.removeAll();
     for (;;){
@@ -100,13 +100,13 @@ static void readClause(StreamBuffer& in, SolverState& S, CkVec<Lit>& lits) {
         if(parsed_lit>0)
             S.positive_occurrence[var]++;
         //while (var >= S.nVars()) S.newVar();
-        lits.push_back( Lit(parsed_lit));
+        lits.push_back( par_Lit(parsed_lit));
     }
 }
 
 /* unit propagation before real computing */
 
-static void simplify(SolverState& S)
+static void simplify(par_SolverState& S)
 {
     for(int i=0; i< S.unit_clause_index.size(); i++)
     {
@@ -114,9 +114,9 @@ static void simplify(SolverState& S)
         CkPrintf("Inside simplify before processing, unit clause number:%d, i=%d\n", S.unit_clause_index.size(), i);
 #endif
        
-        Clause cl = S.clauses[S.unit_clause_index[i]];
+        par_Clause cl = S.clauses[S.unit_clause_index[i]];
         //only one element in unit clause
-        Lit lit = cl[0];
+        par_Lit lit = cl[0];
         S.clauses[S.unit_clause_index[i]].resize(0);
         S.unsolved_clauses--;
 
@@ -145,11 +145,11 @@ static void simplify(SolverState& S)
 #ifdef DEBUG
            CkPrintf(" %d \n \t \t literals in this clauses: ", cl_index);
 #endif
-           Clause& cl_ = S.clauses[cl_index];
+           par_Clause& cl_ = S.clauses[cl_index];
            //for all the literals in this clauses, the occurrence decreases by 1
            for(int k=0; k< cl_.size(); k++)
            {
-               Lit lit_ = cl_[k];
+               par_Lit lit_ = cl_[k];
                if(toInt(lit_) == toInt(lit))
                    continue;
 #ifdef DEBUG
@@ -190,7 +190,7 @@ static void simplify(SolverState& S)
        for(int j=0; j<inClauses_opposite.size(); j++)
        {
            int cl_index_ = inClauses_opposite[j];
-           Clause& cl_neg = S.clauses[cl_index_];
+           par_Clause& cl_neg = S.clauses[cl_index_];
            cl_neg.remove(-toInt(lit));
            //becomes a unit clause
            if(cl_neg.size() == 1)
@@ -206,9 +206,9 @@ static void simplify(SolverState& S)
 
 
 
-static void parse_confFile(gzFile input_stream, SolverState& S) {                  
+static void parse_confFile(gzFile input_stream, par_SolverState& S) {                  
     StreamBuffer in(input_stream);    
-      CkVec<Lit> lits;                                                 
+      CkVec<par_Lit> lits;                                                 
     int i  = 0;
     
     for (;;){                                                      
@@ -256,7 +256,7 @@ Main::Main(CkArgMsg* msg)
 {
 
     grainsize = 1;
-    SolverState* solver_msg = new (8 * sizeof(int))SolverState;
+    par_SolverState* solver_msg = new (8 * sizeof(int))par_SolverState;
     if(msg->argc < 2)
     {
         error_exit((char*)"Usage: sat filename grainsize\n");
@@ -323,13 +323,13 @@ Main::Main(CkArgMsg* msg)
     mainProxy = thisProxy;
     int max_index = get_max_element(solver_msg->occurrence);
     
-    solver_msg->assigned_lit = Lit(max_index+1);
+    solver_msg->assigned_lit = par_Lit(max_index+1);
     solver_msg->level = 0;
-    SolverState *not_msg = copy_solverstate(solver_msg);
+    par_SolverState *not_msg = copy_solverstate(solver_msg);
     
     //CkPrintf(" main chare max index=%d, %d, assigned=%d\n", max_index+1, solver_msg->occurrence[max_index], toInt(solver_msg->assigned_lit));
     solver_msg->occurrence[max_index] = -2;
-    not_msg->assigned_lit = Lit(-max_index-1);
+    not_msg->assigned_lit = par_Lit(-max_index-1);
     not_msg->occurrence[max_index] = -1;
     
     int positive_max = solver_msg->positive_occurrence[max_index];
@@ -341,26 +341,26 @@ Main::Main(CkArgMsg* msg)
         CkSetQueueing(solver_msg, CK_QUEUEING_IFIFO);
         solver_msg->lower = INT_MIN;
         solver_msg->higher = 0;
-        CProxy_Solver::ckNew(solver_msg);
+        CProxy_mySolver::ckNew(solver_msg);
         
         *((int *)CkPriorityPtr(not_msg)) = 0;
         CkSetQueueing(not_msg, CK_QUEUEING_IFIFO);
         not_msg->lower = 0;
         not_msg->higher = INT_MAX;
-        CProxy_Solver::ckNew(not_msg);
+        CProxy_mySolver::ckNew(not_msg);
     }else
     {
         *((int *)CkPriorityPtr(not_msg)) = INT_MIN;
         CkSetQueueing(not_msg, CK_QUEUEING_IFIFO);
         not_msg->lower = INT_MIN;
         not_msg->higher = 0;
-        CProxy_Solver::ckNew(not_msg);
+        CProxy_mySolver::ckNew(not_msg);
         
         *((int *)CkPriorityPtr(solver_msg)) = 0;
         CkSetQueueing(solver_msg, CK_QUEUEING_IFIFO);
         solver_msg->lower = 0;
         solver_msg->higher = INT_MAX;
-        CProxy_Solver::ckNew(solver_msg);
+        CProxy_mySolver::ckNew(solver_msg);
 
     }
 }
index b644769505af900ac9a589ed8191e525b2f4095b..a9e1fcdb6f702c621b0b3fc448f53f7e09348ea5 100644 (file)
@@ -11,10 +11,10 @@ mainmodule main {
         entry [expedited]void done(CkVec<int>);
     };
    
-    message SolverState;
+    message par_SolverState;
 
-    chare Solver{
-        entry Solver(SolverState*);
+    chare mySolver{
+        entry mySolver(par_SolverState*);
     };
 
 };