remove mafft extensions - we do not support them
authorpvtroshin <pvtroshin@e3abac25-378b-4346-85de-24260fe3988d>
Tue, 21 Jun 2011 10:27:17 +0000 (10:27 +0000)
committerpvtroshin <pvtroshin@e3abac25-378b-4346-85de-24260fe3988d>
Tue, 21 Jun 2011 10:27:17 +0000 (10:27 +0000)
git-svn-id: link to svn.lifesci.dundee.ac.uk/svn/barton/ptroshin/JABA2@4287 e3abac25-378b-4346-85de-24260fe3988d

49 files changed:
binaries/src/mafft/extensions/Makefile [deleted file]
binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Beta.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Main.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Makefile [deleted file]
binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/README [deleted file]
binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/Util.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/config.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/nrutil.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/params-weird [deleted file]
binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 [deleted file]
binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script [deleted file]
binaries/src/mafft/extensions/mxscarna_src/scarna.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp [deleted file]
binaries/src/mafft/extensions/mxscarna_src/vienna/params.h [deleted file]
binaries/src/mafft/extensions/univscript.tmpl [deleted file]

diff --git a/binaries/src/mafft/extensions/Makefile b/binaries/src/mafft/extensions/Makefile
deleted file mode 100644 (file)
index 9cc6933..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-PREFIX = /usr/local
-LIBDIR = $(PREFIX)/libexec/mafft
-
-#MNO_CYGWIN = -mno-cygwin
-
-INSTALL = install
-
-PROGS = mxscarnamod
-SCARNASRC = mxscarna_src/* mxscarna_src/*/*
-
-all : $(PROGS)
-       cp $(PROGS) ../binaries
-       chmod 755 ../binaries/*
-       @echo done.
-
-univscript: univscript.tmpl Makefile
-       sed "s:_PROGS:$(PROGS):" univscript.tmpl  > univscript
-
-
-mxscarnamod: $(SCARNASRC)
-       $(MAKE) CFLAGS1="$(MNO_CYGWIN)" -C mxscarna_src
-       mv mxscarna_src/mxscarna mxscarnamod
-
-
-clean :
-       rm -f *.o *.a *.exe *~ $(PROGS)
-#      rm -f ../binaries/* ../scripts/*
-       $(MAKE) clean -C mxscarna_src
-
-install : all
-       mkdir -p $(LIBDIR)
-       chmod 755 $(LIBDIR)
-       chmod 755 $(PROGS)
-       $(INSTALL) $(PROGS) $(LIBDIR)
diff --git a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp b/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp
deleted file mode 100644 (file)
index 340353f..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "AlifoldMEA.h"
-
-namespace MXSCARNA{
-
-const int AlifoldMEA::TURN = 3;
-
-void
-AlifoldMEA::
-Run()
-{
-    makeProfileBPPMatrix(alignment);
-    Initialization();
-    DP();
-    TraceBack();
-}
-
-void
-AlifoldMEA::
-makeProfileBPPMatrix(const MultiSequence *Sequences)
-{
-    int length = Sequences->GetSequence(0)->GetLength();
-
-    Trimat<float> *consBppMat = new Trimat<float>(length + 1);
-    fill(consBppMat->begin(), consBppMat->end(), 0);
-
-    for(int i = 1; i <= length; i++) 
-       for (int j = i; j <= length; j++) 
-           bppMat.ref(i, j) = 0;
-
-
-    int number = Sequences->GetNumSequences();
-    for(int seqNum = 0; seqNum < number; seqNum++) {
-       SafeVector<int> *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber();
-       int label = Sequences->GetSequence(seqNum)->GetLabel();
-       BPPMatrix *tmpBppMatrix = BPPMatrices[label];
-       
-       for(int i = 1; i <= length ; i++) {
-           int originI = tmpMap->at(i);
-           for(int j = i; j <= length; j++) {
-               int originJ = tmpMap->at(j);
-               if(originI != 0 && originJ != 0) {
-                   float tmpProb = tmpBppMatrix->GetProb(originI, originJ);
-                   bppMat.ref(i, j) += tmpProb;
-               }
-           }
-       }
-    }
-
-       /* compute the mean of base pairing probability  */
-    for(int i = 1; i <= length; i++) {
-       for(int j = i; j <= length; j++) {
-           bppMat.ref(i,j) = bppMat.ref(i,j)/(float)number;
-       }
-    }
-
-    for (int i = 1; i <= length; i++) {
-       float sum = 0;
-       for (int j = i; j <= length; j++) {
-           sum += bppMat.ref(i,j);
-       }
-       Qi[i] = 1 - sum;
-    }
-
-    for (int i = 1; i <= length; i++) {
-       float sum = 0;
-       for (int j = i; j >= 1; j--) {
-           sum += bppMat.ref(j, i);
-       }
-       Qj[i] = 1 - sum;
-    }
-}
-
-void
-AlifoldMEA::
-Initialization()
-{
-    int length = alignment->GetSequence(0)->GetLength();
-
-    for (int i = 1; i <= length; i++) {
-       for (int j = i; j <= length; j++) {
-           M.ref(i,j) = 0;
-           traceI.ref(i,j) = 0;
-           traceJ.ref(i,j) = 0;
-       }
-    }
-
-    for (int i = 1; i <= length; i++) {
-       M.ref(i,i)   = Qi[i]; 
-       traceI.ref(i,i) = 0;
-       traceJ.ref(i,i) = 0;
-    }
-
-    for (int i = 1; i <= length - 1; i++) {
-       M.ref(i, i+1) =  Qi[i+1];
-       traceI.ref(i,i + 1) = 0;
-       traceJ.ref(i,i + 1) = 0;
-    }
-
-    for (int i = 0; i <= length; i++) {
-       ssCons[i] = '.';
-    }
-}
-
-void
-AlifoldMEA::
-DP()
-{
-    float g    = BasePairConst; // see scarna.hpp
-    int length = alignment->GetSequence(0)->GetLength();
-    
-    for (int i = length - 1; i >= 1; i--) {
-       for (int j = i + TURN + 1; j <= length; j++) {
-           float qi       = Qi[i];
-           float qj       = Qj[j];
-           float p        = bppMat.ref(i,j);
-
-           
-           float maxScore = qi + M.ref(i+1, j);
-           int tmpI = i+1;
-           int tmpJ = j;
-           
-           float tmpScore = qj + M.ref(i, j-1);
-           if (tmpScore > maxScore) {
-               maxScore = tmpScore;
-               tmpI     = i;
-               tmpJ     = j - 1;
-           }
-           
-           tmpScore = g*2*p + M.ref(i+1, j-1);
-           if (tmpScore > maxScore) {
-               maxScore = tmpScore;
-               tmpI     = i + 1;
-               tmpJ     = j - 1;
-           }
-           
-           for (int k = i + 1; k < j - 1; k++) {
-               tmpScore = M.ref(i,k) + M.ref(k+1,j);
-               if (tmpScore > maxScore) {
-                   maxScore = tmpScore;
-                   tmpI = i;
-                   tmpJ = j;
-               }
-           }
-           M.ref(i,j)       = maxScore;
-           traceI.ref(i, j) = tmpI;
-           traceJ.ref(i, j) = tmpJ;
-       }
-    }
-}
-
-void
-AlifoldMEA::
-TraceBack()
-{
-
-    int length = alignment->GetSequence(0)->GetLength();
-    SafeVector<int> stackI((length + 1)*(length+1));
-    SafeVector<int> stackJ((length + 1)*(length+1));
-    int pt = 0;
-
-    stackI[pt] = traceI.ref(1, length);
-    stackJ[pt] = traceJ.ref(1, length);
-    ++pt;
-    
-    while(pt != 0) {
-       --pt;
-       int tmpI = stackI[pt];
-       int tmpJ = stackJ[pt];
-       int nextI = traceI.ref(tmpI, tmpJ);
-       int nextJ = traceJ.ref(tmpI, tmpJ);
-
-       if (tmpI < tmpJ) {
-           if (tmpI + 1  == nextI && tmpJ == nextJ) {
-               stackI[pt] = nextI;
-               stackJ[pt] = nextJ;
-               ++pt;
-           }
-           else if (tmpI == nextI && tmpJ - 1 == nextJ) {
-               stackI[pt] = nextI;
-               stackJ[pt] = nextJ;
-               ++pt;
-           }
-           else if (tmpI + 1 == nextI && tmpJ - 1== nextJ) {
-               stackI[pt] = nextI;
-               stackJ[pt] = nextJ;
-               ++pt;
-               ssCons[tmpI] = '(';
-               ssCons[tmpJ] = ')';
-           }
-           else if (tmpI == nextI && tmpJ == nextJ) {
-               float maxScore = IMPOSSIBLE;
-               int maxK = 0;
-
-               for (int k = tmpI + 1; k < tmpJ - 1; k++) {
-                   float tmpScore = M.ref(tmpI,k) + M.ref(k+1,tmpJ);
-                   if (tmpScore > maxScore) {
-                       maxScore = tmpScore;
-                       maxK = k;
-                   }
-               }
-               stackI[pt] = traceI.ref(tmpI, maxK);
-               stackJ[pt] = traceJ.ref(tmpI, maxK);
-               ++pt;
-               stackI[pt] = traceI.ref(maxK+1, tmpJ);
-               stackJ[pt] = traceJ.ref(maxK+1, tmpJ);
-               ++pt;
-           }
-       }
-    }
-}
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h b/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h
deleted file mode 100644 (file)
index 02c06c5..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef _ALIFOLDMEA_H_
-#define _ALIFOLDMEA_H_
-
-#include <iostream>
-#include <string>
-#include <cassert>
-#include "scarna.hpp"
-#include "nrutil.h"
-#include "Util.hpp"
-#include "Beta.hpp"
-#include "BPPMatrix.hpp"
-#include "MultiSequence.h"
-#include "Sequence.h"
-#include "SafeVector.h"
-
-using namespace std;
-
-namespace MXSCARNA {
-class AlifoldMEA {
-    MultiSequence *alignment;
-    SafeVector<BPPMatrix*> BPPMatrices;
-    float BasePairConst;
-    Trimat<float> M;
-    Trimat<int> traceI;
-    Trimat<int> traceJ;
-    Trimat<float> bppMat;
-    NRVec<float>  Qi;
-    NRVec<float>  Qj;
-    NRVec<char> ssCons;
-    
-    static const int TURN;
-
-    void Initialization();
-    void makeProfileBPPMatrix(const MultiSequence *Sequences);
-    void DP();
-    void TraceBack();
- public:
-    AlifoldMEA(MultiSequence *inalignment, SafeVector<BPPMatrix*> &inBPPMatrices, float inBasePairConst = 6) :
-       alignment(inalignment), BPPMatrices(inBPPMatrices),
-       BasePairConst(inBasePairConst),
-       M(inalignment->GetSequence(0)->GetLength()+1), 
-       traceI(inalignment->GetSequence(0)->GetLength()+1),
-       traceJ(inalignment->GetSequence(0)->GetLength()+1),
-       bppMat(inalignment->GetSequence(0)->GetLength() + 1), 
-       Qi(inalignment->GetSequence(0)->GetLength() + 1), 
-       Qj(inalignment->GetSequence(0)->GetLength() + 1), 
-       ssCons(inalignment->GetSequence(0)->GetLength() + 1){}
-
-    void Run();
-
-    string *getSScons() {
-       string *sscons = new string();
-       sscons->push_back(' ');
-       int length = alignment->GetSequence(0)->GetLength();
-       for (int i = 1; i <= length; i++) {
-           sscons->push_back(ssCons[i]);
-       }
-       
-       return sscons;
-    }
-};
-}
-#endif // _ALIFOLDMEA_H_
diff --git a/binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp b/binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp
deleted file mode 100644 (file)
index 1c16ed7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-//////////////////////////////////////////////////////////////
-// BPPMatrix.hpp
-//
-// save the Base Pairing Probability Matrix for each sequences
-//////////////////////////////////////////////////////////////
-
-#ifndef __BBPMatrix_HPP__
-#define __BBPMatrix_HPP__
-
-#include <iostream>
-#include <string>
-#include "SparseMatrix.h"
-#include "McCaskill.hpp"
-#include "nrutil.h"
-
-
-
-using namespace std;
-
-namespace MXSCARNA{
-class BPPMatrix {
-private:
-
-    int seqLength;       // sequence length;
-    float cutOff;        // the threshold of probability 
-
-    BPPMatrix() {}
-public:
-    SparseMatrix bppMat; // base pairing probability matrix 1-origin(1..seqLength)
-    BPPMatrix(int bppmode, const string &seq, int seqLength, float inCutOff = 0.0001) : seqLength (seqLength), cutOff(inCutOff) {
-      if( bppmode == 'r' ) // by katoh
-        readBPPMatrix(seq);
-      else if( bppmode == 'w' )
-        setandwriteBPPMatrix(seq);
-      else
-        setBPPMatrix(seq);
-    }
-    BPPMatrix(int seqLength, float inCutOff, const Trimat<float> & tmpBppMat) : seqLength(seqLength), cutOff(inCutOff) {
-      bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff);
-    }
-
-      
-    void setBPPMatrix(const string &seq) {
-       const char *tmpSeq = seq.c_str();
-       McCaskill mc(seqLength, &tmpSeq[1]);
-       mc.calcPartitionFunction();
-       Trimat<float> tmpBppMat(seqLength + 1);
-
-       for (int i = 0; i < seqLength; i++) {
-         for(int j = i; j < seqLength; j++) {
-           tmpBppMat.ref(i+1, j+1) = mc.getProb(i,j);
-         }
-       }
-       bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff);
-    }
-
-    void setandwriteBPPMatrix(const string &seq) { // by katoh
-        const char *tmpSeq = seq.c_str();
-       McCaskill mc(seqLength, &tmpSeq[1]);
-       mc.calcPartitionFunction();
-       Trimat<float> tmpBppMat(seqLength + 1);
-        float tmpbp;
-
-        fprintf( stdout, ">\n" );
-       for (int i = 0; i < seqLength; i++) {
-         for(int j = i; j < seqLength; j++) {
-        tmpbp = mc.getProb(i,j);
-        if (tmpbp > 0.0001)
-          fprintf( stdout, "%d %d %50.40f\n", i, j, tmpbp );
-           tmpBppMat.ref(i+1, j+1) = tmpbp;
-         }
-       }
-       bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff);
-    }
-
-    void readBPPMatrix(const string &seq) { // by katoh
-       const char *tmpSeq = seq.c_str();
-       char oneline[1000];
-       int onechar;
-       float prob;
-       int posi, posj;
-       static FILE *bppfp = NULL;
-
-
-       if( bppfp == NULL )
-       {
-               bppfp = fopen( "_bpp", "r" );
-               if( bppfp == NULL )
-               {
-                       fprintf( stderr, "Cannot open _bpp.\n" );
-                       exit( 1 );
-               }
-       }
-
-       Trimat<float> tmpBppMat(seqLength + 1);
-       fgets( oneline, 999, bppfp );
-       if( oneline[0] != '>' )
-       {
-               fprintf( stderr, "Format error\n" );
-               exit( 1 );
-       }
-       while( 1 )
-       {
-               onechar = getc( bppfp ); 
-               ungetc( onechar, bppfp );
-               if( onechar == '>' || onechar == EOF ) break;
-
-               fgets( oneline, 999, bppfp );
-               sscanf( oneline, "%d %d %f", &posi, &posj, &prob );
-//             fprintf( stderr, "%d %d -> %f\n", posi, posj, prob );
-               tmpBppMat.ref(posi+1, posj+1) = prob;
-       }
-
-       bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff);
-    }
-
-    float GetProb(int i, int j) {
-       return bppMat.GetValue(i,j);
-    }
-
-    float GetLength() const {
-       return seqLength;
-    }
-    
-    void updateBPPMatrix(const Trimat<float> &inbppMat) {
-       bppMat.SetSparseMatrix(seqLength, seqLength, inbppMat, cutOff);
-    }
-};
-}
-#endif // __BPPMatrix_HPP__
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Beta.hpp b/binaries/src/mafft/extensions/mxscarna_src/Beta.hpp
deleted file mode 100644 (file)
index f1e77a4..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *
- * Beta.hpp
- *
- */
-#ifndef BETA_HPP
-#define BETA_HPP
-using namespace std;
-
-struct Beta {
-  static const int NBASE = 4;// A, C, G, U
-  static const int NBASEG = (NBASE + 1);     // A, C, G, U, Gap
-  static const int NBASENG = (NBASE + 2);    // A, C, G, U, N, Gap
-  static const int NPBASE = (NBASE * NBASE);
-  static const int NPBASEG = (NBASEG * NBASEG);
-  static const int NPBASENG = (NBASENG * NBASENG);
-  static const int NCODE = 7;
-  static const int BASEBIT = 2;
-  static const int BASEMSK = ~(~0 << BASEBIT);
-  enum BaseCode {
-    A_CODE       = 0,
-    C_CODE       = 1,
-    G_CODE       = 2,
-    U_CODE       = 3,
-    N_CODE       = 4,
-    GAP_CODE     = 5,
-    INVALID_CODE = 16
-  };
-  enum PairCode {
-    AA_CODE =  0, AC_CODE =  1, AG_CODE =  2, AU_CODE =  3,
-    CA_CODE =  4, CC_CODE =  5, CG_CODE =  6, CU_CODE =  7,
-    GA_CODE =  8, GC_CODE =  9, GG_CODE = 10, GU_CODE = 11,
-    UA_CODE = 12, UC_CODE = 13, UG_CODE = 14, UU_CODE = 15,
-    INVALID_PAIR_CODE = 16
-  };
-  enum ReducedPairCode {
-    REDUCED_NPBASE = 7,
-    REDUCED_AU_CODE = 0,
-    REDUCED_CG_CODE = 1,
-    REDUCED_GC_CODE = 2,
-    REDUCED_GU_CODE = 3,
-    REDUCED_UA_CODE = 4,
-    REDUCED_UG_CODE = 5,
-    REDUCED_MM_CODE = 6,
-    REDUCED_INVALID_PAIR_CODE = 16
-  };
-
-  static const int N_CANONICAL = 6;
-  static const int canonicalPairs[N_CANONICAL];
-  static const int N_NON_CANONICAL = 10;
-  static const int nonCanonicalPairs[N_NON_CANONICAL];
-  static const int i2nt[NCODE];
-  static const int nt2i[256];
-  static const bool isCanonicalBasePair[NPBASE];
-
-  static bool IsValidCode(const int& c) {return A_CODE <= c && c <= GAP_CODE;}
-  static bool IsBaseCode(const int& c) {return (A_CODE <= c && c <= U_CODE);}
-  static bool IsBasePairCode(const int& c){return (AA_CODE <= c && c <= UU_CODE);}
-  static bool IsReducedBasePairCode(const int& c) {
-    return (REDUCED_AU_CODE <= c && c <= REDUCED_MM_CODE);
-  }
-  static bool IsAmbiguousCode(const int& c) {return c == N_CODE;}
-  static bool IsGapCode(const int& c) {return c == GAP_CODE;}
-  static bool IsValidChar(const unsigned char& c) {
-    return IsValidCode(nt2i[c]);
-  }
-  static bool IsBaseChar(const int& c) {return IsBaseCode(nt2i[c]);}
-  static bool IsAmbiguousChar(const int& c) {return IsAmbiguousCode(nt2i[c]);}
-  static bool IsGapChar(const int& c) {return IsGapCode(nt2i[c]);}
-  static int nt2code(const int& nt) {
-    if (0 <= nt && nt < 256) {
-      return nt2i[nt];
-    } else {
-      return INVALID_CODE;
-    }
-  }
-  static int getPairCode(const int& c, const int& c1) {
-    return (IsBaseCode(c) && IsBaseCode(c1) 
-           ? ((c << BASEBIT) | c1)
-           : INVALID_PAIR_CODE);
-  }
-  static bool isValidPairCode(const int& pairCode) {
-    return (0 <= pairCode && pairCode < NPBASE);
-  }
-  static void pair2Bases(const int& pairCode, int& c, int& c1) {
-      //Assert(IsBasePairCode(pairCode));
-    c1 = pairCode & BASEMSK;
-    c = (pairCode >> BASEBIT) & BASEMSK;
-  }
-  static int getReducedPairCode(const int& c, const int& c1) {
-    return reducePairCode(getPairCode(c, c1));
-  }
-  static int reducePairCode(const int& pairCode) {
-    static const int table[NPBASE] = {
-      REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_AU_CODE,
-      REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_CG_CODE, REDUCED_MM_CODE,
-      REDUCED_MM_CODE, REDUCED_GC_CODE, REDUCED_MM_CODE, REDUCED_GU_CODE,
-      REDUCED_UA_CODE, REDUCED_MM_CODE, REDUCED_UG_CODE, REDUCED_MM_CODE,
-    };
-    return (IsBasePairCode(pairCode)
-           ? table[pairCode]
-           : REDUCED_INVALID_PAIR_CODE);
-  }
-  static bool isValidReducedPairCode(const int& pairCode) {
-    return (0 <= pairCode && pairCode < REDUCED_NPBASE);
-  }
-  static bool isCanonicalReducedPairCode(const int& pairCode) {
-    return (REDUCED_AU_CODE <= pairCode
-           && pairCode <= REDUCED_UG_CODE);
-  }
-  static int flipReducedPairCode(const int& reducedPairCode) {
-    static const int table[REDUCED_NPBASE + 1] = {
-      REDUCED_UA_CODE,
-      REDUCED_GC_CODE,
-      REDUCED_CG_CODE,
-      REDUCED_UG_CODE,
-      REDUCED_AU_CODE,
-      REDUCED_GU_CODE,
-      REDUCED_MM_CODE,
-      REDUCED_INVALID_PAIR_CODE
-    };
-    return (IsReducedBasePairCode(reducedPairCode)
-           ? table[reducedPairCode] : table[REDUCED_NPBASE]);
-  }
-  static void seq2i(char* s, const char* t, int len) {
-    const char* const s_end = s + len;
-    while (s < s_end) *s++ = nt2i[(unsigned) (*t++)];
-  }
-  static void i2seq(char* s, const char* t, int len) {
-    const char* const s_end = s + len;
-    while (s < s_end) *s++ = i2nt[(unsigned) (*t++)];
-  }
-  static void i2seq(ostream& fo, const char* t, int len) {
-    const char* const t_end = t + len;
-    while (t < t_end) fo << (char) i2nt[(unsigned) (*t++)];
-  }
-  static char* wd2str(unsigned int wdSize, unsigned int wd) {
-    const unsigned int MAX_WD_SIZE = (sizeof(unsigned int) * 8 / BASEBIT);
-    static char buf[MAX_WD_SIZE + 1] = {};
-    //Assert(wdSize <= MAX_WD_SIZE);
-
-    char* s = buf + wdSize;
-    *s = '\0';
-    do {
-      *(--s) = Beta::i2nt[wd & BASEMSK];
-      wd >>= BASEBIT;
-    } while (s > buf);
-    return buf;
-  }
-  static void printWd(ostream& fo, unsigned int wdSize, unsigned int wd) {
-    fo << wd2str(wdSize, wd);
-  }
-  static const char* code2str(const int& code) {
-    static const char table[NBASENG+1][2] = {
-      "A", "C", "G", "U", "N", ".", "?"
-    };
-    return ((A_CODE <= code && code <= GAP_CODE)
-           ? table[code] : table[NBASENG]);
-  }
-  static const char* pairCode2str(const int& pairCode) {
-    static const char table[NPBASE+1][3] = {
-      "AA", "AC", "AG", "AU",
-      "CA", "CC", "CG", "CU",
-      "GA", "GC", "GG", "GU",
-      "UA", "UC", "UG", "UU",
-      "??"
-    };
-    return (IsBasePairCode(pairCode) ? table[pairCode] : table[NPBASE]);
-  }
-  static const char* reducedPairCode2str(const int& reducedPairCode) {
-    static const char table[REDUCED_NPBASE+1][3] = {
-      "AU", "CG", "GC", "GU", "UA", "UG", "MM", "??"
-    };
-    return (IsReducedBasePairCode(reducedPairCode)
-           ? table[reducedPairCode] : table[REDUCED_NPBASE]);
-  }
-  static char nt2Code(const char& c){
-      if (!IsValidChar(c)) { cerr << "character " <<  c << " is not valid"; }
-
-    return (char) nt2i[(int) c];
-  }
-  static char code2char(const int& c) {
-     static const char table[NBASENG+1] = {
-      'A', 'C', 'G', 'U', 'N', '.', '?'
-    };
-    return ((A_CODE <= c && c <= GAP_CODE)
-           ? table[(int) c] : table[NBASENG]);
-  }
-    /*
-  static string generateRandomRNA(const int& len) {
-    static const char nt[5] = "ACGU";
-    string rna(len, '\0');
-    for (int i = 0; i < len; i++) {
-      rna[i] = nt[Rand(4)];
-    }
-    return rna;
-  }
-    */
-};
-
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp b/binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp
deleted file mode 100644 (file)
index 4d32c8e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-//////////////////////////////////////////////////////////////
-// GlobalParameters.cpp
-// This file include Global Parameters, command line options, etc.
-//////////////////////////////////////////////////////////////
-
-#include "scarna.hpp"
-
-// These paramenters are defined in scarna.hpp
-
-float RNA_Match_AA      = RNAMATCHAA;
-float RNA_Match_AT      = RNAMATCHAT;
-float RNA_Match_AG      = RNAMATCHAG;
-float RNA_Match_AC      = RNAMATCHAC;
-float RNA_Match_TT      = RNAMATCHTT;
-float RNA_Match_TG      = RNAMATCHTG;
-float RNA_Match_TC      = RNAMATCHTC;
-float RNA_Match_GG      = RNAMATCHGG;
-float RNA_Match_GC      = RNAMATCHGC;
-float RNA_Match_CC      = RNAMATCHCC;
-float RNA_Gap_Penalty   = GAPPENALTY;
-float RNA_Gap_Extension = GAPEXTENTIONPENALTY;
-
-int   numIterativeRefinementReps = REFINEMENTREPS;
-bool  PostProcessAlignment = false;
-int   scsLength = SCSLENGTH;
-float BaseProbThreshold = BASEPROBTHRESHOLD;
-float BasePairConst     = BASEPAIRCONST;
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp b/binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp
deleted file mode 100644 (file)
index daabff4..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-#include "Globaldp.hpp"
-
-namespace MXSCARNA {
-
-double Globaldp::ribosum_matrix[16][16]
-= { { -2.49,  -7.04,  -8.24,  -4.32,  -8.84,  -14.37,  -4.68, -12.64, -6.86, -5.03, -8.39,  -5.84, -4.01, -11.32, -6.16, -9.05 },
-    { -7.04,  -2.11,  -8.89,  -2.04,  -9.37,  -9.08,   -5.86, -10.45, -9.73, -3.81, -11.05, -4.72, -5.33, -8.67,  -6.93, -7.83 },
-    { -8.24,  -8.89,  -0.80,  -5.13,  -10.41, -14.53,  -4.57, -10.14, -8.61, -5.77, -5.38,  -6.60, -5.43, -8.87,  -5.94, -11.07 },
-    { -4.32,  -2.04,  -5.13,   4.49,  -5.56,  -6.71,    1.67, -5.17,  -5.33,  2.70, -5.61,   0.59,  1.61, -4.81,  -0.51, -2.98 },
-    { -8.84,  -9.37,  -10.41, -5.56,  -5.13,  -10.45,  -3.57, -8.49,  -7.98, -5.95, -11.36, -7.93, -2.42, -7.08,  -5.63, -8.39 },
-    { -14.37, -9.08,  -14.53, -6.71,  -10.45, -3.59,   -5.71, -5.77, -12.43, -3.70, -12.58, -7.88, -6.88, -7.40,  -8.41, -5.41 },
-    { -4.68,  -5.86,  -4.57,   1.67,  -3.57,  -5.71,    5.36, -4.96,  -6.00,  2.11, -4.66,  -0.27,  2.75, -4.91,   1.32, -3.67 },
-    { -12.64, -10.45, -10.14, -5.17,  -8.49,  -5.77,   -4.96, -2.28,  -7.71, -5.84, -13.69, -5.61, -4.72, -3.83,  -7.36, -5.21 },
-    { -6.86,  -9.73,  -8.61,  -5.33,  -7.98,  -12.43,  -6.00, -7.71,  -1.05, -4.88, -8.67,  -6.10, -5.85, -6.63,  -7.55, -11.54 },
-    { -5.03,  -3.81,  -5.77,   2.70,  -5.95,  -3.70,    2.11, -5.84,  -4.88,  5.62, -4.13,   1.21,  1.60, -4.49,  -0.08, -3.90 },
-    { -8.39,  -11.05, -5.38,  -5.61,  -11.36, -12.58,  -4.66, -13.69, -8.67, -4.13, -1.98,  -5.77, -5.75, -12.01, -4.27, -10.79 },
-    { -5.84,  -4.72,  -6.60,   0.59,  -7.93,  -7.88,   -0.27, -5.61,  -6.10,  1.21, -5.77,   3.47, -0.57, -5.30,  -2.09, -4.45 },
-    { -4.01,  -5.33,  -5.43,   1.61,  -2.42,  -6.88,    2.75, -4.72,  -5.85,  1.60, -5.75,  -0.57,  4.97, -2.98,   1.14, -3.39 },
-    { -11.32, -8.67,  -8.87,  -4.81,  -7.08,  -7.40,   -4.91, -3.83,  -6.63, -4.49, -12.01, -5.30, -2.98, -3.21,  -4.76, -5.97 },
-    { -6.16,  -6.93,  -5.94,  -0.51,  -5.63,  -8.41,    1.32, -7.36,  -7.55, -0.08, -4.27,  -2.09,  1.14, -4.76,   3.36, -4.28 },
-    { -9.05,  -7.83,  -11.07, -2.98,  -8.39,  -5.41,   -3.67, -5.21, -11.54, -3.90, -10.79, -4.45, -3.39, -5.97,  -4.28, -0.02 }
-};
-
-
-Trimat<float>* 
-Globaldp::
-makeProfileBPPMatrix(const MultiSequence *Sequences)
-{
-    int length = Sequences->GetSequence(0)->GetLength();
-    float thr  = THR;
-    Trimat<float> *consBppMat = new Trimat<float>(length + 1);
-    fill(consBppMat->begin(), consBppMat->end(), 0);
-
-    int number = Sequences->GetNumSequences();
-    for(int seqNum = 0; seqNum < number; seqNum++) {
-       SafeVector<int> *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber();
-       int label = Sequences->GetSequence(seqNum)->GetLabel();
-       BPPMatrix *tmpBppMatrix = BPPMatrices[label];
-           
-       for(int i = 1; i <= length ; i++) {
-           int originI = tmpMap->at(i);
-           for(int j = i; j <= length; j++) {
-               int originJ = tmpMap->at(j);
-               if(originI != 0 && originJ != 0) {
-                   float tmpProb = tmpBppMatrix->GetProb(originI, originJ);
-
-                   if(tmpProb >= thr) {
-                       consBppMat->ref(i, j) += tmpProb;
-                   }
-               }
-           }
-       }
-    }
-
-       /* compute the mean of base pairing probability  */
-    for(int i = 1; i <= length; i++) {
-       for(int j = i; j <= length; j++) {
-           consBppMat->ref(i,j) = consBppMat->ref(i,j)/(float)number;
-       }
-    }
-
-    return consBppMat;   
-}
-
-float 
-Globaldp::
-incrementalScorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    int wordLength = WORDLENGTH;
-
-    int pos1, rvpos1;
-    if (sc1.GetDistance() > 0) {
-       pos1   = sc1.GetPosition();
-       rvpos1 = sc1.GetRvposition();
-    }
-    else {
-       pos1   = sc1.GetRvposition();
-       rvpos1 = sc1.GetPosition();
-    }
-
-    int pos2, rvpos2;
-    if (sc2.GetDistance() > 0) {
-       pos2   = sc2.GetPosition();
-       rvpos2 = sc2.GetRvposition();
-    }
-    else {
-       pos2   = sc2.GetRvposition();
-       rvpos2 = sc2.GetPosition();
-    }
-/*
-    cout << "1:" << i << " " << j << " " << sc1.GetDistance() << " " << sc2.GetDistance() << endl;
-    cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc2.GetPosition() << " " << sc2.GetRvposition() << endl;
-*/  
-    float score = 
-         posterior[sc1.GetPosition() + wordLength - 1][sc2.GetPosition() + wordLength - 1]
-//     * sc1.GetBaseScore(wordLength - 1)
-       * profileBPPMat1->ref(pos1 + wordLength - 1, rvpos1)
-       * posterior[sc1.GetRvposition()][sc2.GetRvposition()]
-//     * sc2.GetBaseScore(wordLength - 1);
-       * profileBPPMat2->ref(pos2 + wordLength - 1, rvpos2);
-       
-       
-/*
-         incrementalWordSimilarity(sc1, sc2, i, j)
-       + incrementalProbabilityScore(sc1, sc2) * multiDeltaScore
-       + incrementalStackingScore(sc1, sc2) * multiDeltaStacking;
-*/
-
-    return score*sc1.GetNumSeq()*sc2.GetNumSeq();
-}
-
-float
-Globaldp::
-incrementalProbabilityScore(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    int wordLength = WORDLENGTH;
-    return sc1.GetBaseScore(wordLength-1) + sc2.GetBaseScore(wordLength-1);
-}
-
-float
-Globaldp::
-incrementalStackingScore(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    return - (sc1.GetStacking() + sc2.GetStacking());
-}
-
-float
-Globaldp::
-incrementalWordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j)
-{
-    int numSeq1 = sc1.GetNumSeq();
-    int numSeq2 = sc2.GetNumSeq();
-
-    float score = 0;
-
-    for(int k = 0; k < 16; k++) {
-       for(int l = 0; l < 16; l++) {
-           score += countContConp1[k][i]*countContConp2[l][j]*ribosum_matrix[k][l];
-       }
-    }
-
-    return score/(numSeq1*numSeq2);
-}
-
-float 
-Globaldp::
-scorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-
-
-    int wordLength = WORDLENGTH;
-    float score = 0;
-    
-    int pos1, rvpos1;
-    if (sc1.GetDistance() > 0) {
-       pos1   = sc1.GetPosition();
-       rvpos1 = sc1.GetRvposition();
-    }
-    else {
-       pos1   = sc1.GetRvposition();
-       rvpos1 = sc1.GetPosition();
-    }
-
-    int pos2, rvpos2;
-    if (sc2.GetDistance() > 0) {
-       pos2   = sc2.GetPosition();
-       rvpos2 = sc2.GetRvposition();
-    }
-    else {
-       pos2   = sc2.GetRvposition();
-       rvpos2 = sc2.GetPosition();
-    }
-    
-    for (int k = 0; k < wordLength; k++) {
-       score +=
-             posterior[sc1.GetPosition() + k][sc2.GetPosition() + k]
-           * profileBPPMat1->ref(pos1 + k, rvpos1 + wordLength - 1 - k)
-//         * sc1.GetBaseScore(k)
-           * posterior[sc1.GetRvposition() + wordLength - 1 - k][sc2.GetRvposition() + wordLength - 1 - k]
-//         * sc2.GetBaseScore(k);
-           * profileBPPMat2->ref(pos2 + k, rvpos2 + wordLength - 1 - k);
-    }
-    // validation code
-    /*
-    if (profileBPPMat1->ref(pos1 , rvpos1 + wordLength - 1) != sc1.GetBaseScore(0)) {
-       cout << "1 " << profileBPPMat1->ref(pos1, rvpos1 + wordLength - 1) << " " << sc1.GetBaseScore(0) << endl;
-    }
-    if (profileBPPMat2->ref(pos2, rvpos2 + wordLength - 1) != sc2.GetBaseScore(0)) {
-       cout << profileBPPMat2->ref(pos2, rvpos2 + wordLength - 1) << " " << sc2.GetBaseScore(0) << endl;
-    }
-    if (profileBPPMat1->ref(pos1 + 1, rvpos1 + wordLength - 1 - 1) != sc1.GetBaseScore(1)) {
-       cout << "1 " << profileBPPMat1->ref(pos1 + 1, rvpos1 + wordLength - 1 - 1) << " " << sc1.GetBaseScore(1) << endl;
-    }
-    if (profileBPPMat2->ref(pos2 + 1, rvpos2 + wordLength - 1 - 1) != sc2.GetBaseScore(1)) {
-       cout << profileBPPMat2->ref(pos2 + 1, rvpos2 + wordLength - 1 - 1) << " " << sc2.GetBaseScore(1) << endl;
-       }*/
-
-//    cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc1.GetDistance() << endl;
-//    cout << sc2.GetPosition() << " " << sc2.GetRvposition() << " " << sc2.GetDistance() << endl;
-/*
-         wordSimilarity(sc1, sc2, i, j)
-       + probabilityScore(sc1, sc2) * multiScore
-       + stackingScore(sc1, sc2) * multiStacking
-
-*/ 
-/*
-    if (sc1.GetDistance() < 0 && sc2.GetDistance() < 0) {
-       cout << "2:" << i << " " << j << " " << sc1.GetDistance() << " " << sc2.GetDistance() << endl;
-       cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc2.GetPosition() << " " << sc2.GetRvposition() << endl;
-       cout << "2:score" << score << endl;
-
-    }
-*/
-    return score*sc1.GetNumSeq()*sc2.GetNumSeq();
-}
-
-float
-Globaldp::
-wordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j)
-{
-    int wordLength = WORDLENGTH;
-
-    int numSeq1 = sc1.GetNumSeq();
-    int numSeq2 = sc2.GetNumSeq();
-
-    float score = 0;
-
-    for(int k = 0; k < 16; k++) {
-       for(int l = 0; l < 16; l++) {
-           for(int iter = 0; iter < wordLength; iter++) {
-               score += countConp1[iter][k][i]*countConp2[iter][l][j]*ribosum_matrix[k][l];
-           }
-       }
-    }
-
-    return score/(numSeq1*numSeq2);
-}
-
-int
-Globaldp::
-returnBasePairType(char s, char r)
-{
-    if  (s == 'A') {
-       if      (r == 'A') return 0;
-       else if (r == 'C') return 1;
-       else if (r == 'G') return 2;
-       else if (r == 'U') return 3;
-    }
-    else if (s == 'C') {
-       if      (r == 'A') return 4;
-       else if (r == 'C') return 5;
-       else if (r == 'G') return 6;
-       else if (r == 'U') return 7;
-    }
-    else if (s == 'G') {
-       if      (r == 'A') return 8;
-       else if (r == 'C') return 9;
-       else if (r == 'G') return 10;
-       else if (r == 'U') return 11;
-    }
-    else if (s == 'U') {
-       if      (r == 'A') return 12;
-       else if (r == 'C') return 13;
-       else if (r == 'G') return 14;
-       else if (r == 'U') return 15;
-    }
-
-    return 16;
-}
-
-float
-Globaldp::
-probabilityScore(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    return sc1.GetScore() + sc2.GetScore();
-}
-
-float
-Globaldp::
-stackingScore(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    return - (sc1.GetStemStacking() + sc2.GetStemStacking());
-}
-
-float
-Globaldp::
-distancePenalty(const StemCandidate &sc1, const StemCandidate &sc2)
-{
-    return std::sqrt((float)std::abs(sc1.GetDistance() - sc2.GetDistance()));
-}
-
-float
-Globaldp::
-Run()
-{
-    Initialize();
-    DP();
-    float score = traceBack();
-    
-    // printMatch();
-    //cout << "score=" << score << endl;
-    return score;
-}
-
-void
-Globaldp::
-Initialize()
-{
-    int nPscs1 = pscs1->size();
-    int nPscs2 = pscs2->size();
-
-
-    for(int i = 0; i < nPscs1; i++) {
-       for(int j = 0; j < nPscs2; j++) {
-           VM[i][j] = 0;
-           VG[i][j] = 0;
-       }
-    }
-
-    VM[0][0] = 0;
-    VG[0][0] = IMPOSSIBLE;
-
-    for (int i = 1; i < nPscs1; i++) {
-       VM[i][0] = IMPOSSIBLE; VG[i][0] = 0;
-    }
-    for (int j = 1; j < nPscs2; j++) {
-       VM[0][j] = IMPOSSIBLE; VG[0][j] = 0;
-    }
-
-    for (int i = 0; i < nPscs1; i++) {
-       for (int j = 0; j < nPscs2; j++) {
-           traceMI[i][j] = 0; traceMJ[i][j] = 0;
-           traceGI[i][j] = 0; traceGJ[i][j] = 0;
-       }
-    }
-
-    int wordLength = WORDLENGTH;
-    int size1   = pscs1->size();
-    int size2   = pscs2->size();
-
-    for(int i = 0; i < wordLength; i++) {
-       for(int j = 0; j < 17; j++) {
-           for(int k = 0; k < (int)pscs1->size(); k++) {
-               countConp1[i][j][k] = 0;
-           }
-       }
-    }
-    for(int i = 0; i < wordLength; i++) {
-       for(int j = 0; j < 17; j++) {
-           for(int k = 0; k < (int)pscs2->size(); k++) {
-               countConp2[i][j][k] = 0;
-           }
-       }
-    }
-    for(int i = 0; i < 17; i++) {
-       for(int j = 0; j < (int)pscs1->size()+1; j++) {
-           countContConp1[i][j] = 0;
-       }
-    }
-    for(int i = 0; i < 17; i++) {
-       for(int j = 0; j < (int)pscs2->size()+1; j++) {
-           countContConp2[i][j] = 0;
-       }
-    }
-
-    for(int iter = 1; iter < size1; iter++) {
-
-       const StemCandidate &sc1 = pscs1->at(iter);
-       int numSeq1 = sc1.GetNumSeq();
-       for (int i = 0; i < wordLength; i++) {
-       
-           for(int k = 0; k < numSeq1; k++) {
-//             const Sequence *seq = seqs1->GetSequence(k);
-               string substr = sc1.GetSubstr(k);
-               string rvstr  = sc1.GetRvstr(k);
-           
-               char sChar = substr[i];
-               char rChar = rvstr[wordLength - 1 -i];
-           
-               int type = returnBasePairType(sChar, rChar);
-               ++countConp1[i][type][iter];
-           }
-       }
-       for(int k = 0; k < numSeq1; k++) {
-//         const Sequence *seq = seqs1->GetSequence(k);
-           string substr = sc1.GetSubstr(k);
-           string rvstr  = sc1.GetRvstr(k);
-
-           char sChar = substr[wordLength-1];
-           char rChar = rvstr[0];
-           
-           int type = returnBasePairType(sChar, rChar);
-           ++countContConp1[type][iter];
-
-       }
-    }
-    for(int iter = 1; iter < size2; iter++) {
-       const StemCandidate &sc2 = pscs2->at(iter);
-       int numSeq2 = sc2.GetNumSeq();
-       for (int i = 0; i < wordLength; i++) {
-       
-           for(int k = 0; k < numSeq2; k++) {
-//             const Sequence *seq = seqs2->GetSequence(k);
-               string substr = sc2.GetSubstr(k);
-               string rvstr  = sc2.GetRvstr(k);
-           
-               char sChar = substr[i];
-               char rChar = rvstr[wordLength - 1 -i];
-           
-               int type = returnBasePairType(sChar, rChar);
-               ++countConp2[i][type][iter];
-           }
-       }
-       for(int k = 0; k < numSeq2; k++) {
-//         const Sequence *seq = seqs2->GetSequence(k);
-           string substr = sc2.GetSubstr(k);
-           string rvstr  = sc2.GetRvstr(k);
-
-           char sChar = substr[wordLength-1];
-           char rChar = rvstr[0];
-           
-           int type = returnBasePairType(sChar, rChar);
-           ++countContConp2[type][iter];
-
-       }
-    }
-    profileBPPMat1 = makeProfileBPPMatrix(seqs1);
-    profileBPPMat2 = makeProfileBPPMatrix(seqs2);
-}
-
-void
-Globaldp::
-DP()
-{
-    int nPscs1 = pscs1->size();
-    int nPscs2 = pscs2->size();
-    
-    for(int i = 1; i < nPscs1; i++) {
-       const StemCandidate &sc1 = pscs1->at(i);
-
-       for(int j = 1; j < nPscs2; j++) {
-           const StemCandidate &sc2 = pscs2->at(j);
-           
-           float max = IMPOSSIBLE;
-           int traceI = 0; 
-           int traceJ = 0;
-           int alpha = sc1.GetContPos(), beta = sc2.GetContPos();
-           if( (alpha > 0) && (beta > 0) ) {
-               max = VM[alpha][beta] + incrementalScorePSCPair(sc1, sc2);
-               traceI = alpha;
-               traceJ = beta;
-           }
-           
-           float similarity = scorePSCPair(sc1, sc2);
-           int p = sc1.GetBeforePos(), q = sc2.GetBeforePos();
-           float tmpScore = VM[p][q] + similarity;
-//         cout << i << " " << j << " " << p << " " << q << " " << tmpScore << " " << VM[p][q] << " " << similarity << " " << endl;
-               
-           if(max <= tmpScore) {
-               max = tmpScore;
-               traceI = p;
-               traceJ = q;
-           }
-
-           tmpScore = VG[p][q] + similarity;
-           if(max <= tmpScore) {
-               max = tmpScore;
-               traceI = traceGI[p][q];
-               traceJ = traceGJ[p][q];
-           }
-           
-           VM[i][j]      = max;
-           traceMI[i][j] = traceI;
-           traceMJ[i][j] = traceJ;
-           
-           max = VM[i][j-1];
-           traceI   = i;
-           traceJ   = j-1;
-
-           tmpScore = VM[i-1][j];
-           if(max <= tmpScore) {
-               max    = tmpScore;
-               traceI = i-1;
-               traceJ = j;
-           }
-
-           tmpScore = VG[i-1][j];
-           if(max <= tmpScore) {
-               max    = tmpScore;
-               traceI = traceGI[i-1][j];
-               traceJ = traceGJ[i-1][j];
-           }
-           
-           tmpScore = VG[i][j-1];
-           if(max <= tmpScore) {
-               max = tmpScore;
-               traceI = traceGI[i][j-1];
-               traceJ = traceGJ[i][j-1];
-           }
-
-           VG[i][j]      = max;
-           traceGI[i][j] = traceI;
-           traceGJ[i][j] = traceJ;
-       }
-    }
-}
-
-float
-Globaldp::
-traceBack()
-{
-    int nPscs1 = pscs1->size();
-    int nPscs2 = pscs2->size();
-    
-    float max = IMPOSSIBLE;
-    int traceI, traceJ;
-    for (int i = 1; i < nPscs1; i++) {
-       for (int j = 1; j < nPscs2; j++) {
-           if(max < VM[i][j]) {
-               max = VM[i][j];
-               traceI = i;
-               traceJ = j;
-           }
-       }
-    }
-
-    while ( (traceI != 0) &&  (traceJ != 0) ) {
-       matchPSCS1->push_back(traceI); matchPSCS2->push_back(traceJ);
-       int tmpI = traceMI[traceI][traceJ];
-       int tmpJ = traceMJ[traceI][traceJ];
-       traceI = tmpI; traceJ = tmpJ;
-    }
-    
-    if(traceI != 0 && traceJ != 0) {
-       std::cout << "error in trace back of pscs:" << traceI << " " << traceJ << endl;
-    }
-
-    return max;
-}
-
-void
-Globaldp::
-printMatch()
-{
-    int size = matchPSCS1->size();
-    for(int iter = 0; iter < size; iter++) {
-       int i = matchPSCS1->at(iter);
-       int j = matchPSCS2->at(iter);
-       
-       const StemCandidate &sc1 = pscs1->at(i);
-       const StemCandidate &sc2 = pscs2->at(j);
-
-       std::cout << iter << "\t" << sc1.GetPosition()  << "\t" << sc1.GetRvposition() << "\t" << sc2.GetPosition() << "\t" << sc2.GetRvposition() << endl;
-    }
-
-}
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp b/binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp
deleted file mode 100644 (file)
index ba3e06f..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-////////////////////////////////////////////////////////////////
-// Globaldp.hpp
-// Global Alignment of two profile computed by SCARNA algorithm
-////////////////////////////////////////////////////////////////
-
-
-#ifndef __GLOBALDP_HPP__
-#define  __GLOBALDP_HPP__
-
-#include <string>
-#include <iostream>
-#include "nrutil.h"
-#include "Util.hpp"
-#include "Beta.hpp"
-#include "scarna.hpp"
-#include "StemCandidate.hpp"
-#include "MultiSequence.h"
-#include "Sequence.h"
-#include "BPPMatrix.hpp"
-
-using namespace ProbCons;
-using namespace std;
-namespace MXSCARNA {
-
-typedef std::vector<StemCandidate> stemcandidate;
-class Globaldp {
-private:
-    static double ribosum_matrix[16][16];
-
-    NRMat<float> VM, VG;
-    NRMat<int>   traceMI, traceMJ, traceGI, traceGJ;
-
-    const stemcandidate *pscs1, *pscs2;
-    const MultiSequence *seqs1, *seqs2;
-    std::vector<int> *matchPSCS1, *matchPSCS2;
-    SafeVector<BPPMatrix*> &BPPMatrices;
-    NRMat<float> posterior;
-    NRMat3d<int> countConp1, countConp2;
-    NRMat<int> countContConp1, countContConp2;
-    Trimat<float> *profileBPPMat1;
-    Trimat<float> *profileBPPMat2;
-    float multiDeltaScore;
-    float multiDeltaStacking;
-    float multiScore;
-    float multiStacking;
-    float multiPenalty;
-    
-    float scorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2);
-    float wordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j);
-    int   returnBasePairType(char s, char r);
-    float probabilityScore(const StemCandidate &sc1, const StemCandidate &sc2);
-    float stackingScore(const StemCandidate &sc1, const StemCandidate &sc2);
-    float distancePenalty(const StemCandidate &sc1, const StemCandidate &sc2);
-    float incrementalScorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2);
-    float incrementalProbabilityScore(const StemCandidate &sc1, const StemCandidate &sc2);
-    float incrementalStackingScore(const StemCandidate &sc1, const StemCandidate &sc2);
-    float incrementalWordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j);
-    Trimat<float>* makeProfileBPPMatrix(const MultiSequence *Sequences);
-
-    void Initialize();
-    void DP();
-    float traceBack();
-    void printMatch();
-public:
-
-    Globaldp(const stemcandidate *mypscs1, const stemcandidate *mypscs2, 
-            const MultiSequence *myseqs1, const MultiSequence *myseqs2,
-            std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2,
-            VF *myPosterior, SafeVector<BPPMatrix*> &myBPPMatrices,
-            float myMultiDeltaScore = MULTIDELTASCORE, float myMultiDeltaStacking = MULTIDELTASTACKING,
-            float myMultiScore = MULTISCORE, float myMultiStacking = MULTISTACKING,
-            float myMultiPenalty = MULTIPENALTY) 
-       : VM(mypscs1->size(), mypscs2->size()), 
-         VG(mypscs1->size(), mypscs2->size()),
-         traceMI(mypscs1->size(), mypscs2->size()),
-         traceMJ(mypscs1->size(), mypscs2->size()),
-         traceGI(mypscs1->size(), mypscs2->size()),
-         traceGJ(mypscs1->size(), mypscs2->size()),
-         pscs1(mypscs1), pscs2(mypscs2), 
-         seqs1(myseqs1), seqs2(myseqs2),
-         matchPSCS1(matchPSCS1), matchPSCS2(matchPSCS2), 
-         BPPMatrices(myBPPMatrices), posterior(myseqs1->GetSequence(0)->GetLength() + 1, myseqs2->GetSequence(0)->GetLength() + 1),
-         countConp1(WORDLENGTH, 17, mypscs1->size()+1), countConp2(WORDLENGTH, 17, mypscs2->size()+1),
-         countContConp1(0, 17, mypscs1->size()+1), countContConp2(0, 17, mypscs2->size()+1), 
-         multiDeltaScore(myMultiDeltaScore), multiDeltaStacking(myMultiDeltaStacking),
-         multiScore(myMultiScore), multiStacking(myMultiStacking), 
-         multiPenalty(myMultiPenalty) {
-       
-       VF::iterator myPosteriorPtr = myPosterior->begin();
-       for (int i = 0; i <= seqs1->GetSequence(0)->GetLength(); i++) {
-           for (int j = 0; j <= seqs2->GetSequence(0)->GetLength(); j++) {
-               posterior[i][j] = (*myPosteriorPtr)/(seqs1->GetSequence(0)->GetLength()*seqs2->GetSequence(0)->GetLength());
-               myPosteriorPtr++;
-           }
-       }
-    }
-
-
-                                                        
-    float Run();
-
-    void setMultiDeltaScore(float score) { multiDeltaScore = score; }
-    void setMultiDeltaStacking(float score) { multiDeltaStacking = score; }
-    void setMultiScore(float score) { multiScore = score; }
-    void setMultiStacking(float score) { multiStacking = score; }
-    void setMultiPenalty(float score) { multiPenalty = score; }
-};
-}
-#endif // __GLOBALDP_HPP__
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Main.cc b/binaries/src/mafft/extensions/mxscarna_src/Main.cc
deleted file mode 100644 (file)
index 75bc632..0000000
+++ /dev/null
@@ -1,1872 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Main.cc
-//
-// Main routines for MXSCARNA program.
-/////////////////////////////////////////////////////////////////
-
-#include "scarna.hpp"
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include "Defaults.h"
-#include "ScoreType.h"
-#include "ProbabilisticModel.h"
-#include "EvolutionaryTree.h"
-#include "SparseMatrix.h"
-#include "BPPMatrix.hpp"
-#include "StemCandidate.hpp"
-#include "Globaldp.hpp"
-#include "nrutil.h"
-#include "AlifoldMEA.h"
-#include <string>
-#include <sstream>
-#include <iomanip>
-#include <iostream>
-#include <list>
-#include <set>
-#include <algorithm>
-#include <cstdio>
-#include <cstdlib>
-#include <cerrno>
-#include <iomanip>
-#include <fstream>
-
-//#include "RfoldWrapper.hpp"
-//static RFOLD::Rfold folder;
-
-using namespace::MXSCARNA;
-
-string parametersInputFilename = "";
-string parametersOutputFilename = "no training";
-string annotationFilename = "";
-string weboutputFileName = "";
-
-ofstream *outputFile;
-
-bool enableTraining = false;
-bool enableVerbose = false;
-bool enableAllPairs = false;
-bool enableAnnotation = false;
-bool enableViterbi = false;
-bool enableClustalWOutput = false;
-bool enableTrainEmissions = false;
-bool enableAlignOrder = false;
-bool enableWebOutput  = false;
-bool enableStockholmOutput = false;
-bool enableMXSCARNAOutput = false;
-bool enableMcCaskillMEAMode = false;
-char bppmode = 's'; // by katoh
-int numConsistencyReps = 2;
-int numPreTrainingReps = 0;
-int numIterativeRefinementReps = 100;
-int scsLength = SCSLENGTH;
-float cutoff = 0;
-float gapOpenPenalty = 0;
-float gapContinuePenalty = 0;
-float threshhold = 1.0;
-float BaseProbThreshold = BASEPROBTHRESHOLD;
-float BasePairConst = BASEPAIRCONST;
-int   BandWidth = BANDWIDTH;
-
-SafeVector<string> sequenceNames;
-
-VF initDistrib (NumMatrixTypes);
-VF gapOpen (2*NumInsertStates);
-VF gapExtend (2*NumInsertStates);
-VVF emitPairs (256, VF (256, 1e-10));
-VF emitSingle (256, 1e-5);
-
-string alphabet = alphabetDefault;
-
-string *ssCons = NULL;
-
-const int MIN_PRETRAINING_REPS = 0;
-const int MAX_PRETRAINING_REPS = 20;
-const int MIN_CONSISTENCY_REPS = 0;
-const int MAX_CONSISTENCY_REPS = 5;
-const int MIN_ITERATIVE_REFINEMENT_REPS = 0;
-const int MAX_ITERATIVE_REFINEMENT_REPS = 1000;
-
-/////////////////////////////////////////////////////////////////
-// Function prototypes
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading();
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename);
-MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle);
-SafeVector<string> ParseParams (int argc, char **argv);
-void ReadParameters ();
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model,
-                                     SafeVector<BPPMatrix*> &BPPMatrices);
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model, SafeVector<BPPMatrix*> &BPPMatrices, float identity);
-SafeVector<SafeVector<SparseMatrix *> > DoRelaxation (MultiSequence *sequences, 
-                                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior);
-void Relax1 (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior);
-void DoBasePairProbabilityRelaxation (MultiSequence *sequences, 
-                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                     SafeVector<BPPMatrix*> &BPPMatrices);
-set<int> GetSubtree (const TreeNode *tree);
-void TreeBasedBiPartitioning (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                              const ProbabilisticModel &model, MultiSequence* &alignment,
-                              const TreeNode *tree, SafeVector<BPPMatrix*> &BPPMatrices);
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment);
-void WriteAnnotation (MultiSequence *alignment,
-                     const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-int ComputeScore (const SafeVector<pair<int, int> > &active, 
-                 const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-std::vector<StemCandidate>* seq2scs(MultiSequence *Sequences, SafeVector<BPPMatrix*> &BPPMatrices, int BandWidth);
-void removeConflicts(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2);
-
-struct prob {
-    int i;
-    int j;
-    float p;
-};
-
-/////////////////////////////////////////////////////////////////
-// main()
-//
-// Calls all initialization routines and runs the MXSCARNA
-// aligner.
-/////////////////////////////////////////////////////////////////
-
-
-int main (int argc, char **argv){
-
-    // print MXSCARNA heading
-    PrintHeading();
-  
-    // parse program parameters
-    sequenceNames = ParseParams (argc, argv);
-    ReadParameters();
-    PrintParameters ("Using parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL);
-  
-  // now, we'll process all the files given as input.  If we are given
-  // several filenames as input, then we'll load all of those sequences
-  // simultaneously, as long as we're not training.  On the other hand,
-  // if we are training, then we'll treat each file as a separate
-  // training instance
-
-    if (enableMcCaskillMEAMode) {
-      MultiSequence *sequences = new MultiSequence(); assert (sequences);
-      for (int i = 0; i < (int) sequenceNames.size(); i++){
-         cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-         sequences->LoadMFA (sequenceNames[i], true);
-      }
-
-      const int numSeqs = sequences->GetNumSequences();
-      SafeVector<BPPMatrix*> BPPMatrices;
-
-      // compute the base pairing matrices for each sequences
-      for(int i = 0; i < numSeqs; i++) {
-         Sequence *tmpSeq = sequences->GetSequence(i);
-         string   seq = tmpSeq->GetString();
-         int    n_seq = tmpSeq->GetLength();
-         BPPMatrix *bppmat = new BPPMatrix(bppmode, seq, n_seq); // modified by katoh
-         BPPMatrices.push_back(bppmat);
-      }
-      if (bppmode=='w') exit( 0 );
-
-      AlifoldMEA alifold(sequences, BPPMatrices, BasePairConst);
-      alifold.Run();
-      ssCons = alifold.getSScons();
-
-      if (enableStockholmOutput) {
-         sequences->WriteSTOCKHOLM (cout, ssCons);
-      }
-      else if (enableMXSCARNAOutput){
-         sequences->WriteMXSCARNA (cout, ssCons);
-      }
-      else {
-         sequences->WriteMFA (cout, ssCons);
-      }
-
-      delete sequences;
-  }
-  // if we are training
-  else if (enableTraining){
-
-    // build new model for aligning
-    ProbabilisticModel model (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-
-    // prepare to average parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0;
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0;
-    }
-   
-    // align each file individually
-    for (int i = 0; i < (int) sequenceNames.size(); i++){
-
-      VF thisInitDistrib (NumMatrixTypes);
-      VF thisGapOpen (2*NumInsertStates);
-      VF thisGapExtend (2*NumInsertStates);
-      VVF thisEmitPairs (256, VF (256, 1e-10));
-      VF thisEmitSingle (256, 1e-5);
-      
-      // load sequence file
-      MultiSequence *sequences = new MultiSequence(); assert (sequences);
-      cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-      sequences->LoadMFA (sequenceNames[i], true);
-
-      // align sequences
-      DoAlign (sequences, model, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle);
-
-      // add in contribution of the derived parameters
-      for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i];
-      for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i];
-      for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i];
-      if (enableTrainEmissions){
-       for (int i = 0; i < (int) emitPairs.size(); i++) 
-         for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j];
-       for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i];
-      }
-
-      delete sequences;
-    }
-
-    // compute new parameters and print them out
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= (int) sequenceNames.size();
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= (int) sequenceNames.size();
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= (int) sequenceNames.size();
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++) 
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= (int) sequenceNames.size();
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= sequenceNames.size();
-    }
-    
-    PrintParameters ("Trained parameter set:",
-                     initDistrib, gapOpen, gapExtend, emitPairs, emitSingle,
-                     parametersOutputFilename.c_str());
-  }
-  // pass
-  // if we are not training, we must simply want to align some sequences
-  else {
-    // load all files together
-    MultiSequence *sequences = new MultiSequence(); assert (sequences);
-    for (int i = 0; i < (int) sequenceNames.size(); i++){
-      cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-
-      sequences->LoadMFA (sequenceNames[i], true);
-    }
-
-    // do all "pre-training" repetitions first
-    // NOT execute 
-    for (int ct = 0; ct < numPreTrainingReps; ct++){
-      enableTraining = true;
-
-      // build new model for aligning
-      ProbabilisticModel model (initDistrib, gapOpen, gapExtend, 
-                                emitPairs, emitSingle);
-
-      // do initial alignments
-      DoAlign (sequences, model, initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-
-      // print new parameters
-      PrintParameters ("Recomputed parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL);
-
-      enableTraining = false;
-    }
-
-    // now, we can perform the alignments and write them out
-    if (enableWebOutput) {
-       outputFile = new ofstream(weboutputFileName.c_str());
-       if (!outputFile) {
-           cerr << "cannot open output file." << weboutputFileName << endl;
-           exit(1);
-       }
-        *outputFile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
-       *outputFile << "<result>" << endl;
-    }
-       MultiSequence *alignment = DoAlign (sequences,
-                                           ProbabilisticModel (initDistrib, gapOpen, gapExtend,  emitPairs, emitSingle),
-                                           initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-    
-
-    if (!enableAllPairs){
-       if (enableClustalWOutput) {
-           alignment->WriteALN (cout);
-       }
-       else if (enableWebOutput) {
-           alignment->WriteWEB (*outputFile, ssCons);
-//         computeStructureWithAlifold ();
-       }
-       else if (enableStockholmOutput) {
-           alignment->WriteSTOCKHOLM (cout, ssCons);
-       }
-       else if (enableMXSCARNAOutput) {
-           alignment->WriteMXSCARNA (cout, ssCons);
-       }
-       else {
-           alignment->WriteMFA (cout, ssCons);
-       }
-    }
-
-    if (enableWebOutput) {
-       *outputFile << "</result>" << endl;
-       delete outputFile;
-    }
-    
-    delete ssCons;
-    delete alignment;
-    delete sequences;
-   
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintHeading()
-//
-// Prints heading for PROBCONS program.
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading (){
-  cerr << endl
-       << "Multiplex SCARNA"<< endl
-       << "version " << VERSION << " - align multiple RNA sequences and print to standard output" << endl
-       << "Written by Yasuo Tabei" << endl
-       << endl;
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintParameters()
-//
-// Prints PROBCONS parameters to STDERR.  If a filename is
-// specified, then the parameters are also written to the file.
-/////////////////////////////////////////////////////////////////
-
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename){
-
-  // print parameters to the screen
-  cerr << message << endl
-       << "    initDistrib[] = { ";
-  for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " ";
-  cerr << "}" << endl
-       << "        gapOpen[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " ";
-  cerr << "}" << endl
-       << "      gapExtend[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " ";
-  cerr << "}" << endl
-       << endl;
-
-  /*
-  for (int i = 0; i < 5; i++){
-    for (int j = 0; j <= i; j++){
-      cerr << emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]] << " ";
-    }
-    cerr << endl;
-    }*/
-
-  // if a file name is specified
-  if (filename){
-
-    // attempt to open the file for writing
-    FILE *file = fopen (filename, "w");
-    if (!file){
-      cerr << "ERROR: Unable to write parameter file: " << filename << endl;
-      exit (1);
-    }
-
-    // if successful, then write the parameters to the file
-    for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n");
-    fprintf (file, "%s\n", alphabet.c_str());
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      for (int j = 0; j <= i; j++)
-       fprintf (file, "%.10f ", emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]]);
-      fprintf (file, "\n");
-    }
-    for (int i = 0; i < (int) alphabet.size(); i++)
-      fprintf (file, "%.10f ", emitSingle[(unsigned char) alphabet[i]]);
-    fprintf (file, "\n");
-    fclose (file);
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoAlign()
-//
-// First computes all pairwise posterior probability matrices.
-// Then, computes new parameters if training, or a final
-// alignment, otherwise.
-/////////////////////////////////////////////////////////////////
-MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle){
-
-
-  assert (sequences);
-
-  const int numSeqs = sequences->GetNumSequences();
-  VVF distances (numSeqs, VF (numSeqs, 0));
-  VVF identities (numSeqs, VF (numSeqs, 0));
-  SafeVector<SafeVector<SparseMatrix *> > sparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-  
-  SafeVector<BPPMatrix*> BPPMatrices;
-  
-  for(int i = 0; i < numSeqs; i++) {
-    Sequence *tmpSeq = sequences->GetSequence(i);
-    string   seq = tmpSeq->GetString();
-    int    n_seq = tmpSeq->GetLength();
-    BPPMatrix *bppmat = new BPPMatrix(bppmode, seq, n_seq, BASEPROBTHRESHOLD); // modified by katoh
-    BPPMatrices.push_back(bppmat);
-  }
-    
-  if (enableTraining){
-    // prepare to average parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0;
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0;
-    }
-  }
-
-  // skip posterior calculations if we just want to do Viterbi alignments
-  if (!enableViterbi){
-
-    // do all pairwise alignments for posterior probability matrices
-    for (int a = 0; a < numSeqs-1; a++){
-      for (int b = a+1; b < numSeqs; b++){
-       Sequence *seq1 = sequences->GetSequence (a); 
-       Sequence *seq2 = sequences->GetSequence (b);
-       
-       // verbose output
-       if (enableVerbose)
-         cerr << "Computing posterior matrix: (" << a+1 << ") " << seq1->GetHeader() << " vs. "
-              << "(" << b+1 << ") " << seq2->GetHeader() << " -- ";
-       
-       // compute forward and backward probabilities
-       VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward);
-       VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward);
-       
-       // if we are training, then we'll simply want to compute the
-       // expected counts for each region within the matrix separately;
-       // otherwise, we'll need to put all of the regions together and
-       // assemble a posterior probability match matrix
-       
-       // so, if we're training
-       if (enableTraining){
-         
-         // compute new parameters
-         VF thisInitDistrib (NumMatrixTypes);
-         VF thisGapOpen (2*NumInsertStates);
-         VF thisGapExtend (2*NumInsertStates);
-         VVF thisEmitPairs (256, VF (256, 1e-10));
-         VF thisEmitSingle (256, 1e-5);
-         
-         model.ComputeNewParameters (seq1, seq2, *forward, *backward, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle, enableTrainEmissions);
-
-         // add in contribution of the derived parameters
-         for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i];
-         for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i];
-         for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i];
-         if (enableTrainEmissions){
-           for (int i = 0; i < (int) emitPairs.size(); i++) 
-             for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j];
-           for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i];
-         }
-
-         // let us know that we're done.
-         if (enableVerbose) cerr << "done." << endl;
-       }
-       // pass
-       else {
-
-         // compute posterior probability matrix
-         VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior);
-
-         // compute sparse representations
-         sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior);
-         sparseMatrices[b][a] = NULL; 
-         
-         if (!enableAllPairs){
-           // perform the pairwise sequence alignment
-           pair<SafeVector<char> *, float> alignment = model.ComputeAlignment (seq1->GetLength(),
-                                                                               seq2->GetLength(),
-                                                                               *posterior);
-           
-           Sequence *tmpSeq1 = seq1->AddGaps (alignment.first, 'X');
-           Sequence *tmpSeq2 = seq2->AddGaps (alignment.first, 'Y');
-
-           // compute sequence identity for each pair of sequenceses
-           int length = tmpSeq1->GetLength();
-           int matchCount = 0;
-           int misMatchCount = 0;
-           for (int k = 1; k <= length; k++) {
-               int ch1 = tmpSeq1->GetPosition(k);
-               int ch2 = tmpSeq2->GetPosition(k);
-               if (ch1 == ch2 && ch1 != '-' && ch2 != '-') { ++matchCount; }
-               else if (ch1 != ch2 && ch1 != '-' && ch2 != '-') { ++misMatchCount; }
-           }
-
-           identities[a][b] = identities[b][a] = (float)matchCount/(float)(matchCount + misMatchCount);
-
-           // compute "expected accuracy" distance for evolutionary tree computation
-           float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength());
-           distances[a][b] = distances[b][a] = distance;
-           
-           if (enableVerbose)
-             cerr << setprecision (10) << distance << endl;
-           
-             delete alignment.first;
-         }
-         else {
-           // let us know that we're done.
-           if (enableVerbose) cerr << "done." << endl;
-         }
-         
-         delete posterior;
-       }
-       
-       delete forward;
-       delete backward;
-      }
-    }
-  }
-
-
-  // now average out parameters derived
-  if (enableTraining){
-    // compute new parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= numSeqs * (numSeqs - 1) / 2;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= numSeqs * (numSeqs - 1) / 2;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= numSeqs * (numSeqs - 1) / 2;
-
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= numSeqs * (numSeqs - 1) / 2;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= numSeqs * (numSeqs - 1) / 2;
-    }
-  }
-
-  // see if we still want to do some alignments
-  else {
-      // pass
-    if (!enableViterbi){
-
-      // perform the consistency transformation the desired number of times
-      for (int r = 0; r < numConsistencyReps; r++){
-       SafeVector<SafeVector<SparseMatrix *> > newSparseMatrices = DoRelaxation (sequences, sparseMatrices);
-
-       // now replace the old posterior matrices
-       for (int i = 0; i < numSeqs; i++){
-         for (int j = 0; j < numSeqs; j++){
-           delete sparseMatrices[i][j];
-           sparseMatrices[i][j] = newSparseMatrices[i][j];
-         }
-       }
-      }
-      //if (numSeqs > 8) {
-      //  for (int r = 0; r < 1; r++) 
-      //  DoBasePairProbabilityRelaxation(sequences, sparseMatrices, BPPMatrices);
-      //}
-    }
-
-    MultiSequence *finalAlignment = NULL;
-
-    if (enableAllPairs){
-      for (int a = 0; a < numSeqs-1; a++){
-       for (int b = a+1; b < numSeqs; b++){
-         Sequence *seq1 = sequences->GetSequence (a);
-         Sequence *seq2 = sequences->GetSequence (b);
-         
-         if (enableVerbose)
-           cerr << "Performing pairwise alignment: (" << a+1 << ") " << seq1->GetHeader() << " vs. "
-                << "(" << b+1 << ") " << seq2->GetHeader() << " -- ";
-
-         
-         // perform the pairwise sequence alignment
-         pair<SafeVector<char> *, float> alignment;
-         if (enableViterbi)
-           alignment = model.ComputeViterbiAlignment (seq1, seq2);
-         else {
-
-           // build posterior matrix
-           VF *posterior = sparseMatrices[a][b]->GetPosterior(); assert (posterior);
-           int length = (seq1->GetLength() + 1) * (seq2->GetLength() + 1);
-           for (int i = 0; i < length; i++) (*posterior)[i] -= cutoff;
-
-           alignment = model.ComputeAlignment (seq1->GetLength(), seq2->GetLength(), *posterior);
-           delete posterior;
-         }
-
-
-         // write pairwise alignments 
-         string name = seq1->GetHeader() + "-" + seq2->GetHeader() + (enableClustalWOutput ? ".aln" : ".fasta");
-         ofstream outfile (name.c_str());
-         
-         MultiSequence *result = new MultiSequence();
-         result->AddSequence (seq1->AddGaps(alignment.first, 'X'));
-         result->AddSequence (seq2->AddGaps(alignment.first, 'Y'));
-         result->WriteMFAseq (outfile); // by katoh
-         
-         outfile.close();
-         
-         delete alignment.first;
-       }
-      }
-       exit( 0 );
-    }
-    
-    // now if we still need to do a final multiple alignment
-    else {
-      
-      if (enableVerbose)
-       cerr << endl;
-      
-      // compute the evolutionary tree
-      TreeNode *tree = TreeNode::ComputeTree (distances, identities);
-      
-      if (enableWebOutput) {
-         *outputFile << "<tree>" << endl;
-         tree->Print (*outputFile, sequences);
-         *outputFile << "</tree>" << endl;
-      }
-      else {
-         tree->Print (cerr, sequences);
-         cerr << endl;
-      }
-      // make the final alignment
-      finalAlignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model, BPPMatrices);
-      
-      // build annotation
-      if (enableAnnotation){
-       WriteAnnotation (finalAlignment, sparseMatrices);
-      }
-
-      delete tree;
-    }
-
-    if (!enableViterbi){
-      // delete sparse matrices
-      for (int a = 0; a < numSeqs-1; a++){
-       for (int b = a+1; b < numSeqs; b++){
-         delete sparseMatrices[a][b];
-         delete sparseMatrices[b][a];
-       }
-      }
-    }
-
-    //AlifoldMEA alifold(finalAlignment, BPPMatrices, BasePairConst);
-    //alifold.Run();
-    //ssCons = alifold.getSScons();
-
-    return finalAlignment;
-
-  }
-
-  return NULL;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetInteger()
-//
-// Attempts to parse an integer from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetInteger (char *data, int *val){
-  char *endPtr;
-  long int retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtol (data, &endPtr, 0);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false;
-  if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false;
-  *val = (int) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetFloat()
-//
-// Attempts to parse a float from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetFloat (char *data, float *val){
-  char *endPtr;
-  double retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtod (data, &endPtr);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false;
-  *val = (float) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// ParseParams()
-//
-// Parse all command-line options.
-/////////////////////////////////////////////////////////////////
-
-SafeVector<string> ParseParams (int argc, char **argv){
-
-  if (argc < 2){
-
-    cerr << "MXSCARNA comes with ABSOLUTELY NO WARRANTY.  This is free software, and" << endl
-         << "you are welcome to redistribute it under certain conditions.  See the" << endl
-         << "file COPYING.txt for details." << endl
-         << endl
-         << "Usage:" << endl
-         << "       mxscarna [OPTION]... [MFAFILE]..." << endl
-         << endl
-         << "Description:" << endl
-         << "       Align sequences in MFAFILE(s) and print result to standard output" << endl
-         << endl
-         << "       -clustalw" << endl
-         << "              use CLUSTALW output format instead of MFA" << endl
-        << endl
-        << "       -stockholm" << endl
-         << "              use STOCKHOLM output format instead of MFA" << endl
-        << endl
-        << "       -mxscarna" << endl
-         << "              use MXSCARNA output format instead of MFA" << endl
-        << endl
-        << "       -weboutput /<output_path>/<outputfilename>" << endl
-        << "        use web output format" << endl
-        << endl
-         << "       -c, --consistency REPS" << endl
-         << "              use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS
-         << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl
-         << endl
-         << "       -ir, --iterative-refinement REPS" << endl
-         << "              use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS
-         << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl
-         << endl
-        << "       -pre, --pre-training REPS" << endl
-        << "              use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS
-        << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl
-        << endl
-        << "       -pairs" << endl
-         << "              generate all-pairs pairwise alignments" << endl
-         << endl
-        << "       -viterbi" << endl
-        << "              use Viterbi algorithm to generate all pairs (automatically enables -pairs)" << endl
-        << endl
-         << "       -v, --verbose" << endl
-         << "              report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl
-         << endl
-         << "       -annot FILENAME" << endl
-         << "              write annotation for multiple alignment to FILENAME" << endl
-         << endl
-         << "       -t, --train FILENAME" << endl
-         << "              compute EM transition probabilities, store in FILENAME (default: "
-         << parametersOutputFilename << ")" << endl
-         << endl
-         << "       -e, --emissions" << endl
-         << "              also reestimate emission probabilities (default: "
-         << (enableTrainEmissions ? "on" : "off") << ")" << endl
-         << endl
-        << "       -p, --paramfile FILENAME" << endl
-        << "              read parameters from FILENAME (default: "
-        << parametersInputFilename << ")" << endl
-        << endl
-        << "       -a, --alignment-order" << endl
-        << "              print sequences in alignment order rather than input order (default: "
-        << (enableAlignOrder ? "on" : "off") << ")" << endl
-        << endl
-        << "       -s THRESHOLD" << endl
-        << "               the threshold of SCS alignment" << endl
-        << endl
-        << "               In default, for less than " << threshhold << ", the SCS aligment is applied. " << endl
-        << "       -l SCSLENGTH" << endl
-        << "               the length of stem candidates " << SCSLENGTH << endl
-        << endl
-        << "       -b BASEPROBTRHESHHOLD" << endl
-        << "               the threshold of base pairing probability " << BASEPROBTHRESHOLD << endl
-        << endl
-        << "       -m, --mccaskillmea" << endl
-        << "               McCaskill MEA MODE: input the clustalw format file and output the secondary structure predicted by McCaskill MEA" << endl
-        << endl
-        << "       -g BASEPAIRSCORECONST" << endl
-        << "               the control parameter of the prediction of base pairs, default:" << BasePairConst << endl
-         << endl
-        << "       -w BANDWIDTH" << endl
-        << "               the control parameter of the distance of stem candidates, default:" << BANDWIDTH << endl
-        << endl; 
-
-
-    //          << "       -go, --gap-open VALUE" << endl
-    //          << "              gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl
-    //  << endl
-    //  << "       -ge, --gap-extension VALUE" << endl
-    //  << "              gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl
-    //  << endl
-    //         << "       -co, --cutoff CUTOFF" << endl
-    //         << "              subtract 0 <= CUTOFF <= 1 (default: " << cutoff << ") from all posterior values before final alignment" << endl
-    //         << endl
-    
-    exit (1);
-  }
-
-  SafeVector<string> sequenceNames;
-  int tempInt;
-  float tempFloat;
-
-  for (int i = 1; i < argc; i++){
-    if (argv[i][0] == '-'){
-
-      // training
-      if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){
-        enableTraining = true;
-        if (i < argc - 1)
-          parametersOutputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      
-      // emission training
-      else if (!strcmp (argv[i], "-e") || !strcmp (argv[i], "--emissions")){
-        enableTrainEmissions = true;
-      }
-
-      // parameter file
-      else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){
-        if (i < argc - 1)
-          parametersInputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      else if (! strcmp (argv[i], "-s")) {
-       if (i < argc - 1){
-         if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat < 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-              exit (1);
-            }
-            else
-              threshhold = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      
-      else if (! strcmp (argv[i], "-l")) {
-         if (i < argc - 1) {
-             if (!GetInteger (argv[++i], &tempInt)){
-                 cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempInt <= 0 || 6 <= tempInt) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                          << "1 and 6" << "." << endl;
-                     exit (1);
-                 }
-                 else
-                     scsLength = tempInt;
-             }
-         }
-      }
-      else if (! strcmp (argv[i], "-b")) {
-         if (i < argc - 1) {
-             if (!GetFloat (argv[++i], &tempFloat)){
-                 cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempFloat < 0 && 1 < tempFloat) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-                     exit (1);
-                 }
-                 else
-                     BaseProbThreshold = tempFloat;
-             }
-         }
-      }
-      else if (! strcmp (argv[i], "-g")) {
-         if (i < argc - 1) {
-             if (!GetFloat (argv[++i], &tempFloat)){
-                 cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempFloat < 0 && 1 < tempFloat) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-                     exit (1);
-                 }
-                 else
-                     BasePairConst = tempFloat;
-             }
-         }
-      }
-      
-      // number of consistency transformations
-      else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numConsistencyReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // number of randomized partitioning iterative refinement passes
-      else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numIterativeRefinementReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      // number of EM pre-training rounds
-      else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numPreTrainingReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // the distance of stem candidate
-      else if (!strcmp (argv[i], "-w")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-              BandWidth = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap open penalty
-      else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapOpenPenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap extension penalty
-      else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapContinuePenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // all-pairs pairwise alignments
-      else if (!strcmp (argv[i], "-pairs")){
-        enableAllPairs = true;
-      }
-
-      // all-pairs pairwise Viterbi alignments
-      else if (!strcmp (argv[i], "-viterbi")){
-        enableAllPairs = true;
-       enableViterbi = true;
-      }
-
-      // read base-pairing probability from the '_bpp' file, by katoh
-      else if (!strcmp (argv[i], "-readbpp")){
-        bppmode = 'r';
-      }
-
-      // write base-pairing probability to stdout, by katoh
-      else if (!strcmp (argv[i], "-writebpp")){
-        bppmode = 'w';
-      }
-
-      // annotation files
-      else if (!strcmp (argv[i], "-annot")){
-        enableAnnotation = true;
-        if (i < argc - 1)
-         annotationFilename = argv[++i];
-        else {
-          cerr << "ERROR: FILENAME expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // clustalw output format
-      else if (!strcmp (argv[i], "-clustalw")){
-       enableClustalWOutput = true;
-      }
-      // mxscarna output format
-      else if (!strcmp (argv[i], "-mxscarna")) {
-         enableMXSCARNAOutput = true;
-      }
-      // stockholm output format
-      else if (!strcmp (argv[i], "-stockholm")) {
-         enableStockholmOutput = true;
-      }
-      // web output format
-      else if (!strcmp (argv[i], "-weboutput")) {
-         if (i < argc - 1) {
-             weboutputFileName = string(argv[++i]);
-         }
-         else {
-             cerr << "ERROR: Invalid following option " << argv[i-1] << ": " << argv[i] << endl;
-             exit (1);
-         }
-
-         enableWebOutput = true;
-      }
-
-      // cutoff
-      else if (!strcmp (argv[i], "-co") || !strcmp (argv[i], "--cutoff")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat < 0 || tempFloat > 1){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must be between 0 and 1." << endl;
-              exit (1);
-            }
-            else
-              cutoff = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // verbose reporting
-      else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){
-        enableVerbose = true;
-      }
-
-      // alignment order
-      else if (!strcmp (argv[i], "-a") || !strcmp (argv[i], "--alignment-order")){
-       enableAlignOrder = true;
-      }
-      // McCaskill MEA MODE
-      else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--mccaskillmea")){
-        enableMcCaskillMEAMode = true;
-      }
-      // bad arguments
-      else {
-        cerr << "ERROR: Unrecognized option: " << argv[i] << endl;
-        exit (1);
-      }
-    }
-    else {
-      sequenceNames.push_back (string (argv[i]));
-    }
-  }
-
-  if (enableTrainEmissions && !enableTraining){
-    cerr << "ERROR: Training emissions (-e) requires training (-t)" << endl;
-    exit (1);
-  }
-
-  return sequenceNames;
-}
-
-/////////////////////////////////////////////////////////////////
-// ReadParameters()
-//
-// Read initial distribution, transition, and emission
-// parameters from a file.
-/////////////////////////////////////////////////////////////////
-
-void ReadParameters (){
-
-  ifstream data;
-
-  emitPairs = VVF (256, VF (256, 1e-10));
-  emitSingle = VF (256, 1e-5);
-
-  // read initial state distribution and transition parameters
-  // pass
-  if (parametersInputFilename == string ("")){
-    if (NumInsertStates == 1){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i];
-    }
-    else if (NumInsertStates == 2){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i];
-    }
-    else {
-      cerr << "ERROR: No default initial distribution/parameter settings exist" << endl
-           << "       for " << NumInsertStates << " pairs of insert states.  Use --paramfile." << endl;
-      exit (1);
-    }
-
-    alphabet = alphabetDefault;
-
-    for (int i = 0; i < (int) alphabet.length(); i++){
-      emitSingle[(unsigned char) tolower(alphabet[i])] = emitSingleDefault[i];
-      emitSingle[(unsigned char) toupper(alphabet[i])] = emitSingleDefault[i];
-      for (int j = 0; j <= i; j++){
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j];
-      }
-    }
-  }
-  else {
-    data.open (parametersInputFilename.c_str());
-    if (data.fail()){
-      cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl;
-      exit (1);
-    }
-    
-    string line[3];
-    for (int i = 0; i < 3; i++){
-      if (!getline (data, line[i])){
-       cerr << "ERROR: Unable to read transition parameters from parameter file: " << parametersInputFilename << endl;
-       exit (1);
-      }
-    }
-    istringstream data2;
-    data2.clear(); data2.str (line[0]); for (int i = 0; i < NumMatrixTypes; i++) data2 >> initDistrib[i];
-    data2.clear(); data2.str (line[1]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapOpen[i];
-    data2.clear(); data2.str (line[2]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapExtend[i];
-
-    if (!getline (data, line[0])){
-      cerr << "ERROR: Unable to read alphabet from scoring matrix file: " << parametersInputFilename << endl;
-      exit (1);
-    }
-    
-    // read alphabet as concatenation of all characters on alphabet line
-    alphabet = "";
-    string token;
-    data2.clear(); data2.str (line[0]); while (data2 >> token) alphabet += token;
-
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      for (int j = 0; j <= i; j++){
-       float val;
-        data >> val;
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val;
-      }
-    }
-
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      float val;
-      data >> val;
-      emitSingle[(unsigned char) tolower(alphabet[i])] = val;
-      emitSingle[(unsigned char) toupper(alphabet[i])] = val;
-    }
-    data.close();
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// ProcessTree()
-//
-// Process the tree recursively.  Returns the aligned sequences
-// corresponding to a node or leaf of the tree.
-/////////////////////////////////////////////////////////////////
-float ide;
-MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences,
-                            const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, SafeVector<BPPMatrix*> &BPPMatrices) {
-  MultiSequence *result;
-
-  // check if this is a node of the alignment tree
-  if (tree->GetSequenceLabel() == -1){
-    MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model, BPPMatrices);
-    MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model, BPPMatrices);
-
-    assert (alignLeft);
-    assert (alignRight);
-    
-    result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model, BPPMatrices, tree->GetIdentity());
-    assert (result);
-
-    delete alignLeft;
-    delete alignRight;
-  }
-
-  // otherwise, this is a leaf of the alignment tree
-  else {
-    result = new MultiSequence(); assert (result);
-    result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone());
-  }
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeFinalAlignment()
-//
-// Compute the final alignment by calling ProcessTree(), then
-// performing iterative refinement as needed.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model, 
-                                     SafeVector<BPPMatrix*> &BPPMatrices) { 
-
-  MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model, BPPMatrices);
-
-  if (enableAlignOrder){
-    alignment->SaveOrdering();
-    enableAlignOrder = false;
-  }
-
-  // tree-based refinement 
-  // if you use the function, you can degrade the quality of the software.
-  // TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree, BPPMatrices);
-
-  // iterative refinement
-/*
-  for (int i = 0; i < numIterativeRefinementReps; i++)
-      DoIterativeRefinement (sparseMatrices, model, alignment);
-
-      cerr << endl;
-*/
-  // return final alignment
-  return alignment;
-}
-
-/////////////////////////////////////////////////////////////////
-// AlignAlignments()
-//
-// Returns the alignment of two MultiSequence objects.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model, 
-                               SafeVector<BPPMatrix*> &BPPMatrices, float identity){
-
-  // print some info about the alignment
-  if (enableVerbose){
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel();
-    cerr << "] vs. ";
-    for (int i = 0; i < align2->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel();
-    cerr << "]: ";
-  }
-
-  VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices, cutoff);
-
-  pair<SafeVector<char> *, float> alignment;
-  // choose the alignment routine depending on the "cosmetic" gap penalties used
-  if (gapOpenPenalty == 0 && gapContinuePenalty == 0) {
-
-    if(identity <= threshhold) {
-       std::vector<StemCandidate> *pscs1, *pscs2;
-       pscs1 = seq2scs(align1, BPPMatrices, BandWidth);
-       pscs2 = seq2scs(align2, BPPMatrices, BandWidth);
-       std::vector<int> *matchPSCS1 = new std::vector<int>;
-       std::vector<int> *matchPSCS2 = new std::vector<int>;
-
-       Globaldp globaldp(pscs1, pscs2, align1, align2, matchPSCS1, matchPSCS2, posterior, BPPMatrices);
-       //float scsScore = globaldp.Run();
-
-       globaldp.Run();
-
-       removeConflicts(pscs1, pscs2, matchPSCS1, matchPSCS2);
-
-       alignment = model.ComputeAlignment2 (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior, pscs1, pscs2, matchPSCS1, matchPSCS2);
-       delete matchPSCS1;
-       delete matchPSCS2;
-    } else {
-       alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior);
-    }
-  }
-  else {
-    alignment = model.ComputeAlignmentWithGapPenalties (align1, align2,
-                                                        *posterior, align1->GetNumSequences(), align2->GetNumSequences(),
-                                                        gapOpenPenalty, gapContinuePenalty);
-  }
-
-  delete posterior;
-
-  if (enableVerbose){
-
-    // compute total length of sequences
-    int totLength = 0;
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      for (int j = 0; j < align2->GetNumSequences(); j++)
-        totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength());
-
-    // give an "accuracy" measure for the alignment
-    cerr << alignment.second / totLength << endl;
-  }
-
-  // now build final alignment
-  MultiSequence *result = new MultiSequence();
-  for (int i = 0; i < align1->GetNumSequences(); i++)
-    result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X'));
-  for (int i = 0; i < align2->GetNumSequences(); i++)
-    result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y'));
-  if (!enableAlignOrder)
-    result->SortByLabel();
-
-  // free temporary alignment
-  delete alignment.first;
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// DoRelaxation()
-//
-// Performs one round of the consistency transformation.  The
-// formula used is:
-//                     1
-//    P'(x[i]-y[j]) = ---  sum   sum P(x[i]-z[k]) P(z[k]-y[j])
-//                    |S| z in S  k
-//
-// where S = {x, y, all other sequences...}
-//
-/////////////////////////////////////////////////////////////////
-
-SafeVector<SafeVector<SparseMatrix *> > DoRelaxation (MultiSequence *sequences, 
-                                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-  const int numSeqs = sequences->GetNumSequences();
-
-  SafeVector<SafeVector<SparseMatrix *> > newSparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-
-  // for every pair of sequences
-  for (int i = 0; i < numSeqs; i++){
-    for (int j = i+1; j < numSeqs; j++){
-      Sequence *seq1 = sequences->GetSequence (i);
-      Sequence *seq2 = sequences->GetSequence (j);
-      
-      if (enableVerbose)
-        cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. "
-             << "(" << j+1 << ") " << seq2->GetHeader() << ": ";
-
-      // get the original posterior matrix
-      VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr);
-      VF &posterior = *posteriorPtr;
-
-      const int seq1Length = seq1->GetLength();
-      const int seq2Length = seq2->GetLength();
-
-      // contribution from the summation where z = x and z = y
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k];
-
-      if (enableVerbose)
-        cerr << sparseMatrices[i][j]->GetNumCells() << " --> ";
-
-      // contribution from all other sequences
-      for (int k = 0; k < numSeqs; k++) if (k != i && k != j){
-       if (k < i)
-         Relax1 (sparseMatrices[k][i], sparseMatrices[k][j], posterior);
-       else if (k > i && k < j)
-         Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior);
-       else {
-         SparseMatrix *temp = sparseMatrices[j][k]->ComputeTranspose();
-         Relax (sparseMatrices[i][k], temp, posterior);
-         delete temp;
-       }
-      }
-
-      // now renormalization
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs;
-
-      // mask out positions not originally in the posterior matrix
-      SparseMatrix *matXY = sparseMatrices[i][j];
-      for (int y = 0; y <= seq2Length; y++) posterior[y] = 0;
-      for (int x = 1; x <= seq1Length; x++){
-       SafeVector<PIF>::iterator XYptr = matXY->GetRowPtr(x);
-       SafeVector<PIF>::iterator XYend = XYptr + matXY->GetRowSize(x);
-       VF::iterator base = posterior.begin() + x * (seq2Length + 1);
-       int curr = 0;
-       while (XYptr != XYend){
-
-         // zero out all cells until the first filled column
-         while (curr < XYptr->first){
-           base[curr] = 0;
-           curr++;
-         }
-
-         // now, skip over this column
-         curr++;
-         ++XYptr;
-       }
-       
-       // zero out cells after last column
-       while (curr <= seq2Length){
-         base[curr] = 0;
-         curr++;
-       }
-      }
-
-      // save the new posterior matrix
-      newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior);
-      newSparseMatrices[j][i] = NULL;
-
-      if (enableVerbose)
-        cerr << newSparseMatrices[i][j]->GetNumCells() << " -- ";
-
-      delete posteriorPtr;
-
-      if (enableVerbose)
-        cerr << "done." << endl;
-    }
-  }
-  
-  return newSparseMatrices;
-}
-
-/////////////////////////////////////////////////////////////////
-// Relax()
-//
-// Computes the consistency transformation for a single sequence
-// z, and adds the transformed matrix to "posterior".
-/////////////////////////////////////////////////////////////////
-
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){
-
-  assert (matXZ);
-  assert (matZY);
-
-  int lengthX = matXZ->GetSeq1Length();
-  int lengthY = matZY->GetSeq2Length();
-  assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length());
-
-  // for every x[i]
-  for (int i = 1; i <= lengthX; i++){
-    SafeVector<PIF>::iterator XZptr = matXZ->GetRowPtr(i);
-    SafeVector<PIF>::iterator XZend = XZptr + matXZ->GetRowSize(i);
-
-    VF::iterator base = posterior.begin() + i * (lengthY + 1);
-
-    // iterate through all x[i]-z[k]
-    while (XZptr != XZend){
-      SafeVector<PIF>::iterator ZYptr = matZY->GetRowPtr(XZptr->first);
-      SafeVector<PIF>::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first);
-      const float XZval = XZptr->second;
-
-      // iterate through all z[k]-y[j]
-      while (ZYptr != ZYend){
-        base[ZYptr->first] += XZval * ZYptr->second;
-       ZYptr++;
-      }
-      XZptr++;
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// Relax1()
-//
-// Computes the consistency transformation for a single sequence
-// z, and adds the transformed matrix to "posterior".
-/////////////////////////////////////////////////////////////////
-
-void Relax1 (SparseMatrix *matZX, SparseMatrix *matZY, VF &posterior){
-
-  assert (matZX);
-  assert (matZY);
-
-  int lengthZ = matZX->GetSeq1Length();
-  int lengthY = matZY->GetSeq2Length();
-
-  // for every z[k]
-  for (int k = 1; k <= lengthZ; k++){
-    SafeVector<PIF>::iterator ZXptr = matZX->GetRowPtr(k);
-    SafeVector<PIF>::iterator ZXend = ZXptr + matZX->GetRowSize(k);
-
-    // iterate through all z[k]-x[i]
-    while (ZXptr != ZXend){
-      SafeVector<PIF>::iterator ZYptr = matZY->GetRowPtr(k);
-      SafeVector<PIF>::iterator ZYend = ZYptr + matZY->GetRowSize(k);
-      const float ZXval = ZXptr->second;
-      VF::iterator base = posterior.begin() + ZXptr->first * (lengthY + 1);
-
-      // iterate through all z[k]-y[j]
-      while (ZYptr != ZYend){
-        base[ZYptr->first] += ZXval * ZYptr->second;
-        ZYptr++;
-      }
-      ZXptr++;
-    }
-  }
-}
-
-void DoBasePairProbabilityRelaxation (MultiSequence *sequences, 
-                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                     SafeVector<BPPMatrix*> &BPPMatrices) {
-    const int numSeqs = sequences->GetNumSequences();
-
-    for (int i = 0; i < numSeqs; i++) {
-       Sequence *seq1 = sequences->GetSequence (i);
-       BPPMatrix *seq1BppMatrix = BPPMatrices[seq1->GetLabel()];
-       Trimat<float> consBppMat(seq1->GetLength() + 1);
-       int seq1Length = seq1->GetLength();
-
-       for (int k = 1; k <= seq1Length; k++) {
-           for (int l = k; l <= seq1Length; l++) {
-               consBppMat.ref(k, l) = seq1BppMatrix->GetProb(k, l);
-           }
-       }
-
-       for (int j = i + 1; j < numSeqs; j++) {
-
-   //          VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior()
-         Sequence *seq2 = sequences->GetSequence (j);
-         BPPMatrix *seq2BppMatrix = BPPMatrices[seq2->GetLabel()];
-//       int seq2Length = seq2->GetLength();
-         SparseMatrix *matchProb = sparseMatrices[i][j];
-
-//       vector<PIF2> &probs1 = seq1BppMatrix->bppMat.data2;
-         for(int k = 1; k <= seq1Length; k++) {
-             for(int m = k, n = k; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) {
-                 
-//       for (int k = 0; k < (int)probs1.size(); k++) {
-//           float tmpProb1 = probs1[k].prob;
-//           int   tmp1I    = probs1[k].i;
-//           int   tmp1J    = probs1[k].j;
-
-                 float sumProb = 0;
-                 vector<PIF2> &probs2 = seq2BppMatrix->bppMat.data2;
-                 for(int l = 0; l < (int)probs2.size(); l++) {
-                     float tmpProb2 = probs2[l].prob;
-                     int   tmp2I    = probs2[l].i;
-                     int   tmp2J    = probs2[l].j;
-                     sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2;
-                 }
-
-                 consBppMat.ref(m, n) += sumProb;
-             }
-
-             for(int m = k, n = k + 1; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) {
-                 
-//       for (int k = 0; k < (int)probs1.size(); k++) {
-//           float tmpProb1 = probs1[k].prob;
-//           int   tmp1I    = probs1[k].i;
-//           int   tmp1J    = probs1[k].j;
-
-                 float sumProb = 0;
-                 vector<PIF2> &probs2 = seq2BppMatrix->bppMat.data2;
-                 for(int l = 0; l < (int)probs2.size(); l++) {
-                     float tmpProb2 = probs2[l].prob;
-                     int   tmp2I    = probs2[l].i;
-                     int   tmp2J    = probs2[l].j;
-                     sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2;
-                 }
-
-                 consBppMat.ref(m, n) += sumProb;
-             }
-         }
-       }
-
-/*
-         for(int k = 1; k <= seq1Length; k++) {
-             for(int m = k, n = k; n <= k + 30 && m >= 1 && n <= seq1Length; m--, n++) {
-                 float tmpProb = seq1BppMatrix->GetProb(m, n);
-                 for(int l = 1; l <= seq2Length; l++) {
-                     for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                     for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                 }
-                 consBppMat.ref(m, n) += tmpProb;
-             }
-    
-             for(int m = k, n = k + 1; n <= k + 31 && m >= 1 && n <= seq1Length; m--, n++) {
-                 float tmpProb = seq1BppMatrix->GetProb(m, n);
-                 for(int l = 1; l <= seq2Length; l++) {
-                     for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                     for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                 }
-                 consBppMat.ref(m,n) += tmpProb;
-             }
-         }
-       }
-*/
-       for (int m = 1; m <= seq1Length; m++) {
-           for (int n = m + 4; n <= seq1Length; n++) {
-               consBppMat.ref(m,n) = consBppMat.ref(m,n)/(float)numSeqs;
-           }
-       }
-       seq1BppMatrix->updateBPPMatrix(consBppMat);
-    }
-}
-
-/////////////////////////////////////////////////////////////////
-// GetSubtree
-//
-// Returns set containing all leaf labels of the current subtree.
-/////////////////////////////////////////////////////////////////
-
-set<int> GetSubtree (const TreeNode *tree){
-  set<int> s;
-
-  if (tree->GetSequenceLabel() == -1){
-    s = GetSubtree (tree->GetLeftChild());
-    set<int> t = GetSubtree (tree->GetRightChild());
-
-    for (set<int>::iterator iter = t.begin(); iter != t.end(); ++iter)
-      s.insert (*iter);
-  }
-  else {
-    s.insert (tree->GetSequenceLabel());
-  }
-
-  return s;
-}
-
-/////////////////////////////////////////////////////////////////
-// TreeBasedBiPartitioning
-//
-// Uses the iterative refinement scheme from MUSCLE.
-/////////////////////////////////////////////////////////////////
-
-void TreeBasedBiPartitioning (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                              const ProbabilisticModel &model, MultiSequence* &alignment,
-                              const TreeNode *tree, SafeVector<BPPMatrix*> &BPPMatrices){
-  // check if this is a node of the alignment tree
-  if (tree->GetSequenceLabel() == -1){
-    TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetLeftChild(), BPPMatrices);
-    TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetRightChild(), BPPMatrices);
-
-    set<int> leftSubtree = GetSubtree (tree->GetLeftChild());
-    set<int> rightSubtree = GetSubtree (tree->GetRightChild());
-    set<int> leftSubtreeComplement, rightSubtreeComplement;
-
-    // calculate complement of each subtree
-    for (int i = 0; i < alignment->GetNumSequences(); i++){
-      if (leftSubtree.find(i) == leftSubtree.end()) leftSubtreeComplement.insert (i);
-      if (rightSubtree.find(i) == rightSubtree.end()) rightSubtreeComplement.insert (i);
-    }
-
-    // perform realignments for edge to left child
-    if (!leftSubtree.empty() && !leftSubtreeComplement.empty()){
-      MultiSequence *groupOneSeqs = alignment->Project (leftSubtree); assert (groupOneSeqs);
-      MultiSequence *groupTwoSeqs = alignment->Project (leftSubtreeComplement); assert (groupTwoSeqs);
-      delete alignment;
-      alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetLeftChild()->GetIdentity());
-    }
-
-    // perform realignments for edge to right child
-    if (!rightSubtree.empty() && !rightSubtreeComplement.empty()){
-      MultiSequence *groupOneSeqs = alignment->Project (rightSubtree); assert (groupOneSeqs);
-      MultiSequence *groupTwoSeqs = alignment->Project (rightSubtreeComplement); assert (groupTwoSeqs);
-      delete alignment;
-      alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetRightChild()->GetIdentity());
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoterativeRefinement()
-//
-// Performs a single round of randomized partionining iterative
-// refinement.
-/////////////////////////////////////////////////////////////////
-/*
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment){
-  set<int> groupOne, groupTwo;
-
-  // create two separate groups
-  for (int i = 0; i < alignment->GetNumSequences(); i++){
-    if (rand() % 2)
-      groupOne.insert (i);
-    else
-      groupTwo.insert (i);
-  }
-
-  if (groupOne.empty() || groupTwo.empty()) return;
-
-  // project into the two groups
-  MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs);
-  MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs);
-  delete alignment;
-
-  // realign
-  alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model);
-
-  delete groupOneSeqs;
-  delete groupTwoSeqs;
-}
-*/
-
-/////////////////////////////////////////////////////////////////
-// WriteAnnotation()
-//
-// Computes annotation for multiple alignment and write values
-// to a file.
-/////////////////////////////////////////////////////////////////
-
-void WriteAnnotation (MultiSequence *alignment, 
-                     const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-  ofstream outfile (annotationFilename.c_str());
-  
-  if (outfile.fail()){
-    cerr << "ERROR: Unable to write annotation file." << endl;
-    exit (1);
-  }
-
-  const int alignLength = alignment->GetSequence(0)->GetLength();
-  const int numSeqs = alignment->GetNumSequences();
-  
-  SafeVector<int> position (numSeqs, 0);
-  SafeVector<SafeVector<char>::iterator> seqs (numSeqs);
-  for (int i = 0; i < numSeqs; i++) seqs[i] = alignment->GetSequence(i)->GetDataPtr();
-  SafeVector<pair<int,int> > active;
-  active.reserve (numSeqs);
-  
-  // for every column
-  for (int i = 1; i <= alignLength; i++){
-    
-    // find all aligned residues in this particular column
-    active.clear();
-    for (int j = 0; j < numSeqs; j++){
-      if (seqs[j][i] != '-'){
-       active.push_back (make_pair(j, ++position[j]));
-      }
-    }
-    
-    outfile << setw(4) << ComputeScore (active, sparseMatrices) << endl;
-  }
-  
-  outfile.close();
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeScore()
-//
-// Computes the annotation score for a particular column.
-/////////////////////////////////////////////////////////////////
-
-int ComputeScore (const SafeVector<pair<int, int> > &active, 
-                 const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-
-  if (active.size() <= 1) return 0;
-  
-  // ALTERNATIVE #1: Compute the average alignment score.
-
-  float val = 0;
-  for (int i = 0; i < (int) active.size(); i++){
-    for (int j = i+1; j < (int) active.size(); j++){
-      val += sparseMatrices[active[i].first][active[j].first]->GetValue(active[i].second, active[j].second);
-    }
-  }
-
-  return (int) (200 * val / ((int) active.size() * ((int) active.size() - 1)));
-  
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Makefile b/binaries/src/mafft/extensions/mxscarna_src/Makefile
deleted file mode 100644 (file)
index 359e15b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-################################################################################
-# Makefile for probcons
-################################################################################
-
-################################################################################
-# 1) Choose C++ compiler.
-################################################################################
-
-CXX = g++
-
-################################################################################
-# 2) Set C++ flags.
-#    a) DEBUG mode -- no optimizations, enable SafeVector checking, no inlining
-#    b) PROFILE mode -- for gprof
-#    c) RELEASE mode
-################################################################################
-BIG_INLINE_LIMIT = 20000
-
-PROBCONS = ./probconsRNA
-VIENNA   = ./vienna
-
-# no -Wall option for warning
-CXXFLAGS = -O3 -funroll-loops -finline-limit=$(BIG_INLINE_LIMIT)
-OFLAGS = -DNDEBUG -DNumInsertStates=1 -DVERSION="2.0" $(CXXFLAGS) $(CFLAGS1)
-LIBS = -L$(PROBCONS)  -L./
-INCL = -I$(PROBCONS) -I$(VIENNA) -I./
-
-################################################################################
-# 3) Dependencies
-################################################################################
-
-TARGETS = mxscarna 
-
-OBJS = Main.o McCaskill.o vienna/energy_param.o seq2scs.o Globaldp.o postProcessings.o AlifoldMEA.o
-
-.PHONY : all
-all : $(TARGETS) 
-
-mxscarna : $(OBJS)
-       $(CXX) $(LIBS) $(OFLAGS) -lm -o $@ $(OBJS)
-
-rfold:  
-       cd $(RFOLD); \
-       make; \
-       cd .. \
-       cd ..
-probcons:
-       cd $(PROBCONS); \
-       make; \
-       cd .. 
-
-#probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h Main.cc
-#      $(CXX) -lm -o probcons $(OBJS)
-#Main.cc 
-
-Main.o :  $(PROBCONS)/SafeVector.h $(PROBCONS)/FileBuffer.h $(PROBCONS)/Sequence.h $(PROBCONS)/MultiSequence.h $(PROBCONS)/EvolutionaryTree.h scarna.hpp BPPMatrix.hpp StemCandidate.hpp Globaldp.hpp AlifoldMEA.h Main.cc
-       $(CXX) $(INCL) $(OFLAGS) -c Main.cc -o Main.o
-McCaskill.o: McCaskill.hpp $(VIENNA)/energy_param.hpp Util.hpp Beta.hpp ScoreType.hpp McCaskill.cpp
-       $(CXX) $(INCL) $(OFLAGS) -c McCaskill.cpp -o McCaskill.o
-$(VIENNA)/energy_param.o: $(VIENNA)/energy_param.hpp $(VIENNA)/energy_param.cpp
-       $(CXX) $(INCL) $(OFLAGS) -c $(VIENNA)/energy_param.cpp -o $(VIENNA)/energy_param.o
-seq2scs.o: $(PROBCONS)/SafeVector.h StemCandidate.hpp $(PROBCONS)/Sequence.h $(PROBCONS)/MultiSequence.h BPPMatrix.hpp nrutil.h seq2scs.cpp
-       $(CXX) $(INCL) $(OFLAGS) -c seq2scs.cpp -o seq2scs.o
-Globaldp.o: Globaldp.hpp nrutil.h Util.hpp Beta.hpp scarna.hpp StemCandidate.hpp $(PROBCONS)/MultiSequence.h $(PROBCONS)/Sequence.h BPPMatrix.hpp
-       $(CXX) $(INCL) $(OFLAGS) -c Globaldp.cpp -o Globaldp.o
-GlobalParameters.o: scarna.hpp
-       $(CXX) $(INCL) $(OFLAGS) -c GlobalParameters.cpp -o GlobalParameters.o
-postProcessings.o: StemCandidate.hpp scarna.hpp
-       $(CXX) $(INCL) $(OFLAGS) -c postProcessings.cpp -o postProcessings.o
-AlifoldMEA.o: nrutil.h Util.hpp Beta.hpp BPPMatrix.hpp $(PROBCONS)/MultiSequence.h $(PROBCONS)/Sequence.h $(PROBCONS)/SafeVector.h
-       $(CXX) $(INCL) $(OFLAGS) -c AlifoldMEA.cpp -o AlifoldMEA.o
-
-.PHONY : clean
-clean:
-       rm -f $(TARGETS) *.o *.h~ *.hpp~ *.cpp~ *.cc~ $(VIENNA)/*.o 
-       $(MAKE) -C $(PROBCONS) clean
diff --git a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp b/binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp
deleted file mode 100644 (file)
index 39497fb..0000000
+++ /dev/null
@@ -1,839 +0,0 @@
-#include <iostream>
-#include "McCaskill.hpp"
-//#include "energy_param3.hpp"
-#include "Util.hpp"
-#include <cstring>
-
-namespace MXSCARNA {
-energy_param  McCaskill::energyParam;
-
-float *McCaskill::exphairpin;
-float McCaskill::expninio[5][32];
-float McCaskill::expdangle5[6][4];
-float McCaskill::expdangle3[6][4];
-float McCaskill::expinternalLoop[31];
-float McCaskill::expbulge[31];
-char   McCaskill::exptriLoop[2][6];
-float McCaskill::exptriLoopEnergy[2];
-char   McCaskill::exptetraLoop[30][7];
-float McCaskill::exptetraLoopEnergy[30];
-float McCaskill::expStack[6][6];
-float McCaskill::expTstackH[6][16];
-float McCaskill::expTstackI[6][16];
-float McCaskill::expint11[6][6][16];
-float McCaskill::expint21[6][6][16][4];
-float McCaskill::expint22[6][6][16][16];
-float McCaskill::expMLclosing;
-float McCaskill::expMLintern[8];
-float McCaskill::expTermAU;
-float McCaskill::expMLbase[31];
-
-const int McCaskill::TURN         = 3;
-const float McCaskill::GASCONST   = 1.98717;
-const float McCaskill::T          = 37 + 273.15;
-const int McCaskill::MAXLOOP      = 30;
-const int McCaskill::TETRA_ENTH37 = -400;
-const int McCaskill::NBPAIRS      = 7;
-const int McCaskill::SCALE        = 10;
-
-
-void 
-McCaskill::
-calcPartitionFunction()
-{ 
-    initParameter();
-    Inside();
-    Outside();
-    convertProbability();
-
-/*
-    for(int i = 0; i < n_seq; i++) {
-       for(int j = i; j < n_seq; j++) {
-           cout << getProb(i, j) << " ";
-       }
-       cout << endl;
-    }
-*/
-}
-
-void
-McCaskill::
-convertProbability()
-{
-    float *pPointer  = p.getPointer(0, 0);
-    float *abPointer = ab.getPointer(0,0);
-    for(int i = 0; i < n_seq; i++) {
-       for(int j = i; j < n_seq; j++) {
-           *pPointer += *abPointer++;
-           *pPointer++ = EXP(*pPointer);
-       }
-    }
-}
-
-void 
-McCaskill::
-Inside()
-{
-
-    for (int i = n_seq - TURN - 2; i >= 0; i--) {
-       float *abPointer   = ab.getPointer(i, i + TURN + 1);
-       float *am1Pointer  = am1.getPointer(i, i + TURN + 1);
-       float *amPointer   = am.getPointer(i, i + TURN + 1);
-       float *q1Pointer   = q1.getPointer(i, i + TURN + 1);
-       float *aPointer    = a.getPointer(i, i + TURN + 1);
-       int   *typePointer = typeMat.getPointer(i, i+TURN+1);
-       for (int j = i + TURN + 1; j < n_seq; j++) {
-           int tmpType   = *typePointer++;
-                           *abPointer++  = compQb(i, j, tmpType);
-           am1v.ref(i,j) = *am1Pointer++ = compQm1(i,j, tmpType);
-           amv.ref(i,j)  = *amPointer++  = compQm(i,j);
-           q1v.ref(i,j)  = *q1Pointer++  = compQ1(i,j, tmpType);
-                           *aPointer++   = compQ(i,j);   
-       }
-    }
-}
-
-inline float
-McCaskill::
-compQb(int i, int j, int tmpType) 
-{
-
-    float tmpAb;
-    int type  = tmpType;
-    int u     = j - i - 1;
-    if(Beta::isCanonicalReducedPairCode(type)) {
-       // hairpin energy 
-       assert(u >= 3);
-       tmpAb = expHairpinEnergy(type, u, i + 1, j - 1);
-               
-       // base pair, bulge, interior loop energy
-       for(int h = i + 1; h <= MIN(i + MAXLOOP + 1, j - TURN - 2); h++) {
-           int u1 = h-i-1;
-           int max = MAX(h + TURN + 1, j-1-MAXLOOP+u1);
-           float *abPointer     = ab.getPointer(h, max - 1);
-           const int *typeMatPointer = typeMat.getPointer(h, max);
-
-           for(int l = max; l < j; l++) {
-               int type2 = *typeMatPointer++;
-               abPointer++;
-               if(!Beta::isCanonicalReducedPairCode(type2)) continue;
-               
-               assert(h >= 0 && h < n_seq && l >= 0 && l < n_seq);
-               type2 = Beta::flipReducedPairCode(type2);
-               assert(h-i-1 >= 0); assert(j-l-1 >= 0);
-               float loopE = *abPointer;
-               loopE += expLoopEnergy(u1, j-l-1, tmpType, type2, i+1, j-1, h-1, l+1); 
-               tmpAb = LOG_ADD(tmpAb, loopE);
-           }
-       }
-
-       // multi loop
-       float tmpQm = IMPOSSIBLE;
-       float *amPointer  = am.getPointer(i + 1, j - TURN - 3);
-       float *am1Pointer = am1v.getPointer(j-TURN-2, j-1);
-       for(int h = j - TURN - 2; h >= i + TURN + 3; h--) {
-           assert(h >= 0 && h < n_seq);
-           float tmpScore = *amPointer--;
-           tmpScore += *am1Pointer--;
-           tmpQm = LOG_ADD(tmpQm, tmpScore);
-       }
-       tmpQm += expMLclosing + expMLintern[type];
-       tmpQm += endStemScore(i, j);
-       tmpAb = LOG_ADD(tmpAb, tmpQm);
-    }
-    else {
-       tmpAb = IMPOSSIBLE;
-    }
-    return tmpAb;
-}
-
-//F = a:ML_closing + b:ML_intern*k + c:ML_BASE*u
-
-inline float
-McCaskill::
-compQm1(int i, int j, int tmpType)
-{
-    float tmpQm1 = IMPOSSIBLE;
-
-    int l = j;
-    if (i + TURN + 1 <= l) {
-       int type = typeMat.ref(i,l);
-       if(Beta::isCanonicalReducedPairCode(type)) {
-           float tmpScore = ab.ref(i,l);
-           tmpScore += beginStemScore(i, l);
-           //tmpScore += expMLbase[1]*(j-l) + expMLintern[type];
-           tmpScore += expMLintern[tmpType];
-           tmpQm1 = LOG_ADD(tmpQm1, tmpScore);
-       }
-    }
-    if(i < j) {
-       tmpQm1 = LOG_ADD(tmpQm1, am1.ref(i,j-1));
-    }
-
-    return tmpQm1;
-}
-
-inline float
-McCaskill::
-compQm(int i, int j)
-{
-    float tmpQm = IMPOSSIBLE;
-    float *amPointer  = am.getPointer(i,j-TURN-2);
-    float *am1Pointer = am1v.getPointer(j-TURN-1, j);
-    for(int h = j - TURN - 1; h >= i ; h--) {
-       float tmpScore = 0;
-       float tmpAm1 = *am1Pointer--;
-       
-       tmpScore += tmpAm1;
-       tmpQm = LOG_ADD(tmpQm, tmpScore);
-       tmpScore = *amPointer--;
-       tmpScore += tmpAm1;
-       tmpQm = LOG_ADD(tmpQm, tmpScore);
-    }
-
-    return tmpQm;
-}
-
-inline float
-McCaskill::
-compQ1(int i, int j, int tmpType)
-{
-    float tmpQ1 = IMPOSSIBLE;
-
-    if(Beta::isCanonicalReducedPairCode(tmpType)) {
-       float tmpScore = ab.ref(i, j);
-       tmpScore += beginStemScore(i, j);
-       tmpQ1 = LOG_ADD(tmpQ1, tmpScore);
-    }
-    tmpQ1 = LOG_ADD(tmpQ1, q1.ref(i, j - 1));
-
-    return tmpQ1;
-}
-
-inline float
-McCaskill::
-compQ(int i, int j)
-{
-    float tmpQ = 0;
-    tmpQ = LOG_ADD(tmpQ, q1.ref(i,j));
-    
-    float *aPointer  = a.getPointer(i,j-TURN-2);
-    float *q1Pointer = q1v.getPointer(j-TURN-1, j);
-    for(int h = j - TURN - 1; h >= i + 1; h--) {
-       float tmpScore  = *aPointer--;
-       tmpScore       += *q1Pointer--;
-       tmpQ            = LOG_ADD(tmpQ, tmpScore);
-    }
-
-    return tmpQ;
-}
-
-inline float
-McCaskill::
-beginStemScore(const int i, const int j) const
-{
-    float temp = 0;
-    int type = typeMat.ref(i,j);
-
-    if(0 < i)                   { temp += expdangle5[type][numSeq[i-1]]; }
-    if(j < n_seq-1)             { temp += expdangle3[type][numSeq[j+1]]; }
-    if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE)  { temp += expTermAU; }
-    return temp;
-}
-
-inline float
-McCaskill::
-endStemScore(const int i, const int j) const
-{
-    float temp = 0;
-    int type = typeMat.ref(i,j);
-
-    type = Beta::flipReducedPairCode(type);
-
-    if(i < n_seq-1)             { temp += expdangle3[type][numSeq[i+1]]; }
-    if(j > 0)                   { temp += expdangle5[type][numSeq[j-1]]; }
-    if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE)  { temp += expTermAU; }
-    return temp;
-}
-
-inline float
-McCaskill::
-compP(int h, int l, int tmpType)
-{
-    float prob = IMPOSSIBLE;
-           
-    int type = tmpType;
-    if(Beta::isCanonicalReducedPairCode(type)) {
-               
-       /* exterior loop */
-       float tmp_p = 0;
-       tmp_p -= a.ref(0,n_seq-1);
-       if(0 < h) { 
-           tmp_p += a.ref(0,h-1);
-       }
-       if(l < n_seq-1) {
-           tmp_p += a.ref(l+1, n_seq-1);
-       }
-       tmp_p += beginStemScore(h, l);
-       prob = LOG_ADD(prob, tmp_p);
-
-       assert(IMPOSSIBLE <= prob && prob <= 0);
-
-       /* internal loop */
-       tmp_p = IMPOSSIBLE;
-       int tt = Beta::flipReducedPairCode(tmpType);
-       int max = MAX(0,h-MAXLOOP-1);
-       for(int i = max; i <= h - 1; i++) {
-           float min = MIN(l+MAXLOOP-h+i+2, n_seq-1);
-           int   *typeMatPointer = typeMat.getPointer(i,l+1);
-           float *pPointer       = p.getPointer(i,l);
-           for(int j = l + 1; j <= min; j++) {
-               int type2    = *typeMatPointer++;
-               pPointer++;
-               if(!Beta::isCanonicalReducedPairCode(type2)) continue;
-               assert(i >= 0 && i < n_seq && j >= 0 && j < n_seq);
-
-               float tmpScore  = *pPointer;
-               tmpScore       += expLoopEnergy(h-i-1, j-l-1, type2, tt, i+1, j-1, h-1, l+1);
-               tmp_p = LOG_ADD(tmp_p, tmpScore);
-           }
-       }
-       prob = LOG_ADD(prob, tmp_p); 
-       assert(IMPOSSIBLE <= prob && prob <= 0);
-
-       /* multi loop */
-       tmp_p = IMPOSSIBLE;
-       float tmp_begin   = beginStemScore(h, l);
-       float *q1Pointer  = q1v.getPointer(0, l);
-       float *am1Pointer = am1v.getPointer(0, l);
-       float *amPointer  = amv.getPointer(1,h-1);
-       for(int i = 0; i <= h-TURN-1; i++) {
-           float tmpq1    = *q1Pointer++;
-           float tmpam    = *amPointer++;
-           float tmpScore = *am1Pointer++;
-
-           tmpScore += tmpam;
-           tmpScore += tmp_begin;
-           tmpScore += expMLclosing + expMLintern[tt];
-           tmp_p = LOG_ADD(tmp_p, tmpScore);
-
-           tmpScore  = tmpq1;
-           tmpScore += tmpam;
-           tmpScore += tmp_begin;
-           tmpScore += expMLclosing + expMLintern[tt];
-           tmp_p = LOG_ADD(tmp_p, tmpScore);
-
-           tmpScore  = tmpq1;
-           tmpScore += tmp_begin;
-           tmpScore += expMLclosing + expMLintern[tt];
-           tmp_p = LOG_ADD(tmp_p, tmpScore);
-       }
-               
-       assert(IMPOSSIBLE <= tmp_p && tmp_p <= 0);
-       prob = LOG_ADD(prob, tmp_p); 
-       
-       tmp_p = IMPOSSIBLE;
-       for(int i = h-TURN; i <= h-1; i++) {
-           if(i >= 0) {
-               float tmpScore  = q1.ref(i,l);
-               tmpScore       += tmp_begin;
-               tmpScore       += expMLclosing + expMLintern[tt];
-               tmp_p           = LOG_ADD(tmp_p, tmpScore);
-           }
-       }
-       assert(IMPOSSIBLE <= tmp_p && tmp_p <= 0); 
-       prob = LOG_ADD(prob, tmp_p);
-    }
-    else {
-       prob = IMPOSSIBLE;
-    }
-
-    return prob;
-}
-
-inline float
-McCaskill::
-compPm(int i, int l)
-{
-  float tmpPm  = IMPOSSIBLE;
-
-  int *typeMatPointer   = typeMat.getPointer(i,n_seq-1);
-  float *pPointer       = p.getPointer(i,n_seq);
-  float *amPointer      = am.getPointer(l+1,n_seq-1);
-  float *abPointer      = ab.getPointer(i, n_seq);
-  for(int j = n_seq - 1; j >= l + TURN + 1; j--) {
-      int type = *typeMatPointer--;
-      pPointer--;
-      amPointer--;
-      abPointer--;
-      if(Beta::isCanonicalReducedPairCode(type)) {
-         float tmp  = *pPointer;
-         tmp       += *amPointer;
-         tmp       += endStemScore(i, j);
-         tmpPm = LOG_ADD(tmpPm, tmp);
-      }
-  }
-  tmpPm += expMLintern[1];
-
-  return tmpPm;
-}
-
-inline float
-McCaskill::
-compPm1(int i, int l)
-{
-  float tmpPm1 = IMPOSSIBLE;
-
-  int j =  l + 1;
-  if(j <= n_seq-1) {
-      int type = typeMat.ref(i,j);
-      if(Beta::isCanonicalReducedPairCode(type)) {
-         float tmp = p.ref(i,j);
-         tmp += endStemScore(i, j);
-         tmpPm1 = tmp;
-      }
-      tmpPm1 += expMLintern[1];
-  }
-  if(l+1 <= n_seq - 1) {
-      tmpPm1 = LOG_ADD(tmpPm1, am1.ref(i, l+1));
-  }
-
-  return tmpPm1;
-}
-
-void 
-McCaskill::
-Outside()
-{
-    for(int h = 0; h <= n_seq - TURN - 2; h++) {
-       float *pPointer    = p.getPointer(h, n_seq-1);
-       float *q1Pointer   = q1.getPointer(h, n_seq-1);
-       float *am1Pointer  = am1.getPointer(h, n_seq-1);
-       int   *typePointer = typeMat.getPointer(h, n_seq-1);
-       for(int l = n_seq-1; l >= h + TURN + 1; l--) {
-           int tmpType    = *typePointer--;
-           pv.ref(h,l)    = *pPointer--   = compP(h,l,tmpType);
-           q1v.ref(h,l)   = *q1Pointer--  = compPm(h,l);
-           am1v.ref(h,l)  = *am1Pointer-- = compPm1(h,l);
-
-           assert(p.ref(h,l) <= 0);
-       }
-    }
-}
-
-void
-McCaskill::
-printProbMat()
-{
-    int m = 0;
-    for(int i = 0; i < n_seq; i++) cout << " " << seq[i];
-    cout << endl;
-    for(int i = 0; i < n_seq; i++) {
-       if(m < n_seq) {
-           cout << seq[m];
-       }
-       for(int j = 0; j <= i-1; j++) {
-           if(j != i-1) cout << "  ";
-           else         cout << " ";
-       }
-       if(i != 0 && i != n_seq-1) {
-           cout << "\\";
-       }
-
-       for(int j = i; j < n_seq; j++) {
-           if(p.ref(i,j) > 0.01) {
-
-               int type = Beta::getReducedPairCode(numSeq[i], numSeq[j]);
-               
-               if(!Beta::isCanonicalReducedPairCode(type)) {
-                   cout << "\n" << seq[i] << " " << seq[j] << " " << exp(p.ref(i,j)) << endl;
-               }
-
-               if(j != n_seq-1) {
-                   cout << "* ";
-               }
-               else {
-                   cout << "*";
-               }
-
-           }
-           else {
-
-               if(j != n_seq-1) {
-                   cout << "  ";
-               }
-               else {
-                   cout << " ";
-               }
-
-           }
-
-       }
-       if(m < n_seq) {
-           cout << seq[m++] << endl;
-       }
-       if(i == n_seq - 1) cout << endl;
-    }
-    for(int i = 0; i < n_seq; i++) cout << " " << seq[i];
-    cout << endl;
-}
-
-void
-McCaskill::
-initParameter()
-{
-    float GT;
-    float RT_KCAL_MOL = McCaskill::T*McCaskill::GASCONST;
-    int len = 31;
-
-    for(int i = 0; i < len; i++) {
-       GT = energyParam.getHairpin(i);
-       exphairpin[i] = -GT*10/RT_KCAL_MOL;
-    }
-    
-    for (int i = 0; i < len; i++) {
-       GT = energyParam.getBulge(i);
-       expbulge[i] = -GT*10/RT_KCAL_MOL;
-       GT = energyParam.getInternalLoop(i);
-       expinternalLoop[i] = -GT*10/RT_KCAL_MOL;
-    }
-    expinternalLoop[2] = -80*10/RT_KCAL_MOL; /* special case of size 2 interior loops (single mismatch) */
-    
-    // float lxc = energy_param3::lxc37;
-    for (int i = 31; i < n_seq; i++) {
-       GT = energyParam.getHairpin(30) + (107.856*LOG((float)i/30));
-       exphairpin[i] = -GT*10/RT_KCAL_MOL;
-    }
-
-    for(int i = 0; i < 5; i++) {
-       GT = energyParam.getNinio(i);
-       for(int j = 0; j <= MAXLOOP; j++) {
-           expninio[i][j] = -MIN(energyParam.getMaxNinio(), j*GT)*10/RT_KCAL_MOL;
-       }
-    }
-
-    for(int i = 0; i < 30; i++) {
-      GT = energyParam.getTetraLoopEnergy(i);
-      exptetraLoopEnergy[i] = -GT*10/RT_KCAL_MOL;
-    }
-    
-    /*no parameters for Triloop*/
-    for(int i = 0; i < 2; i++) {
-       GT = 0;
-       exptriLoopEnergy[i] = -GT*10/RT_KCAL_MOL;
-    }
-
-    GT = energyParam.getMLclosing();
-    expMLclosing = -GT*10/RT_KCAL_MOL;
-
-    for(int i = 0; i <= NBPAIRS; i++) {
-      GT = energyParam.getMLintern();
-      expMLintern[i] = -GT*10/RT_KCAL_MOL;
-    }
-
-    expTermAU = -energyParam.getTerminalAU()*10/RT_KCAL_MOL;
-    
-    GT = energyParam.getMLBase();
-    for(int i = 0; i < len; i++) {
-       expMLbase[i] = -GT*10*(float)i/RT_KCAL_MOL;
-    }
-
-    /*
-       if danlges = 0 just set their energy to 0,
-       don't let dangle energyies become > 0 (at large temps)
-       but make sure go smoothly to 0
-    */
-    for(int i = 0; i < 6; i++) {
-       for(int j =0; j < 4; j++) {
-           GT = energyParam.getDangle5(i,j);
-           expdangle5[i][j] = -GT*10/RT_KCAL_MOL;
-           GT = energyParam.getDangle3(i,j);
-           expdangle3[i][j] = -GT*10/RT_KCAL_MOL;
-       }
-    }
-
-    /* stacking energies  */
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           GT = energyParam.getStack(i,j);
-           expStack[i][j] = -GT*10/RT_KCAL_MOL;
-       }
-    }
-
-    /* mismatch energies */
-    for (int i = 0; i < 6; i++) {
-       for (int j = 0; j < 16; j++) {
-         GT = energyParam.getTstackI(i, j);
-         //  cout << i << " " << " " << j << " " << GT << endl;
-         expTstackI[i][j] = -GT*10/RT_KCAL_MOL;
-         GT = energyParam.getTstackH(i, j);
-         expTstackH[i][j] = -GT*10/RT_KCAL_MOL;
-       }
-    }
-    
-    /* interior loops of length 2*/
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-             GT = energyParam.getInt11(i, j, k);
-             expint11[i][j][k] = -GT*10/RT_KCAL_MOL;
-           }
-       }
-    }
-
-    /* interior 2*1 loops */
-    for(int i = 0; i < 6; i++) {
-       for(int j =0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-               for(int l = 0; l < 4; l++) {
-                 GT = energyParam.getInt21(i,j,k,l);
-                 expint21[i][j][k][l] = -GT*10/RT_KCAL_MOL;
-               }
-           }
-       }
-    }
-
-    /* interior 2*2 loops */
-    for (int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-               for(int l = 0; l < 16; l++) {
-                 GT = energyParam.getInt22(i,j,k,l);
-                 expint22[i][j][k][l] = -GT*10/RT_KCAL_MOL;
-               }
-           }
-       }
-    }
-}
-
-
-inline float 
-McCaskill::
-expHairpinEnergy(const int type, const int l, const int i, const int j)
-{
-  float q;
-  int    k;
-  
-//  assert(l >= 0);
-  q = exphairpin[l];
-
-  if(l == 4) {
-      char temp_seq[7];
-
-      for(int iter = i - 1; iter < i + 5; iter++) {
-       temp_seq[iter - (i-1)] = seq[iter];
-      }
-      temp_seq[6] = '\0';
-
-      for(k = 0; k < 30; k++) {
-       if(strcmp(temp_seq, energyParam.getTetraLoop(k)) == 0) break;
-      }
-      if(k != 30) {
-       q += exptetraLoopEnergy[k];
-      }
-  }
-  if(l == 3) {
-
-      /* no triloop bonus
-    char temp_seq[6];
-    
-    for(int iter = i - 1; iter < i + 4; iter++) {
-       temp_seq[iter - (i-1)] = seq[iter];
-    }
-    temp_seq[6] = '\0';
-    for(k = 0; k < 2; k++) {
-      if(strcmp(temp_seq, energyParam.getTriLoop(k)) == 0) break;
-    }
-    if(k != 2) {
-      q *= exptriLoopEnergy[k];
-    }
-      */
-
-    if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE) q += expTermAU;
-  }
-  else {
-      int type2 = Beta::getPairCode(numSeq[i], numSeq[j]);
-      q += expTstackH[type][type2];
-  }
-
-  return q;
-}
-
-
-inline float 
-McCaskill::
-expLoopEnergy(int u1, int u2, int type, int type2, 
-             int si1, int sj1, int sp1, int sq1)
-{
-  float z = 0;
-
-  if((u1 == 0) && (u2 == 0)) { z = expStack[type][type2]; }
-  else {
-    if((u1 == 0) || (u2 == 0)) {
-      int u;
-      if(u1 == 0) { u = u2; }
-      else        { u = u1; }
-      z = expbulge[u];
-      if(u1 + u2 == 1) z += expStack[type][type2];
-      else {
-       if (type  != Beta::REDUCED_CG_CODE && type  != Beta::REDUCED_GC_CODE) z += expTermAU;
-       if (type2 != Beta::REDUCED_CG_CODE && type2 != Beta::REDUCED_GC_CODE) z += expTermAU;
-      }
-    }
-    else {
-      if(u1 + u2 == 2) {
-         z = expint11[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])];
-      }
-      else if((u1 == 1) && (u2 == 2)) {
-         z = expint21[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])][numSeq[sq1]];
-      }
-      else if((u1 == 2) && (u2 == 1)) {
-         z = expint21[type2][type][Beta::getPairCode(numSeq[sq1], numSeq[sp1])][numSeq[si1]];
-      }
-      else if((u1 == 2) && (u2 == 2)) {
-       z = expint22[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])][Beta::getPairCode(numSeq[sp1], numSeq[sq1])];
-      }
-      else {
-       z = expinternalLoop[u1 + u2] +
-           expTstackI[type][Beta::getPairCode(numSeq[si1], numSeq[sj1])]
-            + expTstackI[type2][Beta::getPairCode(numSeq[sq1], numSeq[sp1])];
-       z += expninio[2][abs(u1-u2)];
-      }
-    }
-  }
-
-  return z;
-}
-
-void
-McCaskill::
-printExpEnergy()
-{
-    cout << "exphairpin:" << endl;
-    for(int i = 0; i < 31; i++) {
-       cout << exphairpin[i] << endl;
-    }
-    
-    cout << "expninio[5][32]:" << endl;
-    for(int i = 0; i < 5; i++) {
-       for(int j = 0; j < 32; j++) {
-           cout << expninio[i][j] << " ";
-       }
-       cout << endl;
-    }
-
-    cout << "expdangle5[6][4]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 4; j++) {
-           cout << expdangle5[i][j] << " ";
-       }
-       cout << endl;
-    }
-
-    cout << "expdangle3[6][4]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 4; j++) {
-           cout << expdangle3[i][j] << " ";
-       }
-       cout << endl;
-    }
-
-    cout << "expinternalLoop[31]:" << endl;
-    for(int i = 0; i < 31; i++) {
-       cout << i << ":" << expinternalLoop[i] << endl;
-    }
-    cout << "expbulge[31]:" << endl;
-    for(int i = 0; i < 31; i++) {
-       cout << i << ":" << expbulge[i] << endl;
-    }
-    
-    cout << "exptriLoopEnergy[2]:" << endl;
-    for(int i = 0; i < 2; i++) {
-       cout << i << ":" << exptriLoopEnergy[i] << endl;
-    }
-
-    cout << "exptetraLoopEnergy[15]" << endl;
-    for(int i = 0; i < 15; i++) {
-       cout << i << ":" << exptetraLoopEnergy[i] << endl;
-    }
-    
-    cout << "expStack[6][6]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           cout << expStack[i][j] << " ";
-       }
-       cout << endl;
-    }
-
-    cout << "expTstackH[6][16]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 16; j++) {
-           cout << expTstackH[i][j] << " ";
-       }
-       cout << endl;
-    }
-
-    cout << "expTstackI[6][16]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 16; j++) {
-           cout << expTstackI[i][j] << " ";
-       }
-       cout << endl;
-    }
-    
-    cout << "expMLclosing=" << expMLclosing << endl;
-    cout << "expMLintern:" << endl;
-    for(int i = 0; i < 8; i++) {
-       cout << expMLintern[i] << " ";
-    }
-    cout << endl;
-
-    cout << "expMLbase[31]:";
-    for(int i = 0; i < 31; i++) {
-       cout << i << ":" << expMLbase[i] << endl;
-    }
-
-    cout << "expint11[6][6][16]:";
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-               cout << expint11[i][j][k] << " ";
-           }
-           cout << endl;
-       }
-       cout << endl;
-    }
-
-    cout << "expint21[6][6][16][4]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-               for(int l = 0; l < 4; l++) {
-                   cout << expint21[i][j][k][l] << " ";
-               }
-               cout << endl;
-           }
-           cout << endl;
-       }
-       cout << endl;
-    }
-
-    
-    cout << "expint22[6][6][16][16]:" << endl;
-    for(int i = 0; i < 6; i++) {
-       for(int j = 0; j < 6; j++) {
-           for(int k = 0; k < 16; k++) {
-               for(int l = 0; l < 16; l++) {
-                   cout << expint22[i][j][k][l] << " ";
-               }
-               cout << endl;
-           }
-           cout << endl;
-       }
-       cout << endl;
-    }
-
-}
-
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp b/binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp
deleted file mode 100644 (file)
index 97ef7df..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-#ifndef MCCAKILL_H
-#define MCCAKILL_H
-
-//#define NDEBUG
-
-#include <string>
-#include <iostream>
-#include "nrutil.h"
-#include <cassert>
-#include "Util.hpp"
-#include "Beta.hpp"
-
-#include "energy_param.hpp" 
-//#include "energy_param3.hpp"
-
-#include "ScoreType.hpp"
-
-
-using namespace std;
-using namespace ProbCons;
-
-namespace MXSCARNA {
-class McCaskill {
-    char *seq;
-    int  *numSeq;
-    int  n_seq;
-    static energy_param  energyParam;
-
-    Trimat<float> a, q1, ab, am, am1, p;
-    TriVertMat<float> q1v, abv, amv, am1v, pv;
-    Trimat<int> typeMat;
-    
-    void printExpEnergy();
-    void initParameter();
-    void Inside();
-    void Outside();
-    void convertProbability();
-
-    inline float expHairpinEnergy(const int type, const int l, const int i, const int j);
-    inline float expLoopEnergy(int u1, int u2, int type, int type2, 
-                        int si1, int sj1, int sp1, int sq1);
-    
-    inline float compQb(int i, int j, int tmpType);
-    inline float compQm1(int i, int j, int tmpType);
-    inline float compQm(int i, int j);
-    inline float compQ1(int i, int j, int tmpType);
-    inline float compQ(int i, int j);
-    inline float compP(int h, int l, int tmpType);
-    inline float compPm(int i, int l);
-    inline float compPm1(int i, int l);
-    inline float beginStemScore(const int i, const int j) const;
-    inline float endStemScore(const int i, const int j) const;
-    
-    static const float GASCONST;
-    static const float T;
-    static const int    MAXLOOP;
-    static const int    TETRA_ENTH37;
-    static const int    NBPAIRS;
-    static const int    SCALE;
-    static const int    TURN;
-    static float *exphairpin;
-    static float expninio[5][32];
-    static float expdangle5[6][4];
-    static float expdangle3[6][4];
-    static float expinternalLoop[31];
-    static float expbulge[31];
-    static char   exptriLoop[2][6];
-    static float exptriLoopEnergy[2];
-    static char   exptetraLoop[30][7];
-    static float exptetraLoopEnergy[30];
-    static float expStack[6][6];
-    static float expTstackH[6][16];
-    static float expTstackI[6][16];
-    static float expint11[6][6][16];
-    static float expint21[6][6][16][4];
-    static float expint22[6][6][16][16];
-    static float expMLclosing;
-    static float expMLintern[8];
-    static float expTermAU;
-    static float expMLbase[31];
-
- public:
-    
-    McCaskill(int n, const char *mySeq) {
-       seq    = new char[n + 1];
-       numSeq = new int[n + 1];
-       n_seq = 0;
-
-       
-       for(int i = 0; i < n; i++) {
-           if     (mySeq[i] == 'a' || mySeq[i] == 'A') { seq[n_seq] = 'A'; numSeq[n_seq] = Beta::A_CODE; n_seq++; }
-           else if(mySeq[i] == 't' || mySeq[i] == 'T' ||
-                   mySeq[i] == 'u' || mySeq[i] == 'U') { seq[n_seq] = 'U'; numSeq[n_seq] = Beta::U_CODE; n_seq++; }
-           else if(mySeq[i] == 'g' || mySeq[i] == 'G') { seq[n_seq] = 'G'; numSeq[n_seq] = Beta::G_CODE; n_seq++; }
-           else if(mySeq[i] == 'c' || mySeq[i] == 'C') { seq[n_seq] = 'C'; numSeq[n_seq] = Beta::C_CODE; n_seq++; }
-           else if(mySeq[i] == 'n' || mySeq[i] == 'N') { seq[n_seq] = 'N'; numSeq[n_seq] = Beta::N_CODE; n_seq++; } 
-           else if(mySeq[i] == '.' || mySeq[i] == '-') { seq[n_seq] = '-'; numSeq[n_seq] = Beta::GAP_CODE; n_seq++; }
-           else { seq[n_seq] = mySeq[i]; numSeq[n_seq] = Beta::INVALID_CODE; n_seq++; }
-       }
-       seq[n_seq] = '\0'; 
-       a.Allocator(n_seq);
-       q1.Allocator(n_seq);
-       ab.Allocator(n_seq);
-       am.Allocator(n_seq);
-       am1.Allocator(n_seq);
-       p.Allocator(n_seq);
-       q1v.Allocator(n_seq);
-       abv.Allocator(n_seq);
-       amv.Allocator(n_seq);
-       am1v.Allocator(n_seq);
-       pv.Allocator(n_seq);
-       typeMat.Allocator(n_seq);
-
-       if(n_seq > 31) {
-         exphairpin = new float[n_seq + 1];
-       }
-       else {
-         exphairpin = new float[31];
-       }
-
-       for(int i = 0; i < n_seq; i++) {
-           for(int j = i; j < n_seq; j++) {
-               a.ref(i,j)  = q1.ref(i,j) = IMPOSSIBLE;
-               q1v.ref(i,j) = IMPOSSIBLE;
-           }
-       }
-       
-       for(int i = 0; i < n_seq; i++) {
-           a.ref(i,i)   = 0.0; 
-           q1.ref(i,i)  = IMPOSSIBLE;
-           q1v.ref(i,i) = IMPOSSIBLE;
-       }
-
-       for(int i = 0; i < n_seq-1; i++) {
-           a.ref(i,i+1)   = 0.0;
-           q1.ref(i,i+1)  = IMPOSSIBLE;
-           q1v.ref(i,i+1) = IMPOSSIBLE;
-       }
-
-       for(int i = 0; i < n_seq-2; i++) {
-           a.ref(i,i+2)   = 0.0;
-           q1.ref(i,i+2)  = IMPOSSIBLE;
-           q1v.ref(i,i+2) = IMPOSSIBLE;
-       }
-
-       for(int i = 0; i < n_seq-3; i++) {
-           a.ref(i,i+3)   = 0.0;
-           q1.ref(i,i+3)  = IMPOSSIBLE;   
-           q1v.ref(i,i+3) = IMPOSSIBLE;
-           
-       }
-
-       for(int i = 0; i < n_seq; i++) {
-           for(int j = i; j < n_seq; j++) {
-               ab.ref(i,j)  = am.ref(i,j)  = am1.ref(i,j)  = p.ref(i,j)  = IMPOSSIBLE;
-               abv.ref(i,j) = amv.ref(i,j) = am1v.ref(i,j) = pv.ref(i,j) = IMPOSSIBLE;
-           }
-       }
-
-       /* the type of base pair */
-       /* C <-> G : type 1      */
-       /* G <-> C : type 2      */
-       /* G <-> U : type 3      */
-       /* U <-> G : type 5      */
-       /* A <-> U : type 0      */
-       /* U <-> A : type 4      */
-       /* ? <-> ? : type 6      */
-       for(int i = 0; i < n_seq; i++) {
-           for(int j = i; j < n_seq; j++) {
-               typeMat.ref(i,j) = Beta::getReducedPairCode(numSeq[i], numSeq[j]);
-           }
-       }
-
-    }
-
-    /*------------------------------------------------------------------------*/
-    /* dangling ends should never be destabilizing, i.e. expdangle>=1         */
-    /* specific heat needs smooth function (2nd derivative)                   */
-    /* we use a*(sin(x+b)+1)^2, with a=2/(3*sqrt(3)), b=Pi/6-sqrt(3)/2,       */
-    /* in the interval b<x<sqrt(3)/2                                          */
-    float SMOOTH(float X) { 
-      return ((X)/SCALE<-1.2283697)?0:(((X)/SCALE>0.8660254)?(X):
-                                 SCALE*0.38490018*(sin((X)/SCALE-0.34242663)+1)*(sin((X)/SCALE-0.34242663)+1));
-    }
-
-    ~McCaskill() {
-       delete[] seq;
-       delete[] numSeq;
-       delete[] exphairpin;
-    }
-
-    void calcPartitionFunction();
-    void printProbMat();
-
-    inline float getProb(const int i, const int j) const { 
-       // 0 origin : 0..(n-1)
-       return p.ref(i, j);
-    }
-};
-}
-#endif // MCCASKILL_H
diff --git a/binaries/src/mafft/extensions/mxscarna_src/README b/binaries/src/mafft/extensions/mxscarna_src/README
deleted file mode 100644 (file)
index 0578545..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-1.Program name
- MXSCARNA
-
-2.Author
- Yasuo Tabei
-
- Department of Computational Biology,
- Graduate School of Frontier Science,
- The University of Tokyo
- and
- Computational Biology Research Center (CBRC),
- National Institute of Advanced Industrial Science and Technology (AIST)
-
- E-mail: scarna@m.aist.go.jp
-
-3.What is MXSCARNA
- MXSCARNA (Multiplex Stem Candidate Aligner for RNAs) is a tool for
- fast structural multiple alignment of RNA sequences using progressive
- alignment based on pairwise structural alignment algorithm of SCARNA.
-
-4.License
- While its original source code is provided as free software, MXSCARNA
- contains the source codes of ProbCons and Rfold and the energy parameters
- of Vienna RNA package (version 1.5).
- The author thanks Dr. Chuong Do, Dr. Hisanori Kiryu and Dr. Ivo Hofacker,
- the authors of ProbCons, Rfold and Vienna RNA package respectively,
- and Institute for Theoretical Chemistry of the  University of Vienna.
-
- The source code of Rfold is located in ./src/rfold-0.1, which includes
- energy parameters of Vienna RNA package in ./src/rfold-0.1/src/vienna.
- Energy parameters of Vienna RNA package are also included in the source
- code of MXSCARNA (./src/vienna). Please follow ./src/rfold-0.1/readme.txt
- file, which describes the license of Rfold, and
- ./src/rfold-0.1/src/vienna/COPYING file and ./src/vienna/COPYING file,
- which describe the copyright notice of the Vienna RNA package.
- The source code of ProbCons is located in ./src/probconsRNA. Please follow
- ./src/probcons/README.
-
- The original part of MXSCARNA is provided as free software. It is
- distributed in the hope that it will be useful but WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- PARTICULAR PURPOSE.
-
- Permission is granted for research, educational, and commercial use
- and modification so long as
- 1) the package and any derived works are not redistributed for any fee,
-    other than media costs,
- 2) proper credit is given to
-    the authors of MXSCARNA, ProbCons, Rfold and Vienna RNA package,
-    the Univeristy of Tokyo,
-    Computational Biology Research Center (CBRC), AIST
-    and Institute for Theoretical Chemistry of the  University of Vienna.
-
- If you want to include this software in a commercial product, please
- contact the author.
-
-5.Citation
- Yasuo Tabei, Hisanori Kiryu, Taishin Kin, Kiyoshi Asai:
- "A fast structural multiple alignment method for long RNA sequences,"
- BMC bioinformatics, to appear.
-
-6.References
-
- Do, C.B., Mahabhashyam, M.S.P., Brudno, M., and Batzoglou, S. 2005.
- PROBCONS: Probabilistic Consistency-based Multiple Sequence Alignment.
- Genome Research 15: 330-340.
-
- Hisanori Kiryu, Taishin Kin, and Kiyoshi Asai
- Rfold: An exact algorithm for computing local base pairing probabilities
- Bioinformatics, Advance Access published on December 4, 2007;
- doi:10.1093/bioinformatics/btm591
-
- Ivo L. Hofacker
- Vienna RNA secondary structure server
- Nucleic Acids Res., Jul 2003; 31: 3429 - 3431.
-
- Yasuo Tabei, Koji Tsuda, Taishin Kin, and Kiyoshi Asai
- SCARNA: fast and accurate structural alignment of RNA sequences by matching fixed-length stem fragments
- Bioinformatics 2006 22(14):1723-1729.
-
-7.Install
- The program was tested using gcc 3.3.3 on linux machines and gcc 3.4 on
- cygwin Some gcc specific features are currently used.
-
- The command to compile this software is as follows:
-
- make
- cd program
-
-8.Usage
-
- ./mxscarna [options] seqfile
-
- seqfile:
-   sequence file is multi fasta format.
-
- options:
-   -clustalw
-      use CLUSTALW output format instead of MFA
-
-   -stockholm
-      use STOCKHOLM output format instead of MFA
-
-   -mxscarna
-      use original output format instead of MFA
-
-   -l <SCSLENGTH>
-      the length of stem candidates (default:2)
-
-   -b <BASEPROBTHRESHOLD>
-      the threshold of base-pairing probability (default:0.01)
-
-   -g <BASEPAIRSCORECONT>
-      the control parameter of the prediction of base-pairs, (default:6)
-
-   -rfold
-      use Rfold instead of global McCaskill algorithm to calcurate base
-      paring probality matrices, (default: off)
-
-   -w <BANDWIDTH>
-      the control parameter of the distance of stem candidates, (default:500)
-
-9.Example
-   ./mxscarna -mxscarna ../sample/trna.mfa
-
-10.Version History
-1. 1/16/2008 (Yasuo Tabei)
--- MXSCARNA ver 2.0 release
-  - Rfold was included.
\ No newline at end of file
diff --git a/binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp b/binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp
deleted file mode 100644 (file)
index 46aa698..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// ScoreType.h
-//
-// Routines for doing math operations in PROBCONS.
-/////////////////////////////////////////////////////////////////
-
-#ifndef SCORETYPE_H
-#define SCORETYPE_H
-
-#include <cmath>
-#include <algorithm>
-#include <cfloat>
-#include <cassert>
-
-typedef float ScoreType;
-
-const float LOG_ZERO = -2e20;
-const float LOG_ONE = 0.0;
-
-/////////////////////////////////////////////////////////////////
-// LOG()
-//
-// Compute the logarithm of x.
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOG (ScoreType x){
-  return log (x);
-}
-
-/////////////////////////////////////////////////////////////////
-// EXP()
-//
-// Computes exp(x).
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType EXP (ScoreType x){
-  //return exp(x);
-  if (x > -2){
-    if (x > -0.5){
-      if (x > 0)
-       return exp(x);
-      return (((0.03254409303190190000*x + 0.16280432765779600000)*x + 0.49929760485974900000)*x + 0.99995149601363700000)*x + 0.99999925508501600000;
-    }
-    if (x > -1)
-      return (((0.01973899026052090000*x + 0.13822379685007000000)*x + 0.48056651562365000000)*x + 0.99326940370383500000)*x + 0.99906756856399500000;
-    return (((0.00940528203591384000*x + 0.09414963667859410000)*x + 0.40825793595877300000)*x + 0.93933625499130400000)*x + 0.98369508190545300000;
-  }
-  if (x > -8){
-    if (x > -4)
-      return (((0.00217245711583303000*x + 0.03484829428350620000)*x + 0.22118199801337800000)*x + 0.67049462206469500000)*x + 0.83556950223398500000;
-    return (((0.00012398771025456900*x + 0.00349155785951272000)*x + 0.03727721426017900000)*x + 0.17974997741536900000)*x + 0.33249299994217400000;
-  }
-  if (x > -16)
-    return (((0.00000051741713416603*x + 0.00002721456879608080)*x + 0.00053418601865636800)*x + 0.00464101989351936000)*x + 0.01507447981459420000;
-  return 0;
-}
-
-/*
-/////////////////////////////////////////////////////////////////
-// LOOKUP()
-//
-// Computes log (exp (x) + 1), for 0 <= x <= 7.5.
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOOKUP (ScoreType x){
-  //return log (exp(x) + 1);
-  if (x < 2){
-    if (x < 0.5){
-      if (x < 0)
-       return log (exp(x) + 1);
-      return (((-0.00486373205785640000*x - 0.00020245408813934800)*x + 0.12504222666029800000)*x + 0.49999685320563000000)*x + 0.69314723138948900000;
-    }
-    if (x < 1)
-      return (((-0.00278634205460548000*x - 0.00458097251248546000)*x + 0.12865849880472500000)*x + 0.49862228499205200000)*x + 0.69334810088688000000;
-    return (((0.00059633755154209200*x - 0.01918996666063320000)*x + 0.15288232492093800000)*x + 0.48039958825756900000)*x + 0.69857578503189200000;
-  }
-  if (x < 8){
-    if (x < 4)
-      return (((0.00135958539181047000*x - 0.02329807659316430000)*x + 0.15885799609532100000)*x + 0.48167498563270800000)*x + 0.69276185058669200000;
-    return (((0.00011992394456683500*x - 0.00338464503306568000)*x + 0.03622746366545470000)*x + 0.82481250248383700000)*x + 0.32507892994863100000;
-  }
-  if (x < 16)
-    return (((0.00000051726300753785*x - 0.00002720671238876090)*x + 0.00053403733818413500)*x + 0.99536021775747900000)*x + 0.01507065715532010000;
-  return x;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP_SLOW()
-//
-// Computes log (exp (x) + 1).
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOOKUP_SLOW (ScoreType x){
-  return log (exp (x) + 1);
-}
-
-/////////////////////////////////////////////////////////////////
-// MAX()
-//
-// Compute max of three numbers
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType MAX (ScoreType x, ScoreType y, ScoreType z){
-  if (x >= y){
-    if (x >= z)
-      return x;
-    return z;
-  }
-  if (y >= z)
-    return y;
-  return z;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS (ScoreType &x, ScoreType y){
-  if (x < y)
-    x = (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x;
-  else
-    x = (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS_SLOW()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS_SLOW (ScoreType &x, ScoreType y){
-  if (x < y)
-    x = (x <= LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x;
-  else
-    x = (y <= LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add two log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOG_ADD (ScoreType x, ScoreType y){
-  if (x < y) return (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x;
-  return (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y;
-}
-*/
-
-/*
-/////////////////////////////////////////////////////////////////
-// LOG()
-//
-// Compute the logarithm of x.
-/////////////////////////////////////////////////////////////////
-
-inline float LOG (float x){
-  return log (x);
-}
-
-/////////////////////////////////////////////////////////////////
-// EXP()
-//
-// Computes exp(x), fr -4.6 <= x <= 0.
-/////////////////////////////////////////////////////////////////
-
-inline float EXP (float x){
-  assert (x <= 0.00f);
-  if (x < EXP_UNDERFLOW_THRESHOLD) return 0.0f;
-  return (((0.006349841068584 * x + 0.080775412572352) * x + 0.397982026296272) * x + 0.95279335963787f) * x + 0.995176455837312f;
-  //return (((0.00681169825657f * x + 0.08386267698832f) * x + 0.40413983195844f) * x + 0.95656674979767f) * x + 0.99556744049130f;
-}
-*/
-
-const float EXP_UNDERFLOW_THRESHOLD = -4.6;
-const float LOG_UNDERFLOW_THRESHOLD = 7.5;
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP()
-//
-// Computes log (exp (x) + 1), for 0 <= x <= 7.5.
-/////////////////////////////////////////////////////////////////
-
-inline float LOOKUP (float x){
-  assert (x >= 0.00f);
-  assert (x <= LOG_UNDERFLOW_THRESHOLD);
-  //return ((-0.00653779113685f * x + 0.09537236626558f) * x + 0.55317574459331f) * x + 0.68672959851568f;
-  if (x <= 1.00f) return ((-0.009350833524763f * x + 0.130659527668286f) * x + 0.498799810682272f) * x + 0.693203116424741f;
-  if (x <= 2.50f) return ((-0.014532321752540f * x + 0.139942324101744f) * x + 0.495635523139337f) * x + 0.692140569840976f;
-  if (x <= 4.50f) return ((-0.004605031767994f * x + 0.063427417320019f) * x + 0.695956496475118f) * x + 0.514272634594009f;
-  assert (x <= LOG_UNDERFLOW_THRESHOLD);
-  return ((-0.000458661602210f * x + 0.009695946122598f) * x + 0.930734667215156f) * x + 0.168037164329057f;
-
-  //return (((0.00089738532761f * x - 0.01859488697982f) * x + 0.14415772028626f) * x + 0.49515490689159f) * x + 0.69311928966454f;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP_SLOW()
-//
-// Computes log (exp (x) + 1).
-/////////////////////////////////////////////////////////////////
-
-inline float LOOKUP_SLOW (float x){
-  return log (exp (x) + 1);
-}
-
-/////////////////////////////////////////////////////////////////
-// MAX()
-//
-// Compute max of three numbers
-/////////////////////////////////////////////////////////////////
-
-inline float MAX (float x, float y, float z){
-  if (x >= y){
-    if (x >= z)
-      return x;
-    return z;
-  }
-  if (y >= z)
-    return y;
-  return z;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS (float &x, float y){
-  if (x < y)
-    x = (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x;
-  else
-    x = (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS_SLOW()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS_SLOW (float &x, float y){
-  if (x < y)
-    x = (x == LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x;
-  else
-    x = (y == LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add two log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x, float y){
-  if (x < y) return (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x;
-  return (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y;
-}
-
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add three log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3){
-  return LOG_ADD (x1, LOG_ADD (x2, x3));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add four log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, x4)));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add five log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, x5))));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add siz log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, x6)))));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add seven log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6, float x7){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, LOG_ADD (x6, x7))))));
-}
-
-/////////////////////////////////////////////////////////////////
-// ChooseBestOfThree()
-//
-// Store the largest of three values x1, x2, and x3 in *x.  Also
-// if xi is the largest value, then store bi in *b.
-/////////////////////////////////////////////////////////////////
-
-inline void ChooseBestOfThree (float x1, float x2, float x3, char b1, char b2, char b3, float *x, char *b){
-  if (x1 >= x2){
-    if (x1 >= x3){
-      *x = x1;
-      *b = b1;
-      return;
-    }
-    *x = x3;
-    *b = b3;
-    return;
-  }
-  if (x2 >= x3){
-    *x = x2;
-    *b = b2;
-    return;
-  }
-  *x = x3;
-  *b = b3;
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp b/binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp
deleted file mode 100644 (file)
index e1678d6..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/////////////////////////////////////////////////////////////
-// StemCandidate.hpp
-// Profile Stem Candidate calcurated by profile base pairing
-// probability matrix 
-////////////////////////////////////////////////////////////
-
-#ifndef __STEMCANDIDATE_HPP__
-#define __STEMCANDIDATE_HPP__
-
-#include <string>
-#include <vector>
-
-using namespace std;
-
-namespace MXSCARNA {
-class StemCandidate {
-private:
-    int numSeq;                      /* the number of sequences in the profile */
-    int length;                      /* length of profile stem candidate of fixed length */
-    int position;                    /* 5' start position of SC in profile */
-    int distance;
-    std::vector<std::string> substr; /* profile base string of SC */
-    std::vector<std::string> rvstr;  /* profile base string of stem partner of SC */
-    int rvposition;                  /* 3' end position of stem partner of SC */
-    int rvscnumber;                  /* SC number of stem partner */
-    int contPos;                            /* previous stem that corresponds continuous stem and has position -1. */
-    int beforePos;                  /* most recent stem that doesn't overlap to SC and has position -len. */
-    float score;                     /* score of the sum of base pairing probability matrix */
-    std::vector<float> baseScore;
-    float stacking;                  /* the mean of stacking energy */
-    float stemStacking;              /* the mean of 1-continuous stacking energy */
-
-public:
-    StemCandidate() : numSeq(0), length(0), position(0), distance(0), 
-                      rvposition(0), rvscnumber(0), contPos(-1), beforePos(0),
-                      score(0), stacking(0), stemStacking(0) {}
-    StemCandidate(int numSeq, int length) : numSeq(numSeq), length(length), 
-                                           substr(numSeq), rvstr(numSeq), 
-                                           contPos(-1) { }
-
-    void SetNumSeq(int num) { numSeq = num; }
-    void SetLength(int len) { length = len; }
-    void SetNumSubstr(int num) {
-        substr.resize(num);
-       for(int i = 0; i < num; i++) {
-           string &tmpStr = substr[i];
-           tmpStr = "";
-           substr[i] = tmpStr;
-       }
-    }
-    void SetNumRvstr(int num) {
-        rvstr.resize(num);
-       
-       for(int i = 0; i < num; i++) {
-           string &tmpStr = rvstr[i];
-           tmpStr = "";
-           rvstr[i] = tmpStr;
-       }
-    }
-    void SetPosition(int pos) { position = pos; }
-
-    void AddSubstr(int num, char word) {
-       std::string &tmpStr = substr[num];
-       tmpStr += word;
-       substr[num] = tmpStr;
-    }
-
-    void AddRvstr(int num, char word) {
-       std::string &tmpStr = rvstr[num];
-       tmpStr += word;
-       rvstr[num] = tmpStr;
-    }
-
-    void AddBaseScore(float score) {
-        baseScore.push_back(score);
-    }
-
-    void SetRvposition(int pos) { rvposition = pos; }
-    void SetRvscnumber(int num) { rvscnumber = num; }
-    void SetContPos(int pos) { contPos = pos; }
-    void SetBeforePos(int pos) { beforePos = pos; }
-    void SetDistance(int d) { distance = d; }
-    void SetScore(float s) { score = s; }
-    void AddScore(float s) { score += s; }
-    void SetStacking(float s) { stacking = s; }
-    void AddStacking(float s) { stacking += s; }
-    void SetStemStacking(float s) { stemStacking = s; }
-    int  GetNumSeq() const { return numSeq; }
-    int  GetLength() const { return length; }
-    int  GetPosition() const { return position; }
-    
-    string GetSubstr(int num) const { 
-       const std::string &tmpStr = substr[num];
-       return tmpStr;
-    }
-    string GetRvstr(int num) const {
-       const std::string &tmpStr = rvstr[num];
-       return tmpStr;
-    }
-    float GetBaseScore(int i) const  {
-        return baseScore[i];
-    }
-    int GetRvposition() const {
-       return rvposition;
-    }
-    int GetRvscnumber() const {
-       return rvscnumber;
-    }
-    int GetContPos() const {
-       return contPos;
-    }
-    int GetBeforePos() const {
-       return beforePos;
-    }
-    int GetDistance() const {
-        return distance;
-    }
-    float GetScore() const {
-       return score;
-    }
-    float GetStacking() const  {
-       return stacking;
-    }
-    float GetStemStacking() const {
-       return stemStacking;
-    }
-};
-}
-#endif // __STEMCANDIDATE_HPP__
diff --git a/binaries/src/mafft/extensions/mxscarna_src/Util.hpp b/binaries/src/mafft/extensions/mxscarna_src/Util.hpp
deleted file mode 100644 (file)
index eab7667..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef UTIL_H
-#define UTIL_H
-
-#include <algorithm>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <cstdarg>
-#include <cstring>
-#include <cmath>
-#include <cctype>
-#include <climits>
-#include <cfloat>
-#include <ctime>
-#include <fstream>
-#include <functional>
-#include <iomanip>
-#include <iostream>
-#include <iterator>
-#include <list>
-#include <map>
-#include <numeric>
-#include <string>
-#include <sstream>
-#include <stack>
-#include <vector>
-#include <fcntl.h>
-#include <unistd.h>
-//#include <pthread.h> // mingw de error, by katoh
-#include <signal.h>
-
-namespace ProbCons {
-    
-const double IMPOSSIBLE = -FLT_MAX + 1000;
-const double IMPOSSIBLEDBL = -DBL_MAX + 10000;
-
-namespace MXSCARNA {
-template <typename T>
-inline bool
-IsPossible(const T& v) { 
-    return (v > (IMPOSSIBLE + 1.0e-5));
-}
-
-template <typename T>
-inline T
-logSum(const T& a, const T& b)
-{
-    if (a >= b) {
-       return a + log(1.0 + exp(b - a));
-    } else {
-       return b + log(1.0 + exp(a - b));
-    }
-}
-
-template <typename T>
-inline T
-logSub(const T&a, const T& b)
-{
-  if(a > b) {
-    return log(exp(a) - exp(b));
-  }
-  else {
-    return log(exp(a) - exp(b));
-  }
-}
-
-template <typename T>
-inline T
-logSum(const T& a, const T& b, const T& c)
-{
-    if (a >= b) {
-       if( a >= c ) {
-           return a + log(1.0 + (exp(b - a) + exp(c - a)));
-       }
-       else {
-           if( b >= c) {
-               return b + log(exp(a - b) + 1.0 + exp(c - b));
-           }
-       }
-    }
-    return c + log(exp(a - c) + exp(b - c) + 1.0);
-}
-
-}
-
-template <typename T>
-inline T
-logSumExp(const T& x, const T& y)
-{
-    if(x == y) return x + 0.69314718055;
-    double vmin = std::min(x, y);
-    double vmax = std::max(x, y);
-    
-    if (vmax > vmin + 50) {
-       return vmax;
-    }
-    else {
-       return vmax + std::log (std::exp (vmin - vmax) + 1.0);
-    }
-}
-}
-#endif /* UTIL_H */
diff --git a/binaries/src/mafft/extensions/mxscarna_src/config.h b/binaries/src/mafft/extensions/mxscarna_src/config.h
deleted file mode 100644 (file)
index 51c27b8..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/* config.h.  Generated by configure.  */
-/* config.h.in.  Generated from configure.in by autoheader.  */
-
-/* Define to 1 if you have the `erand48' function. */
-#define HAVE_ERAND48 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strchr' function. */
-#define HAVE_STRCHR 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strstr' function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Name of package */
-#define PACKAGE "ViennaRNA"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "rna@tbi.univie.ac.at"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "ViennaRNA"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "ViennaRNA 1.6.1"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "ViennaRNA"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.6.1"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* only for gcc */
-#define UNUSED __attribute__ ((unused))
-
-/* Version number of package */
-#define VERSION "1.6.1"
-
-/* Define if using the dmalloc debugging malloc package */
-/* #undef WITH_DMALLOC */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-/* #undef size_t */
diff --git a/binaries/src/mafft/extensions/mxscarna_src/nrutil.h b/binaries/src/mafft/extensions/mxscarna_src/nrutil.h
deleted file mode 100644 (file)
index 3a33874..0000000
+++ /dev/null
@@ -1,991 +0,0 @@
-/*
-  McCaskill's Algorithm -- The algorithm calculates a base paring probability matrix from the input of one sequence.
-
-  $Id: nrutil.h,v 1.0 2005/10/20 14:22 $;
-
-  Copyright (C) 2005 Yasuo Tabei <tabei@cb.k.u-tokyo.ac.jp>
-
-  This is free software with ABSOLUTELY NO WARRANTY.
-
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-*/
-
-#ifndef _NR_UTIL_H_
-#define _NR_UTIL_H_
-#include <string>
-#include <cmath>
-#include <complex>
-#include <iostream>
-#include <cstdlib> // by katoh
-
-using namespace std;
-
-typedef double DP;
-
-template<class T>
-inline const T SQR(const T a) {return a*a;}
-
-template<class T>
-inline const T MAX(const T &a, const T &b)
-{return b > a ? (b) : (a);}
-
-inline float MAX(const double &a, const float &b)
-{return b > a ? (b) : float(a);}
-
-inline float MAX(const float &a, const double &b)
-{return b > a ? float(b) : (a);}
-
-template<class T>
-inline const T MIN(const T &a, const T &b)
-{return b < a ? (b) : (a);}
-
-inline float MIN(const double &a, const float &b)
-{return b < a ? (b) : float(a);}
-
-inline float MIN(const float &a, const double &b)
-{return b < a ? float(b) : (a);}
-
-template<class T>
-inline const T SIGN(const T &a, const T &b)
-{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);}
-
-inline float SIGN(const float &a, const double &b)
-{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);}
-
-inline float SIGN(const double &a, const float &b)
-{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);}
-
-template<class T>
-inline void SWAP(T &a, T &b)
-{T dum=a; a=b; b=dum;}
-namespace NR {
-    inline void nrerror(const string error_text)
-// Numerical Recipes standard error handler
-       {
-           cerr << "Numerical Recipes run-time error..." << endl;
-           cerr << error_text << endl;
-           cerr << "...now exiting to system..." << endl;
-           exit(1);
-       }
-}
-
-template <class T>
-class NRVec {
- private:
-    int nn; // size of array. upper index is nn-1
-    T *v;
- public:
-    NRVec();
-    explicit NRVec(int n);    // Zero-based array
-    NRVec(const T &a, int n); //initialize to constant value
-    NRVec(const T *a, int n); // Initialize to array
-    NRVec(const NRVec &rhs);  // Copy constructor
-    NRVec & operator=(const NRVec &rhs); //assignment
-    NRVec & operator=(const T &a); //assign a to every element
-    inline T & operator[](const int i); //i¡Çth element
-    inline const T & operator[](const int i) const;
-    void Allocator(int i);
-    inline int size() const;
-    ~NRVec();
-};
-
-template <class T>
-NRVec<T>::NRVec() : nn(0), v(0) {}
-
-template <class T>
-NRVec<T>::NRVec(int n) : nn(n), v(new T[n]) {}
-
-template <class T>
-NRVec<T>::NRVec(const T& a, int n) : nn(n), v(new T[n])
-{
-    for(int i=0; i<n; i++)
-       v[i] = a;
-}
-
-template <class T>
-NRVec<T>::NRVec(const T *a, int n) : nn(n), v(new T[n])
-{
-for(int i=0; i<n; i++)
-    v[i] = *a++;
-}
-
-template <class T>
-void NRVec<T>::Allocator(int n = 0)
-{
-   v = new T[n];
-}
-
-template <class T>
-NRVec<T>::NRVec(const NRVec<T> &rhs) : nn(rhs.nn), v(new T[nn])
-{
-    for(int i=0; i<nn; i++)
-       v[i] = rhs[i];
-}
-
-template <class T>
-NRVec<T> & NRVec<T>::operator=(const NRVec<T> &rhs)
-// postcondition: normal assignment via copying has been performed;
-// if vector and rhs were different sizes, vector
-// has been resized to match the size of rhs
-{
-    if (this != &rhs)
-{
-    if (nn != rhs.nn) {
-       if (v != 0) delete [] (v);
-       nn=rhs.nn;
-       v= new T[nn];
-    }
-    for (int i=0; i<nn; i++)
-       v[i]=rhs[i];
-}
-    return *this;
-}
-
-template <class T>
-NRVec<T> & NRVec<T>::operator=(const T &a) //assign a to every element
-{
-    for (int i=0; i<nn; i++)
-       v[i]=a;
-    return *this;
-}
-
-template <class T>
-inline T & NRVec<T>::operator[](const int i) //subscripting
-{
-    return v[i];
-}
-
-template <class T>
-inline const T & NRVec<T>::operator[](const int i) const //subscripting
-{
-    return v[i];
-}
-
-template <class T>
-inline int NRVec<T>::size() const
-{
-    return nn;
-}
-
-template <class T>
-NRVec<T>::~NRVec()
-{
-    if (v != 0)
-       delete[] (v);
-}
-
-template <class T>
-class NRMat {
- private:
-    int nn;
-    int mm;
-    T **v;
- public:
-    NRMat();
-    NRMat(int n, int m); // Zero-based array
-    NRMat(const T &a, int n, int m); //Initialize to constant
-    NRMat(const T *a, int n, int m); // Initialize to array
-    NRMat(const NRMat &rhs); // Copy constructor
-    void Allocator(int n, int m);
-    void Allocator(const T &a, int n, int m);
-    void Allocator(const T *a, int n, int m);
-    NRMat & operator=(const NRMat &rhs); //assignment
-    NRMat & operator=(const T &a); //assign a to every element
-    inline T* operator[](const int i); //subscripting: pointer to row i
-    inline const T* operator[](const int i) const;
-    inline T &  ref(const int i, const int j);
-    inline const T ref(const int i, const int j) const;
-    inline int nrows() const;
-    inline int ncols() const;
-    ~NRMat();
-};
-
-template <class T>
-NRMat<T>::NRMat() : nn(0), mm(0), v(0) {}
-
-template <class T>
-NRMat<T>::NRMat(int n, int m) : nn(n), mm(m), v(new T*[n])
-{
-    v[0] = new T[m*n];
-    for (int i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-}
-
-template <class T>
-NRMat<T>::NRMat(const T &a, int n, int m) : nn(n), mm(m), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[m*n];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-    for (i=0; i< n; i++)
-       for (j=0; j<m; j++)
-           v[i][j] = a;
-}
-
-template <class T>
-NRMat<T>::NRMat(const T *a, int n, int m) : nn(n), mm(m), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[m*n];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-    for (i=0; i< n; i++)
-       for (j=0; j<m; j++)
-           v[i][j] = *a++;
-}
-
-template <class T> 
-void NRMat<T>::Allocator(int n, int m)
-{
-    if( v != 0 ) {
-       delete[] (v[0]); delete (v);
-    }
-
-    nn = n; mm = m; v = new T*[n];
-    
-    v[0] = new T[m*n];
-    for (int i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-}
-
-template <class T>
-void NRMat<T>::Allocator(const T &a, int n, int m)
-{
-    if( v != 0 ) {
-       delete[] (v[0]); delete (v);
-    }
-
-    int i,j;
-
-    nn = n; mm = m; v = new T*[n];
-
-    v[0] = new T[m*n];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-    for (i=0; i< n; i++)
-       for (j=0; j<m; j++)
-           v[i][j] = a;
-}
-
-template <class T>
-void NRMat<T>::Allocator(const T *a, int n, int m)
-{
-    if( v != 0 ) {
-       delete[] (v[0]); delete (v);
-    }
-
-    int i,j;
-
-    nn = n; mm = m; v = new T*[n];
-    
-    v[0] = new T[m*n];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + m;
-    for (i=0; i< n; i++)
-       for (j=0; j<m; j++)
-           v[i][j] = *a++;
-}
-
-template <class T>
-NRMat<T>::NRMat(const NRMat &rhs) : nn(rhs.nn), mm(rhs.mm), v(new T*[nn])
-{
-    int i,j;
-    v[0] = new T[mm*nn];
-    for (i=1; i< nn; i++)
-       v[i] = v[i-1] + mm;
-    for (i=0; i< nn; i++)
-       for (j=0; j<mm; j++)
-           v[i][j] = rhs[i][j];
-}
-template <class T>
-NRMat<T> & NRMat<T>::operator=(const NRMat<T> &rhs)
-// postcondition: normal assignment via copying has been performed;
-// if matrix and rhs were different sizes, matrix
-// has been resized to match the size of rhs
-{
-    if (this != &rhs) {
-       int i,j;
-       if (nn != rhs.nn || mm != rhs.mm) {
-           if (v != 0) {
-               delete[] (v[0]);
-               delete[] (v);
-           }
-           nn=rhs.nn;
-           mm=rhs.mm;
-           v = new T*[nn];
-           v[0] = new T[mm*nn];
-       }
-       for (i=1; i< nn; i++)
-           v[i] = v[i-1] + mm;
-       for (i=0; i< nn; i++)
-           for (j=0; j<mm; j++)
-               v[i][j] = rhs[i][j];
-    }
-    return *this;
-}
-
-template <class T>
-NRMat<T> & NRMat<T>::operator=(const T &a) //assign a to every element
-{
-    for (int i=0; i< nn; i++)
-       for (int j=0; j<mm; j++)
-           v[i][j] = a;
-    return *this;
-}
-
-template <class T>
-inline T* NRMat<T>::operator[](const int i) //subscripting: pointer to row i
-{
-    return v[i];
-}
-
-template <class T>
-inline const T* NRMat<T>::operator[](const int i) const
-{
-    return v[i];
-}
-
-template <class T>
-inline T &  NRMat<T>::ref(const int i, const int j)
-{
-    return v[i][j];
-}
-
-template <class T>
-inline const T NRMat<T>::ref(const int i, const int j) const
-{
-    return v[i][j];
-}
-
-template <class T>
-inline int NRMat<T>::nrows() const
-{
-    return nn;
-}
-
-template <class T>
-inline int NRMat<T>::ncols() const
-{
-    return mm;
-}
-
-template <class T>
-NRMat<T>::~NRMat()
-{
-    if (v != 0) {
-       delete[] (v[0]);
-       delete[] (v);
-    }
-}
-
-template <class T>
-class NRMat3d {
- private:
-    int nn;
-    int mm;
-    int kk;
-    T ***v;
- public:
-    NRMat3d();
-    NRMat3d(int n, int m, int k);
-    inline void Allocator(int n, int m, int k);
-    inline T** operator[](const int i); //subscripting: pointer to row i
-    inline const T* const * operator[](const int i) const;
-    inline int dim1() const;
-    inline int dim2() const;
-    inline int dim3() const;
-    ~NRMat3d();
-};
-
-template <class T>
-NRMat3d<T>::NRMat3d(): nn(0), mm(0), kk(0), v(0) {}
-template <class T>
-NRMat3d<T>::NRMat3d(int n, int m, int k) : nn(n), mm(m), kk(k), v(new T**[n])
-{
-    int i,j;
-    v[0] = new T*[n*m];
-    v[0][0] = new T[n*m*k];
-    for(j=1; j<m; j++)
-       v[0][j] = v[0][j-1] + k;
-    for(i=1; i<n; i++) {
-       v[i] = v[i-1] + m;
-       v[i][0] = v[i-1][0] + m*k;
-       for(j=1; j<m; j++)
-           v[i][j] = v[i][j-1] + k;
-    }
-}
-
-template <class T>
-inline void NRMat3d<T>::Allocator(int n, int m, int k) 
-{
-    int i,j;
-    v[0] = new T*[n*m];
-    v[0][0] = new T[n*m*k];
-    for(j=1; j<m; j++)
-       v[0][j] = v[0][j-1] + k;
-    for(i=1; i<n; i++) {
-       v[i] = v[i-1] + m;
-       v[i][0] = v[i-1][0] + m*k;
-       for(j=1; j<m; j++)
-           v[i][j] = v[i][j-1] + k;
-    }
-}
-
-template <class T>
-inline T** NRMat3d<T>::operator[](const int i) //subscripting: pointer to row i
-{
-    return v[i];
-}
-
-template <class T>
-inline const T* const * NRMat3d<T>::operator[](const int i) const
-{
-    return v[i];
-}
-
-template <class T>
-inline int NRMat3d<T>::dim1() const
-{
-    return nn;
-}
-
-template <class T>
-inline int NRMat3d<T>::dim2() const
-{
-    return mm;
-}
-
-template <class T>
-inline int NRMat3d<T>::dim3() const
-{
-    return kk;
-}
-
-template <class T>
-NRMat3d<T>::~NRMat3d()
-{
-    if (v != 0) {
-       delete[] (v[0][0]);
-       delete[] (v[0]);
-       delete[] (v);
-    }
-}
-
-//The next 3 classes are used in artihmetic coding, Huffman coding, and
-//wavelet transforms respectively. This is as good a place as any to put them!
-class arithcode {
- private:
-    NRVec<unsigned long> *ilob_p,*iupb_p,*ncumfq_p;
- public:
-    NRVec<unsigned long> &ilob,&iupb,&ncumfq;
-    unsigned long jdif,nc,minint,nch,ncum,nrad;
-    arithcode(unsigned long n1, unsigned long n2, unsigned long n3)
-       : ilob_p(new NRVec<unsigned long>(n1)),
-       iupb_p(new NRVec<unsigned long>(n2)),
-       ncumfq_p(new NRVec<unsigned long>(n3)),
-       ilob(*ilob_p),iupb(*iupb_p),ncumfq(*ncumfq_p) {}
-    ~arithcode() {
-       if (ilob_p != 0) delete ilob_p;
-       if (iupb_p != 0) delete iupb_p;
-       if (ncumfq_p != 0) delete ncumfq_p;
-    }
-};
-
-class huffcode {
- private:
-    NRVec<unsigned long> *icod_p,*ncod_p,*left_p,*right_p;
- public:
-    NRVec<unsigned long> &icod,&ncod,&left,&right;
-    int nch,nodemax;
-    huffcode(unsigned long n1, unsigned long n2, unsigned long n3,
-            unsigned long n4) :
-       icod_p(new NRVec<unsigned long>(n1)),
-       ncod_p(new NRVec<unsigned long>(n2)),
-       left_p(new NRVec<unsigned long>(n3)),
-       right_p(new NRVec<unsigned long>(n4)),
-       icod(*icod_p),ncod(*ncod_p),left(*left_p),right(*right_p) {}
-    ~huffcode() {
-       if (icod_p != 0) delete icod_p;
-       if (ncod_p != 0) delete ncod_p;
-       if (left_p != 0) delete left_p;
-       if (right_p != 0) delete right_p;
-    }
-};
-
-class wavefilt {
- private:
-    NRVec<DP> *cc_p,*cr_p;
- public:
-    int ncof,ioff,joff;
-    NRVec<DP> &cc,&cr;
-    wavefilt() : cc(*cc_p),cr(*cr_p) {}
-    wavefilt(const DP *a, const int n) : //initialize to array
-       cc_p(new NRVec<DP>(n)),cr_p(new NRVec<DP>(n)),
-       ncof(n),ioff(-(n >> 1)),joff(-(n >> 1)),cc(*cc_p),cr(*cr_p) {
-       int i;
-       for (i=0; i<n; i++)
-           cc[i] = *a++;
-       DP sig = -1.0;
-       for (i=0; i<n; i++) {
-           cr[n-1-i]=sig*cc[i];
-           sig = -sig;
-       }
-    }
-    ~wavefilt() {
-       if (cc_p != 0) delete cc_p;
-       if (cr_p != 0) delete cr_p;
-    }
-};
-
-
-/* Triangle Matrix Class
-   ---------------------------------------------------------
-   |v[0][0]|v[0][1]|      |            |         |v[0][n-1]|
-   |-------|-------|------|------------|---------|---------|
-   |v[1][1]|v[1][2]|      |            |v[1][n-2]|         |
-   |-------|-------|------|------------|---------|---------|
-   |       |       |      |            |         |         |
-   |-------|-------|------|------------|---------|---------|
-   |       |                                               |     
-   |       |                                               |
-   |       |                                               |
-   |-------|-----------------------------------------------|
-   |       |                                               |
-   |-------|-----------------------------------------------|
-   |v[n-2][0]|v[n-2][1]|                                   |                         
-   |-------|-----------------------------------------------|
-   |v[n-1][0]|                                             |  
-   |-------------------------------------------------------|
- */
-template <class T>
-class Trimat {
- private:
-    int nn;
-    T **v;
-    inline T* operator[](const int i); //subscripting: pointer to row i
-    inline const T* operator[](const int i) const;
- public:
-    Trimat();
-    Trimat(int n); // Zero-based array
-    Trimat(const T &a, int n); //Initialize to constant
-    Trimat(const T *a, int n); // Initialize to array
-    Trimat(const Trimat &rhs); // Copy constructor
-    void Allocator(int n);
-    void Allocator(const T &a, int n);
-    void Allocator(const T *a, int n);
-    Trimat & operator=(const Trimat &rhs); //assignment
-    Trimat & operator=(const T &a); //assign a to every element
-    inline T & ref(const int i, const int j);
-    inline T * getPointer(const int i, const int j);
-    inline T * begin() const;
-    inline T * end() const;
-    inline const T ref(const int i, const int j) const;
-    inline int nrows() const;
-    ~Trimat();
-};
-
-template <class T>
-Trimat<T>::Trimat() : nn(0), v(0) {}
-
-template <class T>
-Trimat<T>::Trimat(int n) : nn(n), v(new T*[n])
-{
-    v[0] = new T[n*(n+1)/2];
-    for (int i=1; i< n; i++) 
-       v[i] = v[i-1] + (n-i+1);
-
-    for (int i=0; i< n; i++)
-       for (int j=0; j<(n-i); j++)
-           v[i][j] = 0;
-}
-template <class T>
-Trimat<T>::Trimat(const T &a, int n) : nn(n), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + (n-i+1);
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = a;
-}
-
-template <class T>
-Trimat<T>::Trimat(const T *a, int n) : nn(n), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + (n-i+1);
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = *a++;
-}
-
-
-template <class T>
-void Trimat<T>::Allocator(int n)
-{
-    nn = n; v = new T*[n];
-
-    v[0] = new T[n*(n+1)/2];
-    for (int i=1; i< n; i++)
-       v[i] = v[i-1] + (n-i+1);
-}
-
-template <class T>
-void Trimat<T>::Allocator(const T &a, int n)
-{
-    nn = n; v = new T*[n];
-
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i < n; i++)
-       v[i] = v[i-1] + (n-i+1);
-    for (i=0; i < n; i++)
-       for (j=0; j < (n-i); j++)
-           v[i][j] = a;
-}
-
-template <class T>
-void Trimat<T>::Allocator(const T *a, int n)
-{
-    nn = n; v = new T*[n];
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + (n-i+1);
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = *a++;
-}
-
-
-template <class T>
-Trimat<T>::Trimat(const Trimat &rhs) : nn(rhs.nn), v(new T*[nn])
-{
-    int i,j;
-    v[0] = new T[nn*(nn+1)/2];
-    for (i=1; i< nn; i++)
-       v[i] = v[i-1] + (nn-i+1);
-    for (i=0; i< nn; i++)
-       for (j=0; j<(nn-i); j++)
-           v[i][j] = rhs[i][j];
-}
-template <class T>
-Trimat<T> & Trimat<T>::operator=(const Trimat<T> &rhs)
-// postcondition: normal assignment via copying has been performed;
-// if matrix and rhs were different sizes, matrix
-// has been resized to match the size of rhs
-{
-    if (this != &rhs) {
-       int i,j;
-       if (nn != rhs.nn) {
-           if (v != 0) {
-               delete[] (v[0]);
-               delete[] (v);
-           }
-           nn=rhs.nn;
-           v = new T*[nn];
-           v[0] = new T[nn*(nn+1)/2];
-       }
-       for (i=1; i< nn; i++)
-           v[i] = v[i-1] + (nn-i+1);
-       for (i=0; i< nn; i++)
-           for (j=0; j<(nn-i); j++)
-               v[i][j] = rhs[i][j];
-    }
-    return *this;
-}
-
-template <class T>
-Trimat<T> & Trimat<T>::operator=(const T &a) //assign a to every element
-{
-    for (int i=0; i< nn; i++)
-       for (int j=0; j<nn-i; j++)
-           v[i][j] = a;
-    return *this;
-}
-
-template <class T>
-inline T &  Trimat<T>::ref(const int i, const int j)
-{
-    return v[i][j-i];
-}
-
-template <class T>
-inline const T Trimat<T>::ref(const int i, const int j) const
-{
-    return v[i][j-i];
-}
-
-template <class T>
-inline T * Trimat<T>::getPointer(const int i, const int j) 
-{
-    return &v[i][j-i];
-}
-
-template <class T>
-inline T * Trimat<T>::begin() const
-{
-    return &v[0][0];
-}
-
-template <class T>
-inline T * Trimat<T>::end() const
-{
-    return (&v[nn-1][0] + 1);
-}
-
-template <class T>
-inline int Trimat<T>::nrows() const
-{
-    return nn;
-}
-
-template <class T>
-Trimat<T>::~Trimat()
-{
-    if (v != 0) {
-       delete[] (v[0]);
-       delete[] (v);
-    }
-}
-
-
-/* Triangle Vertical Matrix Class
-   ---------------------------------------------------------
-   |v[0][0]|v[1][0]|      |            |         |v[n-1][0]|
-   |-------|-------|------|------------|---------|---------|
-   |v[0][1]|v[1][1]|      |            |v[n-2][1]|         |
-   |-------|-------|------|------------|---------|---------|
-   |       |       |      |            |         |         |
-   |-------|-------|------|------------|---------|---------|
-   |       |                                               |     
-   |       |                                               |
-   |       |                                               |
-   |-------|-----------------------------------------------|
-   |       |                                               |
-   |-------|-----------------------------------------------|
-   |v[0][n-2]|v[n-2][n-2]|                                   |                         
-   |-------|-----------------------------------------------|
-   |v[0][n-1]|                                             |  
-   |-------------------------------------------------------|
- */
-template <class T>
-class TriVertMat {
- private:
-    int nn;
-    T **v;
-    inline T* operator[](const int i); //subscripting: pointer to row i
-    inline const T* operator[](const int i) const;
- public:
-    TriVertMat();
-    TriVertMat(int n); // Zero-based array
-    TriVertMat(const T &a, int n); //Initialize to constant
-    TriVertMat(const T *a, int n); // Initialize to array
-    TriVertMat(const TriVertMat &rhs); // Copy constructor
-    void Allocator(int n);
-    void Allocator(const T &a, int n);
-    void Allocator(const T *a, int n);
-    TriVertMat & operator=(const TriVertMat &rhs); //assignment
-    TriVertMat & operator=(const T &a); //assign a to every element
-    inline T & ref(const int i, const int j);
-    inline T * getPointer(const int i, const int j);
-    inline const T ref(const int i, const int j) const;
-    inline int nrows() const;
-    ~TriVertMat();
-};
-
-template <class T>
-TriVertMat<T>::TriVertMat() : nn(0), v(0) {}
-
-template <class T>
-TriVertMat<T>::TriVertMat(int n) : nn(n), v(new T*[n])
-{
-    v[0] = new T[n*(n+1)/2];
-    for (int i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-}
-
-template <class T>
-TriVertMat<T>::TriVertMat(const T &a, int n) : nn(n), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = a;
-}
-
-template <class T>
-TriVertMat<T>::TriVertMat(const T *a, int n) : nn(n), v(new T*[n])
-{
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = *a++;
-}
-
-
-template <class T>
-void TriVertMat<T>::Allocator(int n)
-{
-    nn = n; v = new T*[n];
-
-    v[0] = new T[n*(n+1)/2];
-    for (int i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-}
-
-template <class T>
-void TriVertMat<T>::Allocator(const T &a, int n)
-{
-    nn = n; v = new T*[n];
-
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = a;
-}
-
-template <class T>
-void TriVertMat<T>::Allocator(const T *a, int n)
-{
-    nn = n; v = new T*[n];
-    int i,j;
-    v[0] = new T[n*(n+1)/2];
-    for (i=1; i< n; i++)
-       v[i] = v[i-1] + i;
-    for (i=0; i< n; i++)
-       for (j=0; j<(n-i); j++)
-           v[i][j] = *a++;
-}
-
-
-template <class T>
-TriVertMat<T>::TriVertMat(const TriVertMat &rhs) : nn(rhs.nn), v(new T*[nn])
-{
-    int i,j;
-    v[0] = new T[nn*(nn+1)/2];
-    for (i=1; i< nn; i++)
-       v[i] = v[i-1] + i;
-    for (i=0; i< nn; i++)
-       for (j=0; j<(nn-i); j++)
-           v[i][j] = rhs[i][j];
-}
-template <class T>
-TriVertMat<T> & TriVertMat<T>::operator=(const TriVertMat<T> &rhs)
-// postcondition: normal assignment via copying has been performed;
-// if matrix and rhs were different sizes, matrix
-// has been resized to match the size of rhs
-{
-    if (this != &rhs) {
-       int i,j;
-       if (nn != rhs.nn) {
-           if (v != 0) {
-               delete[] (v[0]);
-               delete[] (v);
-           }
-           nn=rhs.nn;
-           v = new T*[nn];
-           v[0] = new T[nn*(nn+1)/2];
-       }
-       for (i=1; i< nn; i++)
-           v[i] = v[i-1] + i;
-       for (i=0; i< nn; i++)
-           for (j=0; j<(nn-i); j++)
-               v[i][j] = rhs[i][j];
-    }
-    return *this;
-}
-
-template <class T>
-TriVertMat<T> & TriVertMat<T>::operator=(const T &a) //assign a to every element
-{
-    for (int i=0; i< nn; i++)
-       for (int j=0; j<nn-i; j++)
-           v[i][j] = a;
-    return *this;
-}
-
-template <class T>
-inline T &  TriVertMat<T>::ref(const int i, const int j)
-{
-    return v[j][i];
-}
-
-template <class T>
-inline const T TriVertMat<T>::ref(const int i, const int j) const
-{
-    return v[j][i];
-}
-
-template <class T>
-inline T * TriVertMat<T>::getPointer(const int i, const int j) 
-{
-    return &v[j][i];
-}
-
-template <class T>
-inline int TriVertMat<T>::nrows() const
-{
-    return nn;
-}
-
-template <class T>
-TriVertMat<T>::~TriVertMat()
-{
-    if (v != 0) {
-       delete[] (v[0]);
-       delete[] (v);
-    }
-}
-
-
-//Overloaded complex operations to handle mixed float and double
-//This takes care of e.g. 1.0/z, z complex<float>
-inline const complex<float> operator+(const double &a,
-                                     const complex<float> &b) { return float(a)+b; }
-inline const complex<float> operator+(const complex<float> &a,
-                                     const double &b) { return a+float(b); }
-inline const complex<float> operator-(const double &a,
-                                     const complex<float> &b) { return float(a)-b; }
-inline const complex<float> operator-(const complex<float> &a,
-                                     const double &b) { return a-float(b); }
-inline const complex<float> operator*(const double &a,
-                                     const complex<float> &b) { return float(a)*b; }
-inline const complex<float> operator*(const complex<float> &a,
-                                     const double &b) { return a*float(b); }
-inline const complex<float> operator/(const double &a,
-                                     const complex<float> &b) { return float(a)/b; }
-inline const complex<float> operator/(const complex<float> &a,
-                                     const double &b) { return a/float(b); }
-//some compilers choke on pow(float,double) in single precision. also atan2
-inline float pow (float x, double y) {return pow(double(x),y);}
-inline float pow (double x, float y) {return pow(x,double(y));}
-inline float atan2 (float x, double y) {return atan2(double(x),y);}
-inline float atan2 (double x, float y) {return atan2(x,double(y));}
-
-#endif /* _NR_UTIL_H_ */
diff --git a/binaries/src/mafft/extensions/mxscarna_src/params-weird b/binaries/src/mafft/extensions/mxscarna_src/params-weird
deleted file mode 100644 (file)
index 58601f4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-0.8969780803 0.0000000001 0.0000000001 0.0515111387 0.0515111387 
-0.0006874357 0.0006874357 0.0502248816 0.0502248816 
-0.1025763303 0.1025763303 0.2891978920 0.2891978920 
-ACGTN
-0.1907979101 
-0.0187792275 0.2023714036 
-0.0437292010 0.0242512580 0.2525959611 
-0.0171148051 0.0289713815 0.0146772768 0.1689696163 
-0.0000359111 0.0000737346 0.0000853324 0.0000768761 0.0000296087 
-0.1390289217 0.2925130725 0.1882306933 0.2944687903 0.0016553127 
diff --git a/binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp b/binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp
deleted file mode 100644 (file)
index 1028630..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////////////
-// postProcessings.cpp
-// 
-// several post process functions after aligning two profile stem candidate sequences
-//////////////////////////////////////////////////////////////////////////////////////
-
-#include <iostream>
-#include "scarna.hpp"
-#include "StemCandidate.hpp"
-#include <vector>
-#include <string>
-
-using namespace::MXSCARNA;
-
-void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2);
-
-void removeConflicts(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
-{
-    int size = matchPSCS1->size();
-    
-    std::vector<int> found(size, 0);
-    for(int k = size - 1; k >= 0; k--) {
-       int i    = matchPSCS1->at(k);
-       int i_rv = pscs1->at(i).GetRvscnumber();
-       int j    = matchPSCS2->at(k);
-       int j_rv = pscs2->at(j).GetRvscnumber();
-       
-       found[k] = 0;
-       
-       for(int m = size - 1; m >= 0; m--) {
-           if ( (matchPSCS1->at(m) == i_rv) && (matchPSCS2->at(m) == j_rv) ) {
-               found[k] = 1;
-               break;
-           }
-       }
-    }
-
-    int pt = 0;
-    for(int k = 0; k < size; k++) {
-       matchPSCS1->at(pt) = matchPSCS1->at(k);
-       matchPSCS2->at(pt) = matchPSCS2->at(k);
-       if(found[k] == 1) ++pt; 
-    }
-
-    matchPSCS1->resize(pt);
-    matchPSCS2->resize(pt);
-    
-    //printStructure (pscs1, pscs2, matchPSCS1, matchPSCS2);
-}
-
-void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
-{
-    int size = matchPSCS1->size();
-    int len  = WORDLENGTH;
-    std::vector<char> structure1(100, '.');
-    std::vector<char> structure2(100, '.');
-    for(int k = 0; k < size; k++) {
-       int i    = matchPSCS1->at(k);
-       int pos1 = pscs1->at(i).GetPosition();
-       int j    = matchPSCS2->at(k);
-       int pos2 = pscs2->at(j).GetPosition();
-       for(int l = 0; l < len; l++) {
-           if(pscs1->at(i).GetDistance() > 0) {
-               structure1[pos1 + l] = '(';
-           }
-           else {
-               structure1[pos1 + l] = ')';
-           }
-       
-           if(pscs2->at(j).GetDistance() > 0) {
-               structure2[pos2 + l] = '(';
-           }
-           else {
-               structure2[pos2 + l] = ')';
-           }
-       }
-       /*
-       std::cout << i << "\t" << pscs1->at(i).GetLength() << "\t" << pscs1->at(i).GetPosition() << "\t" << pscs1->at(i).GetRvposition() << "\t" << pscs1->at(i).GetDistance()  << "\t" << pscs1->at(i).GetContPos() << "\t" << pscs1->at(i).GetBeforePos() << "\t" << pscs1->at(i).GetRvscnumber() << endl;
-       */
-    }
-    size = structure1.size();
-    for(int k = 0; k < size; k++) {
-       std::cout << structure1[k];
-    }
-    std::cout << endl;
-    for(int k = 0; k < size; k++) {
-       std::cout << structure2[k];
-    }
-    std::cout << endl;
-}
-
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc
deleted file mode 100644 (file)
index 142fa4c..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// CompareToRef.cc
-//
-// Program for scoring alignments according to the SUM-OF-PAIRS
-// or COLUMN score.
-/////////////////////////////////////////////////////////////////
-
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include <string>
-#include <sstream>
-#include <iomanip>
-#include <iostream>
-#include <list>
-#include <set>
-#include <limits>
-#include <cstdio>
-#include <cstdlib>
-#include <cerrno>
-#include <iomanip>
-
-const char CORE_BLOCK = 'h';
-typedef pair<int,int> PII;
-bool useCoreBlocks = false;
-bool useColScore = false;
-bool useCaps = false;
-bool useBaliAnnot = false;
-bool makeAnnot = false;
-
-/////////////////////////////////////////////////////////////////
-// Function prototypes
-/////////////////////////////////////////////////////////////////
-
-set<PII> ComputePairs (MultiSequence *align, bool isRef);
-set<VI> ComputeColumns (MultiSequence *align, bool isRef);
-string GetName (string s);
-set<int> coreCols;
-
-set<VI> refCols, testCols;
-set<PII> refPairs, testPairs;
-VI annotation;
-
-/////////////////////////////////////////////////////////////////
-// main()
-//
-// Main program.
-/////////////////////////////////////////////////////////////////
-
-int main (int argc, char **argv){
-
-  // check arguments
-  if (argc < 3){
-    cerr << "Usage: score TEST_ALIGNMENT REFERENCE_ALIGNMENT [BALIBASE_ANNOT_FILE] [-col] [-core] [-caps] [-annot FILENAME]" << endl;
-    exit (1);
-  }
-
-  // try opening file
-  FileBuffer infile (argv[1]);
-
-  MultiSequence *testAlign;
-  if (infile.fail()){
-    cerr << "ERROR: Could not open file '" << argv[1] << "' for reading." << endl;
-    testAlign = NULL;
-  }
-  else {
-    testAlign = new MultiSequence(); assert (testAlign);
-    testAlign->LoadMFA (infile);
-  }
-  infile.close();
-
-  MultiSequence *refAlign = new MultiSequence (string (argv[2])); assert (refAlign);
-  
-  string outFilename = "";
-
-  for (int i = 3; i < argc; i++){
-    if (strcmp (argv[i], "-core") == 0)
-      useCoreBlocks = true;
-    else if (strcmp (argv[i], "-col") == 0)
-      useColScore = true;
-    else if (strcmp (argv[i], "-caps") == 0)
-      useCaps = true;
-    else if (strcmp (argv[i], "-annot") == 0){
-      makeAnnot = true;
-      outFilename = string (argv[++i]);
-    }
-    else { // annotation file
-      useBaliAnnot = true;
-
-      ifstream annotFile (argv[i]);
-      if (annotFile.fail()){
-        cerr << "ERROR: Could not read BAliBASE annotation file." << endl;
-        exit (1);
-      }
-
-      SafeVector<int> *indices = refAlign->GetSequence(0)->GetMapping();
-
-      char buffer[10000];
-      while (annotFile.getline (buffer, 10000)){
-        istringstream ss;
-        ss.str (string (buffer));
-
-        string s;
-
-        if ((ss >> s) && s == string ("BPOS")){
-          while (ss >> s){
-            int begin=-1, end=-1;
-            if (sscanf (s.c_str(), "%d=%d", &begin, &end) == 2){
-              for (int i = (*indices)[begin]; i <= (*indices)[end]; i++)
-                coreCols.insert (i);
-            }
-          }
-        }
-      }
-
-      delete indices;
-
-      annotFile.close();
-    }
-  }
-
-  if (useColScore) makeAnnot = false;
-
-  if (testAlign){
-    for (int i = 0; i < testAlign->GetNumSequences(); i++){
-      bool found = false;
-      
-      for (int j = 0; !found && j < refAlign->GetNumSequences(); j++){
-       if (testAlign->GetSequence(i)->GetHeader() == refAlign->GetSequence(j)->GetHeader())
-         found = true;
-      }
-      
-      if (!found){
-       testAlign->RemoveSequence (i);
-       i--;
-      }
-    }
-    
-    for (int i = 0; i < refAlign->GetNumSequences(); i++){
-      bool found = false;
-      
-      for (int j = 0; !found && j < testAlign->GetNumSequences(); j++){
-       if (refAlign->GetSequence(i)->GetHeader() == testAlign->GetSequence(j)->GetHeader())
-         found = true;
-      }
-      
-      if (!found){
-       refAlign->RemoveSequence (i);
-       i--;
-      }
-    }
-    
-    testAlign->SortByHeader();
-    refAlign->SortByHeader();
-  }
-
-  int TP = 0;
-  int TPFN = 0;
-  int TPFP = 0;
-  double FD, FM;
-  if (useColScore){
-    refCols = ComputeColumns (refAlign, true);
-    if (testAlign) testCols = ComputeColumns (testAlign, false);
-    set<VI> colIntersect;
-    insert_iterator<set<VI> > colIntersectIter (colIntersect, colIntersect.begin());
-    set_intersection (testCols.begin(), testCols.end(), refCols.begin(), refCols.end(), colIntersectIter);
-    TP = (int) colIntersect.size();
-    TPFN = (int) refCols.size();
-    if (testAlign) TPFP = (int) testCols.size();
-  }
-  else {
-    refPairs = ComputePairs (refAlign, true);
-    if (testAlign) testPairs = ComputePairs (testAlign, false);
-    set<PII> pairIntersect;
-
-    insert_iterator<set<PII> > pairIntersectIter (pairIntersect, pairIntersect.begin());
-    set_intersection (testPairs.begin(), testPairs.end(), refPairs.begin(), refPairs.end(), pairIntersectIter);
-    TP = (int) pairIntersect.size();
-    TPFN = (int) refPairs.size();
-    if (testAlign) TPFP = (int) testPairs.size();
-  }
-
-  FD = (double) TP / TPFN;
-  FM = (double) TP / TPFP;
-  
-  cout << GetName(string (argv[2])) << " " << TP << " " << TPFN << " " << TPFP << " " << FD << " " << FM << endl;
-
-  if (makeAnnot){
-    ofstream outfile (outFilename.c_str());
-    for (int i = 0; i < (int) annotation.size(); i++){
-      outfile << annotation[i] << endl;
-    }
-    outfile.close();
-  }
-
-  if (testAlign) delete testAlign;
-  delete refAlign;
-}
-
-int GetOffset (Sequence *testSeq, Sequence *refSeq){
-  string test = testSeq->GetString();
-  string ref = refSeq->GetString();
-
-  for (int i = 0; i < (int) test.length(); i++) test[i] = toupper(test[i]);
-  for (int i = 0; i < (int) ref.length(); i++) ref[i] = toupper(ref[i]);
-
-  size_t offset = test.find (ref, 0);
-  if (offset == string::npos){
-    cerr << "ERROR: Reference string not found in original sequence!" << endl;
-    cerr << "       test = " << test << endl;
-    cerr << "       ref = " << ref << endl;
-    exit (1);
-  }
-
-  cerr << "Offset found: " << offset << endl;
-
-  return (int) offset;
-}
-
-string GetName (string s){
-
-  size_t index1 = s.rfind ('/');
-  size_t index2 = s.rfind ('.');
-
-  if (index1 == string::npos) index1 = 0; else index1++;
-  if (index2 == string::npos) index2 = s.length();
-
-  if (index2 < index1) index2 = s.length();
-
-  return s.substr (index1, index2 - index1);
-}
-
-bool isCore (char ch, int col){
-  if (ch == '-') return false;
-  if (useBaliAnnot){
-    return coreCols.find (col) != coreCols.end();
-  }
-  if (useCaps){
-    return ch >= 'A' && ch <= 'Z';
-  }
-  return ch == CORE_BLOCK;
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputePairs
-//
-// Returns the set of all matching pairs.
-/////////////////////////////////////////////////////////////////
-
-set<PII> ComputePairs (MultiSequence *align, bool isRef){
-  int N = align->GetNumSequences();
-  int L = align->GetSequence(0)->GetLength();
-
-  // retrieve all sequence data pointers
-  SafeVector<SafeVector<char>::iterator> seqs (N);
-  for (int i = 0; i < N; i++){
-    seqs[i] = align->GetSequence(i)->GetDataPtr();
-    assert (align->GetSequence(i)->GetLength() == L);
-  }
-
-  set<PII> ret;
-  VI ctr(N);
-
-  // compute pairs
-  for (int i = 1; i <= L; i++){
-
-    // ctr keeps track of the current position in each sequence
-    for (int j = 0; j < N; j++){
-      ctr[j] += (seqs[j][i] != '-');
-    }
-
-    int good = 0;
-    int ct = 0;
-
-    // check for all matching pairs
-    for (int j = 0; j < N - 1; j++){
-      for (int k = j + 1; k < N; k++){
-       
-       // skip if one of the sequences is gapped
-       if (seqs[j][i] == '-' || seqs[k][i] == '-') continue;
-
-       // check for core blocks in the reference sequence
-       if (isRef && useCoreBlocks)
-         if (!isCore (seqs[j][i], i) || !isCore (seqs[k][i], i)) continue;
-      
-       // if all ok, then add pair to list of pairs
-       pair<int,int> p (10000 * j + ctr[j], 10000 * k + ctr[k]);
-
-       // if we're making an annotation, compute annotation statistics
-       if (makeAnnot && !isRef){
-         ct++;
-         if (refPairs.find (p) != refPairs.end()) good++;
-       }
-        ret.insert (p);
-      }
-    }
-
-    // build annotation
-    if (makeAnnot && !isRef){
-      annotation.push_back ((ct == 0) ? 0 : 100 * good / ct);
-    }
-
-  }
-
-  return ret;
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeColumns
-//
-// Returns the set of all columns.
-/////////////////////////////////////////////////////////////////
-
-set<VI> ComputeColumns (MultiSequence *align,  bool isRef){
-  int N = align->GetNumSequences();
-  int L = align->GetSequence(0)->GetLength();
-
-  // retrieve all sequence data pointers
-  SafeVector<SafeVector<char>::iterator> seqs (N);
-  for (int i = 0; i < N; i++){
-    seqs[i] = align->GetSequence(i)->GetDataPtr();
-  }
-
-  set<VI> ret;
-  VI ctr(N);
-
-  // compute pairs
-  for (int i = 1; i <= L; i++){
-
-    // ctr keeps track of the current position in each sequence
-    for (int j = 0; j < N; j++){
-      ctr[j] += (seqs[j][i] != '-');
-    }
-
-    // add column, pick only positions that are matched
-    SafeVector<int> column (N);
-    bool useThisColumn = !useCoreBlocks;
-
-    for (int j = 0; j < N; j++){
-      if (isCore (seqs[j][i], i)) useThisColumn = true;
-      column[j] = (seqs[j][i] == '-') ? -1 : ctr[j];
-    }
-
-    if (useThisColumn || !isRef)
-      ret.insert (column);
-  }
-
-  return ret;
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h
deleted file mode 100644 (file)
index e8ad944..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Defaults.h
-//
-// Default constants for use in PROBCONS.  The emission
-// probabilities were computed using the program used to build
-// the BLOSUM62 matrix from the BLOCKS 5.0 dataset.  Transition
-// parameters were obtained via unsupervised EM training on the
-// BALIBASE 2.0 benchmark alignment database.
-/////////////////////////////////////////////////////////////////
-
-#ifndef DEFAULTS_H
-#define DEFAULTS_H
-
-#include <string>
-
-using namespace std;
-/* Default */
-namespace MXSCARNA {
-/*
-float initDistrib1Default[] = { 0.9588437676f, 0.0205782652f, 0.0205782652f };
-float gapOpen1Default[] = { 0.0190259293f, 0.0190259293f };
-float gapExtend1Default[] = { 0.3269913495f, 0.3269913495f };
-*/
-
-/* EMtrainingALL.txt*/
-float initDistrib1Default[] = { 0.9234497547, 0.0385021642, 0.0385021642 };
-float gapOpen1Default[] = { 0.0266662259, 0.0266662259 };
-float gapExtend1Default[] = { 0.3849118352, 0.3849118352 };
-
-
-float initDistrib2Default[] = { 0.9615409374f, 0.0000004538f, 0.0000004538f, 0.0192291681f, 0.0192291681f };
-float gapOpen2Default[] = { 0.0082473317f, 0.0082473317f, 0.0107844425f, 0.0107844425f };
-float gapExtend2Default[] = { 0.3210460842f, 0.3210460842f, 0.3298229277f, 0.3298229277f };
-
-string alphabetDefault = "ACGUTN";
-
-//float emitSingleDefault[6] = {
-//   0.2174750715, 0.2573366761, 0.3005372882, 0.2233072966, 0.2233072966, 0.0004049665
-//};
-
-/* Default */
-/*
-float emitSingleDefault[6] = {
-  0.2270790040f, 0.2422080040f, 0.2839320004f, 0.2464679927f, 0.2464679927f, 0.0003124650f 
-};
-*/
-
-/* EMtrainingALL.txt */
-float emitSingleDefault[6] = {
-    0.2017124593, 0.2590311766, 0.2929603755, 0.2453189045, 0.2453189045, 0.0000873194 };
-
-/* ACGUTN */
-/* Default */
-/*
-float emitPairsDefault[6][6] = {
-  { 0.1487240046f, 0.0184142999f, 0.0361397006f, 0.0238473993f, 0.0238473993f, 0.0000375308f },
-  { 0.0184142999f, 0.1583919972f, 0.0275536999f, 0.0389291011f, 0.0389291011f, 0.0000815823f },
-  { 0.0361397006f, 0.0275536999f, 0.1979320049f, 0.0244289003f, 0.0244289003f, 0.0000824765f },
-  { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f },
-  { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f },
-  { 0.0000375308f, 0.0000815823f, 0.0000824765f, 0.0000743985f, 0.0000743985f, 0.0000263252f }
-};
-*/
-/* EMtrainingALL.txt */
-float emitPairsDefault[6][6] = {
-    { 0.1659344733, 0.0298952684, 0.0543937907, 0.0344539173, 0.0344539173, 0.0000032761 },
-    { 0.0298952684, 0.1817403436, 0.0415624641, 0.0589077808, 0.0589077808, 0.0000117011 },
-    { 0.0543937907, 0.0415624641, 0.2342105955, 0.0410407558, 0.0410407558, 0.0000072893 },
-    { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 },
-    { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 },
-    { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 },
-//    { 0.0000032761, 0.0000117011, 0.0000072893, 0.0000067871, 0.0000067871, 0.0000000166 } 
-};
-
-  /*
-float emitPairsDefault[6][6] = {
-    {0.1731323451, 0.0378843173, 0.0656677559, 0.0450690985, 0.0450690985, 0.0000215275},
-    {0.0378843173, 0.1611578614, 0.0492933467, 0.0651549697, 0.0651549697, 0.0000362353},
-    {0.0656677559, 0.0492933467, 0.1937607974, 0.0464556068, 0.0464556068, 0.0000293904},
-    {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637},
-    {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637},
-    {0.0000215275, 0.0000362353, 0.0000293904, 0.0000352637, 0.0000352637, 0.0000000000}
-};
-  */
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup
deleted file mode 100644 (file)
index e09abb5..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Defaults.h
-//
-// Default constants for use in PROBCONS.  The emission
-// probabilities were computed using the program used to build
-// the BLOSUM62 matrix from the BLOCKS 5.0 dataset.  Transition
-// parameters were obtained via unsupervised EM training on the
-// BALIBASE 2.0 benchmark alignment database.
-/////////////////////////////////////////////////////////////////
-
-#ifndef DEFAULTS_H
-#define DEFAULTS_H
-
-#include <string>
-
-using namespace std;
-
-float initDistrib1Default[] = { 0.9588437676f, 0.0205782652f, 0.0205782652f };
-float gapOpen1Default[] = { 0.0190259293f, 0.0190259293f };
-float gapExtend1Default[] = { 0.3269913495f, 0.3269913495f };
-
-float initDistrib2Default[] = { 0.9615409374f, 0.0000004538f, 0.0000004538f, 0.0192291681f, 0.0192291681f };
-float gapOpen2Default[] = { 0.0082473317f, 0.0082473317f, 0.0107844425f, 0.0107844425f };
-float gapExtend2Default[] = { 0.3210460842f, 0.3210460842f, 0.3298229277f, 0.3298229277f };
-
-string alphabetDefault = "ACGUTN";
-
-//float emitSingleDefault[6] = {
-//   0.2174750715, 0.2573366761, 0.3005372882, 0.2233072966, 0.2233072966, 0.0004049665
-//};
-
-float emitSingleDefault[6] = {
-  0.2270790040f, 0.2422080040f, 0.2839320004f, 0.2464679927f, 0.2464679927f, 0.0003124650f 
-};
-
-/* ACGUTN */
-
-float emitPairsDefault[6][6] = {
-  { 0.1487240046f, 0.0184142999f, 0.0361397006f, 0.0238473993f, 0.0238473993f, 0.0000375308f },
-  { 0.0184142999f, 0.1583919972f, 0.0275536999f, 0.0389291011f, 0.0389291011f, 0.0000815823f },
-  { 0.0361397006f, 0.0275536999f, 0.1979320049f, 0.0244289003f, 0.0244289003f, 0.0000824765f },
-  { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f },
-  { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f },
-  { 0.0000375308f, 0.0000815823f, 0.0000824765f, 0.0000743985f, 0.0000743985f, 0.0000263252f }
-};
-
-  /*
-float emitPairsDefault[6][6] = {
-    {0.1731323451, 0.0378843173, 0.0656677559, 0.0450690985, 0.0450690985, 0.0000215275},
-    {0.0378843173, 0.1611578614, 0.0492933467, 0.0651549697, 0.0651549697, 0.0000362353},
-    {0.0656677559, 0.0492933467, 0.1937607974, 0.0464556068, 0.0464556068, 0.0000293904},
-    {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637},
-    {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637},
-    {0.0000215275, 0.0000362353, 0.0000293904, 0.0000352637, 0.0000352637, 0.0000000000}
-};
-  */
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt
deleted file mode 100644 (file)
index c2f24a0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-0.9234497547 0.0385021642 0.0385021642 
-0.0266662259 0.0266662259 
-0.3849118352 0.3849118352 
-ACGUTN
-0.1659344733 
-0.0298952684 0.1817403436 
-0.0543937907 0.0415624641 0.2342105955 
-0.0344539173 0.0589077808 0.0410407558 0.1578272283 
-0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 
-0.0000032761 0.0000117011 0.0000072893 0.0000067871 0.0000000000 0.0000000166 
-0.2017124593 0.2590311766 0.2929603755 0.2453189045 0.0000000000 0.0000873194 
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h
deleted file mode 100644 (file)
index eceeafe..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// EvolutionaryTree.hpp
-//
-// Utilities for reading/writing multiple sequence data.
-/////////////////////////////////////////////////////////////////
-
-#ifndef __EVOLUTIONARYTREE_HPP__
-#define __EVOLUTIONARYTREE_HPP__
-
-#include <string>
-#include <list>
-#include <stdio.h>
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include "Sequence.h"
-#include "Util.hpp"
-
-using namespace std;
-
-
-/////////////////////////////////////////////////////////////////
-// TreeNode
-//
-// The fundamental unit for representing an alignment tree.  The
-// guide tree is represented as a binary tree.
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-class TreeNode {
-  int sequenceLabel;                  // sequence label
-  float sequenceIdentity;             // sequence identity
-  TreeNode *left, *right, *parent;    // pointers to left, right children
-  float leftLength, rightLength;      // the length of left and right edge
-  /////////////////////////////////////////////////////////////////
-  // TreeNode::PrintNode()
-  //
-  // Internal routine used to print out the sequence comments
-  // associated with the evolutionary tree, using a hierarchical
-  // parenthesized format.
-  /////////////////////////////////////////////////////////////////
-
-  void PrintNode (ostream &outfile, const MultiSequence *sequences) const {
-
-    // if this is a leaf node, print out the associated sequence comment
-    if (sequenceLabel >= 0)
-       //outfile << sequences->GetSequence (sequenceLabel)->GetHeader();
-       outfile << sequences->GetSequence (sequenceLabel)->GetLabel();
-
-    // otherwise, it must have two children; print out their subtrees recursively
-    else {
-      assert (left);
-      assert (right);
-
-      outfile << "(";
-      left->PrintNode (outfile, sequences);
-      outfile << ",";
-      right->PrintNode (outfile, sequences);
-      outfile << ")";
-    }
-  }
-
- public:
-
-  /////////////////////////////////////////////////////////////////
-  // TreeNode::TreeNode()
-  //
-  // Constructor for a tree node.  Note that sequenceLabel = -1
-  // implies that the current node is not a leaf in the tree.
-  /////////////////////////////////////////////////////////////////
-
-  TreeNode (int sequenceLabel) : sequenceLabel (sequenceLabel),
-    left (NULL), right (NULL), parent (NULL) {
-    assert (sequenceLabel >= -1);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // TreeNode::~TreeNode()
-  //
-  // Destructor for a tree node.  Recursively deletes all children.
-  /////////////////////////////////////////////////////////////////
-
-  ~TreeNode (){
-    if (left){ delete left; left = NULL; }
-    if (right){ delete right; right = NULL; }
-    parent = NULL;
-  }
-
-
-  // getters
-  int GetSequenceLabel () const { return sequenceLabel; }
-  TreeNode *GetLeftChild () const { return left; }
-  TreeNode *GetRightChild () const { return right; }
-  TreeNode *GetParent () const { return parent; }
-  float GetIdentity () const { return sequenceIdentity; }
-  float GetLeftLength () const { return leftLength; }
-  float GetRightLength () const { return rightLength; }
-  // setters
-  void SetSequenceLabel (int sequenceLabel){ this->sequenceLabel = sequenceLabel; assert (sequenceLabel >= -1); }
-  void SetLeftChild (TreeNode *left){ this->left = left; }
-  void SetRightChild (TreeNode *right){ this->right = right; }
-  void SetParent (TreeNode *parent){ this->parent = parent; }
-  void SetIdentity (float identity) { this->sequenceIdentity = identity; }
-  void SetLeftLength (float identity) { this->leftLength = identity; }
-  void SetRightLength (float identity) {this->rightLength = identity; }
-  /////////////////////////////////////////////////////////////////
-  // TreeNode::ComputeTree()
-  //
-  // Routine used to compute an evolutionary tree based on the
-  // given distance matrix.  We assume the distance matrix has the
-  // form, distMatrix[i][j] = expected accuracy of aligning i with j.
-  /////////////////////////////////////////////////////////////////
-
-  static TreeNode *ComputeTree (const VVF &distMatrix, const VVF &identityMatrix){
-
-    int numSeqs = distMatrix.size();                 // number of sequences in distance matrix
-    VVF distances (numSeqs, VF (numSeqs));           // a copy of the distance matrix
-    SafeVector<TreeNode *> nodes (numSeqs, NULL);    // list of nodes for each sequence
-    SafeVector<int> valid (numSeqs, 1);              // valid[i] tells whether or not the ith
-                                                     // nodes in the distances and nodes array
-                                                     // are valid
-    VVF identities (numSeqs, VF (numSeqs));
-    SafeVector<int> countCluster (numSeqs, 1);
-
-    // initialization: make a copy of the distance matrix
-    for (int i = 0; i < numSeqs; i++) {
-       for (int j = 0; j < numSeqs; j++) {
-           distances[i][j]  = distMatrix[i][j];
-           identities[i][j] = identityMatrix[i][j];
-       }
-    }
-
-    // initialization: create all the leaf nodes
-    for (int i = 0; i < numSeqs; i++){
-      nodes[i] = new TreeNode (i);
-      assert (nodes[i]);
-    }
-
-    // repeat until only a single node left
-    for (int numNodesLeft = numSeqs; numNodesLeft > 1; numNodesLeft--){
-       float bestProb = -1;
-      pair<int,int> bestPair;
-
-      // find the closest pair
-      for (int i = 0; i < numSeqs; i++) if (valid[i]){
-        for (int j = i+1; j < numSeqs; j++) if (valid[j]){
-          if (distances[i][j] > bestProb){
-            bestProb = distances[i][j];
-            bestPair = make_pair(i, j);
-          }
-        }
-      }
-
-      // merge the closest pair
-      TreeNode *newParent = new TreeNode (-1);
-      newParent->SetLeftChild (nodes[bestPair.first]);
-      newParent->SetRightChild (nodes[bestPair.second]);
-      nodes[bestPair.first]->SetParent (newParent);
-      nodes[bestPair.second]->SetParent (newParent);
-      nodes[bestPair.first] = newParent;
-      nodes[bestPair.second] = NULL;
-      newParent->SetIdentity(identities[bestPair.first][bestPair.second]);
-
-
-      // now update the distance matrix
-      for (int i = 0; i < numSeqs; i++) if (valid[i]){
-         distances[bestPair.first][i] = distances[i][bestPair.first]
-           = (distances[i][bestPair.first]*countCluster[bestPair.first] 
-              + distances[i][bestPair.second]*countCluster[bestPair.second])
-              / (countCluster[bestPair.first] + countCluster[bestPair.second]);
-//       distances[bestPair.first][i] = distances[i][bestPair.first]
-//           = (distances[i][bestPair.first] + distances[i][bestPair.second]) * bestProb / 2;
-       identities[bestPair.first][i] = identities[i][bestPair.first]
-           = (identities[i][bestPair.first]*countCluster[bestPair.first] 
-              + identities[i][bestPair.second]*countCluster[bestPair.second])
-              / (countCluster[bestPair.first] + countCluster[bestPair.second]);
-      }
-
-      // finally, mark the second node entry as no longer valid
-      countCluster[bestPair.first] += countCluster[bestPair.second];
-      valid[bestPair.second] = 0;
-    }
-
-    assert (nodes[0]);
-    return nodes[0];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // TreeNode::Print()
-  //
-  // Print out the subtree associated with this node in a
-  // parenthesized representation.
-  /////////////////////////////////////////////////////////////////
-
-  void Print (ostream &outfile, const MultiSequence *sequences) const {
-//    outfile << "Alignment tree: ";
-    PrintNode (outfile, sequences);
-    outfile << endl;
-  }
-};
-}
-#endif //__EVOLUTIONARYTREE_HPP__
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h
deleted file mode 100644 (file)
index 9c36188..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// FileBuffer.h
-//
-// Buffered file reading.
-/////////////////////////////////////////////////////////////////
-
-
-#ifndef FILEBUFFER_H
-#define FILEBUFFER_H
-
-#include <string>
-#include <fstream>
-#include <iostream>
-
-using namespace std;
-
-const int BufferSize = 1000;
-
-/////////////////////////////////////////////////////////////////
-// FileBuffer
-//
-// Class for buffering file reading.
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-class FileBuffer {
-  ifstream file;
-  char buffer[BufferSize];
-  int currPos;
-  int size;
-  bool isEOF;
-  bool isValid;
-  bool canUnget;
-
- public:
-
-  // Some common routines
-
-  FileBuffer (const char *filename) : file (filename), currPos (0), size (0), isEOF (false), isValid (!file.fail()), canUnget (false){}
-  ~FileBuffer (){ close(); }
-  bool fail () const { return !isValid; }
-  bool eof () const { return (!isValid || isEOF); }
-  void close(){ file.close(); isValid = false; }
-
-  /////////////////////////////////////////////////////////////////
-  // FileBuffer::Get()
-  //
-  // Retrieve a character from the file buffer.  Returns true if
-  // and only if a character is read.
-  /////////////////////////////////////////////////////////////////
-
-  bool Get (char &ch){
-
-    // check to make sure that there's more stuff in the file
-    if (!isValid || isEOF) return false;
-
-    // if the buffer is empty, it's time to reload it
-    if (currPos == size){
-      file.read (buffer, BufferSize);
-      size = file.gcount();
-      isEOF = (size == 0);
-      currPos = 0;
-      if (isEOF) return false;
-    }
-
-    // store the read character
-    ch = buffer[currPos++];
-    canUnget = true;
-    return true;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // FileBuffer::UnGet()
-  //
-  // Unretrieve the most recently read character from the file
-  // buffer.  Note that this allows only a one-level undo.
-  /////////////////////////////////////////////////////////////////
-
-  void UnGet (){
-    assert (canUnget);
-    assert (isValid);
-    assert (currPos > 0);
-    currPos--;
-    assert (currPos < size);
-    isEOF = false;
-    canUnget = false;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // FileBuffer::GetLine()
-  //
-  // Retrieve characters of text until a newline character is
-  // encountered.  Terminates properly on end-of-file condition.
-  /////////////////////////////////////////////////////////////////
-
-  void GetLine (string &s){
-    char ch;
-    s = "";
-    while (Get (ch) && ch != '\n')
-      s += ch;
-  }
-
-};
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc
deleted file mode 100644 (file)
index 7060c79..0000000
+++ /dev/null
@@ -1,1000 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Main.cc
-/////////////////////////////////////////////////////////////////
-
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include "Defaults.h"
-#include "ScoreType.h"
-#include "ProbabilisticModel.h"
-#include "EvolutionaryTree.h"
-#include "SparseMatrix.h"
-#include <string>
-#include <iomanip>
-#include <iostream>
-#include <list>
-#include <set>
-#include <algorithm>
-#include <cstdio>
-#include <cstdlib>
-#include <cerrno>
-#include <iomanip>
-
-string matrixFilename = "";
-string parametersInputFilename = "";
-string parametersOutputFilename = "no training";
-
-bool enableTraining = false;
-bool enableVerbose = false;
-int numConsistencyReps = 2;
-int numPreTrainingReps = 0;
-int numIterativeRefinementReps = 100;
-
-float gapOpenPenalty = 0;
-float gapContinuePenalty = 0;
-VF initDistrib (NumMatrixTypes);
-VF gapOpen (2*NumInsertStates);
-VF gapExtend (2*NumInsertStates);
-SafeVector<char> alphabet;
-VVF emitPairs;
-VF emitSingle;
-
-const int MIN_PRETRAINING_REPS = 0;
-const int MAX_PRETRAINING_REPS = 20;
-const int MIN_CONSISTENCY_REPS = 0;
-const int MAX_CONSISTENCY_REPS = 5;
-const int MIN_ITERATIVE_REFINEMENT_REPS = 0;
-const int MAX_ITERATIVE_REFINEMENT_REPS = 1000;
-
-/////////////////////////////////////////////////////////////////
-// Function prototypes
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading();
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const char *filename);
-MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model);
-SafeVector<string> ParseParams (int argc, char **argv);
-void ReadParameters ();
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model);
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model);
-void DoRelaxation (MultiSequence *sequences, SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior);
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment);
-//float ScoreAlignment (MultiSequence *alignment, MultiSequence *sequences, SparseMatrix **sparseMatrices, const int numSeqs);
-
-/////////////////////////////////////////////////////////////////
-// main()
-//
-// Calls all initialization routines and runs the PROBCONS
-// aligner.
-/////////////////////////////////////////////////////////////////
-
-int main (int argc, char **argv){
-
-  if (argc != 3){
-    cerr << "Usage: FixRef inputfile reffile" << endl;
-    exit (1);
-  }
-
-  string inputFilename = string (argv[1]);
-  string refFilename = string (argv[2]);
-
-  ReadParameters();
-
-  // build new model for aligning
-  ProbabilisticModel model (initDistrib, gapOpen, gapExtend, 
-                            alphabet, emitPairs, emitSingle);
-
-  MultiSequence *inputSeq = new MultiSequence(); inputSeq->LoadMFA (inputFilename);
-  MultiSequence *refSeq = new MultiSequence(); refSeq->LoadMFA (refFilename);
-
-  SafeVector<char> *ali = new SafeVector<char>;
-
-  if (refSeq->GetNumSequences() != 2){
-    cerr << "ERROR: Expected two sequences in reference alignment." << endl;
-    exit (1);
-  }
-  set<int> s; s.insert (0);
-  MultiSequence *ref1 = refSeq->Project (s);
-  s.clear(); s.insert (1);
-  MultiSequence *ref2 = refSeq->Project (s);
-
-  for (int i = 0; i < inputSeq->GetNumSequences(); i++){
-    if (inputSeq->GetSequence(i)->GetHeader() == ref1->GetSequence(0)->GetHeader()){
-      ref1->AddSequence (inputSeq->GetSequence(i)->Clone());
-    }
-    if (inputSeq->GetSequence(i)->GetHeader() == ref2->GetSequence(0)->GetHeader())
-      ref2->AddSequence (inputSeq->GetSequence(i)->Clone());
-  }
-  if (ref1->GetNumSequences() != 2){
-    cerr << "ERROR: Expected two sequences in reference1 alignment." << endl;
-    exit (1);
-  }
-  if (ref2->GetNumSequences() != 2){
-    cerr << "ERROR: Expected two sequences in reference2 alignment." << endl;
-    exit (1);
-  }
-
-  ref1->GetSequence(0)->SetLabel(0);
-  ref2->GetSequence(0)->SetLabel(0);
-  ref1->GetSequence(1)->SetLabel(1);
-  ref2->GetSequence(1)->SetLabel(1);
-
-  //  cerr << "Aligning..." << endl;
-
-  // now, we can perform the alignments and write them out
-  MultiSequence *alignment1 = DoAlign (ref1,
-                                       ProbabilisticModel (initDistrib, gapOpen, gapExtend, 
-                                                           alphabet, emitPairs, emitSingle));
-
-  //cerr << "Aligning second..." << endl;
-  MultiSequence *alignment2 = DoAlign (ref2,
-                                       ProbabilisticModel (initDistrib, gapOpen, gapExtend, 
-                                                           alphabet, emitPairs, emitSingle));
-
-  SafeVector<char>::iterator iter1 = alignment1->GetSequence(0)->GetDataPtr();
-  SafeVector<char>::iterator iter2 = alignment1->GetSequence(1)->GetDataPtr();
-  for (int i = 1; i <= alignment1->GetSequence(0)->GetLength(); i++){
-    if (islower(iter1[i])) iter2[i] = tolower(iter2[i]);
-    if (isupper(iter1[i])) iter2[i] = toupper(iter2[i]);
-  }
-  iter1 = alignment2->GetSequence(0)->GetDataPtr();
-  iter2 = alignment2->GetSequence(1)->GetDataPtr();
-  for (int i = 1; i <= alignment2->GetSequence(0)->GetLength(); i++){
-    if (islower(iter1[i])) iter2[i] = tolower(iter2[i]);
-    if (isupper(iter1[i])) iter2[i] = toupper(iter2[i]);
-  }
-  //alignment1->WriteMFA (cout);
-  //alignment2->WriteMFA (cout);
-
-  int a1 = 0, a = 0;
-  int b1 = 0, b = 0;
-
-  for (int i = 1; i <= refSeq->GetSequence(0)->GetLength(); i++){
-
-    // catch up in filler sequences
-    if (refSeq->GetSequence(0)->GetPosition(i) != '-'){
-      while (true){
-        a++;
-        if (alignment1->GetSequence(0)->GetPosition(a) != '-') break;
-        ali->push_back ('X');
-      }
-    }
-    if (refSeq->GetSequence(1)->GetPosition(i) != '-'){
-      while (true){
-        b++;
-        if (alignment2->GetSequence(0)->GetPosition(b) != '-') break;
-        ali->push_back ('Y');
-      }
-    }
-
-    if (refSeq->GetSequence(0)->GetPosition(i) != '-' &&
-        refSeq->GetSequence(1)->GetPosition(i) != '-'){
-      //cerr << "M: " << refSeq->GetSequence(0)->GetPosition(i) << refSeq->GetSequence(1)->GetPosition(i) << endl;
-      ali->push_back ('B');
-    }
-    else if (refSeq->GetSequence(0)->GetPosition(i) != '-'){
-      //cerr << "X" << endl;
-      ali->push_back ('X');
-    }
-    else if (refSeq->GetSequence(1)->GetPosition(i) != '-'){
-      //cerr << "Y" << endl;
-      ali->push_back ('Y');
-    }
-  }
-
-  while (a < alignment1->GetSequence(0)->GetLength()){
-    a++;
-    ali->push_back ('X');
-    if (alignment1->GetSequence(0)->GetPosition(a) != '-') a1++;
-  }
-  while (b < alignment2->GetSequence(0)->GetLength()){
-    b++;
-    ali->push_back ('Y');
-    if (alignment2->GetSequence(0)->GetPosition(b) != '-') b1++;
-  }
-
-  Sequence *seq1 = alignment1->GetSequence(1)->AddGaps (ali, 'X');
-  Sequence *seq2 = alignment2->GetSequence(1)->AddGaps (ali, 'Y');
-  seq1->WriteMFA (cout, 60);
-  seq2->WriteMFA (cout, 60);
-
-  delete seq1;
-  delete seq2;
-
-  delete ali;
-  delete alignment1;
-  delete alignment2;
-  delete inputSeq;
-  delete refSeq;
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintHeading()
-//
-// Prints heading for PROBCONS program.
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading (){
-  cerr << endl
-       << "PROBCONS version 1.02 - align multiple protein sequences and print to standard output" << endl
-       << "Copyright (C) 2004  Chuong Ba Do" << endl
-       << endl;
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintParameters()
-//
-// Prints PROBCONS parameters to STDERR.  If a filename is
-// specified, then the parameters are also written to the file.
-/////////////////////////////////////////////////////////////////
-
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const char *filename){
-
-  // print parameters to the screen
-  cerr << message << endl
-       << "    initDistrib[] = { ";
-  for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " ";
-  cerr << "}" << endl
-       << "        gapOpen[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " ";
-  cerr << "}" << endl
-       << "      gapExtend[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " ";
-  cerr << "}" << endl
-       << endl;
-
-  // if a file name is specified
-  if (filename){
-
-    // attempt to open the file for writing
-    FILE *file = fopen (filename, "w");
-    if (!file){
-      cerr << "ERROR: Unable to write parameter file: " << filename << endl;
-      exit (1);
-    }
-
-    // if successful, then write the parameters to the file
-    for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n");
-    fclose (file);
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoAlign()
-//
-// First computes all pairwise posterior probability matrices.
-// Then, computes new parameters if training, or a final
-// alignment, otherwise.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model){
-
-  assert (sequences);
-
-  const int numSeqs = sequences->GetNumSequences();
-  VVF distances (numSeqs, VF (numSeqs, 0));
-  SafeVector<SafeVector<SparseMatrix *> > sparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-
-  // do all pairwise alignments
-  for (int a = 0; a < numSeqs-1; a++){
-    for (int b = a+1; b < numSeqs; b++){
-      Sequence *seq1 = sequences->GetSequence (a);
-      Sequence *seq2 = sequences->GetSequence (b);
-
-      // verbose output
-      if (enableVerbose)
-        cerr << "(" << a+1 << ") " << seq1->GetHeader() << " vs. "
-             << "(" << b+1 << ") " << seq2->GetHeader() << ": ";
-
-      // compute forward and backward probabilities
-      VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward);
-      VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward);
-
-      // if we are training, then we'll simply want to compute the
-      // expected counts for each region within the matrix separately;
-      // otherwise, we'll need to put all of the regions together and
-      // assemble a posterior probability match matrix
-
-      // compute posterior probability matrix
-      VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior);
-
-      // compute "expected accuracy" distance for evolutionary tree computation
-      pair<SafeVector<char> *, float> alignment = model.ComputeAlignment (seq1->GetLength(),
-                                                                          seq2->GetLength(),
-                                                                          *posterior);
-
-      float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength());
-
-      if (enableVerbose)
-        cerr << setprecision (10) << distance << endl;
-
-      // save posterior probability matrices in sparse format
-      distances[a][b] = distances[b][a] = distance;
-      sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior);
-      sparseMatrices[b][a] = sparseMatrices[a][b]->ComputeTranspose();
-
-      delete alignment.first;
-      delete posterior;
-
-      delete forward;
-      delete backward;
-    }
-  }
-
-  if (!enableTraining){
-    if (enableVerbose)
-      cerr << endl;
-
-    // now, perform the consistency transformation the desired number of times
-    for (int i = 0; i < numConsistencyReps; i++)
-      DoRelaxation (sequences, sparseMatrices);
-
-    // compute the evolutionary tree
-    TreeNode *tree = TreeNode::ComputeTree (distances);
-
-    //tree->Print (cerr, sequences);
-    //cerr << endl;
-
-    // make the final alignment
-    MultiSequence *alignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model);
-    delete tree;
-
-    return alignment;
-  }
-
-  return NULL;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetInteger()
-//
-// Attempts to parse an integer from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetInteger (char *data, int *val){
-  char *endPtr;
-  long int retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtol (data, &endPtr, 0);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false;
-  if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false;
-  *val = (int) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetFloat()
-//
-// Attempts to parse a float from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetFloat (char *data, float *val){
-  char *endPtr;
-  double retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtod (data, &endPtr);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false;
-  *val = (float) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// ParseParams()
-//
-// Parse all command-line options.
-/////////////////////////////////////////////////////////////////
-
-SafeVector<string> ParseParams (int argc, char **argv){
-
-  if (argc < 2){
-
-    cerr << "PROBCONS comes with ABSOLUTELY NO WARRANTY.  This is free software, and" << endl
-         << "you are welcome to redistribute it under certain conditions.  See the" << endl
-         << "file COPYING.txt for details." << endl
-         << endl
-         << "Usage:" << endl
-         << "       probcons [OPTION]... [MFAFILE]..." << endl
-         << endl
-         << "Description:" << endl
-         << "       Align sequences in MFAFILE(s) and print result to standard output" << endl
-         << endl
-         << "       -t, --train FILENAME" << endl
-         << "              compute EM transition probabilities, store in FILENAME (default: "
-         << parametersOutputFilename << ")" << endl
-         << endl
-         << "       -m, --matrixfile FILENAME" << endl
-         << "              read transition parameters from FILENAME (default: "
-         << matrixFilename << ")" << endl
-         << endl
-         << "       -p, --paramfile FILENAME" << endl
-         << "              read scoring matrix probabilities from FILENAME (default: "
-         << parametersInputFilename << ")" << endl
-         << endl
-         << "       -c, --consistency REPS" << endl
-         << "              use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS
-         << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl
-         << endl
-         << "       -ir, --iterative-refinement REPS" << endl
-         << "              use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS
-         << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl
-         << endl
-         << "       -pre, --pre-training REPS" << endl
-         << "              use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS
-         << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl
-         << endl
-         << "       -go, --gap-open VALUE" << endl
-         << "              gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl
-         << endl
-         << "       -ge, --gap-extension VALUE" << endl
-         << "              gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl
-         << endl
-         << "       -v, --verbose" << endl
-         << "              report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl
-         << endl;
-
-    exit (1);
-  }
-
-  SafeVector<string> sequenceNames;
-  int tempInt;
-  float tempFloat;
-
-  for (int i = 1; i < argc; i++){
-    if (argv[i][0] == '-'){
-
-      // training
-      if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){
-        enableTraining = true;
-        if (i < argc - 1)
-          parametersOutputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // scoring matrix file
-      else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--matrixfile")){
-        if (i < argc - 1)
-          matrixFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // transition/initial distribution parameter file
-      else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){
-        if (i < argc - 1)
-          parametersInputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // number of consistency transformations
-      else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numConsistencyReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // number of randomized partitioning iterative refinement passes
-      else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numIterativeRefinementReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // number of EM pre-training rounds
-      else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numPreTrainingReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap open penalty
-      else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapOpenPenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap extension penalty
-      else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapContinuePenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // verbose reporting
-      else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){
-        enableVerbose = true;
-      }
-
-      // bad arguments
-      else {
-        cerr << "ERROR: Unrecognized option: " << argv[i] << endl;
-        exit (1);
-      }
-    }
-    else {
-      sequenceNames.push_back (string (argv[i]));
-    }
-  }
-
-  return sequenceNames;
-}
-
-/////////////////////////////////////////////////////////////////
-// ReadParameters()
-//
-// Read initial distribution, transition, and emission
-// parameters from a file.
-/////////////////////////////////////////////////////////////////
-
-void ReadParameters (){
-
-  ifstream data;
-
-  // read initial state distribution and transition parameters
-  if (parametersInputFilename == string ("")){
-    if (NumInsertStates == 1){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i];
-    }
-    else if (NumInsertStates == 2){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i];
-    }
-    else {
-      cerr << "ERROR: No default initial distribution/parameter settings exist" << endl
-           << "       for " << NumInsertStates << " pairs of insert states.  Use --paramfile." << endl;
-      exit (1);
-    }
-  }
-  else {
-    data.open (parametersInputFilename.c_str());
-    if (data.fail()){
-      cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl;
-      exit (1);
-    }
-    for (int i = 0; i < NumMatrixTypes; i++) data >> initDistrib[i];
-    for (int i = 0; i < 2*NumInsertStates; i++) data >> gapOpen[i];
-    for (int i = 0; i < 2*NumInsertStates; i++) data >> gapExtend[i];
-    data.close();
-  }
-
-  // read emission parameters
-  int alphabetSize = 20;
-
-  // allocate memory
-  alphabet = SafeVector<char>(alphabetSize);
-  emitPairs = VVF (alphabetSize, VF (alphabetSize, 0));
-  emitSingle = VF (alphabetSize);
-
-  if (matrixFilename == string ("")){
-    for (int i = 0; i < alphabetSize; i++) alphabet[i] = alphabetDefault[i];
-    for (int i = 0; i < alphabetSize; i++){
-      emitSingle[i] = emitSingleDefault[i];
-      for (int j = 0; j <= i; j++){
-        emitPairs[i][j] = emitPairs[j][i] = (i == j);
-      }
-    }
-  }
-  else {
-    data.open (matrixFilename.c_str());
-    if (data.fail()){
-      cerr << "ERROR: Unable to read scoring matrix file: " << matrixFilename << endl;
-      exit (1);
-    }
-
-    for (int i = 0; i < alphabetSize; i++) data >> alphabet[i];
-    for (int i = 0; i < alphabetSize; i++){
-      for (int j = 0; j <= i; j++){
-        data >> emitPairs[i][j];
-        emitPairs[j][i] = emitPairs[i][j];
-      }
-    }
-    for (int i = 0; i < alphabetSize; i++){
-      char ch;
-      data >> ch;
-      assert (ch == alphabet[i]);
-    }
-    for (int i = 0; i < alphabetSize; i++) data >> emitSingle[i];
-    data.close();
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// ProcessTree()
-//
-// Process the tree recursively.  Returns the aligned sequences
-// corresponding to a node or leaf of the tree.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences,
-                            const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model){
-  MultiSequence *result;
-
-  // check if this is a node of the alignment tree
-  if (tree->GetSequenceLabel() == -1){
-    MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model);
-    MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model);
-
-    assert (alignLeft);
-    assert (alignRight);
-
-    result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model);
-    assert (result);
-
-    delete alignLeft;
-    delete alignRight;
-  }
-
-  // otherwise, this is a leaf of the alignment tree
-  else {
-    result = new MultiSequence(); assert (result);
-    result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone());
-  }
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeFinalAlignment()
-//
-// Compute the final alignment by calling ProcessTree(), then
-// performing iterative refinement as needed.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model){
-
-  MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model);
-
-  // iterative refinement
-  for (int i = 0; i < numIterativeRefinementReps; i++)
-    DoIterativeRefinement (sparseMatrices, model, alignment);
-
-  cerr << endl;
-
-  // return final alignment
-  return alignment;
-}
-
-/////////////////////////////////////////////////////////////////
-// AlignAlignments()
-//
-// Returns the alignment of two MultiSequence objects.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model){
-
-  // print some info about the alignment
-  if (enableVerbose){
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel();
-    cerr << "] vs. ";
-    for (int i = 0; i < align2->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel();
-    cerr << "]: ";
-  }
-
-  VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices);
-  pair<SafeVector<char> *, float> alignment;
-
-  // choose the alignment routine depending on the "cosmetic" gap penalties used
-  if (gapOpenPenalty == 0 && gapContinuePenalty == 0)
-    alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior);
-  else
-    alignment = model.ComputeAlignmentWithGapPenalties (align1, align2,
-                                                        *posterior, align1->GetNumSequences(), align2->GetNumSequences(),
-                                                        gapOpenPenalty, gapContinuePenalty);
-
-  delete posterior;
-
-  if (enableVerbose){
-
-    // compute total length of sequences
-    int totLength = 0;
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      for (int j = 0; j < align2->GetNumSequences(); j++)
-        totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength());
-
-    // give an "accuracy" measure for the alignment
-    cerr << alignment.second / totLength << endl;
-  }
-
-  // now build final alignment
-  MultiSequence *result = new MultiSequence();
-  for (int i = 0; i < align1->GetNumSequences(); i++)
-    result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X'));
-  for (int i = 0; i < align2->GetNumSequences(); i++)
-    result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y'));
-  result->SortByLabel();
-
-  // free temporary alignment
-  delete alignment.first;
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// DoRelaxation()
-//
-// Performs one round of the consistency transformation.  The
-// formula used is:
-//                     1
-//    P'(x[i]-y[j]) = ---  sum   sum P(x[i]-z[k]) P(z[k]-y[j])
-//                    |S| z in S  k
-//
-// where S = {x, y, all other sequences...}
-//
-/////////////////////////////////////////////////////////////////
-
-void DoRelaxation (MultiSequence *sequences, SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-  const int numSeqs = sequences->GetNumSequences();
-
-  SafeVector<SafeVector<SparseMatrix *> > newSparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-
-  // for every pair of sequences
-  for (int i = 0; i < numSeqs; i++){
-    for (int j = i+1; j < numSeqs; j++){
-      Sequence *seq1 = sequences->GetSequence (i);
-      Sequence *seq2 = sequences->GetSequence (j);
-
-      if (enableVerbose)
-        cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. "
-             << "(" << j+1 << ") " << seq2->GetHeader() << ": ";
-
-      // get the original posterior matrix
-      VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr);
-      VF &posterior = *posteriorPtr;
-
-      const int seq1Length = seq1->GetLength();
-      const int seq2Length = seq2->GetLength();
-
-      // contribution from the summation where z = x and z = y
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k];
-
-      if (enableVerbose)
-        cerr << sparseMatrices[i][j]->GetNumCells() << " --> ";
-
-      // contribution from all other sequences
-      for (int k = 0; k < numSeqs; k++) if (k != i && k != j){
-        Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior);
-      }
-
-      // now renormalization
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs;
-
-      // save the new posterior matrix
-      newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior);
-      newSparseMatrices[j][i] = newSparseMatrices[i][j]->ComputeTranspose();
-
-      if (enableVerbose)
-        cerr << newSparseMatrices[i][j]->GetNumCells() << " -- ";
-
-      delete posteriorPtr;
-
-      if (enableVerbose)
-        cerr << "done." << endl;
-    }
-  }
-
-  // now replace the old posterior matrices
-  for (int i = 0; i < numSeqs; i++){
-    for (int j = 0; j < numSeqs; j++){
-      delete sparseMatrices[i][j];
-      sparseMatrices[i][j] = newSparseMatrices[i][j];
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoRelaxation()
-//
-// Computes the consistency transformation for a single sequence
-// z, and adds the transformed matrix to "posterior".
-/////////////////////////////////////////////////////////////////
-
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){
-
-  assert (matXZ);
-  assert (matZY);
-
-  int lengthX = matXZ->GetSeq1Length();
-  int lengthY = matZY->GetSeq2Length();
-  assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length());
-
-  // for every x[i]
-  for (int i = 1; i <= lengthX; i++){
-    SafeVector<PIF>::iterator XZptr = matXZ->GetRowPtr(i);
-    SafeVector<PIF>::iterator XZend = XZptr + matXZ->GetRowSize(i);
-
-    VF::iterator base = posterior.begin() + i * (lengthY + 1);
-
-    // iterate through all x[i]-z[k]
-    while (XZptr != XZend){
-      SafeVector<PIF>::iterator ZYptr = matZY->GetRowPtr(XZptr->first);
-      SafeVector<PIF>::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first);
-      const float XZval = XZptr->second;
-
-      // iterate through all z[k]-y[j]
-      while (ZYptr != ZYend){
-        base[ZYptr->first] += XZval * ZYptr->second;;
-        ZYptr++;
-      }
-      XZptr++;
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoIterativeRefinement()
-//
-// Performs a single round of randomized partionining iterative
-// refinement.
-/////////////////////////////////////////////////////////////////
-
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment){
-  set<int> groupOne, groupTwo;
-
-  // create two separate groups
-  for (int i = 0; i < alignment->GetNumSequences(); i++){
-    if (random() % 2)
-      groupOne.insert (i);
-    else
-      groupTwo.insert (i);
-  }
-
-  if (groupOne.empty() || groupTwo.empty()) return;
-
-  // project into the two groups
-  MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs);
-  MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs);
-  delete alignment;
-
-  // realign
-  alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model);
-}
-
-/*
-float ScoreAlignment (MultiSequence *alignment, MultiSequence *sequences, SparseMatrix **sparseMatrices, const int numSeqs){
-  int totLength = 0;
-  float score = 0;
-
-  for (int a = 0; a < alignment->GetNumSequences(); a++){
-    for (int b = a+1; b < alignment->GetNumSequences(); b++){
-      Sequence *seq1 = alignment->GetSequence(a);
-      Sequence *seq2 = alignment->GetSequence(b);
-
-      const int seq1Length = sequences->GetSequence(seq1->GetLabel())->GetLength();
-      const int seq2Length = sequences->GetSequence(seq2->GetLabel())->GetLength();
-
-      totLength += min (seq1Length, seq2Length);
-
-      int pos1 = 0, pos2 = 0;
-      for (int i = 1; i <= seq1->GetLength(); i++){
-        char ch1 = seq1->GetPosition(i);
-        char ch2 = seq2->GetPosition(i);
-
-        if (ch1 != '-') pos1++;
-        if (ch2 != '-') pos2++;
-        if (ch1 != '-' && ch2 != '-'){
-          score += sparseMatrices[a * numSeqs + b]->GetValue (pos1, pos2);
-        }
-      }
-    }
-  }
-
-  return score / totLength;
-}
-*/
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc
deleted file mode 100644 (file)
index 5392f40..0000000
+++ /dev/null
@@ -1,1870 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Main.cc
-//
-// Main routines for MXSCARNA program.
-/////////////////////////////////////////////////////////////////
-
-#include "scarna.hpp"
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include "Defaults.h"
-#include "ScoreType.h"
-#include "ProbabilisticModel.h"
-#include "EvolutionaryTree.h"
-#include "SparseMatrix.h"
-#include "BPPMatrix.hpp"
-#include "StemCandidate.hpp"
-#include "Globaldp.hpp"
-#include "nrutil.h"
-#include "AlifoldMEA.h"
-#include <string>
-#include <sstream>
-#include <iomanip>
-#include <iostream>
-#include <list>
-#include <set>
-#include <algorithm>
-#include <cstdio>
-#include <cstdlib>
-#include <cerrno>
-#include <iomanip>
-#include <fstream>
-
-#include "RfoldWrapper.hpp"
-//static RFOLD::Rfold folder;
-
-using namespace::MXSCARNA;
-using namespace::RFOLD;
-
-string parametersInputFilename = "";
-string parametersOutputFilename = "no training";
-string annotationFilename = "";
-string weboutputFileName = "";
-
-ofstream *outputFile;
-
-bool enableTraining = false;
-bool enableVerbose = false;
-bool enableAllPairs = false;
-bool enableAnnotation = false;
-bool enableViterbi = false;
-bool enableClustalWOutput = false;
-bool enableTrainEmissions = false;
-bool enableAlignOrder = false;
-bool enableWebOutput  = false;
-bool enableStockholmOutput = false;
-bool enableMXSCARNAOutput = false;
-bool enableMcCaskillMEAMode = false;
-int numConsistencyReps = 2;
-int numPreTrainingReps = 0;
-int numIterativeRefinementReps = 100;
-int scsLength = SCSLENGTH;
-float cutoff = 0;
-float gapOpenPenalty = 0;
-float gapContinuePenalty = 0;
-float threshhold = 1.0;
-float BaseProbThreshold = BASEPROBTHRESHOLD;
-float BasePairConst = BASEPAIRCONST;
-int   BandWidth = BANDWIDTH;
-bool  useRfold = USERFOLD;
-SafeVector<string> sequenceNames;
-
-VF initDistrib (NumMatrixTypes);
-VF gapOpen (2*NumInsertStates);
-VF gapExtend (2*NumInsertStates);
-VVF emitPairs (256, VF (256, 1e-10));
-VF emitSingle (256, 1e-5);
-
-string alphabet = alphabetDefault;
-
-string *ssCons = NULL;
-
-const int MIN_PRETRAINING_REPS = 0;
-const int MAX_PRETRAINING_REPS = 20;
-const int MIN_CONSISTENCY_REPS = 0;
-const int MAX_CONSISTENCY_REPS = 5;
-const int MIN_ITERATIVE_REFINEMENT_REPS = 0;
-const int MAX_ITERATIVE_REFINEMENT_REPS = 1000;
-
-/////////////////////////////////////////////////////////////////
-// Function prototypes
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading();
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename);
-MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle);
-SafeVector<string> ParseParams (int argc, char **argv);
-void ReadParameters ();
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model,
-                                     SafeVector<BPPMatrix*> &BPPMatrices);
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model, SafeVector<BPPMatrix*> &BPPMatrices, float identity);
-SafeVector<SafeVector<SparseMatrix *> > DoRelaxation (MultiSequence *sequences, 
-                                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior);
-void Relax1 (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior);
-void DoBasePairProbabilityRelaxation (MultiSequence *sequences, 
-                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                     SafeVector<BPPMatrix*> &BPPMatrices);
-set<int> GetSubtree (const TreeNode *tree);
-void TreeBasedBiPartitioning (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                              const ProbabilisticModel &model, MultiSequence* &alignment,
-                              const TreeNode *tree, SafeVector<BPPMatrix*> &BPPMatrices);
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment);
-void WriteAnnotation (MultiSequence *alignment,
-                     const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-int ComputeScore (const SafeVector<pair<int, int> > &active, 
-                 const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices);
-std::vector<StemCandidate>* seq2scs(MultiSequence *Sequences, SafeVector<BPPMatrix*> &BPPMatrices, int BandWidth);
-void removeConflicts(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2);
-
-struct prob {
-    int i;
-    int j;
-    float p;
-};
-
-/////////////////////////////////////////////////////////////////
-// main()
-//
-// Calls all initialization routines and runs the MXSCARNA
-// aligner.
-/////////////////////////////////////////////////////////////////
-
-
-int main (int argc, char **argv){
-
-    // print MXSCARNA heading
-    PrintHeading();
-  
-    // parse program parameters
-    sequenceNames = ParseParams (argc, argv);
-    ReadParameters();
-    PrintParameters ("Using parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL);
-  
-  // now, we'll process all the files given as input.  If we are given
-  // several filenames as input, then we'll load all of those sequences
-  // simultaneously, as long as we're not training.  On the other hand,
-  // if we are training, then we'll treat each file as a separate
-  // training instance
-
-    if (enableMcCaskillMEAMode) {
-      MultiSequence *sequences = new MultiSequence(); assert (sequences);
-      for (int i = 0; i < (int) sequenceNames.size(); i++){
-         cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-         sequences->LoadMFA (sequenceNames[i], true);
-      }
-
-      const int numSeqs = sequences->GetNumSequences();
-      SafeVector<BPPMatrix*> BPPMatrices;
-
-      // compute the base pairing matrices for each sequences
-      for(int i = 0; i < numSeqs; i++) {
-         Sequence *tmpSeq = sequences->GetSequence(i);
-         string   seq = tmpSeq->GetString();
-         int    n_seq = tmpSeq->GetLength();
-         BPPMatrix *bppmat = new BPPMatrix(seq, n_seq);
-         BPPMatrices.push_back(bppmat);
-      }
-      AlifoldMEA alifold(sequences, BPPMatrices, BasePairConst);
-      alifold.Run();
-      ssCons = alifold.getSScons();
-
-      if (enableStockholmOutput) {
-         sequences->WriteSTOCKHOLM (cout, ssCons);
-      }
-      else if (enableMXSCARNAOutput){
-         sequences->WriteMXSCARNA (cout, ssCons);
-      }
-      else {
-         sequences->WriteMFA (cout, ssCons);
-      }
-
-      delete sequences;
-  }
-  // if we are training
-  else if (enableTraining){
-
-    // build new model for aligning
-    ProbabilisticModel model (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-
-    // prepare to average parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0;
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0;
-    }
-   
-    // align each file individually
-    for (int i = 0; i < (int) sequenceNames.size(); i++){
-
-      VF thisInitDistrib (NumMatrixTypes);
-      VF thisGapOpen (2*NumInsertStates);
-      VF thisGapExtend (2*NumInsertStates);
-      VVF thisEmitPairs (256, VF (256, 1e-10));
-      VF thisEmitSingle (256, 1e-5);
-      
-      // load sequence file
-      MultiSequence *sequences = new MultiSequence(); assert (sequences);
-      cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-      sequences->LoadMFA (sequenceNames[i], true);
-
-      // align sequences
-      DoAlign (sequences, model, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle);
-
-      // add in contribution of the derived parameters
-      for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i];
-      for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i];
-      for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i];
-      if (enableTrainEmissions){
-       for (int i = 0; i < (int) emitPairs.size(); i++) 
-         for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j];
-       for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i];
-      }
-
-      delete sequences;
-    }
-
-    // compute new parameters and print them out
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= (int) sequenceNames.size();
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= (int) sequenceNames.size();
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= (int) sequenceNames.size();
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++) 
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= (int) sequenceNames.size();
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= sequenceNames.size();
-    }
-    
-    PrintParameters ("Trained parameter set:",
-                     initDistrib, gapOpen, gapExtend, emitPairs, emitSingle,
-                     parametersOutputFilename.c_str());
-  }
-  // pass
-  // if we are not training, we must simply want to align some sequences
-  else {
-    // load all files together
-    MultiSequence *sequences = new MultiSequence(); assert (sequences);
-    for (int i = 0; i < (int) sequenceNames.size(); i++){
-      cerr << "Loading sequence file: " << sequenceNames[i] << endl;
-
-      sequences->LoadMFA (sequenceNames[i], true);
-    }
-
-    // do all "pre-training" repetitions first
-    // NOT execute 
-    for (int ct = 0; ct < numPreTrainingReps; ct++){
-      enableTraining = true;
-
-      // build new model for aligning
-      ProbabilisticModel model (initDistrib, gapOpen, gapExtend, 
-                                emitPairs, emitSingle);
-
-      // do initial alignments
-      DoAlign (sequences, model, initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-
-      // print new parameters
-      PrintParameters ("Recomputed parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL);
-
-      enableTraining = false;
-    }
-
-    // now, we can perform the alignments and write them out
-    if (enableWebOutput) {
-       outputFile = new ofstream(weboutputFileName.c_str());
-       if (!outputFile) {
-           cerr << "cannot open output file." << weboutputFileName << endl;
-           exit(1);
-       }
-        *outputFile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
-       *outputFile << "<result>" << endl;
-    }
-       MultiSequence *alignment = DoAlign (sequences,
-                                           ProbabilisticModel (initDistrib, gapOpen, gapExtend,  emitPairs, emitSingle),
-                                           initDistrib, gapOpen, gapExtend, emitPairs, emitSingle);
-    
-
-    if (!enableAllPairs){
-       if (enableClustalWOutput) {
-           alignment->WriteALN (cout);
-       }
-       else if (enableWebOutput) {
-           alignment->WriteWEB (*outputFile, ssCons);
-//         computeStructureWithAlifold ();
-       }
-       else if (enableStockholmOutput) {
-           alignment->WriteSTOCKHOLM (cout, ssCons);
-       }
-       else if (enableMXSCARNAOutput) {
-           alignment->WriteMXSCARNA (cout, ssCons);
-       }
-       else {
-           alignment->WriteMFA (cout, ssCons);
-       }
-    }
-
-    if (enableWebOutput) {
-       *outputFile << "</result>" << endl;
-       delete outputFile;
-    }
-    
-    delete ssCons;
-    delete alignment;
-    delete sequences;
-   
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintHeading()
-//
-// Prints heading for PROBCONS program.
-/////////////////////////////////////////////////////////////////
-
-void PrintHeading (){
-  cerr << endl
-       << "Multiplex SCARNA"<< endl
-       << "version " << VERSION << " - align multiple RNA sequences and print to standard output" << endl
-       << "Written by Yasuo Tabei" << endl
-       << endl;
-}
-
-/////////////////////////////////////////////////////////////////
-// PrintParameters()
-//
-// Prints PROBCONS parameters to STDERR.  If a filename is
-// specified, then the parameters are also written to the file.
-/////////////////////////////////////////////////////////////////
-
-void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen,
-                      const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename){
-
-  // print parameters to the screen
-  cerr << message << endl
-       << "    initDistrib[] = { ";
-  for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " ";
-  cerr << "}" << endl
-       << "        gapOpen[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " ";
-  cerr << "}" << endl
-       << "      gapExtend[] = { ";
-  for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " ";
-  cerr << "}" << endl
-       << endl;
-
-  /*
-  for (int i = 0; i < 5; i++){
-    for (int j = 0; j <= i; j++){
-      cerr << emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]] << " ";
-    }
-    cerr << endl;
-    }*/
-
-  // if a file name is specified
-  if (filename){
-
-    // attempt to open the file for writing
-    FILE *file = fopen (filename, "w");
-    if (!file){
-      cerr << "ERROR: Unable to write parameter file: " << filename << endl;
-      exit (1);
-    }
-
-    // if successful, then write the parameters to the file
-    for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n");
-    for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n");
-    fprintf (file, "%s\n", alphabet.c_str());
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      for (int j = 0; j <= i; j++)
-       fprintf (file, "%.10f ", emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]]);
-      fprintf (file, "\n");
-    }
-    for (int i = 0; i < (int) alphabet.size(); i++)
-      fprintf (file, "%.10f ", emitSingle[(unsigned char) alphabet[i]]);
-    fprintf (file, "\n");
-    fclose (file);
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoAlign()
-//
-// First computes all pairwise posterior probability matrices.
-// Then, computes new parameters if training, or a final
-// alignment, otherwise.
-/////////////////////////////////////////////////////////////////
-MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle){
-
-  assert (sequences);
-
-  const int numSeqs = sequences->GetNumSequences();
-  VVF distances (numSeqs, VF (numSeqs, 0));
-  VVF identities (numSeqs, VF (numSeqs, 0));
-  SafeVector<SafeVector<SparseMatrix *> > sparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-  
-  SafeVector<BPPMatrix*> BPPMatrices;
-  
-  RfoldWrapper rfoldWrapper;
-  if (useRfold) {
-    BPPMatrices 
-      = rfoldWrapper.getProb(sequenceNames, sequences, BASEPROBTHRESHOLD, BandWidth);
-  }
-  else {
-    for(int i = 0; i < numSeqs; i++) {
-      Sequence *tmpSeq = sequences->GetSequence(i);
-      string   seq = tmpSeq->GetString();
-      int    n_seq = tmpSeq->GetLength();
-      BPPMatrix *bppmat = new BPPMatrix(seq, n_seq, BASEPROBTHRESHOLD);
-      BPPMatrices.push_back(bppmat);
-    }
-  }
-    
-  if (enableTraining){
-    // prepare to average parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0;
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0;
-    }
-  }
-
-  // skip posterior calculations if we just want to do Viterbi alignments
-  if (!enableViterbi){
-
-    // do all pairwise alignments for posterior probability matrices
-    for (int a = 0; a < numSeqs-1; a++){
-      for (int b = a+1; b < numSeqs; b++){
-       Sequence *seq1 = sequences->GetSequence (a); 
-       Sequence *seq2 = sequences->GetSequence (b);
-       
-       // verbose output
-       if (enableVerbose)
-         cerr << "Computing posterior matrix: (" << a+1 << ") " << seq1->GetHeader() << " vs. "
-              << "(" << b+1 << ") " << seq2->GetHeader() << " -- ";
-       
-       // compute forward and backward probabilities
-       VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward);
-       VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward);
-       
-       // if we are training, then we'll simply want to compute the
-       // expected counts for each region within the matrix separately;
-       // otherwise, we'll need to put all of the regions together and
-       // assemble a posterior probability match matrix
-       
-       // so, if we're training
-       if (enableTraining){
-         
-         // compute new parameters
-         VF thisInitDistrib (NumMatrixTypes);
-         VF thisGapOpen (2*NumInsertStates);
-         VF thisGapExtend (2*NumInsertStates);
-         VVF thisEmitPairs (256, VF (256, 1e-10));
-         VF thisEmitSingle (256, 1e-5);
-         
-         model.ComputeNewParameters (seq1, seq2, *forward, *backward, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle, enableTrainEmissions);
-
-         // add in contribution of the derived parameters
-         for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i];
-         for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i];
-         for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i];
-         if (enableTrainEmissions){
-           for (int i = 0; i < (int) emitPairs.size(); i++) 
-             for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j];
-           for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i];
-         }
-
-         // let us know that we're done.
-         if (enableVerbose) cerr << "done." << endl;
-       }
-       // pass
-       else {
-
-         // compute posterior probability matrix
-         VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior);
-
-         // compute sparse representations
-         sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior);
-         sparseMatrices[b][a] = NULL; 
-         
-         if (!enableAllPairs){
-           // perform the pairwise sequence alignment
-           pair<SafeVector<char> *, float> alignment = model.ComputeAlignment (seq1->GetLength(),
-                                                                               seq2->GetLength(),
-                                                                               *posterior);
-           
-           Sequence *tmpSeq1 = seq1->AddGaps (alignment.first, 'X');
-           Sequence *tmpSeq2 = seq2->AddGaps (alignment.first, 'Y');
-
-           // compute sequence identity for each pair of sequenceses
-           int length = tmpSeq1->GetLength();
-           int matchCount = 0;
-           int misMatchCount = 0;
-           for (int k = 1; k <= length; k++) {
-               int ch1 = tmpSeq1->GetPosition(k);
-               int ch2 = tmpSeq2->GetPosition(k);
-               if (ch1 == ch2 && ch1 != '-' && ch2 != '-') { ++matchCount; }
-               else if (ch1 != ch2 && ch1 != '-' && ch2 != '-') { ++misMatchCount; }
-           }
-
-           identities[a][b] = identities[b][a] = (float)matchCount/(float)(matchCount + misMatchCount);
-
-           // compute "expected accuracy" distance for evolutionary tree computation
-           float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength());
-           distances[a][b] = distances[b][a] = distance;
-           
-           if (enableVerbose)
-             cerr << setprecision (10) << distance << endl;
-           
-             delete alignment.first;
-         }
-         else {
-           // let us know that we're done.
-           if (enableVerbose) cerr << "done." << endl;
-         }
-         
-         delete posterior;
-       }
-       
-       delete forward;
-       delete backward;
-      }
-    }
-  }
-
-  // now average out parameters derived
-  if (enableTraining){
-    // compute new parameters
-    for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= numSeqs * (numSeqs - 1) / 2;
-    for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= numSeqs * (numSeqs - 1) / 2;
-    for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= numSeqs * (numSeqs - 1) / 2;
-
-    if (enableTrainEmissions){
-      for (int i = 0; i < (int) emitPairs.size(); i++)
-       for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= numSeqs * (numSeqs - 1) / 2;
-      for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= numSeqs * (numSeqs - 1) / 2;
-    }
-  }
-
-  // see if we still want to do some alignments
-  else {
-      // pass
-    if (!enableViterbi){
-
-      // perform the consistency transformation the desired number of times
-      for (int r = 0; r < numConsistencyReps; r++){
-       SafeVector<SafeVector<SparseMatrix *> > newSparseMatrices = DoRelaxation (sequences, sparseMatrices);
-
-       // now replace the old posterior matrices
-       for (int i = 0; i < numSeqs; i++){
-         for (int j = 0; j < numSeqs; j++){
-           delete sparseMatrices[i][j];
-           sparseMatrices[i][j] = newSparseMatrices[i][j];
-         }
-       }
-      }
-      if (numSeqs > 8) {
-       for (int r = 0; r < 1; r++) 
-         DoBasePairProbabilityRelaxation(sequences, sparseMatrices, BPPMatrices);
-      }
-    }
-
-    MultiSequence *finalAlignment = NULL;
-
-    if (enableAllPairs){
-      for (int a = 0; a < numSeqs-1; a++){
-       for (int b = a+1; b < numSeqs; b++){
-         Sequence *seq1 = sequences->GetSequence (a);
-         Sequence *seq2 = sequences->GetSequence (b);
-         
-         if (enableVerbose)
-           cerr << "Performing pairwise alignment: (" << a+1 << ") " << seq1->GetHeader() << " vs. "
-                << "(" << b+1 << ") " << seq2->GetHeader() << " -- ";
-
-         
-         // perform the pairwise sequence alignment
-         pair<SafeVector<char> *, float> alignment;
-         if (enableViterbi)
-           alignment = model.ComputeViterbiAlignment (seq1, seq2);
-         else {
-
-           // build posterior matrix
-           VF *posterior = sparseMatrices[a][b]->GetPosterior(); assert (posterior);
-           int length = (seq1->GetLength() + 1) * (seq2->GetLength() + 1);
-           for (int i = 0; i < length; i++) (*posterior)[i] -= cutoff;
-
-           alignment = model.ComputeAlignment (seq1->GetLength(), seq2->GetLength(), *posterior);
-           delete posterior;
-         }
-
-         // write pairwise alignments 
-         string name = seq1->GetHeader() + "-" + seq2->GetHeader() + (enableClustalWOutput ? ".aln" : ".fasta");
-         ofstream outfile (name.c_str());
-         
-         MultiSequence *result = new MultiSequence();
-         result->AddSequence (seq1->AddGaps(alignment.first, 'X'));
-         result->AddSequence (seq2->AddGaps(alignment.first, 'Y'));
-         if (enableClustalWOutput)
-           result->WriteALN (outfile);
-         else
-           result->WriteMFA (outfile);
-         
-         outfile.close();
-         
-         delete alignment.first;
-       }
-      }
-    }
-    
-    // now if we still need to do a final multiple alignment
-    else {
-      
-      if (enableVerbose)
-       cerr << endl;
-      
-      // compute the evolutionary tree
-      TreeNode *tree = TreeNode::ComputeTree (distances, identities);
-      
-      if (enableWebOutput) {
-         *outputFile << "<tree>" << endl;
-         tree->Print (*outputFile, sequences);
-         *outputFile << "</tree>" << endl;
-      }
-      else {
-         tree->Print (cerr, sequences);
-         cerr << endl;
-      }
-      // make the final alignment
-      finalAlignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model, BPPMatrices);
-      
-      // build annotation
-      if (enableAnnotation){
-       WriteAnnotation (finalAlignment, sparseMatrices);
-      }
-
-      delete tree;
-    }
-
-    if (!enableViterbi){
-      // delete sparse matrices
-      for (int a = 0; a < numSeqs-1; a++){
-       for (int b = a+1; b < numSeqs; b++){
-         delete sparseMatrices[a][b];
-         delete sparseMatrices[b][a];
-       }
-      }
-    }
-
-    AlifoldMEA alifold(finalAlignment, BPPMatrices, BasePairConst);
-    alifold.Run();
-    ssCons = alifold.getSScons();
-
-    return finalAlignment;
-
-  }
-
-  return NULL;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetInteger()
-//
-// Attempts to parse an integer from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetInteger (char *data, int *val){
-  char *endPtr;
-  long int retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtol (data, &endPtr, 0);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false;
-  if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false;
-  *val = (int) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// GetFloat()
-//
-// Attempts to parse a float from the character string given.
-// Returns true only if no parsing error occurs.
-/////////////////////////////////////////////////////////////////
-
-bool GetFloat (char *data, float *val){
-  char *endPtr;
-  double retVal;
-
-  assert (val);
-
-  errno = 0;
-  retVal = strtod (data, &endPtr);
-  if (retVal == 0 && (errno != 0 || data == endPtr)) return false;
-  if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false;
-  *val = (float) retVal;
-  return true;
-}
-
-/////////////////////////////////////////////////////////////////
-// ParseParams()
-//
-// Parse all command-line options.
-/////////////////////////////////////////////////////////////////
-
-SafeVector<string> ParseParams (int argc, char **argv){
-
-  if (argc < 2){
-
-    cerr << "MXSCARNA comes with ABSOLUTELY NO WARRANTY.  This is free software, and" << endl
-         << "you are welcome to redistribute it under certain conditions.  See the" << endl
-         << "file COPYING.txt for details." << endl
-         << endl
-         << "Usage:" << endl
-         << "       mxscarna [OPTION]... [MFAFILE]..." << endl
-         << endl
-         << "Description:" << endl
-         << "       Align sequences in MFAFILE(s) and print result to standard output" << endl
-         << endl
-         << "       -clustalw" << endl
-         << "              use CLUSTALW output format instead of MFA" << endl
-        << endl
-        << "       -stockholm" << endl
-         << "              use STOCKHOLM output format instead of MFA" << endl
-        << endl
-        << "       -mxscarna" << endl
-         << "              use MXSCARNA output format instead of MFA" << endl
-        << endl
-        << "       -weboutput /<output_path>/<outputfilename>" << endl
-        << "        use web output format" << endl
-        << endl
-         << "       -c, --consistency REPS" << endl
-         << "              use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS
-         << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl
-         << endl
-         << "       -ir, --iterative-refinement REPS" << endl
-         << "              use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS
-         << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl
-         << endl
-        << "       -pre, --pre-training REPS" << endl
-        << "              use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS
-        << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl
-        << endl
-        << "       -pairs" << endl
-         << "              generate all-pairs pairwise alignments" << endl
-         << endl
-        << "       -viterbi" << endl
-        << "              use Viterbi algorithm to generate all pairs (automatically enables -pairs)" << endl
-        << endl
-         << "       -v, --verbose" << endl
-         << "              report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl
-         << endl
-         << "       -annot FILENAME" << endl
-         << "              write annotation for multiple alignment to FILENAME" << endl
-         << endl
-         << "       -t, --train FILENAME" << endl
-         << "              compute EM transition probabilities, store in FILENAME (default: "
-         << parametersOutputFilename << ")" << endl
-         << endl
-         << "       -e, --emissions" << endl
-         << "              also reestimate emission probabilities (default: "
-         << (enableTrainEmissions ? "on" : "off") << ")" << endl
-         << endl
-        << "       -p, --paramfile FILENAME" << endl
-        << "              read parameters from FILENAME (default: "
-        << parametersInputFilename << ")" << endl
-        << endl
-        << "       -a, --alignment-order" << endl
-        << "              print sequences in alignment order rather than input order (default: "
-        << (enableAlignOrder ? "on" : "off") << ")" << endl
-        << endl
-        << "       -s THRESHOLD" << endl
-        << "               the threshold of SCS alignment" << endl
-        << endl
-        << "               In default, for less than " << threshhold << ", the SCS aligment is applied. " << endl
-        << "       -l SCSLENGTH" << endl
-        << "               the length of stem candidates " << SCSLENGTH << endl
-        << endl
-        << "       -b BASEPROBTRHESHHOLD" << endl
-        << "               the threshold of base pairing probability " << BASEPROBTHRESHOLD << endl
-        << endl
-        << "       -m, --mccaskillmea" << endl
-        << "               McCaskill MEA MODE: input the clustalw format file and output the secondary structure predicted by McCaskill MEA" << endl
-        << endl
-        << "       -g BASEPAIRSCORECONST" << endl
-        << "               the control parameter of the prediction of base pairs, default:" << BasePairConst << endl
-         << endl
-        << "       -w BANDWIDTH" << endl
-        << "               the control parameter of the distance of stem candidates, default:" << BANDWIDTH << endl
-        << "       -rfold" << endl
-        << "               use Rfold instead of global McCaskill algorithm to calcurate base paring probality matrices, default: (" << (useRfold? "on" : "off") << ")" << endl
-        << endl; 
-
-
-    //          << "       -go, --gap-open VALUE" << endl
-    //          << "              gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl
-    //  << endl
-    //  << "       -ge, --gap-extension VALUE" << endl
-    //  << "              gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl
-    //  << endl
-    //         << "       -co, --cutoff CUTOFF" << endl
-    //         << "              subtract 0 <= CUTOFF <= 1 (default: " << cutoff << ") from all posterior values before final alignment" << endl
-    //         << endl
-    
-    exit (1);
-  }
-
-  SafeVector<string> sequenceNames;
-  int tempInt;
-  float tempFloat;
-
-  for (int i = 1; i < argc; i++){
-    if (argv[i][0] == '-'){
-
-      // training
-      if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){
-        enableTraining = true;
-        if (i < argc - 1)
-          parametersOutputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      
-      // emission training
-      else if (!strcmp (argv[i], "-e") || !strcmp (argv[i], "--emissions")){
-        enableTrainEmissions = true;
-      }
-
-      // parameter file
-      else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){
-        if (i < argc - 1)
-          parametersInputFilename = string (argv[++i]);
-        else {
-          cerr << "ERROR: Filename expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      else if (! strcmp (argv[i], "-s")) {
-       if (i < argc - 1){
-         if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat < 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-              exit (1);
-            }
-            else
-              threshhold = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      
-      else if (! strcmp (argv[i], "-l")) {
-         if (i < argc - 1) {
-             if (!GetInteger (argv[++i], &tempInt)){
-                 cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempInt <= 0 || 6 <= tempInt) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                          << "1 and 6" << "." << endl;
-                     exit (1);
-                 }
-                 else
-                     scsLength = tempInt;
-             }
-         }
-      }
-      else if (! strcmp (argv[i], "-b")) {
-         if (i < argc - 1) {
-             if (!GetFloat (argv[++i], &tempFloat)){
-                 cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempFloat < 0 && 1 < tempFloat) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-                     exit (1);
-                 }
-                 else
-                     BaseProbThreshold = tempFloat;
-             }
-         }
-      }
-      else if (! strcmp (argv[i], "-g")) {
-         if (i < argc - 1) {
-             if (!GetFloat (argv[++i], &tempFloat)){
-                 cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-                 exit (1);
-             }
-             else {
-                 if (tempFloat < 0 && 1 < tempFloat) {
-                     cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl;
-                     exit (1);
-                 }
-                 else
-                     BasePairConst = tempFloat;
-             }
-         }
-      }
-      
-      // number of consistency transformations
-      else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numConsistencyReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // number of randomized partitioning iterative refinement passes
-      else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numIterativeRefinementReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-      else if (!strcmp (argv[i], "-rfold")){
-        useRfold = true;
-      }
-      // number of EM pre-training rounds
-      else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){
-              cerr << "ERROR: For option " << argv[i-1] << ", integer must be between "
-                   << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl;
-              exit (1);
-            }
-            else
-              numPreTrainingReps = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // the distance of stem candidate
-      else if (!strcmp (argv[i], "-w")){
-        if (i < argc - 1){
-          if (!GetInteger (argv[++i], &tempInt)){
-            cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-              BandWidth = tempInt;
-          }
-        }
-        else {
-          cerr << "ERROR: Integer expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap open penalty
-      else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapOpenPenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // gap extension penalty
-      else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat > 0){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl;
-              exit (1);
-            }
-            else
-              gapContinuePenalty = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // all-pairs pairwise alignments
-      else if (!strcmp (argv[i], "-pairs")){
-        enableAllPairs = true;
-      }
-
-      // all-pairs pairwise Viterbi alignments
-      else if (!strcmp (argv[i], "-viterbi")){
-        enableAllPairs = true;
-       enableViterbi = true;
-      }
-
-      // annotation files
-      else if (!strcmp (argv[i], "-annot")){
-        enableAnnotation = true;
-        if (i < argc - 1)
-         annotationFilename = argv[++i];
-        else {
-          cerr << "ERROR: FILENAME expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // clustalw output format
-      else if (!strcmp (argv[i], "-clustalw")){
-       enableClustalWOutput = true;
-      }
-      // mxscarna output format
-      else if (!strcmp (argv[i], "-mxscarna")) {
-         enableMXSCARNAOutput = true;
-      }
-      // stockholm output format
-      else if (!strcmp (argv[i], "-stockholm")) {
-         enableStockholmOutput = true;
-      }
-      // web output format
-      else if (!strcmp (argv[i], "-weboutput")) {
-         if (i < argc - 1) {
-             weboutputFileName = string(argv[++i]);
-         }
-         else {
-             cerr << "ERROR: Invalid following option " << argv[i-1] << ": " << argv[i] << endl;
-             exit (1);
-         }
-
-         enableWebOutput = true;
-      }
-
-      // cutoff
-      else if (!strcmp (argv[i], "-co") || !strcmp (argv[i], "--cutoff")){
-        if (i < argc - 1){
-          if (!GetFloat (argv[++i], &tempFloat)){
-            cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl;
-            exit (1);
-          }
-          else {
-            if (tempFloat < 0 || tempFloat > 1){
-              cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must be between 0 and 1." << endl;
-              exit (1);
-            }
-            else
-              cutoff = tempFloat;
-          }
-        }
-        else {
-          cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl;
-          exit (1);
-        }
-      }
-
-      // verbose reporting
-      else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){
-        enableVerbose = true;
-      }
-
-      // alignment order
-      else if (!strcmp (argv[i], "-a") || !strcmp (argv[i], "--alignment-order")){
-       enableAlignOrder = true;
-      }
-      // McCaskill MEA MODE
-      else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--mccaskillmea")){
-        enableMcCaskillMEAMode = true;
-      }
-      // bad arguments
-      else {
-        cerr << "ERROR: Unrecognized option: " << argv[i] << endl;
-        exit (1);
-      }
-    }
-    else {
-      sequenceNames.push_back (string (argv[i]));
-    }
-  }
-
-  if (enableTrainEmissions && !enableTraining){
-    cerr << "ERROR: Training emissions (-e) requires training (-t)" << endl;
-    exit (1);
-  }
-
-  return sequenceNames;
-}
-
-/////////////////////////////////////////////////////////////////
-// ReadParameters()
-//
-// Read initial distribution, transition, and emission
-// parameters from a file.
-/////////////////////////////////////////////////////////////////
-
-void ReadParameters (){
-
-  ifstream data;
-
-  emitPairs = VVF (256, VF (256, 1e-10));
-  emitSingle = VF (256, 1e-5);
-
-  // read initial state distribution and transition parameters
-  // pass
-  if (parametersInputFilename == string ("")){
-    if (NumInsertStates == 1){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i];
-    }
-    else if (NumInsertStates == 2){
-      for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i];
-      for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i];
-    }
-    else {
-      cerr << "ERROR: No default initial distribution/parameter settings exist" << endl
-           << "       for " << NumInsertStates << " pairs of insert states.  Use --paramfile." << endl;
-      exit (1);
-    }
-
-    alphabet = alphabetDefault;
-
-    for (int i = 0; i < (int) alphabet.length(); i++){
-      emitSingle[(unsigned char) tolower(alphabet[i])] = emitSingleDefault[i];
-      emitSingle[(unsigned char) toupper(alphabet[i])] = emitSingleDefault[i];
-      for (int j = 0; j <= i; j++){
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j];
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j];
-      }
-    }
-  }
-  else {
-    data.open (parametersInputFilename.c_str());
-    if (data.fail()){
-      cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl;
-      exit (1);
-    }
-    
-    string line[3];
-    for (int i = 0; i < 3; i++){
-      if (!getline (data, line[i])){
-       cerr << "ERROR: Unable to read transition parameters from parameter file: " << parametersInputFilename << endl;
-       exit (1);
-      }
-    }
-    istringstream data2;
-    data2.clear(); data2.str (line[0]); for (int i = 0; i < NumMatrixTypes; i++) data2 >> initDistrib[i];
-    data2.clear(); data2.str (line[1]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapOpen[i];
-    data2.clear(); data2.str (line[2]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapExtend[i];
-
-    if (!getline (data, line[0])){
-      cerr << "ERROR: Unable to read alphabet from scoring matrix file: " << parametersInputFilename << endl;
-      exit (1);
-    }
-    
-    // read alphabet as concatenation of all characters on alphabet line
-    alphabet = "";
-    string token;
-    data2.clear(); data2.str (line[0]); while (data2 >> token) alphabet += token;
-
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      for (int j = 0; j <= i; j++){
-       float val;
-        data >> val;
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val;
-       emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val;
-       emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val;
-      }
-    }
-
-    for (int i = 0; i < (int) alphabet.size(); i++){
-      float val;
-      data >> val;
-      emitSingle[(unsigned char) tolower(alphabet[i])] = val;
-      emitSingle[(unsigned char) toupper(alphabet[i])] = val;
-    }
-    data.close();
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// ProcessTree()
-//
-// Process the tree recursively.  Returns the aligned sequences
-// corresponding to a node or leaf of the tree.
-/////////////////////////////////////////////////////////////////
-float ide;
-MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences,
-                            const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, SafeVector<BPPMatrix*> &BPPMatrices) {
-  MultiSequence *result;
-
-  // check if this is a node of the alignment tree
-  if (tree->GetSequenceLabel() == -1){
-    MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model, BPPMatrices);
-    MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model, BPPMatrices);
-
-    assert (alignLeft);
-    assert (alignRight);
-    
-    result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model, BPPMatrices, tree->GetIdentity());
-    assert (result);
-
-    delete alignLeft;
-    delete alignRight;
-  }
-
-  // otherwise, this is a leaf of the alignment tree
-  else {
-    result = new MultiSequence(); assert (result);
-    result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone());
-  }
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeFinalAlignment()
-//
-// Compute the final alignment by calling ProcessTree(), then
-// performing iterative refinement as needed.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences,
-                                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                      const ProbabilisticModel &model, 
-                                     SafeVector<BPPMatrix*> &BPPMatrices) { 
-
-  MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model, BPPMatrices);
-
-  if (enableAlignOrder){
-    alignment->SaveOrdering();
-    enableAlignOrder = false;
-  }
-
-  // tree-based refinement 
-  // if you use the function, you can degrade the quality of the software.
-  // TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree, BPPMatrices);
-
-  // iterative refinement
-/*
-  for (int i = 0; i < numIterativeRefinementReps; i++)
-      DoIterativeRefinement (sparseMatrices, model, alignment);
-
-      cerr << endl;
-*/
-  // return final alignment
-  return alignment;
-}
-
-/////////////////////////////////////////////////////////////////
-// AlignAlignments()
-//
-// Returns the alignment of two MultiSequence objects.
-/////////////////////////////////////////////////////////////////
-
-MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2,
-                                const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                const ProbabilisticModel &model, 
-                               SafeVector<BPPMatrix*> &BPPMatrices, float identity){
-
-  // print some info about the alignment
-  if (enableVerbose){
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel();
-    cerr << "] vs. ";
-    for (int i = 0; i < align2->GetNumSequences(); i++)
-      cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel();
-    cerr << "]: ";
-  }
-
-  VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices, cutoff);
-
-  pair<SafeVector<char> *, float> alignment;
-  // choose the alignment routine depending on the "cosmetic" gap penalties used
-  if (gapOpenPenalty == 0 && gapContinuePenalty == 0) {
-
-    if(identity < threshhold) {
-       std::vector<StemCandidate> *pscs1, *pscs2;
-       pscs1 = seq2scs(align1, BPPMatrices, BandWidth);
-       pscs2 = seq2scs(align2, BPPMatrices, BandWidth);
-       std::vector<int> *matchPSCS1 = new std::vector<int>;
-       std::vector<int> *matchPSCS2 = new std::vector<int>;
-
-       Globaldp globaldp(pscs1, pscs2, align1, align2, matchPSCS1, matchPSCS2, posterior, BPPMatrices);
-       //float scsScore = globaldp.Run();
-
-       globaldp.Run();
-
-       removeConflicts(pscs1, pscs2, matchPSCS1, matchPSCS2);
-
-       alignment = model.ComputeAlignment2 (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior, pscs1, pscs2, matchPSCS1, matchPSCS2);
-
-    } else {
-       alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior);
-    }
-  }
-  else {
-    alignment = model.ComputeAlignmentWithGapPenalties (align1, align2,
-                                                        *posterior, align1->GetNumSequences(), align2->GetNumSequences(),
-                                                        gapOpenPenalty, gapContinuePenalty);
-  }
-
-  delete posterior;
-
-  if (enableVerbose){
-
-    // compute total length of sequences
-    int totLength = 0;
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      for (int j = 0; j < align2->GetNumSequences(); j++)
-        totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength());
-
-    // give an "accuracy" measure for the alignment
-    cerr << alignment.second / totLength << endl;
-  }
-
-  // now build final alignment
-  MultiSequence *result = new MultiSequence();
-  for (int i = 0; i < align1->GetNumSequences(); i++)
-    result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X'));
-  for (int i = 0; i < align2->GetNumSequences(); i++)
-    result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y'));
-  if (!enableAlignOrder)
-    result->SortByLabel();
-
-  // free temporary alignment
-  delete alignment.first;
-
-  return result;
-}
-
-/////////////////////////////////////////////////////////////////
-// DoRelaxation()
-//
-// Performs one round of the consistency transformation.  The
-// formula used is:
-//                     1
-//    P'(x[i]-y[j]) = ---  sum   sum P(x[i]-z[k]) P(z[k]-y[j])
-//                    |S| z in S  k
-//
-// where S = {x, y, all other sequences...}
-//
-/////////////////////////////////////////////////////////////////
-
-SafeVector<SafeVector<SparseMatrix *> > DoRelaxation (MultiSequence *sequences, 
-                                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-  const int numSeqs = sequences->GetNumSequences();
-
-  SafeVector<SafeVector<SparseMatrix *> > newSparseMatrices (numSeqs, SafeVector<SparseMatrix *>(numSeqs, NULL));
-
-  // for every pair of sequences
-  for (int i = 0; i < numSeqs; i++){
-    for (int j = i+1; j < numSeqs; j++){
-      Sequence *seq1 = sequences->GetSequence (i);
-      Sequence *seq2 = sequences->GetSequence (j);
-      
-      if (enableVerbose)
-        cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. "
-             << "(" << j+1 << ") " << seq2->GetHeader() << ": ";
-
-      // get the original posterior matrix
-      VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr);
-      VF &posterior = *posteriorPtr;
-
-      const int seq1Length = seq1->GetLength();
-      const int seq2Length = seq2->GetLength();
-
-      // contribution from the summation where z = x and z = y
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k];
-
-      if (enableVerbose)
-        cerr << sparseMatrices[i][j]->GetNumCells() << " --> ";
-
-      // contribution from all other sequences
-      for (int k = 0; k < numSeqs; k++) if (k != i && k != j){
-       if (k < i)
-         Relax1 (sparseMatrices[k][i], sparseMatrices[k][j], posterior);
-       else if (k > i && k < j)
-         Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior);
-       else {
-         SparseMatrix *temp = sparseMatrices[j][k]->ComputeTranspose();
-         Relax (sparseMatrices[i][k], temp, posterior);
-         delete temp;
-       }
-      }
-
-      // now renormalization
-      for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs;
-
-      // mask out positions not originally in the posterior matrix
-      SparseMatrix *matXY = sparseMatrices[i][j];
-      for (int y = 0; y <= seq2Length; y++) posterior[y] = 0;
-      for (int x = 1; x <= seq1Length; x++){
-       SafeVector<PIF>::iterator XYptr = matXY->GetRowPtr(x);
-       SafeVector<PIF>::iterator XYend = XYptr + matXY->GetRowSize(x);
-       VF::iterator base = posterior.begin() + x * (seq2Length + 1);
-       int curr = 0;
-       while (XYptr != XYend){
-
-         // zero out all cells until the first filled column
-         while (curr < XYptr->first){
-           base[curr] = 0;
-           curr++;
-         }
-
-         // now, skip over this column
-         curr++;
-         ++XYptr;
-       }
-       
-       // zero out cells after last column
-       while (curr <= seq2Length){
-         base[curr] = 0;
-         curr++;
-       }
-      }
-
-      // save the new posterior matrix
-      newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior);
-      newSparseMatrices[j][i] = NULL;
-
-      if (enableVerbose)
-        cerr << newSparseMatrices[i][j]->GetNumCells() << " -- ";
-
-      delete posteriorPtr;
-
-      if (enableVerbose)
-        cerr << "done." << endl;
-    }
-  }
-  
-  return newSparseMatrices;
-}
-
-/////////////////////////////////////////////////////////////////
-// Relax()
-//
-// Computes the consistency transformation for a single sequence
-// z, and adds the transformed matrix to "posterior".
-/////////////////////////////////////////////////////////////////
-
-void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){
-
-  assert (matXZ);
-  assert (matZY);
-
-  int lengthX = matXZ->GetSeq1Length();
-  int lengthY = matZY->GetSeq2Length();
-  assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length());
-
-  // for every x[i]
-  for (int i = 1; i <= lengthX; i++){
-    SafeVector<PIF>::iterator XZptr = matXZ->GetRowPtr(i);
-    SafeVector<PIF>::iterator XZend = XZptr + matXZ->GetRowSize(i);
-
-    VF::iterator base = posterior.begin() + i * (lengthY + 1);
-
-    // iterate through all x[i]-z[k]
-    while (XZptr != XZend){
-      SafeVector<PIF>::iterator ZYptr = matZY->GetRowPtr(XZptr->first);
-      SafeVector<PIF>::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first);
-      const float XZval = XZptr->second;
-
-      // iterate through all z[k]-y[j]
-      while (ZYptr != ZYend){
-        base[ZYptr->first] += XZval * ZYptr->second;
-       ZYptr++;
-      }
-      XZptr++;
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// Relax1()
-//
-// Computes the consistency transformation for a single sequence
-// z, and adds the transformed matrix to "posterior".
-/////////////////////////////////////////////////////////////////
-
-void Relax1 (SparseMatrix *matZX, SparseMatrix *matZY, VF &posterior){
-
-  assert (matZX);
-  assert (matZY);
-
-  int lengthZ = matZX->GetSeq1Length();
-  int lengthY = matZY->GetSeq2Length();
-
-  // for every z[k]
-  for (int k = 1; k <= lengthZ; k++){
-    SafeVector<PIF>::iterator ZXptr = matZX->GetRowPtr(k);
-    SafeVector<PIF>::iterator ZXend = ZXptr + matZX->GetRowSize(k);
-
-    // iterate through all z[k]-x[i]
-    while (ZXptr != ZXend){
-      SafeVector<PIF>::iterator ZYptr = matZY->GetRowPtr(k);
-      SafeVector<PIF>::iterator ZYend = ZYptr + matZY->GetRowSize(k);
-      const float ZXval = ZXptr->second;
-      VF::iterator base = posterior.begin() + ZXptr->first * (lengthY + 1);
-
-      // iterate through all z[k]-y[j]
-      while (ZYptr != ZYend){
-        base[ZYptr->first] += ZXval * ZYptr->second;
-        ZYptr++;
-      }
-      ZXptr++;
-    }
-  }
-}
-
-void DoBasePairProbabilityRelaxation (MultiSequence *sequences, 
-                                     SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                                     SafeVector<BPPMatrix*> &BPPMatrices) {
-    const int numSeqs = sequences->GetNumSequences();
-
-    for (int i = 0; i < numSeqs; i++) {
-       Sequence *seq1 = sequences->GetSequence (i);
-       BPPMatrix *seq1BppMatrix = BPPMatrices[seq1->GetLabel()];
-       Trimat<float> consBppMat(seq1->GetLength() + 1);
-       int seq1Length = seq1->GetLength();
-
-       for (int k = 1; k <= seq1Length; k++) {
-           for (int l = k; l <= seq1Length; l++) {
-               consBppMat.ref(k, l) = seq1BppMatrix->GetProb(k, l);
-           }
-       }
-
-       for (int j = i + 1; j < numSeqs; j++) {
-
-   //          VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior()
-         Sequence *seq2 = sequences->GetSequence (j);
-         BPPMatrix *seq2BppMatrix = BPPMatrices[seq2->GetLabel()];
-//       int seq2Length = seq2->GetLength();
-         SparseMatrix *matchProb = sparseMatrices[i][j];
-
-//       vector<PIF2> &probs1 = seq1BppMatrix->bppMat.data2;
-         for(int k = 1; k <= seq1Length; k++) {
-             for(int m = k, n = k; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) {
-                 
-//       for (int k = 0; k < (int)probs1.size(); k++) {
-//           float tmpProb1 = probs1[k].prob;
-//           int   tmp1I    = probs1[k].i;
-//           int   tmp1J    = probs1[k].j;
-
-                 float sumProb = 0;
-                 vector<PIF2> &probs2 = seq2BppMatrix->bppMat.data2;
-                 for(int l = 0; l < (int)probs2.size(); l++) {
-                     float tmpProb2 = probs2[l].prob;
-                     int   tmp2I    = probs2[l].i;
-                     int   tmp2J    = probs2[l].j;
-                     sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2;
-                 }
-
-                 consBppMat.ref(m, n) += sumProb;
-             }
-
-             for(int m = k, n = k + 1; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) {
-                 
-//       for (int k = 0; k < (int)probs1.size(); k++) {
-//           float tmpProb1 = probs1[k].prob;
-//           int   tmp1I    = probs1[k].i;
-//           int   tmp1J    = probs1[k].j;
-
-                 float sumProb = 0;
-                 vector<PIF2> &probs2 = seq2BppMatrix->bppMat.data2;
-                 for(int l = 0; l < (int)probs2.size(); l++) {
-                     float tmpProb2 = probs2[l].prob;
-                     int   tmp2I    = probs2[l].i;
-                     int   tmp2J    = probs2[l].j;
-                     sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2;
-                 }
-
-                 consBppMat.ref(m, n) += sumProb;
-             }
-         }
-       }
-
-/*
-         for(int k = 1; k <= seq1Length; k++) {
-             for(int m = k, n = k; n <= k + 30 && m >= 1 && n <= seq1Length; m--, n++) {
-                 float tmpProb = seq1BppMatrix->GetProb(m, n);
-                 for(int l = 1; l <= seq2Length; l++) {
-                     for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                     for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                 }
-                 consBppMat.ref(m, n) += tmpProb;
-             }
-    
-             for(int m = k, n = k + 1; n <= k + 31 && m >= 1 && n <= seq1Length; m--, n++) {
-                 float tmpProb = seq1BppMatrix->GetProb(m, n);
-                 for(int l = 1; l <= seq2Length; l++) {
-                     for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                     for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) {
-                         tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t);
-                     }
-                 }
-                 consBppMat.ref(m,n) += tmpProb;
-             }
-         }
-       }
-*/
-       for (int m = 1; m <= seq1Length; m++) {
-           for (int n = m + 4; n <= seq1Length; n++) {
-               consBppMat.ref(m,n) = consBppMat.ref(m,n)/(float)numSeqs;
-           }
-       }
-       seq1BppMatrix->updateBPPMatrix(consBppMat);
-    }
-}
-
-/////////////////////////////////////////////////////////////////
-// GetSubtree
-//
-// Returns set containing all leaf labels of the current subtree.
-/////////////////////////////////////////////////////////////////
-
-set<int> GetSubtree (const TreeNode *tree){
-  set<int> s;
-
-  if (tree->GetSequenceLabel() == -1){
-    s = GetSubtree (tree->GetLeftChild());
-    set<int> t = GetSubtree (tree->GetRightChild());
-
-    for (set<int>::iterator iter = t.begin(); iter != t.end(); ++iter)
-      s.insert (*iter);
-  }
-  else {
-    s.insert (tree->GetSequenceLabel());
-  }
-
-  return s;
-}
-
-/////////////////////////////////////////////////////////////////
-// TreeBasedBiPartitioning
-//
-// Uses the iterative refinement scheme from MUSCLE.
-/////////////////////////////////////////////////////////////////
-
-void TreeBasedBiPartitioning (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                              const ProbabilisticModel &model, MultiSequence* &alignment,
-                              const TreeNode *tree, SafeVector<BPPMatrix*> &BPPMatrices){
-  // check if this is a node of the alignment tree
-  if (tree->GetSequenceLabel() == -1){
-    TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetLeftChild(), BPPMatrices);
-    TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetRightChild(), BPPMatrices);
-
-    set<int> leftSubtree = GetSubtree (tree->GetLeftChild());
-    set<int> rightSubtree = GetSubtree (tree->GetRightChild());
-    set<int> leftSubtreeComplement, rightSubtreeComplement;
-
-    // calculate complement of each subtree
-    for (int i = 0; i < alignment->GetNumSequences(); i++){
-      if (leftSubtree.find(i) == leftSubtree.end()) leftSubtreeComplement.insert (i);
-      if (rightSubtree.find(i) == rightSubtree.end()) rightSubtreeComplement.insert (i);
-    }
-
-    // perform realignments for edge to left child
-    if (!leftSubtree.empty() && !leftSubtreeComplement.empty()){
-      MultiSequence *groupOneSeqs = alignment->Project (leftSubtree); assert (groupOneSeqs);
-      MultiSequence *groupTwoSeqs = alignment->Project (leftSubtreeComplement); assert (groupTwoSeqs);
-      delete alignment;
-      alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetLeftChild()->GetIdentity());
-    }
-
-    // perform realignments for edge to right child
-    if (!rightSubtree.empty() && !rightSubtreeComplement.empty()){
-      MultiSequence *groupOneSeqs = alignment->Project (rightSubtree); assert (groupOneSeqs);
-      MultiSequence *groupTwoSeqs = alignment->Project (rightSubtreeComplement); assert (groupTwoSeqs);
-      delete alignment;
-      alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetRightChild()->GetIdentity());
-    }
-  }
-}
-
-/////////////////////////////////////////////////////////////////
-// DoterativeRefinement()
-//
-// Performs a single round of randomized partionining iterative
-// refinement.
-/////////////////////////////////////////////////////////////////
-/*
-void DoIterativeRefinement (const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                            const ProbabilisticModel &model, MultiSequence* &alignment){
-  set<int> groupOne, groupTwo;
-
-  // create two separate groups
-  for (int i = 0; i < alignment->GetNumSequences(); i++){
-    if (rand() % 2)
-      groupOne.insert (i);
-    else
-      groupTwo.insert (i);
-  }
-
-  if (groupOne.empty() || groupTwo.empty()) return;
-
-  // project into the two groups
-  MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs);
-  MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs);
-  delete alignment;
-
-  // realign
-  alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model);
-
-  delete groupOneSeqs;
-  delete groupTwoSeqs;
-}
-*/
-
-/////////////////////////////////////////////////////////////////
-// WriteAnnotation()
-//
-// Computes annotation for multiple alignment and write values
-// to a file.
-/////////////////////////////////////////////////////////////////
-
-void WriteAnnotation (MultiSequence *alignment, 
-                     const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-  ofstream outfile (annotationFilename.c_str());
-  
-  if (outfile.fail()){
-    cerr << "ERROR: Unable to write annotation file." << endl;
-    exit (1);
-  }
-
-  const int alignLength = alignment->GetSequence(0)->GetLength();
-  const int numSeqs = alignment->GetNumSequences();
-  
-  SafeVector<int> position (numSeqs, 0);
-  SafeVector<SafeVector<char>::iterator> seqs (numSeqs);
-  for (int i = 0; i < numSeqs; i++) seqs[i] = alignment->GetSequence(i)->GetDataPtr();
-  SafeVector<pair<int,int> > active;
-  active.reserve (numSeqs);
-  
-  // for every column
-  for (int i = 1; i <= alignLength; i++){
-    
-    // find all aligned residues in this particular column
-    active.clear();
-    for (int j = 0; j < numSeqs; j++){
-      if (seqs[j][i] != '-'){
-       active.push_back (make_pair(j, ++position[j]));
-      }
-    }
-    
-    outfile << setw(4) << ComputeScore (active, sparseMatrices) << endl;
-  }
-  
-  outfile.close();
-}
-
-/////////////////////////////////////////////////////////////////
-// ComputeScore()
-//
-// Computes the annotation score for a particular column.
-/////////////////////////////////////////////////////////////////
-
-int ComputeScore (const SafeVector<pair<int, int> > &active, 
-                 const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices){
-
-  if (active.size() <= 1) return 0;
-  
-  // ALTERNATIVE #1: Compute the average alignment score.
-
-  float val = 0;
-  for (int i = 0; i < (int) active.size(); i++){
-    for (int j = i+1; j < (int) active.size(); j++){
-      val += sparseMatrices[active[i].first][active[j].first]->GetValue(active[i].second, active[j].second);
-    }
-  }
-
-  return (int) (200 * val / ((int) active.size() * ((int) active.size() - 1)));
-  
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc
deleted file mode 100644 (file)
index fe6641a..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// MakeGnuPlot.cc
-/////////////////////////////////////////////////////////////////
-
-#include <iostream>
-#include <fstream>
-
-using namespace std;
-
-int main (int argc, char **argv){
-  
-  if (argc == 1 || argc > 3){
-    cerr << "Usage: makegnuplot annotscores [refscores]" << endl;
-    exit (1);
-  }
-
-  ifstream data (argv[1]);
-
-  if (data.fail()){
-    cerr << "ERROR: Could not open file " << argv[1] << endl;
-    exit (1);
-  }
-  
-  int x, ct = 0;
-  while (data >> x) ct++;
-  data.close();
-  
-  ofstream out ("temporary_gnuplot_script");
-  
-  if (out.fail()){
-    cerr << "ERROR: Could not create temporary file." << endl;
-    exit (1);
-  }
-
-  out << "set title \"Column Reliability Scores\"" << endl
-      << "set xlabel \"Alignment Position\"" << endl
-      << "set ylabel \"Column Reliability\"" << endl
-      << "set xr [1:" << ct << "]" << endl
-      << "set term postscript enhanced color" << endl
-      << "set output \"reliability.ps\"" << endl;
-  
-  if (argc == 3){
-    out << "set style fill solid 0.5 noborder" << endl
-       << "plot \"" << argv[2] << "\" title \"actual\" with boxes lt 2, \\" << endl
-       << "     \"" << argv[1] << "\" title \"predicted\" with histeps lt 1 lw 3" << endl;
-  }
-  else 
-    out << "plot \"" << argv[1] << "\" title \"predicted\" with histeps lt 1 lw 3" << endl;
-
-  out.close();
-
-  if (system ("gnuplot temporary_gnuplot_script") == -1){
-    cerr << "ERROR: Could not run Gnuplot correctly." << endl;
-    exit (1);
-  }
-  
-  //system ("rm temporary_gnuplot_script");
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile
deleted file mode 100644 (file)
index d7581ec..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-# Makefile for probcons
-################################################################################
-
-################################################################################
-# 1) Choose C++ compiler.
-################################################################################
-
-CXX = g++
-
-################################################################################
-# 2) Set C++ flags.
-#    a) DEBUG mode -- no optimizations, enable SafeVector checking, no inlining
-#    b) PROFILE mode -- for gprof
-#    c) RELEASE mode
-################################################################################
-
-OTHERFLAGS = -DNumInsertStates=1 -DVERSION="1.10"
-
-# debug mode    
-#CXXFLAGS = -g -W -Wall -pedantic -DENABLE_CHECKS -fno-inline $(OTHERFLAGS)
-
-# profile mode
-#CXXFLAGS = -pg -W -Wall -pedantic $(OTHERFLAGS)
-
-# release mode
-#CXXFLAGS = -O3 -W -Wall -pedantic -DNDEBUG $(OTHERFLAGS) -mmmx -msse -msse2 -mfpmath=sse -march=pentium4 -mcpu=pentium4 -funroll-loops -fomit-frame-pointer 
-CXXFLAGS = -O3 -W -Wall -pedantic -DNDEBUG $(OTHERFLAGS) -funroll-loops
-
-################################################################################
-# 3) Dependencies
-################################################################################
-
-TARGETS = probcons 
-#compare project makegnuplot
-
-.PHONY : all
-all : $(TARGETS)
-
-#probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h Main.cc
-probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h
-       $(CXX) $(CXXFLAGS) -lm -o probcons Main.cc 
-
-compare : MultiSequence.h Sequence.h FileBuffer.h SafeVector.h CompareToRef.cc
-       $(CXX) $(CXXFLAGS) -o compare CompareToRef.cc
-
-fixref : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h FixRef.cc
-       $(CXX) $(CXXFLAGS) -o fixref FixRef.cc
-
-project : MultiSequence.h Sequence.h SafeVector.h ProjectPairwise.cc
-       $(CXX) $(CXXFLAGS) -o project ProjectPairwise.cc
-
-makegnuplot : MakeGnuPlot.cc
-       $(CXX) $(CXXFLAGS) -o makegnuplot MakeGnuPlot.cc
-
-.PHONY : clean
-clean:
-       rm -f $(TARGETS)
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h
deleted file mode 100644 (file)
index b28c186..0000000
+++ /dev/null
@@ -1,1120 +0,0 @@
-////////////////////////////////////////////////////////////////
-// MultiSequence.h
-//
-// Utilities for reading/writing multiple sequence data.
-/////////////////////////////////////////////////////////////////
-
-#ifndef MULTISEQUENCE_H
-#define MULTISEQUENCE_H
-
-#include <cctype>
-#include <string>
-#include <fstream>
-#include <iostream>
-#include <sstream>
-#include <algorithm>
-#include <set>
-#include "SafeVector.h"
-#include "Sequence.h"
-#include "FileBuffer.h"
-
-/////////////////////////////////////////////////////////////////
-// MultiSequence
-//
-// Class for multiple sequence alignment input/output.
-/////////////////////////////////////////////////////////////////
-
-namespace MXSCARNA {
-class MultiSequence {
-
-  SafeVector<Sequence *> *sequences;
-
- public:
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::MultiSequence()
-  //
-  // Default constructor.
-  /////////////////////////////////////////////////////////////////
-
-  MultiSequence () : sequences (NULL) {}
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::MultiSequence()
-  //
-  // Constructor.  Load MFA from a FileBuffer object.
-  /////////////////////////////////////////////////////////////////
-
-  MultiSequence (FileBuffer &infile) : sequences (NULL) {
-    LoadMFA (infile);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::MultiSequence()
-  //
-  // Constructor.  Load MFA from a filename.
-  /////////////////////////////////////////////////////////////////
-
-  MultiSequence (const string &filename) : sequences (NULL){
-    LoadMFA (filename);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::~MultiSequence()
-  //
-  // Destructor.  Gets rid of sequence objects contained in the
-  // multiple alignment.
-  /////////////////////////////////////////////////////////////////
-
-  ~MultiSequence(){
-
-    // if sequences allocated
-    if (sequences){
-
-      // free all sequences
-      for (SafeVector<Sequence *>::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){
-        assert (*iter);
-        delete *iter;
-        *iter = NULL;
-      }
-
-      // free sequence vector
-      delete sequences;
-      sequences = NULL;
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::LoadMFA()
-  //
-  // Load MFA from a filename.
-  /////////////////////////////////////////////////////////////////
-
-  void LoadMFA (const string &filename, bool stripGaps = false){
-
-    // try opening file
-    FileBuffer infile (filename.c_str());
-
-    if (infile.fail()){
-      cerr << "ERROR: Could not open file '" << filename << "' for reading." << endl;
-      exit (1);
-    }
-
-    // if successful, then load using other LoadMFA() routine
-    LoadMFA (infile, stripGaps);
-
-    infile.close();
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::LoadMFA()
-  //
-  // Load MSF from a FileBuffer object.
-  /////////////////////////////////////////////////////////////////
-
-  void ParseMSF (FileBuffer &infile, string header, bool stripGaps = false){
-
-    SafeVector<SafeVector<char> *> seqData;
-    SafeVector<string> seqNames;
-    SafeVector<int> seqLengths;
-
-    istringstream in;
-    bool valid = true;
-    bool missingHeader = false;
-    bool clustalW = false;
-
-    // read until data starts
-    while (!infile.eof() && header.find ("..", 0) == string::npos){
-      if (header.find ("CLUSTAL", 0) == 0 || header.find ("PROBCONS", 0) == 0){
-       clustalW = true;
-       break;
-      }
-      infile.GetLine (header);
-      if (header.find ("//", 0) != string::npos){
-        missingHeader = true;
-        break;
-      }
-    }
-
-    // read until end-of-file
-    while (valid){
-      infile.GetLine (header);
-      if (infile.eof()) break;
-
-      string word;
-      in.clear();
-      in.str(header);
-
-      // check if there's anything on this line
-      if (in >> word){
-
-       // clustalw name parsing
-       if (clustalW){
-         if (!isspace(header[0]) && find (seqNames.begin(), seqNames.end(), word) == seqNames.end()){
-           seqNames.push_back (word);
-           seqData.push_back (new SafeVector<char>());
-           seqLengths.push_back (0);
-           seqData[(int) seqData.size() - 1]->push_back ('@');
-         }       
-       }
-
-        // look for new sequence label
-        if (word == string ("Name:")){
-          if (in >> word){
-            seqNames.push_back (word);
-            seqData.push_back (new SafeVector<char>());
-            seqLengths.push_back (0);
-            seqData[(int) seqData.size() - 1]->push_back ('@');
-          }
-          else
-            valid = false;
-        }
-
-        // check if this is sequence data
-        else if (find (seqNames.begin(), seqNames.end(), word) != seqNames.end()){
-          int index = find (seqNames.begin(), seqNames.end(), word) - seqNames.begin();
-
-          // read all remaining characters on the line
-          char ch;
-          while (in >> ch){
-            if (isspace (ch)) continue;
-//            if (ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A';
-            if (ch == '.') ch = '-';
-           if (stripGaps && ch == '-') continue;
-/*
-            if (!((ch >= 'A' && ch <= 'Z') || ch == '*' || ch == '-')){
-              cerr << "ERROR: Unknown character encountered: " << ch << endl;
-              exit (1);
-           }
-*/
-           if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){
-              cerr << "ERROR: Unknown character encountered: " << ch << endl;
-              exit (1);
-            }
-
-            // everything's ok so far, so just store this character.
-            seqData[index]->push_back (ch);
-            seqLengths[index]++;
-          }
-        }
-        else if (missingHeader){
-          seqNames.push_back (word);
-          seqData.push_back (new SafeVector<char>());
-          seqLengths.push_back (0);
-          seqData[(int) seqData.size() - 1]->push_back ('@');
-
-          int index = (int) seqNames.size() - 1;
-
-          // read all remaining characters on the line
-          char ch;
-          while (in >> ch){
-            if (isspace (ch)) continue;
-//            if (ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A';
-            if (ch == '.') ch = '-';
-           if (stripGaps && ch == '-') continue;
-
-            if (!((ch >= 'A' && ch <= 'Z') || ch == '*' || ch == '-')){
-              cerr << "ERROR: Unknown character encountered: " << ch << endl;
-              exit (1);
-            }
-/*
-           if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){
-              cerr << "ERROR: Unknown character encountered: " << ch << endl;
-              exit (1);
-            }
-*/
-            // everything's ok so far, so just store this character.
-            seqData[index]->push_back (ch);
-            seqLengths[index]++;
-          }
-        }
-      }
-    }
-
-    // check for errorsq
-    if (seqNames.size() == 0){
-      cerr << "ERROR: No sequences read!" << endl;
-      exit (1);
-    }
-
-    assert (!sequences);
-    sequences = new SafeVector<Sequence *>;
-    for (int i = 0; i < (int) seqNames.size(); i++){
-      if (seqLengths[i] == 0){
-        cerr << "ERROR: Sequence of zero length!" << endl;
-        exit (1);
-      }
-      Sequence *seq = new Sequence (seqData[i], seqNames[i], seqLengths[i], i, i);
-      sequences->push_back (seq);
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::LoadMFA()
-  //
-  // Load MFA from a FileBuffer object.
-  /////////////////////////////////////////////////////////////////
-
-  void LoadMFA (FileBuffer &infile, bool stripGaps = false){
-
-    // check to make sure that file reading is ok
-    if (infile.fail()){
-      cerr << "ERROR: Error reading file." << endl;
-      exit (1);
-    }
-
-    // read all sequences
-    while (true){
-
-      // get the sequence label as being the current # of sequences
-      // NOTE: sequence labels here are zero-based
-      int index = (!sequences) ? 0 : sequences->size();
-
-      // read the sequence
-      Sequence *seq = new Sequence (infile, stripGaps);
-      if (seq->Fail()){
-
-        // check if alternative file format (i.e. not MFA)
-        if (index == 0){
-          string header = seq->GetHeader();
-          if (header.length() > 0 && header[0] != '>'){
-            // try MSF format
-            ParseMSF (infile, header);
-            break;
-          }
-        }
-
-        delete seq;
-        break;
-      }
-      seq->SetLabel (index);
-
-      // add the sequence to the list of current sequences
-      if (!sequences) sequences = new SafeVector<Sequence *>;
-      sequences->push_back (seq);
-    }
-
-    // make sure at least one sequence was read
-    if (!sequences){
-      cerr << "ERROR: No sequences read." << endl;
-      exit (1);
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::AddSequence()
-  //
-  // Add another sequence to an existing sequence list
-  /////////////////////////////////////////////////////////////////
-
-  void AddSequence (Sequence *sequence){
-    assert (sequence);
-    assert (!sequence->Fail());
-
-    // add sequence
-    if (!sequences) sequences = new SafeVector<Sequence *>;
-    sequences->push_back (sequence);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::RemoveSequence()
-  //
-  // Remove a sequence from the MultiSequence
-  /////////////////////////////////////////////////////////////////
-
-  void RemoveSequence (int index){
-    assert (sequences);
-
-    assert (index >= 0 && index < (int) sequences->size());
-    delete (*sequences)[index];
-
-    sequences->erase (sequences->begin() + index);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteMFA()
-  //
-  // Write MFA to the outfile.  Allows the user to specify the
-  // number of columns for the output.  Also, useIndices determines
-  // whether or not the actual sequence comments will be printed
-  // out or whether the artificially assigned sequence labels will
-  // be used instead.
-  /////////////////////////////////////////////////////////////////
-
-  void WriteMFA (ostream &outfile, string *ssCons = NULL, int numColumns = 60, bool useIndices = false){
-    if (!sequences) return;
-
-    // loop through all sequences and write them out
-    for (SafeVector<Sequence *>::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){
-      (*iter)->WriteMFA (outfile, numColumns, useIndices);
-    }
-
-    int count = 0;
-    if (ssCons != NULL) {
-      outfile << ">#=GC SS_cons" << endl;
-      int length = ssCons->length();
-      for (int i = 1; i < length; i++ ) {
-       outfile << ssCons->at(i);
-       ++count;
-       
-       if (numColumns <= count) {
-         outfile << endl;
-         count = 0;
-       }
-       
-      }
-    }
-    outfile << endl;
-  }
-
-  void WriteMFAseq (ostream &outfile, int numColumns = 60, bool useIndices = false){
-    if (!sequences) return;
-
-    // loop through all sequences and write them out
-    for (SafeVector<Sequence *>::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){
-      (*iter)->WriteMFA (outfile, numColumns, useIndices);
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::GetAnnotationChar()
-  //
-  // Return CLUSTALW annotation for column.
-  /////////////////////////////////////////////////////////////////
-
-  char GetAnnotationChar (SafeVector<char> &column){
-    SafeVector<int> counts (256, 0);
-    int allChars = (int) column.size();
-    
-    for (int i = 0; i < allChars; i++){
-      counts[(unsigned char) toupper(column[i])]++;
-    }
-    
-    allChars -= counts[(unsigned char) '-'];
-    if (allChars == 1) return ' ';
-    
-    for (int i = 0; i < 256; i++) if ((char) i != '-' && counts[i] == allChars) return '*';
-    
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'T'] + 
-       counts[(unsigned char) 'A'] == allChars) 
-      return ':';
-    
-    if (counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'E'] + 
-       counts[(unsigned char) 'Q'] +
-       counts[(unsigned char) 'K'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'Q'] +
-       counts[(unsigned char) 'K'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'D'] + 
-       counts[(unsigned char) 'E'] +
-       counts[(unsigned char) 'Q'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'Q'] + 
-       counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'R'] +
-       counts[(unsigned char) 'K'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'M'] + 
-       counts[(unsigned char) 'I'] + 
-       counts[(unsigned char) 'L'] +
-       counts[(unsigned char) 'V'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'M'] + 
-       counts[(unsigned char) 'I'] + 
-       counts[(unsigned char) 'L'] +
-       counts[(unsigned char) 'F'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'Y'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'F'] + 
-       counts[(unsigned char) 'Y'] + 
-       counts[(unsigned char) 'W'] == allChars) 
-      return ':';
-
-    if (counts[(unsigned char) 'C'] + 
-       counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'A'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'A'] + 
-       counts[(unsigned char) 'T'] + 
-       counts[(unsigned char) 'V'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'A'] + 
-       counts[(unsigned char) 'G'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'T'] + 
-       counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'K'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'T'] + 
-       counts[(unsigned char) 'P'] + 
-       counts[(unsigned char) 'A'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'G'] + 
-       counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'D'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'S'] + 
-       counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'D'] + 
-       counts[(unsigned char) 'E'] + 
-       counts[(unsigned char) 'Q'] + 
-       counts[(unsigned char) 'K'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'D'] + 
-       counts[(unsigned char) 'E'] + 
-       counts[(unsigned char) 'Q'] + 
-       counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'K'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'N'] + 
-       counts[(unsigned char) 'E'] + 
-       counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'Q'] + 
-       counts[(unsigned char) 'R'] + 
-       counts[(unsigned char) 'K'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'F'] + 
-       counts[(unsigned char) 'V'] + 
-       counts[(unsigned char) 'L'] + 
-       counts[(unsigned char) 'I'] + 
-       counts[(unsigned char) 'M'] == allChars) 
-      return '.';
-
-    if (counts[(unsigned char) 'H'] + 
-       counts[(unsigned char) 'F'] + 
-       counts[(unsigned char) 'Y'] == allChars) 
-      return '.';
-
-    return ' ';
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteALN()
-  //
-  // Write ALN to the outfile.  Allows the user to specify the
-  // number of columns for the output.  
-  /////////////////////////////////////////////////////////////////
-
-  void WriteALN (ostream &outfile, int numColumns = 60){
-    if (!sequences) return;
-
-//   outfile << "Multplex SCARNA version " << VERSION << " multiple sequence alignment"  << endl;
-//   outfile << "PROBCONS version " << VERSION << " multiple sequence alignment" << endl;
-    outfile << "CLUSTAL W(1.83) multiple sequence alignment" << endl;
-//    outfile << "//" << endl;
-
-    int longestComment = 0;
-    SafeVector<SafeVector<char>::iterator> ptrs (GetNumSequences());
-    SafeVector<int> lengths (GetNumSequences());
-    for (int i = 0; i < GetNumSequences(); i++){
-      ptrs[i] = GetSequence (i)->GetDataPtr();
-      lengths[i] = GetSequence (i)->GetLength();
-      longestComment = max (longestComment, (int) GetSequence(i)->GetName().length());
-    }
-    longestComment += 4;
-
-    int writtenChars = 0;    
-    bool allDone = false;
-
-    while (!allDone){
-      outfile << endl;
-      allDone = true;
-
-      // loop through all sequences and write them out
-      for (int i = 0; i < GetNumSequences(); i++){
-
-       if (writtenChars < lengths[i]){
-         outfile << GetSequence(i)->GetName();
-         for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++)
-           outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++){
-           if (writtenChars + j < lengths[i])
-             outfile << ptrs[i][writtenChars + j + 1];
-           else
-             break;
-         }
-         
-         outfile << endl;
-         
-         if (writtenChars + numColumns < lengths[i]) allDone = false;
-       }
-      }
-
-      // write annotation line
-      for (int j = 0; j < longestComment; j++)
-       outfile << ' ';
-
-      for (int j = 0; j < numColumns; j++){
-       SafeVector<char> column;
-
-       for (int i = 0; i < GetNumSequences(); i++)
-         if (writtenChars + j < lengths[i])
-           column.push_back (ptrs[i][writtenChars + j + 1]);
-       
-       if (column.size() > 0)
-         outfile << GetAnnotationChar (column);        
-      }
-
-      outfile << endl;
-      writtenChars += numColumns;
-    }
-    outfile << endl;
-  }
-
-  ////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteWEB();
-  //
-  // Write ALN to the outfile.  Allows the user to specify the
-  // number of columns for the output.  
-  ///////////////////////////////////////////////////////////////
-   void WriteWEB (ostream &outfile, string *ssCons = NULL, int numColumns = 60, bool useIndices = false){
-    if (!sequences) return;
-
-    // loop through all sequences and write them out
-    for (SafeVector<Sequence *>::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){
-      (*iter)->WriteWEB (outfile, numColumns, useIndices);
-    }
-    
-    // write conservation 
-    outfile << "<conservation>" << endl;
-        int longestComment = 0;
-    SafeVector<SafeVector<char>::iterator> ptrs (GetNumSequences());
-    SafeVector<int> lengths (GetNumSequences());
-    for (int i = 0; i < GetNumSequences(); i++){
-      ptrs[i] = GetSequence (i)->GetDataPtr();
-      lengths[i] = GetSequence (i)->GetLength();
-      longestComment = max (longestComment, (int) GetSequence(i)->GetName().length());
-    }
-    longestComment += 4;
-
-    int writtenChars = 0;    
-    bool allDone = false;
-
-    while (!allDone){
-//      outfile << endl;
-      allDone = true;
-
-      // loop through all sequences and write them out
-      for (int i = 0; i < GetNumSequences(); i++){
-
-       if (writtenChars < lengths[i]){
-//       outfile << GetSequence(i)->GetName();
-         for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++)
-//         outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++){
-             if (writtenChars + j < lengths[i]);
-//           outfile << ptrs[i][writtenChars + j + 1];
-           else
-             break;
-         }
-         
-//       outfile << endl;
-         
-         if (writtenChars + numColumns < lengths[i]) allDone = false;
-       }
-      }
-
-      // write annotation line
-//      for (int j = 0; j < longestComment; j++)
-//     outfile << ' ';
-
-      for (int j = 0; j < numColumns; j++){
-       SafeVector<char> column;
-
-       for (int i = 0; i < GetNumSequences(); i++)
-         if (writtenChars + j < lengths[i])
-           column.push_back (ptrs[i][writtenChars + j + 1]);
-       
-       if (column.size() > 0)
-         outfile << GetAnnotationChar (column);        
-      }
-
-//      outfile << endl;
-      writtenChars += numColumns;
-    }
-    outfile << endl;
-    outfile << "</conservation>" << endl;
-
-    // write structure information
-    if (ssCons != NULL) {
-      outfile << "<structure>" << endl;
-      int length = ssCons->length();
-      for (int i = 1; i < length; i++ ) {
-       outfile << ssCons->at(i);
-      }
-      outfile << endl;
-      outfile << "</structure>" << endl;
-
-      // add coordinate information 06/09/14
-      outfile << "<coordinate>" << endl;
-    
-      int segmentPos = 1;
-      for (int i = 1; i < length; i++) {
-       int count = 0;
-       
-       if ( ssCons->at(i) == '(' ) {
-         ++count;
-         
-         int j = i;
-         while (count != 0) {
-           char ch = ssCons->at(++j);
-           if      (ch == '(')
-             ++count;
-           else if (ch == ')')
-             --count;
-         }
-           
-         outfile << "<segment position=\"" << segmentPos++ << "\" starts=\"" 
-                 << i << "\"" << " ends=\"" << j << "\"/>" << endl;
-           
-       }
-      }
-    }
-    outfile << "</coordinate>" << endl;
-
-    outfile << "<mxscarna>" << endl;
-    WriteMXSCARNA (outfile, ssCons);
-    outfile << "</mxscarna>" << endl;
-    
-    outfile << "<aln>" << endl;
-    WriteALN (outfile);
-    outfile << "</aln>" << endl;
-
-    outfile << "<mfa>" << endl;
-    WriteMFA (outfile, ssCons);
-    outfile << "</mfa>" << endl;
-
-    outfile << "<stockholm>" << endl;
-    WriteWebSTOCKHOLM (outfile, ssCons);
-    outfile << "</stockholm>" << endl;
-  }
-  
-  ////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteSTOCKHOLM();
-  //
-  // Write STOCKHOLM to the outfile.  Allows the user to specify the
-  // number of columns for the output.  
-  ///////////////////////////////////////////////////////////////
-  void WriteSTOCKHOLM (ostream &outfile, string *ssCons = NULL, int numColumns = 60) {
-    if (!sequences) return;
-    
-        outfile << "# STOCKHOLM 1.0" << endl;
-
-    int longestComment = 0;
-    SafeVector<SafeVector<char>::iterator> ptrs (GetNumSequences());
-    SafeVector<int> lengths (GetNumSequences());
-    for (int i = 0; i < GetNumSequences(); i++){
-      ptrs[i] = GetSequence (i)->GetDataPtr();
-      lengths[i] = GetSequence (i)->GetLength();
-      longestComment = max (longestComment, (int) GetSequence(i)->GetName().length());
-    }
-    longestComment += 4;
-
-    int writtenChars = 0;    
-    bool allDone = false;
-
-    while (!allDone){
-      outfile << endl;
-      allDone = true;
-
-      // loop through all sequences and write them out
-      for (int i = 0; i < GetNumSequences(); i++){
-
-       if (writtenChars < lengths[i]){
-         outfile << GetSequence(i)->GetName();
-         for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++)
-           outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++){
-           if (writtenChars + j < lengths[i])
-               if (ptrs[i][writtenChars + j + 1] != '-')
-                 outfile << ptrs[i][writtenChars + j + 1];
-               else 
-                 outfile << ".";
-           else
-             break;
-         }
-         
-         outfile << endl;
-         
-         if (writtenChars + numColumns < lengths[i]) allDone = false;
-       }
-      }
-
-      // write ssCons
-
-      if (ssCons != NULL) {
-         outfile << "#=GC SS_cons";
-         int lengthSScons = 12;
-         for (int j = 0; j < longestComment - lengthSScons; j++)
-             outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++) {
-             if (ssCons->at(writtenChars + j + 1) == '(')
-               outfile << "<";
-             else if (ssCons->at(writtenChars + j + 1) == ')')
-               outfile << ">";
-             else 
-               outfile << ".";
-             if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) 
-                 break;
-         }
-         outfile << endl;
-      }
-
-      writtenChars += numColumns;
-    }
-    outfile << "//";
-    outfile << endl;
-  }
-  
-    ////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteSTOCKHOLM();
-  //
-  // Write STOCKHOLM to the outfile.  Allows the user to specify the
-  // number of columns for the output.  
-  ///////////////////////////////////////////////////////////////
-  void WriteWebSTOCKHOLM (ostream &outfile, string *ssCons = NULL, int numColumns = 60) {
-    if (!sequences) return;
-    
-        outfile << "# STOCKHOLM 1.0" << endl;
-
-    int longestComment = 0;
-    SafeVector<SafeVector<char>::iterator> ptrs (GetNumSequences());
-    SafeVector<int> lengths (GetNumSequences());
-    for (int i = 0; i < GetNumSequences(); i++){
-      ptrs[i] = GetSequence (i)->GetDataPtr();
-      lengths[i] = GetSequence (i)->GetLength();
-      longestComment = max (longestComment, (int) GetSequence(i)->GetName().length());
-    }
-    longestComment += 4;
-
-    int writtenChars = 0;    
-    bool allDone = false;
-
-    while (!allDone){
-      outfile << endl;
-      allDone = true;
-
-      // loop through all sequences and write them out
-      for (int i = 0; i < GetNumSequences(); i++){
-
-       if (writtenChars < lengths[i]){
-         outfile << GetSequence(i)->GetName();
-         for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++)
-           outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++){
-           if (writtenChars + j < lengths[i])
-               if (ptrs[i][writtenChars + j + 1] != '-')
-                 outfile << ptrs[i][writtenChars + j + 1];
-               else 
-                 outfile << ".";
-           else
-             break;
-         }
-         
-         outfile << endl;
-         
-         if (writtenChars + numColumns < lengths[i]) allDone = false;
-       }
-      }
-
-      // write ssCons
-
-      if (ssCons != NULL) {
-         outfile << "#=GC SS_cons";
-         int lengthSScons = 12;
-         for (int j = 0; j < longestComment - lengthSScons; j++)
-             outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++) {
-             outfile << ssCons->at(writtenChars + j + 1);
-
-             if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) 
-                 break;
-         }
-         outfile << endl;
-      }
-
-      writtenChars += numColumns;
-    }
-    outfile << "//";
-    outfile << endl;
-  }
-
-  ////////////////////////////////////////////////////////////////
-  // MultiSequence::WriteMXSCARNA();
-  //
-  // Write MXSCARNA to the outfile.  Allows the user to specify the
-  // number of columns for the output.  
-  ///////////////////////////////////////////////////////////////
-  void WriteMXSCARNA (ostream &outfile, string *ssCons = NULL, int numColumns = 60){
-    if (!sequences) return;
-
-   outfile << "Multplex SCARNA version " << VERSION << " multiple sequence alignment"  << endl;
-
-    int longestComment = 0;
-    SafeVector<SafeVector<char>::iterator> ptrs (GetNumSequences());
-    SafeVector<int> lengths (GetNumSequences());
-    for (int i = 0; i < GetNumSequences(); i++){
-      ptrs[i] = GetSequence (i)->GetDataPtr();
-      lengths[i] = GetSequence (i)->GetLength();
-      longestComment = max (longestComment, (int) GetSequence(i)->GetName().length());
-    }
-    longestComment += 4;
-
-    int writtenChars = 0;    
-    bool allDone = false;
-
-    while (!allDone){
-      outfile << endl;
-      allDone = true;
-
-      // loop through all sequences and write them out
-      for (int i = 0; i < GetNumSequences(); i++){
-
-       if (writtenChars < lengths[i]){
-         outfile << GetSequence(i)->GetName();
-         for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++)
-           outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++){
-           if (writtenChars + j < lengths[i])
-             outfile << ptrs[i][writtenChars + j + 1];
-           else
-             break;
-         }
-         
-         outfile << endl;
-         
-         if (writtenChars + numColumns < lengths[i]) allDone = false;
-       }
-      }
-
-      // write ssCons
-      if (ssCons != NULL) {
-         outfile << "ss_cons";
-         int lengthSScons = 7;
-         for (int j = 0; j < longestComment - lengthSScons; j++)
-             outfile << ' ';
-
-         for (int j = 0; j < numColumns; j++) {
-             outfile << ssCons->at(writtenChars + j + 1);
-             if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) 
-                 break;
-         }
-         outfile << endl;
-      }
-
-      // write annotation line
-      for (int j = 0; j < longestComment; j++)
-       outfile << ' ';
-
-      for (int j = 0; j < numColumns; j++){
-       SafeVector<char> column;
-
-       for (int i = 0; i < GetNumSequences(); i++)
-         if (writtenChars + j < lengths[i])
-           column.push_back (ptrs[i][writtenChars + j + 1]);
-       
-       if (column.size() > 0)
-         outfile << GetAnnotationChar (column);        
-      }
-
-      outfile << endl;
-      writtenChars += numColumns;
-    }
-    outfile << endl;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::GetSequence()
-  //
-  // Retrieve a sequence from the MultiSequence object.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence* GetSequence (int i){
-    assert (sequences);
-    assert (0 <= i && i < (int) sequences->size());
-
-    return (*sequences)[i];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::GetSequence()
-  //
-  // Retrieve a sequence from the MultiSequence object
-  // (const version).
-  /////////////////////////////////////////////////////////////////
-
-  const Sequence* GetSequence (int i) const {
-    assert (sequences);
-    assert (0 <= i && i < (int) sequences->size());
-
-    return (*sequences)[i];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::GetNumSequences()
-  //
-  // Returns the number of sequences in the MultiSequence.
-  /////////////////////////////////////////////////////////////////
-
-  int GetNumSequences () const {
-    if (!sequences) return 0;
-    return (int) sequences->size();
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::SortByHeader()
-  //
-  // Organizes the sequences according to their sequence headers
-  // in ascending order.
-  /////////////////////////////////////////////////////////////////
-
-  void SortByHeader () {
-    assert (sequences);
-
-    // a quick and easy O(n^2) sort
-    for (int i = 0; i < (int) sequences->size()-1; i++){
-      for (int j = i+1; j < (int) sequences->size(); j++){
-        if ((*sequences)[i]->GetHeader() > (*sequences)[j]->GetHeader())
-          swap ((*sequences)[i], (*sequences)[j]);
-      }
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::SortByLabel()
-  //
-  // Organizes the sequences according to their sequence labels
-  // in ascending order.
-  /////////////////////////////////////////////////////////////////
-
-  void SortByLabel () {
-    assert (sequences);
-
-    // a quick and easy O(n^2) sort
-    for (int i = 0; i < (int) sequences->size()-1; i++){
-      for (int j = i+1; j < (int) sequences->size(); j++){
-        if ((*sequences)[i]->GetSortLabel() > (*sequences)[j]->GetSortLabel())
-          swap ((*sequences)[i], (*sequences)[j]);
-      }
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::SaveOrdering()
-  //
-  // Relabels sequences so as to preserve the current ordering.
-  /////////////////////////////////////////////////////////////////
-
-  void SaveOrdering () {
-    assert (sequences);
-    
-    for (int i = 0; i < (int) sequences->size(); i++)
-      (*sequences)[i]->SetSortLabel (i);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // MultiSequence::Project()
-  //
-  // Given a set of indices, extract all sequences from the current
-  // MultiSequence object whose index is included in the set.
-  // Then, project the multiple alignments down to the desired
-  // subset, and return the projection as a new MultiSequence
-  // object.
-  /////////////////////////////////////////////////////////////////
-
-  MultiSequence *Project (const set<int> &indices){
-    SafeVector<SafeVector<char>::iterator> oldPtrs (indices.size());
-    SafeVector<SafeVector<char> *> newPtrs (indices.size());
-
-    assert (indices.size() != 0);
-
-    // grab old data
-    int i = 0;
-    for (set<int>::const_iterator iter = indices.begin(); iter != indices.end(); ++iter){
-      oldPtrs[i++] = GetSequence (*iter)->GetDataPtr();
-    }
-
-    // compute new length
-    int oldLength = GetSequence (*indices.begin())->GetLength();
-    int newLength = 0;
-    for (i = 1; i <= oldLength; i++){
-
-      // check to see if there is a gap in every sequence of the set
-      bool found = false;
-      for (int j = 0; !found && j < (int) indices.size(); j++)
-        found = (oldPtrs[j][i] != '-');
-
-      // if not, then this column counts towards the sequence length
-      if (found) newLength++;
-    }
-
-    // build new alignments
-    for (i = 0; i < (int) indices.size(); i++){
-      newPtrs[i] = new SafeVector<char>(); assert (newPtrs[i]);
-      newPtrs[i]->push_back ('@');
-    }
-
-    // add all needed columns
-    for (i = 1; i <= oldLength; i++){
-
-      // make sure column is not gapped in all sequences in the set
-      bool found = false;
-      for (int j = 0; !found && j < (int) indices.size(); j++)
-        found = (oldPtrs[j][i] != '-');
-
-      // if not, then add it
-      if (found){
-        for (int j = 0; j < (int) indices.size(); j++)
-          newPtrs[j]->push_back (oldPtrs[j][i]);
-      }
-    }
-
-    // wrap sequences in MultiSequence object
-    MultiSequence *ret = new MultiSequence();
-    i = 0;
-    for (set<int>::const_iterator iter = indices.begin(); iter != indices.end(); ++iter){
-      ret->AddSequence (new Sequence (newPtrs[i++], GetSequence (*iter)->GetHeader(), newLength,
-                                      GetSequence (*iter)->GetSortLabel(), GetSequence (*iter)->GetLabel()));
-    }
-
-    return ret;
-  }
-};
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h
deleted file mode 100644 (file)
index cd9dae9..0000000
+++ /dev/null
@@ -1,1211 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// ProbabilisticModel.h
-//
-// Routines for (1) posterior probability computations
-//              (2) chained anchoring
-//              (3) maximum weight trace alignment
-/////////////////////////////////////////////////////////////////
-
-#ifndef PROBABILISTICMODEL_H
-#define PROBABILISTICMODEL_H
-
-#include <list>
-#include <cmath>
-#include <cstdio>
-#include "SafeVector.h"
-#include "ScoreType.h"
-#include "SparseMatrix.h"
-#include "MultiSequence.h"
-#include "StemCandidate.hpp"
-#include "scarna.hpp"
-#include "nrutil.h"
-#include <vector>
-
-using namespace std;
-
-const int NumMatchStates = 1;                                    // note that in this version the number
-                                                                 // of match states is fixed at 1...will
-                                                                 // change in future versions
-const int NumMatrixTypes = NumMatchStates + NumInsertStates * 2;
-
-/////////////////////////////////////////////////////////////////
-// ProbabilisticModel
-//
-// Class for storing the parameters of a probabilistic model and
-// performing different computations based on those parameters.
-// In particular, this class handles the computation of
-// posterior probabilities that may be used in alignment.
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-class ProbabilisticModel {
-
-  float initialDistribution[NumMatrixTypes];               // holds the initial probabilities for each state
-  float transProb[NumMatrixTypes][NumMatrixTypes];         // holds all state-to-state transition probabilities
-  float matchProb[256][256];                               // emission probabilities for match states
-  float insProb[256][NumMatrixTypes];                      // emission probabilities for insert states
-  NRMat<float> WM;
-
- public:
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ProbabilisticModel()
-  //
-  // Constructor.  Builds a new probabilistic model using the
-  // given parameters.
-  /////////////////////////////////////////////////////////////////
-
-  ProbabilisticModel (const VF &initDistribMat, const VF &gapOpen, const VF &gapExtend,
-                      const VVF &emitPairs, const VF &emitSingle){
-
-    // build transition matrix
-    VVF transMat (NumMatrixTypes, VF (NumMatrixTypes, 0.0f));
-    transMat[0][0] = 1;
-    for (int i = 0; i < NumInsertStates; i++){
-      transMat[0][2*i+1] = gapOpen[2*i];
-      transMat[0][2*i+2] = gapOpen[2*i+1];
-      transMat[0][0] -= (gapOpen[2*i] + gapOpen[2*i+1]);
-      assert (transMat[0][0] > 0);
-      transMat[2*i+1][2*i+1] = gapExtend[2*i];
-      transMat[2*i+2][2*i+2] = gapExtend[2*i+1];
-      transMat[2*i+1][2*i+2] = 0;
-      transMat[2*i+2][2*i+1] = 0;
-      transMat[2*i+1][0] = 1 - gapExtend[2*i];
-      transMat[2*i+2][0] = 1 - gapExtend[2*i+1];
-    }
-
-    // create initial and transition probability matrices
-    for (int i = 0; i < NumMatrixTypes; i++){
-      initialDistribution[i] = LOG (initDistribMat[i]);
-      for (int j = 0; j < NumMatrixTypes; j++)
-        transProb[i][j] = LOG (transMat[i][j]);
-    }
-
-    // create insertion and match probability matrices
-    for (int i = 0; i < 256; i++){
-      for (int j = 0; j < NumMatrixTypes; j++)
-        insProb[i][j] = LOG (emitSingle[i]);
-      for (int j = 0; j < 256; j++)
-        matchProb[i][j] = LOG (emitPairs[i][j]);
-    }
-  }
-
-  NRMat<float> weightMatchScore(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2,
-                       std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2, NRMat<float> WM) {
-      int len      = WORDLENGTH;
-      int size     = matchPSCS1->size();
-      float weight = 1000;
-
-      for(int iter = 0; iter < size; iter++) {
-         int i = matchPSCS1->at(iter);
-         int j = matchPSCS2->at(iter);
-
-         const StemCandidate &sc1 = pscs1->at(i);
-         const StemCandidate &sc2 = pscs2->at(j);
-       
-         for(int k = 0; k < len; k++) {
-             WM[sc1.GetPosition() + k][sc2.GetPosition() + k] += weight;
-//           sumWeight += weight;
-         }
-      }
-      return WM;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeForwardMatrix()
-  //
-  // Computes a set of forward probability matrices for aligning
-  // seq1 and seq2.
-  //
-  // For efficiency reasons, a single-dimensional floating-point
-  // array is used here, with the following indexing scheme:
-  //
-  //    forward[i + NumMatrixTypes * (j * (seq2Length+1) + k)]
-  //    refers to the probability of aligning through j characters
-  //    of the first sequence, k characters of the second sequence,
-  //    and ending in state i.
-  /////////////////////////////////////////////////////////////////
-
-  VF *ComputeForwardMatrix (Sequence *seq1, Sequence *seq2) const {
-
-    assert (seq1);
-    assert (seq2);
-
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-
-    // retrieve the points to the beginning of each sequence
-    SafeVector<char>::iterator iter1 = seq1->GetDataPtr();
-    SafeVector<char>::iterator iter2 = seq2->GetDataPtr();
-
-    // create matrix
-    VF *forwardPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO);
-    assert (forwardPtr);
-    VF &forward = *forwardPtr;
-
-    // initialization condition
-    forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] = 
-      initialDistribution[0] + matchProb[(unsigned char) iter1[1]][(unsigned char) iter2[1]];
-   
-    for (int k = 0; k < NumInsertStates; k++){
-      forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] = 
-       initialDistribution[2*k+1] + insProb[(unsigned char) iter1[1]][k];
-      forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] = 
-       initialDistribution[2*k+2] + insProb[(unsigned char) iter2[1]][k]; 
-    }
-    
-    // remember offset for each index combination
-    int ij = 0;
-    int i1j = -seq2Length - 1;
-    int ij1 = -1;
-    int i1j1 = -seq2Length - 2;
-
-    ij *= NumMatrixTypes;
-    i1j *= NumMatrixTypes;
-    ij1 *= NumMatrixTypes;
-    i1j1 *= NumMatrixTypes;
-
-    // compute forward scores
-    for (int i = 0; i <= seq1Length; i++){
-      unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i];
-      for (int j = 0; j <= seq2Length; j++){
-        unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j];
-
-       if (i > 1 || j > 1){
-         if (i > 0 && j > 0){
-           forward[0 + ij] = forward[0 + i1j1] + transProb[0][0];
-           for (int k = 1; k < NumMatrixTypes; k++)
-             LOG_PLUS_EQUALS (forward[0 + ij], forward[k + i1j1] + transProb[k][0]);
-           forward[0 + ij] += matchProb[c1][c2];
-         }
-         if (i > 0){
-           for (int k = 0; k < NumInsertStates; k++)
-             forward[2*k+1 + ij] = insProb[c1][k] +
-               LOG_ADD (forward[0 + i1j] + transProb[0][2*k+1],
-                        forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1]);
-         }
-         if (j > 0){
-           for (int k = 0; k < NumInsertStates; k++)
-             forward[2*k+2 + ij] = insProb[c2][k] +
-               LOG_ADD (forward[0 + ij1] + transProb[0][2*k+2],
-                        forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2]);
-         }
-       }
-
-        ij += NumMatrixTypes;
-        i1j += NumMatrixTypes;
-        ij1 += NumMatrixTypes;
-        i1j1 += NumMatrixTypes;
-      }
-    }
-
-    return forwardPtr;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeBackwardMatrix()
-  //
-  // Computes a set of backward probability matrices for aligning
-  // seq1 and seq2.
-  //
-  // For efficiency reasons, a single-dimensional floating-point
-  // array is used here, with the following indexing scheme:
-  //
-  //    backward[i + NumMatrixTypes * (j * (seq2Length+1) + k)]
-  //    refers to the probability of starting in state i and
-  //    aligning from character j+1 to the end of the first
-  //    sequence and from character k+1 to the end of the second
-  //    sequence.
-  /////////////////////////////////////////////////////////////////
-
-  VF *ComputeBackwardMatrix (Sequence *seq1, Sequence *seq2) const {
-
-    assert (seq1);
-    assert (seq2);
-
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-    SafeVector<char>::iterator iter1 = seq1->GetDataPtr();
-    SafeVector<char>::iterator iter2 = seq2->GetDataPtr();
-
-    // create matrix
-    VF *backwardPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO);
-    assert (backwardPtr);
-    VF &backward = *backwardPtr;
-
-    // initialization condition
-    for (int k = 0; k < NumMatrixTypes; k++)
-      backward[NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1) + k] = initialDistribution[k];
-
-    // remember offset for each index combination
-    int ij = (seq1Length+1) * (seq2Length+1) - 1;
-    int i1j = ij + seq2Length + 1;
-    int ij1 = ij + 1;
-    int i1j1 = ij + seq2Length + 2;
-
-    ij *= NumMatrixTypes;
-    i1j *= NumMatrixTypes;
-    ij1 *= NumMatrixTypes;
-    i1j1 *= NumMatrixTypes;
-
-    // compute backward scores
-    for (int i = seq1Length; i >= 0; i--){
-      unsigned char c1 = (i == seq1Length) ? '~' : (unsigned char) iter1[i+1];
-      for (int j = seq2Length; j >= 0; j--){
-        unsigned char c2 = (j == seq2Length) ? '~' : (unsigned char) iter2[j+1];
-
-        if (i < seq1Length && j < seq2Length){
-          const float ProbXY = backward[0 + i1j1] + matchProb[c1][c2];
-          for (int k = 0; k < NumMatrixTypes; k++)
-            LOG_PLUS_EQUALS (backward[k + ij], ProbXY + transProb[k][0]);
-        }
-        if (i < seq1Length){
-          for (int k = 0; k < NumInsertStates; k++){
-            LOG_PLUS_EQUALS (backward[0 + ij], backward[2*k+1 + i1j] + insProb[c1][k] + transProb[0][2*k+1]);
-            LOG_PLUS_EQUALS (backward[2*k+1 + ij], backward[2*k+1 + i1j] + insProb[c1][k] + transProb[2*k+1][2*k+1]);
-          }
-        }
-        if (j < seq2Length){
-          for (int k = 0; k < NumInsertStates; k++){
-            LOG_PLUS_EQUALS (backward[0 + ij], backward[2*k+2 + ij1] + insProb[c2][k] + transProb[0][2*k+2]);
-            LOG_PLUS_EQUALS (backward[2*k+2 + ij], backward[2*k+2 + ij1] + insProb[c2][k] + transProb[2*k+2][2*k+2]);
-          }
-        }
-
-        ij -= NumMatrixTypes;
-        i1j -= NumMatrixTypes;
-        ij1 -= NumMatrixTypes;
-        i1j1 -= NumMatrixTypes;
-      }
-    }
-
-    return backwardPtr;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeTotalProbability()
-  //
-  // Computes the total probability of an alignment given
-  // the forward and backward matrices.
-  /////////////////////////////////////////////////////////////////
-
-  float ComputeTotalProbability (int seq1Length, int seq2Length,
-                                 const VF &forward, const VF &backward) const {
-
-    // compute total probability
-    float totalForwardProb = LOG_ZERO;
-    float totalBackwardProb = LOG_ZERO;
-    for (int k = 0; k < NumMatrixTypes; k++){
-      LOG_PLUS_EQUALS (totalForwardProb,
-                       forward[k + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + 
-                      backward[k + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]);
-    }
-
-    totalBackwardProb = 
-      forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] +
-      backward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)];
-
-    for (int k = 0; k < NumInsertStates; k++){
-      LOG_PLUS_EQUALS (totalBackwardProb,
-                      forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] +
-                      backward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)]);
-      LOG_PLUS_EQUALS (totalBackwardProb,
-                      forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] +
-                      backward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)]);
-    }
-
-    //    cerr << totalForwardProb << " " << totalBackwardProb << endl;
-    
-    return (totalForwardProb + totalBackwardProb) / 2;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputePosteriorMatrix()
-  //
-  // Computes the posterior probability matrix based on
-  // the forward and backward matrices.
-  /////////////////////////////////////////////////////////////////
-
-  VF *ComputePosteriorMatrix (Sequence *seq1, Sequence *seq2,
-                              const VF &forward, const VF &backward) const {
-
-    assert (seq1);
-    assert (seq2);
-
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-
-    float totalProb = ComputeTotalProbability (seq1Length, seq2Length,
-                                               forward, backward);
-
-    // compute posterior matrices
-    VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1)); assert (posteriorPtr);
-    VF &posterior = *posteriorPtr;
-
-    int ij = 0;
-    VF::iterator ptr = posterior.begin();
-
-    for (int i = 0; i <= seq1Length; i++){
-      for (int j = 0; j <= seq2Length; j++){
-        *(ptr++) = EXP (min (LOG_ONE, forward[ij] + backward[ij] - totalProb));
-        ij += NumMatrixTypes;
-      }
-    }
-
-    posterior[0] = 0;
-
-    return posteriorPtr;
-  }
-
-  /*
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeExpectedCounts()
-  //
-  // Computes the expected counts for the various transitions.
-  /////////////////////////////////////////////////////////////////
-
-  VVF *ComputeExpectedCounts () const {
-
-    assert (seq1);
-    assert (seq2);
-
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-    SafeVector<char>::iterator iter1 = seq1->GetDataPtr();
-    SafeVector<char>::iterator iter2 = seq2->GetDataPtr();
-
-    // compute total probability
-    float totalProb = ComputeTotalProbability (seq1Length, seq2Length,
-                                               forward, backward);
-
-    // initialize expected counts
-    VVF *countsPtr = new VVF(NumMatrixTypes + 1, VF(NumMatrixTypes, LOG_ZERO)); assert (countsPtr);
-    VVF &counts = *countsPtr;
-
-    // remember offset for each index combination
-    int ij = 0;
-    int i1j = -seq2Length - 1;
-    int ij1 = -1;
-    int i1j1 = -seq2Length - 2;
-
-    ij *= NumMatrixTypes;
-    i1j *= NumMatrixTypes;
-    ij1 *= NumMatrixTypes;
-    i1j1 *= NumMatrixTypes;
-
-    // compute expected counts
-    for (int i = 0; i <= seq1Length; i++){
-      unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i];
-      for (int j = 0; j <= seq2Length; j++){
-        unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j];
-
-        if (i > 0 && j > 0){
-          for (int k = 0; k < NumMatrixTypes; k++)
-            LOG_PLUS_EQUALS (counts[k][0],
-                             forward[k + i1j1] + transProb[k][0] +
-                             matchProb[c1][c2] + backward[0 + ij]);
-        }
-        if (i > 0){
-          for (int k = 0; k < NumInsertStates; k++){
-            LOG_PLUS_EQUALS (counts[0][2*k+1],
-                             forward[0 + i1j] + transProb[0][2*k+1] +
-                             insProb[c1][k] + backward[2*k+1 + ij]);
-            LOG_PLUS_EQUALS (counts[2*k+1][2*k+1],
-                             forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] +
-                             insProb[c1][k] + backward[2*k+1 + ij]);
-          }
-        }
-        if (j > 0){
-          for (int k = 0; k < NumInsertStates; k++){
-            LOG_PLUS_EQUALS (counts[0][2*k+2],
-                             forward[0 + ij1] + transProb[0][2*k+2] +
-                             insProb[c2][k] + backward[2*k+2 + ij]);
-            LOG_PLUS_EQUALS (counts[2*k+2][2*k+2],
-                             forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] +
-                             insProb[c2][k] + backward[2*k+2 + ij]);
-          }
-        }
-
-        ij += NumMatrixTypes;
-        i1j += NumMatrixTypes;
-        ij1 += NumMatrixTypes;
-        i1j1 += NumMatrixTypes;
-      }
-    }
-
-    // scale all expected counts appropriately
-    for (int i = 0; i < NumMatrixTypes; i++)
-      for (int j = 0; j < NumMatrixTypes; j++)
-        counts[i][j] -= totalProb;
-
-  }
-  */
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeNewParameters()
-  //
-  // Computes a new parameter set based on the expected counts
-  // given.
-  /////////////////////////////////////////////////////////////////
-
-  void ComputeNewParameters (Sequence *seq1, Sequence *seq2,
-                            const VF &forward, const VF &backward,
-                             VF &initDistribMat, VF &gapOpen,
-                             VF &gapExtend, VVF &emitPairs, VF &emitSingle, bool enableTrainEmissions) const {
-    
-    assert (seq1);
-    assert (seq2);
-
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-    SafeVector<char>::iterator iter1 = seq1->GetDataPtr();
-    SafeVector<char>::iterator iter2 = seq2->GetDataPtr();
-
-    // compute total probability
-    float totalProb = ComputeTotalProbability (seq1Length, seq2Length,
-                                               forward, backward);
-    
-    // initialize expected counts
-    VVF transCounts (NumMatrixTypes, VF (NumMatrixTypes, LOG_ZERO));
-    VF initCounts (NumMatrixTypes, LOG_ZERO);
-    VVF pairCounts (256, VF (256, LOG_ZERO));
-    VF singleCounts (256, LOG_ZERO);
-    
-    // remember offset for each index combination
-    int ij = 0;
-    int i1j = -seq2Length - 1;
-    int ij1 = -1;
-    int i1j1 = -seq2Length - 2;
-
-    ij *= NumMatrixTypes;
-    i1j *= NumMatrixTypes;
-    ij1 *= NumMatrixTypes;
-    i1j1 *= NumMatrixTypes;
-
-    // compute initial distribution posteriors
-    initCounts[0] = LOG_ADD (forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] +
-                            backward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)],
-                            forward[0 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + 
-                            backward[0 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]);
-    for (int k = 0; k < NumInsertStates; k++){
-      initCounts[2*k+1] = LOG_ADD (forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] +
-                                  backward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)],
-                                  forward[2*k+1 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + 
-                                  backward[2*k+1 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]);
-      initCounts[2*k+2] = LOG_ADD (forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] +
-                                  backward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)],
-                                  forward[2*k+2 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + 
-                                  backward[2*k+2 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]);
-    }
-
-    // compute expected counts
-    for (int i = 0; i <= seq1Length; i++){
-      unsigned char c1 = (i == 0) ? '~' : (unsigned char) toupper(iter1[i]);
-      for (int j = 0; j <= seq2Length; j++){
-        unsigned char c2 = (j == 0) ? '~' : (unsigned char) toupper(iter2[j]);
-
-       if (i > 0 && j > 0){
-         if (enableTrainEmissions && i == 1 && j == 1){
-           LOG_PLUS_EQUALS (pairCounts[c1][c2],
-                            initialDistribution[0] + matchProb[c1][c2] + backward[0 + ij]);
-           LOG_PLUS_EQUALS (pairCounts[c2][c1],
-                            initialDistribution[0] + matchProb[c2][c1] + backward[0 + ij]);
-         }
-
-         for (int k = 0; k < NumMatrixTypes; k++){
-           LOG_PLUS_EQUALS (transCounts[k][0],
-                            forward[k + i1j1] + transProb[k][0] +
-                            matchProb[c1][c2] + backward[0 + ij]);
-           if (enableTrainEmissions && i != 1 || j != 1){
-             LOG_PLUS_EQUALS (pairCounts[c1][c2],
-                              forward[k + i1j1] + transProb[k][0] +
-                              matchProb[c1][c2] + backward[0 + ij]);
-             LOG_PLUS_EQUALS (pairCounts[c2][c1],
-                              forward[k + i1j1] + transProb[k][0] +
-                              matchProb[c2][c1] + backward[0 + ij]);
-           }
-         }
-       }
-       if (i > 0){
-         for (int k = 0; k < NumInsertStates; k++){
-           LOG_PLUS_EQUALS (transCounts[0][2*k+1],
-                            forward[0 + i1j] + transProb[0][2*k+1] +
-                            insProb[c1][k] + backward[2*k+1 + ij]);
-           LOG_PLUS_EQUALS (transCounts[2*k+1][2*k+1],
-                            forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] +
-                            insProb[c1][k] + backward[2*k+1 + ij]);
-           if (enableTrainEmissions){
-             if (i == 1 && j == 0){
-               LOG_PLUS_EQUALS (singleCounts[c1],
-                                initialDistribution[2*k+1] + insProb[c1][k] + backward[2*k+1 + ij]);
-             }
-             else {
-               LOG_PLUS_EQUALS (singleCounts[c1],
-                                forward[0 + i1j] + transProb[0][2*k+1] +
-                                insProb[c1][k] + backward[2*k+1 + ij]);
-               LOG_PLUS_EQUALS (singleCounts[c1],
-                                forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] +
-                                insProb[c1][k] + backward[2*k+1 + ij]);
-             }
-           }
-         }
-       }
-       if (j > 0){
-         for (int k = 0; k < NumInsertStates; k++){
-           LOG_PLUS_EQUALS (transCounts[0][2*k+2],
-                            forward[0 + ij1] + transProb[0][2*k+2] +
-                            insProb[c2][k] + backward[2*k+2 + ij]);
-           LOG_PLUS_EQUALS (transCounts[2*k+2][2*k+2],
-                            forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] +
-                            insProb[c2][k] + backward[2*k+2 + ij]);
-           if (enableTrainEmissions){
-             if (i == 0 && j == 1){
-               LOG_PLUS_EQUALS (singleCounts[c2],
-                                initialDistribution[2*k+2] + insProb[c2][k] + backward[2*k+2 + ij]);
-             }
-             else {
-               LOG_PLUS_EQUALS (singleCounts[c2],
-                                forward[0 + ij1] + transProb[0][2*k+2] +
-                                insProb[c2][k] + backward[2*k+2 + ij]);
-               LOG_PLUS_EQUALS (singleCounts[c2],
-                                forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] +
-                                insProb[c2][k] + backward[2*k+2 + ij]);
-             }
-           }
-         }
-       }
-      
-        ij += NumMatrixTypes;
-        i1j += NumMatrixTypes;
-        ij1 += NumMatrixTypes;
-        i1j1 += NumMatrixTypes;
-      }
-    }
-
-    // scale all expected counts appropriately
-    for (int i = 0; i < NumMatrixTypes; i++){
-      initCounts[i] -= totalProb;
-      for (int j = 0; j < NumMatrixTypes; j++)
-        transCounts[i][j] -= totalProb;
-    }
-    if (enableTrainEmissions){
-      for (int i = 0; i < 256; i++){
-       for (int j = 0; j < 256; j++)
-         pairCounts[i][j] -= totalProb;
-       singleCounts[i] -= totalProb;
-      }
-    }
-
-    // compute new initial distribution
-    float totalInitDistribCounts = 0;
-    for (int i = 0; i < NumMatrixTypes; i++)
-      totalInitDistribCounts += exp (initCounts[i]); // should be 2
-    initDistribMat[0] = min (1.0f, max (0.0f, (float) exp (initCounts[0]) / totalInitDistribCounts));
-    for (int k = 0; k < NumInsertStates; k++){
-      float val = (exp (initCounts[2*k+1]) + exp (initCounts[2*k+2])) / 2;
-      initDistribMat[2*k+1] = initDistribMat[2*k+2] = min (1.0f, max (0.0f, val / totalInitDistribCounts));
-    }
-
-    // compute total counts for match state
-    float inMatchStateCounts = 0;
-    for (int i = 0; i < NumMatrixTypes; i++)
-      inMatchStateCounts += exp (transCounts[0][i]);
-    for (int i = 0; i < NumInsertStates; i++){
-
-      // compute total counts for gap state
-      float inGapStateCounts =
-        exp (transCounts[2*i+1][0]) +
-        exp (transCounts[2*i+1][2*i+1]) +
-        exp (transCounts[2*i+2][0]) +
-        exp (transCounts[2*i+2][2*i+2]);
-
-      gapOpen[2*i] = gapOpen[2*i+1] =
-        (exp (transCounts[0][2*i+1]) +
-         exp (transCounts[0][2*i+2])) /
-        (2 * inMatchStateCounts);
-
-      gapExtend[2*i] = gapExtend[2*i+1] =
-        (exp (transCounts[2*i+1][2*i+1]) +
-         exp (transCounts[2*i+2][2*i+2])) /
-        inGapStateCounts;
-    }
-
-    if (enableTrainEmissions){
-      float totalPairCounts = 0;
-      float totalSingleCounts = 0;
-      for (int i = 0; i < 256; i++){
-       for (int j = 0; j <= i; j++)
-         totalPairCounts += exp (pairCounts[j][i]);
-       totalSingleCounts += exp (singleCounts[i]);
-      }
-      
-      for (int i = 0; i < 256; i++) if (!islower ((char) i)){
-       int li = (int)((unsigned char) tolower ((char) i));
-       for (int j = 0; j <= i; j++) if (!islower ((char) j)){
-         int lj = (int)((unsigned char) tolower ((char) j));
-         emitPairs[i][j] = emitPairs[i][lj] = emitPairs[li][j] = emitPairs[li][lj] = 
-           emitPairs[j][i] = emitPairs[j][li] = emitPairs[lj][i] = emitPairs[lj][li] = exp(pairCounts[j][i]) / totalPairCounts;
-       }
-       emitSingle[i] = emitSingle[li] = exp(singleCounts[i]) / totalSingleCounts;
-      }
-    }
-  }
-    
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeAlignment()
-  //
-  // Computes an alignment based on the given posterior matrix.
-  // This is done by finding the maximum summing path (or
-  // maximum weight trace) through the posterior matrix.  The
-  // final alignment is returned as a pair consisting of:
-  //    (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and
-  //        denote insertions in one of the two sequences and
-  //        B's denote that both sequences are present (i.e.
-  //        matches).
-  //    (2) a float indicating the sum achieved
-  /////////////////////////////////////////////////////////////////
-
-  pair<SafeVector<char> *, float> ComputeAlignment (int seq1Length, int seq2Length, const VF &posterior) const {
-
-    float *twoRows = new float[(seq2Length+1)*2]; assert (twoRows);
-    float *oldRow = twoRows;
-    float *newRow = twoRows + seq2Length + 1;
-
-    char *tracebackMatrix = new char[(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix);
-    char *tracebackPtr = tracebackMatrix;
-
-    VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1;
-
-    // initialization
-    for (int i = 0; i <= seq2Length; i++){
-      oldRow[i] = 0;
-      *(tracebackPtr++) = 'L';
-    }
-
-    // fill in matrix
-    for (int i = 1; i <= seq1Length; i++){
-
-      // initialize left column
-      newRow[0] = 0;
-      posteriorPtr++;
-      *(tracebackPtr++) = 'U';
-
-      // fill in rest of row
-      for (int j = 1; j <= seq2Length; j++){
-        ChooseBestOfThree (*(posteriorPtr++) + oldRow[j-1], newRow[j-1], oldRow[j],
-                           'D', 'L', 'U', &newRow[j], tracebackPtr++); // Match, insert, delete
-      }
-
-      // swap rows
-      float *temp = oldRow;
-      oldRow = newRow;
-      newRow = temp;
-    }
-
-    // store best score
-    float total = oldRow[seq2Length];
-    delete [] twoRows;
-
-    // compute traceback
-    SafeVector<char> *alignment = new SafeVector<char>; assert (alignment);
-    int r = seq1Length, c = seq2Length;
-    while (r != 0 || c != 0){
-      char ch = tracebackMatrix[r*(seq2Length+1) + c];
-      switch (ch){
-      case 'L': c--; alignment->push_back ('Y'); break;
-      case 'U': r--; alignment->push_back ('X'); break;
-      case 'D': c--; r--; alignment->push_back ('B'); break;
-      default: assert (false);
-      }
-    }
-
-    delete [] tracebackMatrix;
-
-    reverse (alignment->begin(), alignment->end());
-
-    return make_pair(alignment, total);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeAlignment2()
-  //
-  // Computes an alignment based on the given posterior matrix.
-  // This is done by finding the maximum summing path (or
-  // maximum weight trace) through the posterior matrix.  The
-  // final alignment is returned as a pair consisting of:
-  //    (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and
-  //        denote insertions in one of the two sequences and
-  //        B's denote that both sequences are present (i.e.
-  //        matches).
-  //    (2) a float indicating the sum achieved
-  /////////////////////////////////////////////////////////////////
-
-  pair<SafeVector<char> *, float> ComputeAlignment2 (int seq1Length, int seq2Length,
-                                                    const VF &posterior, std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2,
-                                                    std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2) const {
-    NRMat<float> WM(seq1Length + 1, seq2Length + 1);
-    for (int i = 0; i <= seq1Length; i++) {
-       for (int j = 0; j <= seq2Length; j++) {
-           WM[i][j] = 0;
-       }
-    }
-
-    int len      = WORDLENGTH;
-    int size     = matchPSCS1->size();
-    float weight = 1000;
-
-    for(int iter = 0; iter < size; iter++) {
-       int i = matchPSCS1->at(iter);
-       int j = matchPSCS2->at(iter);
-
-       const StemCandidate &sc1 = pscs1->at(i);
-       const StemCandidate &sc2 = pscs2->at(j);
-       for(int k = 0; k < len; k++) {
-           WM[sc1.GetPosition() + k][sc2.GetPosition() + k] += weight;
-       }
-    }
-    float *twoRows = new float[(seq2Length+1)*2]; assert (twoRows);
-    float *oldRow = twoRows;
-    float *newRow = twoRows + seq2Length + 1;
-
-    char *tracebackMatrix = new char[(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix);
-    char *tracebackPtr = tracebackMatrix;
-
-    VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1;
-
-    // initialization
-    for (int i = 0; i <= seq2Length; i++){
-      oldRow[i] = 0;
-      *(tracebackPtr++) = 'L';
-    }
-
-    // fill in matrix
-    for (int i = 1; i <= seq1Length; i++){
-
-      // initialize left column
-      newRow[0] = 0;
-      posteriorPtr++;
-      *(tracebackPtr++) = 'U';
-
-      // fill in rest of row
-      for (int j = 1; j <= seq2Length; j++){
-        ChooseBestOfThree (*(posteriorPtr++) + oldRow[j-1] + WM[i][j], newRow[j-1], oldRow[j],
-                           'D', 'L', 'U', &newRow[j], tracebackPtr++);
-      }
-
-      // swap rows
-      float *temp = oldRow;
-      oldRow = newRow;
-      newRow = temp;
-    }
-
-    // store best score
-    float total = oldRow[seq2Length];
-    delete [] twoRows;
-
-    // compute traceback
-    SafeVector<char> *alignment = new SafeVector<char>; assert (alignment);
-    int r = seq1Length, c = seq2Length;
-    while (r != 0 || c != 0){
-      char ch = tracebackMatrix[r*(seq2Length+1) + c];
-      switch (ch){
-      case 'L': c--; alignment->push_back ('Y'); break;
-      case 'U': r--; alignment->push_back ('X'); break;
-      case 'D': c--; r--; alignment->push_back ('B'); break;
-      default: assert (false);
-      }
-    }
-
-    delete [] tracebackMatrix;
-
-    reverse (alignment->begin(), alignment->end());
-
-    return make_pair(alignment, total);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeAlignmentWithGapPenalties()
-  //
-  // Similar to ComputeAlignment() except with gap penalties.
-  /////////////////////////////////////////////////////////////////
-
-  pair<SafeVector<char> *, float> ComputeAlignmentWithGapPenalties (MultiSequence *align1,
-                                                                    MultiSequence *align2,
-                                                                    const VF &posterior, int numSeqs1,
-                                                                    int numSeqs2,
-                                                                    float gapOpenPenalty,
-                                                                    float gapContinuePenalty) const {
-    int seq1Length = align1->GetSequence(0)->GetLength();
-    int seq2Length = align2->GetSequence(0)->GetLength();
-    SafeVector<SafeVector<char>::iterator > dataPtrs1 (align1->GetNumSequences());
-    SafeVector<SafeVector<char>::iterator > dataPtrs2 (align2->GetNumSequences());
-
-    // grab character data
-    for (int i = 0; i < align1->GetNumSequences(); i++)
-      dataPtrs1[i] = align1->GetSequence(i)->GetDataPtr();
-    for (int i = 0; i < align2->GetNumSequences(); i++)
-      dataPtrs2[i] = align2->GetSequence(i)->GetDataPtr();
-
-    // the number of active sequences at any given column is defined to be the
-    // number of non-gap characters in that column; the number of gap opens at
-    // any given column is defined to be the number of gap characters in that
-    // column where the previous character in the respective sequence was not
-    // a gap
-    SafeVector<int> numActive1 (seq1Length+1), numGapOpens1 (seq1Length+1);
-    SafeVector<int> numActive2 (seq2Length+1), numGapOpens2 (seq2Length+1);
-
-    // compute number of active sequences and gap opens for each group
-    for (int i = 0; i < align1->GetNumSequences(); i++){
-      SafeVector<char>::iterator dataPtr = align1->GetSequence(i)->GetDataPtr();
-      numActive1[0] = numGapOpens1[0] = 0;
-      for (int j = 1; j <= seq1Length; j++){
-        if (dataPtr[j] != '-'){
-          numActive1[j]++;
-          numGapOpens1[j] += (j != 1 && dataPtr[j-1] != '-');
-        }
-      }
-    }
-    for (int i = 0; i < align2->GetNumSequences(); i++){
-      SafeVector<char>::iterator dataPtr = align2->GetSequence(i)->GetDataPtr();
-      numActive2[0] = numGapOpens2[0] = 0;
-      for (int j = 1; j <= seq2Length; j++){
-        if (dataPtr[j] != '-'){
-          numActive2[j]++;
-          numGapOpens2[j] += (j != 1 && dataPtr[j-1] != '-');
-        }
-      }
-    }
-
-    VVF openingPenalty1 (numSeqs1+1, VF (numSeqs2+1));
-    VF continuingPenalty1 (numSeqs1+1);
-    VVF openingPenalty2 (numSeqs1+1, VF (numSeqs2+1));
-    VF continuingPenalty2 (numSeqs2+1);
-
-    // precompute penalties
-    for (int i = 0; i <= numSeqs1; i++)
-      for (int j = 0; j <= numSeqs2; j++)
-        openingPenalty1[i][j] = i * (gapOpenPenalty * j + gapContinuePenalty * (numSeqs2 - j));
-    for (int i = 0; i <= numSeqs1; i++)
-      continuingPenalty1[i] = i * gapContinuePenalty * numSeqs2;
-    for (int i = 0; i <= numSeqs2; i++)
-      for (int j = 0; j <= numSeqs1; j++)
-        openingPenalty2[i][j] = i * (gapOpenPenalty * j + gapContinuePenalty * (numSeqs1 - j));
-    for (int i = 0; i <= numSeqs2; i++)
-      continuingPenalty2[i] = i * gapContinuePenalty * numSeqs1;
-
-    float *twoRows = new float[6*(seq2Length+1)]; assert (twoRows);
-    float *oldRowMatch = twoRows;
-    float *newRowMatch = twoRows + (seq2Length+1);
-    float *oldRowInsertX = twoRows + 2*(seq2Length+1);
-    float *newRowInsertX = twoRows + 3*(seq2Length+1);
-    float *oldRowInsertY = twoRows + 4*(seq2Length+1);
-    float *newRowInsertY = twoRows + 5*(seq2Length+1);
-
-    char *tracebackMatrix = new char[3*(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix);
-    char *tracebackPtr = tracebackMatrix;
-
-    VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1;
-
-    // initialization
-    for (int i = 0; i <= seq2Length; i++){
-      oldRowMatch[i] = oldRowInsertX[i] = (i == 0) ? 0 : LOG_ZERO;
-      oldRowInsertY[i] = (i == 0) ? 0 : oldRowInsertY[i-1] + continuingPenalty2[numActive2[i]];
-      *(tracebackPtr) = *(tracebackPtr+1) = *(tracebackPtr+2) = 'Y';
-      tracebackPtr += 3;
-    }
-
-    // fill in matrix
-    for (int i = 1; i <= seq1Length; i++){
-
-      // initialize left column
-      newRowMatch[0] = newRowInsertY[0] = LOG_ZERO;
-      newRowInsertX[0] = oldRowInsertX[0] + continuingPenalty1[numActive1[i]];
-      posteriorPtr++;
-      *(tracebackPtr) = *(tracebackPtr+1) = *(tracebackPtr+2) = 'X';
-      tracebackPtr += 3;
-
-      // fill in rest of row
-      for (int j = 1; j <= seq2Length; j++){
-
-        // going to MATCH state
-        ChooseBestOfThree (oldRowMatch[j-1],
-                           oldRowInsertX[j-1],
-                           oldRowInsertY[j-1],
-                           'M', 'X', 'Y', &newRowMatch[j], tracebackPtr++);
-        newRowMatch[j] += *(posteriorPtr++);
-
-        // going to INSERT X state
-        ChooseBestOfThree (oldRowMatch[j] + openingPenalty1[numActive1[i]][numGapOpens2[j]],
-                           oldRowInsertX[j] + continuingPenalty1[numActive1[i]],
-                           oldRowInsertY[j] + openingPenalty1[numActive1[i]][numGapOpens2[j]],
-                           'M', 'X', 'Y', &newRowInsertX[j], tracebackPtr++);
-
-        // going to INSERT Y state
-        ChooseBestOfThree (newRowMatch[j-1] + openingPenalty2[numActive2[j]][numGapOpens1[i]],
-                           newRowInsertX[j-1] + openingPenalty2[numActive2[j]][numGapOpens1[i]],
-                           newRowInsertY[j-1] + continuingPenalty2[numActive2[j]],
-                           'M', 'X', 'Y', &newRowInsertY[j], tracebackPtr++);
-      }
-
-      // swap rows
-      float *temp;
-      temp = oldRowMatch; oldRowMatch = newRowMatch; newRowMatch = temp;
-      temp = oldRowInsertX; oldRowInsertX = newRowInsertX; newRowInsertX = temp;
-      temp = oldRowInsertY; oldRowInsertY = newRowInsertY; newRowInsertY = temp;
-    }
-
-    // store best score
-    float total;
-    char matrix;
-    ChooseBestOfThree (oldRowMatch[seq2Length], oldRowInsertX[seq2Length], oldRowInsertY[seq2Length],
-                       'M', 'X', 'Y', &total, &matrix);
-
-    delete [] twoRows;
-
-    // compute traceback
-    SafeVector<char> *alignment = new SafeVector<char>; assert (alignment);
-    int r = seq1Length, c = seq2Length;
-    while (r != 0 || c != 0){
-
-      int offset = (matrix == 'M') ? 0 : (matrix == 'X') ? 1 : 2;
-      char ch = tracebackMatrix[(r*(seq2Length+1) + c) * 3 + offset];
-      switch (matrix){
-      case 'Y': c--; alignment->push_back ('Y'); break;
-      case 'X': r--; alignment->push_back ('X'); break;
-      case 'M': c--; r--; alignment->push_back ('B'); break;
-      default: assert (false);
-      }
-      matrix = ch;
-    }
-
-    delete [] tracebackMatrix;
-
-    reverse (alignment->begin(), alignment->end());
-
-    return make_pair(alignment, 1.0f);
-  }
-
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::ComputeViterbiAlignment()
-  //
-  // Computes the highest probability pairwise alignment using the
-  // probabilistic model.  The final alignment is returned as a
-  //  pair consisting of:
-  //    (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and
-  //        denote insertions in one of the two sequences and
-  //        B's denote that both sequences are present (i.e.
-  //        matches).
-  //    (2) a float containing the log probability of the best
-  //        alignment (not used)
-  /////////////////////////////////////////////////////////////////
-
-  pair<SafeVector<char> *, float> ComputeViterbiAlignment (Sequence *seq1, Sequence *seq2) const {
-    
-    assert (seq1);
-    assert (seq2);
-    
-    const int seq1Length = seq1->GetLength();
-    const int seq2Length = seq2->GetLength();
-    
-    // retrieve the points to the beginning of each sequence
-    SafeVector<char>::iterator iter1 = seq1->GetDataPtr();
-    SafeVector<char>::iterator iter2 = seq2->GetDataPtr();
-    
-    // create viterbi matrix
-    VF *viterbiPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO);
-    assert (viterbiPtr);
-    VF &viterbi = *viterbiPtr;
-
-    // create traceback matrix
-    VI *tracebackPtr = new VI (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), -1);
-    assert (tracebackPtr);
-    VI &traceback = *tracebackPtr;
-
-    // initialization condition
-    for (int k = 0; k < NumMatrixTypes; k++)
-      viterbi[k] = initialDistribution[k];
-
-    // remember offset for each index combination
-    int ij = 0;
-    int i1j = -seq2Length - 1;
-    int ij1 = -1;
-    int i1j1 = -seq2Length - 2;
-
-    ij *= NumMatrixTypes;
-    i1j *= NumMatrixTypes;
-    ij1 *= NumMatrixTypes;
-    i1j1 *= NumMatrixTypes;
-
-    // compute viterbi scores
-    for (int i = 0; i <= seq1Length; i++){
-      unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i];
-      for (int j = 0; j <= seq2Length; j++){
-        unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j];
-
-        if (i > 0 && j > 0){
-          for (int k = 0; k < NumMatrixTypes; k++){
-           float newVal = viterbi[k + i1j1] + transProb[k][0] + matchProb[c1][c2];
-           if (viterbi[0 + ij] < newVal){
-             viterbi[0 + ij] = newVal;
-             traceback[0 + ij] = k;
-           }
-         }
-        }
-        if (i > 0){
-          for (int k = 0; k < NumInsertStates; k++){
-           float valFromMatch = insProb[c1][k] + viterbi[0 + i1j] + transProb[0][2*k+1];
-           float valFromIns = insProb[c1][k] + viterbi[2*k+1 + i1j] + transProb[2*k+1][2*k+1];
-           if (valFromMatch >= valFromIns){
-             viterbi[2*k+1 + ij] = valFromMatch;
-             traceback[2*k+1 + ij] = 0;
-           }
-           else {
-             viterbi[2*k+1 + ij] = valFromIns;
-             traceback[2*k+1 + ij] = 2*k+1;
-           }
-         }
-       }
-        if (j > 0){
-          for (int k = 0; k < NumInsertStates; k++){
-           float valFromMatch = insProb[c2][k] + viterbi[0 + ij1] + transProb[0][2*k+2];
-           float valFromIns = insProb[c2][k] + viterbi[2*k+2 + ij1] + transProb[2*k+2][2*k+2];
-           if (valFromMatch >= valFromIns){
-             viterbi[2*k+2 + ij] = valFromMatch;
-             traceback[2*k+2 + ij] = 0;
-           }
-           else {
-             viterbi[2*k+2 + ij] = valFromIns;
-             traceback[2*k+2 + ij] = 2*k+2;
-           }
-         }
-        }
-
-        ij += NumMatrixTypes;
-        i1j += NumMatrixTypes;
-        ij1 += NumMatrixTypes;
-        i1j1 += NumMatrixTypes;
-      }
-    }
-
-    // figure out best terminating cell
-    float bestProb = LOG_ZERO;
-    int state = -1;
-    for (int k = 0; k < NumMatrixTypes; k++){
-      float thisProb = viterbi[k + NumMatrixTypes * ((seq1Length+1)*(seq2Length+1) - 1)] + initialDistribution[k];
-      if (bestProb < thisProb){
-       bestProb = thisProb;
-       state = k;
-      }
-    }
-    assert (state != -1);
-
-    delete viterbiPtr;
-
-    // compute traceback
-    SafeVector<char> *alignment = new SafeVector<char>; assert (alignment);
-    int r = seq1Length, c = seq2Length;
-    while (r != 0 || c != 0){
-      int newState = traceback[state + NumMatrixTypes * (r * (seq2Length+1) + c)];
-      
-      if (state == 0){ c--; r--; alignment->push_back ('B'); }
-      else if (state % 2 == 1){ r--; alignment->push_back ('X'); }
-      else { c--; alignment->push_back ('Y'); }
-      
-      state = newState;
-    }
-
-    delete tracebackPtr;
-
-    reverse (alignment->begin(), alignment->end());
-    
-    return make_pair(alignment, bestProb);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // ProbabilisticModel::BuildPosterior()
-  //
-  // Builds a posterior probability matrix needed to align a pair
-  // of alignments.  Mathematically, the returned matrix M is
-  // defined as follows:
-  //    M[i,j] =     sum          sum      f(s,t,i,j)
-  //             s in align1  t in align2
-  // where
-  //                  [  P(s[i'] <--> t[j'])
-  //                  [       if s[i'] is a letter in the ith column of align1 and
-  //                  [          t[j'] it a letter in the jth column of align2
-  //    f(s,t,i,j) =  [
-  //                  [  0    otherwise
-  //
-  /////////////////////////////////////////////////////////////////
-
-  VF *BuildPosterior (MultiSequence *align1, MultiSequence *align2,
-                      const SafeVector<SafeVector<SparseMatrix *> > &sparseMatrices,
-                     float cutoff = 0.0f) const {
-    const int seq1Length = align1->GetSequence(0)->GetLength();
-    const int seq2Length = align2->GetSequence(0)->GetLength();
-
-    VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1), 0); assert (posteriorPtr);
-    VF &posterior = *posteriorPtr;
-    VF::iterator postPtr = posterior.begin();
-
-    // for each s in align1
-    for (int i = 0; i < align1->GetNumSequences(); i++){
-      int first = align1->GetSequence(i)->GetLabel();
-      SafeVector<int> *mapping1 = align1->GetSequence(i)->GetMapping();
-
-      // for each t in align2
-      for (int j = 0; j < align2->GetNumSequences(); j++){
-        int second = align2->GetSequence(j)->GetLabel();
-        SafeVector<int> *mapping2 = align2->GetSequence(j)->GetMapping();
-       if (first < second){
-
-         // get the associated sparse matrix
-         SparseMatrix *matrix = sparseMatrices[first][second];
-         
-         for (int ii = 1; ii <= matrix->GetSeq1Length(); ii++){
-           SafeVector<PIF>::iterator row = matrix->GetRowPtr(ii);
-           int base = (*mapping1)[ii] * (seq2Length+1);
-           int rowSize = matrix->GetRowSize(ii);
-           // add in all relevant values
-           for (int jj = 0; jj < rowSize; jj++) 
-             posterior[base + (*mapping2)[row[jj].first]] += row[jj].second;
-
-           // subtract cutoff 
-           for (int jj = 0; jj < matrix->GetSeq2Length(); jj++) {
-             posterior[base + (*mapping2)[jj]] -= cutoff;
-           }
-
-         }
-
-       } else {
-         // get the associated sparse matrix
-         SparseMatrix *matrix = sparseMatrices[second][first];
-         
-         for (int jj = 1; jj <= matrix->GetSeq1Length(); jj++){
-           SafeVector<PIF>::iterator row = matrix->GetRowPtr(jj);
-           int base = (*mapping2)[jj];
-           int rowSize = matrix->GetRowSize(jj);
-           
-           // add in all relevant values
-           for (int ii = 0; ii < rowSize; ii++)
-             posterior[base + (*mapping1)[row[ii].first] * (seq2Length + 1)] += row[ii].second;
-           
-           // subtract cutoff 
-           for (int ii = 0; ii < matrix->GetSeq2Length(); ii++)
-             posterior[base + (*mapping1)[ii] * (seq2Length + 1)] -= cutoff;
-         }
-
-       }
-       
-
-        delete mapping2;
-      }
-
-      delete mapping1;
-    }
-
-    return posteriorPtr;
-  }
-};
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc
deleted file mode 100644 (file)
index 4696ba1..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// ProjectPairwise
-//
-// Program for projecting multiple alignments to all pairwise
-// alignments.
-/////////////////////////////////////////////////////////////////
-
-#include "SafeVector.h"
-#include "MultiSequence.h"
-#include <string>
-#include <sstream>
-#include <iomanip>
-#include <iostream>
-#include <list>
-#include <set>
-#include <limits>
-#include <cstdio>
-#include <cstdlib>
-#include <cerrno>
-#include <iomanip>
-
-bool compressGaps = true;
-
-/////////////////////////////////////////////////////////////////
-// main()
-//
-// Main program.
-/////////////////////////////////////////////////////////////////
-
-int main (int argc, char **argv){
-
-  // check arguments
-  if (argc < 2){
-    cerr << "Usage: project ALIGNMENT [-nocompressgaps]" << endl;
-    exit (1);
-  }
-
-  for (int i = 2; i < argc; i++){
-    if (strcmp (argv[i], "-nocompressgaps") == 0)
-      compressGaps = false;
-    else {
-      cerr << "Unrecognized option: " << argv[i] << endl;
-      exit (1);
-    }
-  }
-
-  MultiSequence *align = new MultiSequence (string (argv[1])); assert (align);
-
-  int N = align->GetNumSequences();
-  for (int i = 0; i < N; i++){
-    for (int j = i+1; j < N; j++){
-      string name = align->GetSequence(i)->GetHeader() + "-" + align->GetSequence(j)->GetHeader() + ".fasta";
-      ofstream outfile (name.c_str());
-
-      if (compressGaps){
-       set<int> s;
-       s.insert (i); s.insert (j);
-       MultiSequence *proj = align->Project (s);
-       proj->WriteMFA (outfile);
-       delete proj;
-      }
-      else {
-       align->GetSequence(i)->WriteMFA (outfile, 60);
-       align->GetSequence(j)->WriteMFA (outfile, 60);
-      }
-      outfile.close();
-    }
-  }
-
-  delete align;
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README
deleted file mode 100644 (file)
index 57087e1..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-
-                          PROBCONS
-                          ~~~~~~~~                          
-
-   Probabilistic consistency-based multiple sequence alignment 
-
------------------------------------------------------------------
-                                                             
-PROBCONS is a novel tool for generating  multiple  alignments
-of protein sequences.  Using a combination  of  probabilistic 
-modeling and consistency-based alignment techniques, PROBCONS
-has achieved the highest accuracy of all alignment methods to
-date. 
-
-PROBCONS was developed by Chuong B. Do in collaboration  with 
-Michael Brudno in the research group  of  Serafim  Batzoglou,
-Department of Computer Science, Stanford University.
-
-For more information on the algorithms, please see
-
-     Do, C.B., Brudno, M., and Batzoglou, S. (2004) PROBCONS:
-     Probabilistic Consistency-based  Multiple  Alignment  of
-     Amino Acid Sequences.  12th International Conference  on
-     Intelligent Systems for Molecular Biology.  In press.
-
-and
-
-     Do, C.B., Brudno, M., and Batzoglou, S. (2004) PROBCONS:
-     Probabilistic Consistency-based  Multiple  Alignment  of
-     Amino Acid Sequences.  The 19th National  Conference  on
-     Artificial Intelligence (AAAI-04).  In press.
-
------------------------------------------------------------------
-
-PROBCONS has been made  freely  available  as  PUBLIC  DOMAIN
-software and hence is not subject to copyright in the  United
-States.  This system and/or any portion of  the  source  code
-may be used, modified, or redistributed without restrictions.  
-PROBCONS is distributed WITHOUT WARRANTY, express or implied.
-The authors accept NO LEGAL LIABILITY OR  RESPONSIBILITY  for
-loss due to reliance on the program.
-   
------------------------------------------------------------------
-
-Version History
-
-1.0, 3/23/2004 (Chuong Do)
-   -- initial release
-
-1.01, 3/25/2004 (Chuong Do)
-   -- fixed error in training procedure
-   -- retrained default parameters for 1 and 2 pairs of insert
-      states
-
-1.02, 4/17/2004 (Chuong Do)
-   -- replaced LOG_ADD and EXP routines
-   -- added support for reading MSF format files
-   -- added two extra utilities for scoring PROBCONS alignments
-      (for benchmarking purposes)
-      -- added the "compare" program for scoring alignments
-         according to a reference alignment with respect to 
-         sum-of-pairs and column scores
-      -- added the "fixref" program for adjusting PREFAB 
-        alignments to contain all letters of the input 
-        sequences; basically the main program for PROBCONS
-         "hacked" to get the job done
-
-1.03, 5/3/2004 (Chuong Do)
-   -- added option to do all-pairs pairwise alignments instead
-      of constructing a full multiple alignment
-   -- added support for reading DIALIGN style files
-   -- enabled support for using BAliBASE annotations for scoring
-      BAliBASE alignments
-   -- several minor bug fixes thanks to Bob Edgar
-   -- added "project" program to project multiple alignment to
-      pairwise alignments
-
-1.04, 5/9/2004 (Chuong Do)
-   -- switched over to default of one-insert state pair
-   -- retrained default parameters
-   -- added annotation scores
-   -- small changes to model topology to make end gaps symmetrical
-   -- added makegnuplot utility to plot annotation scores
-
-1.05, 5/26/2004 (Chuong Do)
-   -- added cutoff filtering for posterior scores
-   -- made small corrections to recurrences for computing alignments
-   -- added CLUSTALW output support
-
-1.06, 7/13/2004 (Chuong Do)
-   -- ProbCons is now PUBLIC DOMAIN software.
-
-1.07, 8/30/2004 (Chuong Do)
-   -- Fixed CLUSTALW output for sequence names (thanks to John Calley
-      for pointing this out)
-
-1.08, 8/31/2004 (Chuong Do)
-   -- Added option for alignment order output (-a).
-
-1.09, 9/1/2004 (Chuong Do)
-   -- PROBCONS now allows input files with existing gaps -- these are
-      automatically stripped before alignment.
-
-1.10, 3/16/2005 (Chuong Do)
-   -- Reduced memory consumption by
-      -- not storing posterior matrix transposes
-      -- restricting consistency-derived posterior matrices to original posterior matrix
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h
deleted file mode 100644 (file)
index 7220316..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// SafeVector.h
-//
-// STL vector with array bounds checking.  To enable bounds
-// checking, #define ENABLE_CHECKS.
-/////////////////////////////////////////////////////////////////
-
-#ifndef SAFEVECTOR_H
-#define SAFEVECTOR_H
-
-#include <cassert>
-#include <vector>
-
-/////////////////////////////////////////////////////////////////
-// SafeVector
-//
-// Class derived from the STL std::vector for bounds checking.
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-template<class TYPE>
-class SafeVector : public std::vector<TYPE>{
- public:
-
-  // miscellaneous constructors
-  SafeVector() : std::vector<TYPE>() {}
-  SafeVector (size_t size) : std::vector<TYPE>(size) {}
-  SafeVector (size_t size, const TYPE &value) : std::vector<TYPE>(size, value) {}
-  SafeVector (const SafeVector &source) : std::vector<TYPE>(source) {}
-
-#ifdef ENABLE_CHECKS
-
-  // [] array bounds checking
-  TYPE &operator[](int index){
-    assert (index >= 0 && index < (int) size());
-    return std::vector<TYPE>::operator[] ((size_t) index);
-  }
-
-  // [] const array bounds checking
-  const TYPE &operator[] (int index) const {
-    assert (index >= 0 && index < (int) size());
-    return std::vector<TYPE>::operator[] ((size_t) index) ;
-  }
-
-#endif
-
-};
-
-// some commonly used vector types
-typedef SafeVector<int> VI;
-typedef SafeVector<VI> VVI;
-typedef SafeVector<VVI> VVVI;
-typedef SafeVector<float> VF;
-typedef SafeVector<VF> VVF;
-typedef SafeVector<VVF> VVVF;
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h
deleted file mode 100644 (file)
index 186d3fd..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// ScoreType.h
-//
-// Routines for doing math operations in PROBCONS.
-/////////////////////////////////////////////////////////////////
-
-#ifndef SCORETYPE_H
-#define SCORETYPE_H
-
-#include <cmath>
-#include <algorithm>
-#include <cfloat>
-
-typedef float ScoreType;
-
-const float LOG_ZERO = -2e20;
-const float LOG_ONE = 0.0;
-
-/////////////////////////////////////////////////////////////////
-// LOG()
-//
-// Compute the logarithm of x.
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOG (ScoreType x){
-  return log (x);
-}
-
-/////////////////////////////////////////////////////////////////
-// EXP()
-//
-// Computes exp(x).
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType EXP (ScoreType x){
-  //return exp(x);
-  if (x > -2){
-    if (x > -0.5){
-      if (x > 0)
-       return exp(x);
-      return (((0.03254409303190190000*x + 0.16280432765779600000)*x + 0.49929760485974900000)*x + 0.99995149601363700000)*x + 0.99999925508501600000;
-    }
-    if (x > -1)
-      return (((0.01973899026052090000*x + 0.13822379685007000000)*x + 0.48056651562365000000)*x + 0.99326940370383500000)*x + 0.99906756856399500000;
-    return (((0.00940528203591384000*x + 0.09414963667859410000)*x + 0.40825793595877300000)*x + 0.93933625499130400000)*x + 0.98369508190545300000;
-  }
-  if (x > -8){
-    if (x > -4)
-      return (((0.00217245711583303000*x + 0.03484829428350620000)*x + 0.22118199801337800000)*x + 0.67049462206469500000)*x + 0.83556950223398500000;
-    return (((0.00012398771025456900*x + 0.00349155785951272000)*x + 0.03727721426017900000)*x + 0.17974997741536900000)*x + 0.33249299994217400000;
-  }
-  if (x > -16)
-    return (((0.00000051741713416603*x + 0.00002721456879608080)*x + 0.00053418601865636800)*x + 0.00464101989351936000)*x + 0.01507447981459420000;
-  return 0;
-}
-
-/*
-/////////////////////////////////////////////////////////////////
-// LOOKUP()
-//
-// Computes log (exp (x) + 1), for 0 <= x <= 7.5.
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOOKUP (ScoreType x){
-  //return log (exp(x) + 1);
-  if (x < 2){
-    if (x < 0.5){
-      if (x < 0)
-       return log (exp(x) + 1);
-      return (((-0.00486373205785640000*x - 0.00020245408813934800)*x + 0.12504222666029800000)*x + 0.49999685320563000000)*x + 0.69314723138948900000;
-    }
-    if (x < 1)
-      return (((-0.00278634205460548000*x - 0.00458097251248546000)*x + 0.12865849880472500000)*x + 0.49862228499205200000)*x + 0.69334810088688000000;
-    return (((0.00059633755154209200*x - 0.01918996666063320000)*x + 0.15288232492093800000)*x + 0.48039958825756900000)*x + 0.69857578503189200000;
-  }
-  if (x < 8){
-    if (x < 4)
-      return (((0.00135958539181047000*x - 0.02329807659316430000)*x + 0.15885799609532100000)*x + 0.48167498563270800000)*x + 0.69276185058669200000;
-    return (((0.00011992394456683500*x - 0.00338464503306568000)*x + 0.03622746366545470000)*x + 0.82481250248383700000)*x + 0.32507892994863100000;
-  }
-  if (x < 16)
-    return (((0.00000051726300753785*x - 0.00002720671238876090)*x + 0.00053403733818413500)*x + 0.99536021775747900000)*x + 0.01507065715532010000;
-  return x;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP_SLOW()
-//
-// Computes log (exp (x) + 1).
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOOKUP_SLOW (ScoreType x){
-  return log (exp (x) + 1);
-}
-
-/////////////////////////////////////////////////////////////////
-// MAX()
-//
-// Compute max of three numbers
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType MAX (ScoreType x, ScoreType y, ScoreType z){
-  if (x >= y){
-    if (x >= z)
-      return x;
-    return z;
-  }
-  if (y >= z)
-    return y;
-  return z;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS (ScoreType &x, ScoreType y){
-  if (x < y)
-    x = (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x;
-  else
-    x = (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS_SLOW()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS_SLOW (ScoreType &x, ScoreType y){
-  if (x < y)
-    x = (x <= LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x;
-  else
-    x = (y <= LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add two log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline ScoreType LOG_ADD (ScoreType x, ScoreType y){
-  if (x < y) return (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x;
-  return (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y;
-}
-*/
-
-/*
-/////////////////////////////////////////////////////////////////
-// LOG()
-//
-// Compute the logarithm of x.
-/////////////////////////////////////////////////////////////////
-
-inline float LOG (float x){
-  return log (x);
-}
-
-/////////////////////////////////////////////////////////////////
-// EXP()
-//
-// Computes exp(x), fr -4.6 <= x <= 0.
-/////////////////////////////////////////////////////////////////
-
-inline float EXP (float x){
-  assert (x <= 0.00f);
-  if (x < EXP_UNDERFLOW_THRESHOLD) return 0.0f;
-  return (((0.006349841068584 * x + 0.080775412572352) * x + 0.397982026296272) * x + 0.95279335963787f) * x + 0.995176455837312f;
-  //return (((0.00681169825657f * x + 0.08386267698832f) * x + 0.40413983195844f) * x + 0.95656674979767f) * x + 0.99556744049130f;
-}
-*/
-
-const float EXP_UNDERFLOW_THRESHOLD = -4.6;
-const float LOG_UNDERFLOW_THRESHOLD = 7.5;
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP()
-//
-// Computes log (exp (x) + 1), for 0 <= x <= 7.5.
-/////////////////////////////////////////////////////////////////
-
-inline float LOOKUP (float x){
-  assert (x >= 0.00f);
-  assert (x <= LOG_UNDERFLOW_THRESHOLD);
-  //return ((-0.00653779113685f * x + 0.09537236626558f) * x + 0.55317574459331f) * x + 0.68672959851568f;
-  if (x <= 1.00f) return ((-0.009350833524763f * x + 0.130659527668286f) * x + 0.498799810682272f) * x + 0.693203116424741f;
-  if (x <= 2.50f) return ((-0.014532321752540f * x + 0.139942324101744f) * x + 0.495635523139337f) * x + 0.692140569840976f;
-  if (x <= 4.50f) return ((-0.004605031767994f * x + 0.063427417320019f) * x + 0.695956496475118f) * x + 0.514272634594009f;
-  assert (x <= LOG_UNDERFLOW_THRESHOLD);
-  return ((-0.000458661602210f * x + 0.009695946122598f) * x + 0.930734667215156f) * x + 0.168037164329057f;
-
-  //return (((0.00089738532761f * x - 0.01859488697982f) * x + 0.14415772028626f) * x + 0.49515490689159f) * x + 0.69311928966454f;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOOKUP_SLOW()
-//
-// Computes log (exp (x) + 1).
-/////////////////////////////////////////////////////////////////
-
-inline float LOOKUP_SLOW (float x){
-  return log (exp (x) + 1);
-}
-
-/////////////////////////////////////////////////////////////////
-// MAX()
-//
-// Compute max of three numbers
-/////////////////////////////////////////////////////////////////
-
-inline float MAX (float x, float y, float z){
-  if (x >= y){
-    if (x >= z)
-      return x;
-    return z;
-  }
-  if (y >= z)
-    return y;
-  return z;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS (float &x, float y){
-  if (x < y)
-    x = (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x;
-  else
-    x = (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_PLUS_EQUALS_SLOW()
-//
-// Add two log probabilities and store in the first argument
-/////////////////////////////////////////////////////////////////
-
-inline void LOG_PLUS_EQUALS_SLOW (float &x, float y){
-  if (x < y)
-    x = (x == LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x;
-  else
-    x = (y == LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y;
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add two log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x, float y){
-  if (x < y) return (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x;
-  return (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y;
-}
-
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add three log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3){
-  return LOG_ADD (x1, LOG_ADD (x2, x3));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add four log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, x4)));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add five log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, x5))));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add siz log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, x6)))));
-}
-
-/////////////////////////////////////////////////////////////////
-// LOG_ADD()
-//
-// Add seven log probabilities
-/////////////////////////////////////////////////////////////////
-
-inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6, float x7){
-  return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, LOG_ADD (x6, x7))))));
-}
-
-/////////////////////////////////////////////////////////////////
-// ChooseBestOfThree()
-//
-// Store the largest of three values x1, x2, and x3 in *x.  Also
-// if xi is the largest value, then store bi in *b.
-/////////////////////////////////////////////////////////////////
-
-inline void ChooseBestOfThree (float x1, float x2, float x3, char b1, char b2, char b3, float *x, char *b){
-  if (x1 >= x2){
-    if (x1 >= x3){
-      *x = x1;
-      *b = b1;
-      return;
-    }
-    *x = x3;
-    *b = b3;
-    return;
-  }
-  if (x2 >= x3){
-    *x = x2;
-    *b = b2;
-    return;
-  }
-  *x = x3;
-  *b = b3;
-}
-
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h
deleted file mode 100644 (file)
index ffc6ead..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// Sequence.h
-//
-// Class for reading/manipulating single sequence character data.
-/////////////////////////////////////////////////////////////////
-
-#ifndef __SEQUENCE_H__
-#define __SEQUENCE_H__
-
-#include <string>
-#include <fstream>
-#include <iostream>
-#include <cctype>
-#include <cstdlib>
-#include "SafeVector.h"
-#include "FileBuffer.h"
-
-/////////////////////////////////////////////////////////////////
-// Sequence
-//
-// Class for storing sequence information.
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-class Sequence {
-
-  bool isValid;                // a boolean indicating whether the sequence data is valid or not
-  string header;               // string containing the comment line of the FASTA file
-  SafeVector<char> *data;      // pointer to character data
-  int length;                  // length of the sequence
-  int sequenceLabel;           // integer sequence label, typically to indicate the ordering of sequences
-                               //   in a Multi-FASTA file
-  int inputLabel;              // position of sequence in original input
-  float weight;
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Sequence()
-  //
-  // Default constructor.  Does nothing.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence () : isValid (false), header (""), data (NULL), length (0), sequenceLabel (0), inputLabel (0) {}
-
- public:
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Sequence()
-  //
-  // Constructor.  Reads the sequence from a FileBuffer.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence (FileBuffer &infile, bool stripGaps = false) : isValid (false), header ("~"), data (NULL), length(0), sequenceLabel (0), inputLabel (0) {
-
-    // read until the first non-blank line
-    while (!infile.eof()){
-      infile.GetLine (header);
-      if (header.length() != 0) break;
-    }
-
-    // check to make sure that it is a correct header line
-    if (header[0] == '>'){
-
-      // if so, remove the leading ">"
-      header = header.substr (1);
-
-      // remove any leading or trailing white space in the header comment
-      while (header.length() > 0 && isspace (header[0])) header = header.substr (1);
-      while (header.length() > 0 && isspace (header[header.length() - 1])) header = header.substr(0, header.length() - 1);
-
-      // get ready to read the data[] array; note that data[0] is always '@'
-      char ch;
-      data = new SafeVector<char>; assert (data);
-      data->push_back ('@');
-
-      // get a character from the file
-      while (infile.Get(ch)){
-
-        // if we've reached a new comment line, put the character back and stop
-        if (ch == '>'){ infile.UnGet(); break; }
-
-        // skip whitespace
-        if (isspace (ch)) continue;
-
-        // substitute gap character
-        if (ch == '.') ch = '-';
-       if (stripGaps && ch == '-') continue;
-
-        // check for known characters
-        if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){
-          cerr << "ERROR: Unknown character encountered: " << ch << endl;
-          exit (1);
-        }
-
-        // everything's ok so far, so just store this character.
-       data->push_back(ch);
-       ++length;
-      }
-
-      // sequence must contain data in order to be valid
-      isValid = length > 0;
-      if (!isValid){
-        delete data;
-        data = NULL;
-      }
-    }
-  }
-
-  
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Sequence()
-  //
-  // Constructor.  Builds a sequence from existing data.  Note
-  // that the data must use one-based indexing where data[0] should
-  // be set to '@'.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence (SafeVector<char> *data, string header, int length, int sequenceLabel, int inputLabel) :
-    isValid (data != NULL), header(header), data(data), length (length), sequenceLabel (sequenceLabel), inputLabel (inputLabel) {
-      assert (data);
-      assert ((*data)[0] == '@');
-  }
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Sequence()
-  //
-  // Destructor.  Release allocated memory.
-  /////////////////////////////////////////////////////////////////
-
-  ~Sequence (){
-    if (data){
-      assert (isValid);
-      delete data;
-      data = NULL;
-      isValid = false;
-    }
-  }
-
-    void SetWeight(float myWeight) {
-      weight = myWeight;
-  }
-  float GetWeight() const {
-      return weight;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetHeader()
-  //
-  // Return the string comment associated with this sequence.
-  /////////////////////////////////////////////////////////////////
-
-  string GetHeader () const {
-    return header;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetName()
-  //
-  // Return the first word of the string comment associated with this sequence.
-  /////////////////////////////////////////////////////////////////
-
-  string GetName () const {
-    char name[1024];
-    sscanf (header.c_str(), "%s", name);
-    return string(name);
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetDataPtr()
-  //
-  // Return the iterator to data associated with this sequence.
-  /////////////////////////////////////////////////////////////////
-
-  SafeVector<char>::iterator GetDataPtr(){
-    assert (isValid);
-    assert (data);
-    return data->begin();
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetPosition()
-  //
-  // Return the character at position i.  Recall that the character
-  // data is stored with one-based indexing.
-  /////////////////////////////////////////////////////////////////
-
-  char GetPosition (int i) const {
-    assert (isValid);
-    assert (data);
-    assert (i >= 0 && i <= length);
-    return (*data)[i];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::SetLabel()
-  //
-  // Sets the sequence label to i.
-  /////////////////////////////////////////////////////////////////
-
-  void SetLabel (int i){
-    assert (isValid);
-    sequenceLabel = i;
-    inputLabel = i;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::SetSortLabel()
-  //
-  // Sets the sequence sorting label to i.
-  /////////////////////////////////////////////////////////////////
-
-  void SetSortLabel (int i){
-    assert (isValid);
-    sequenceLabel = i;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetLabel()
-  //
-  // Retrieves the input label.
-  /////////////////////////////////////////////////////////////////
-
-  int GetLabel () const {
-    assert (isValid);
-    return inputLabel;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetSortLabel()
-  //
-  // Retrieves the sorting label.
-  /////////////////////////////////////////////////////////////////
-
-  int GetSortLabel () const {
-    assert (isValid);
-    return sequenceLabel;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Fail()
-  //
-  // Checks to see if the sequence successfully loaded.
-  /////////////////////////////////////////////////////////////////
-
-  bool Fail () const {
-    return !isValid;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Length()
-  //
-  // Returns the length of the sequence.
-  /////////////////////////////////////////////////////////////////
-
-  int GetLength () const {
-    assert (isValid);
-    assert (data);
-    return length;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::WriteMFA()
-  //
-  // Writes the sequence to outfile in MFA format.  Uses numColumns
-  // columns per line.  If useIndex is set to false, then the
-  // header is printed as normal, but if useIndex is true, then
-  // ">S###" is printed where ### represents the sequence label.
-  /////////////////////////////////////////////////////////////////
-
-  void WriteMFA (ostream &outfile, int numColumns, bool useIndex = false) const {
-    assert (isValid);
-    assert (data);
-    assert (!outfile.fail());
-
-    // print out heading
-    if (useIndex)
-      outfile << ">S" << GetLabel() << endl;
-    else
-      outfile << ">" << header << endl;
-
-    // print out character data
-    int ct = 1;
-    for (; ct <= length; ct++){
-      outfile << (*data)[ct];
-      if (ct % numColumns == 0) outfile << endl;
-    }
-    if ((ct-1) % numColumns != 0) outfile << endl;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::WriteWEB()
-  //
-  // output for web interfase based on Sequence::WriteMFA()
-  /////////////////////////////////////////////////////////////////
-
-  void WriteWEB (ostream &outfile, int numColumns, bool useIndex = false) const {
-    assert (isValid);
-    assert (data);
-    assert (!outfile.fail());
-
-    outfile << "<php ref=\"" << GetLabel() << "\">" << endl;
-    outfile << "<name>" << endl;
-    // print out heading
-    if (useIndex)
-      outfile << "S" << GetLabel() << endl;
-    else
-      outfile << "" << header << endl;
-
-    outfile << "</name>" << endl;
-
-    // print out character data
-    outfile << "<sequence>" << endl;
-    int ct = 1;
-    for (; ct <= length; ct++){
-      outfile << (*data)[ct];
-      if (ct % numColumns == 0) outfile << endl;
-    }
-    if ((ct-1) % numColumns != 0) outfile << endl;
-
-    outfile << "</sequence>" << endl;
-    outfile << "</php>" << endl;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Clone()
-  //
-  // Returns a new deep copy of the seqeuence.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence *Clone () const {
-    Sequence *ret = new Sequence();
-    assert (ret);
-
-    ret->isValid = isValid;
-    ret->header = header;
-    ret->data = new SafeVector<char>; assert (ret->data);
-    *(ret->data) = *data;
-    ret->length = length;
-    ret->sequenceLabel = sequenceLabel;
-    ret->inputLabel = inputLabel;
-    ret->weight = weight;
-
-    return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetRange()
-  //
-  // Returns a new sequence object consisting of a range of
-  // characters from the current seuquence.
-  /////////////////////////////////////////////////////////////////
-
-  Sequence *GetRange (int start, int end) const {
-    Sequence *ret = new Sequence();
-    assert (ret);
-
-    assert (start >= 1 && start <= length);
-    assert (end >= 1 && end <= length);
-    assert (start <= end);
-
-    ret->isValid = isValid;
-    ret->header = header;
-    ret->data = new SafeVector<char>; assert (ret->data);
-    ret->data->push_back ('@');
-    for (int i = start; i <= end; i++)
-      ret->data->push_back ((*data)[i]);
-    ret->length = end - start + 1;
-    ret->sequenceLabel = sequenceLabel;
-    ret->inputLabel = inputLabel;
-
-    return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::AddGaps()
-  //
-  // Given an SafeVector<char> containing the skeleton for an
-  // alignment and the identity of the current character, this
-  // routine will create a new sequence with all necesssary gaps added.
-  // For instance,
-  //    alignment = "XXXBBYYYBBYYXX"
-  //    id = 'X'
-  // will perform the transformation
-  //    "ATGCAGTCA" --> "ATGCC---GT--CA"
-  //                    (XXXBBYYYBBYYXX)
-  /////////////////////////////////////////////////////////////////
-
-  Sequence *AddGaps (SafeVector<char> *alignment, char id){
-    Sequence *ret = new Sequence();
-    assert (ret);
-
-    ret->isValid = isValid;
-    ret->header = header;
-    ret->data = new SafeVector<char>; assert (ret->data);
-    ret->length = (int) alignment->size();
-    ret->sequenceLabel = sequenceLabel;
-    ret->inputLabel = inputLabel;
-    ret->data->push_back ('@');
-
-    SafeVector<char>::iterator dataIter = data->begin() + 1;
-    for (SafeVector<char>::iterator iter = alignment->begin(); iter != alignment->end(); ++iter){
-      if (*iter == 'B' || *iter == id){
-        ret->data->push_back (*dataIter);
-        ++dataIter;
-      }
-      else
-        ret->data->push_back ('-');
-    }
-
-    return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::AddGaps()
-  //
-  // Given an SafeVector<char> containing the skeleton for an
-  // alignment and the identity of the current character, this
-  // routine will create a new sequence with all necesssary gaps added.
-  // For instance,
-  //    alignment = "XXXBBYYYBBYYXX"
-  //    id = 'X'
-  // will perform the transformation
-  //    "ATGCAGTCA" --> "ATGCC---GT--CA"
-  //                    (XXXBBYYYBBYYXX)
-  /////////////////////////////////////////////////////////////////
-  Sequence *AddGapsReverse (SafeVector<char> *alignment, char id){
-    Sequence *ret = new Sequence();
-    assert (ret);
-
-    ret->isValid = isValid;
-    ret->header = header;
-    ret->data = new SafeVector<char>; assert (ret->data);
-    ret->length = (int) alignment->size();
-    ret->sequenceLabel = sequenceLabel;
-    ret->inputLabel = inputLabel;
-    ret->data->push_back ('@');
-
-    SafeVector<char>::iterator dataIter = data->begin() + 1;
-    for (SafeVector<char>::reverse_iterator iter = alignment->rbegin(); iter != alignment->rend(); ++iter){
-      if (*iter == 'B' || *iter == id){
-        ret->data->push_back (*dataIter);
-        ++dataIter;
-      }
-      else
-        ret->data->push_back ('-');
-    }
-
-    return ret;
-  }
-
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetString()
-  //
-  // Returns the sequence as a string with gaps removed.
-  /////////////////////////////////////////////////////////////////
-
-  string GetString (){
-    string s = " ";
-    for (int i = 1; i <= length; i++){
-      if ((*data)[i] != '-') s += (*data)[i];
-    }
-    return s;
-  }
-
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetMapping()
-  //
-  // Returns a SafeVector<int> containing the indices of every
-  // character in the sequence.  For instance, if the data is
-  // "ATGCC---GT--CA", the method returns {1,2,3,4,5,9,10,13,14}.
-  /////////////////////////////////////////////////////////////////
-
-  SafeVector<int> *GetMapping () const {
-    SafeVector<int> *ret = new SafeVector<int>(1, 0);
-    for (int i = 1; i <= length; i++){
-      if ((*data)[i] != '-') ret->push_back (i);
-    }
-    return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::GetMappingNumber()
-  //
-  // Returns a SafeVector<int> containing the indices of every
-  // character in the sequence.  For instance, if the data is
-  // "ATGCC---GT--CA", the method returns {1,2,3,4,5,0,0,0,6,7,0,0,8,9}.
-  /////////////////////////////////////////////////////////////////
-  SafeVector<int> *GetMappingNumber () const {
-      SafeVector<int> *ret = new SafeVector<int>(1, 0);
-      int count = 0;
-      for(int i = 1; i <= length; i++) {
-         if((*data)[i] != '-') ret->push_back(++count);
-         else                  ret->push_back(0);
-      }
-      return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // Sequence::Highlight()
-  //
-  // Changes all positions with score >= cutoff to upper case and
-  // all positions with score < cutoff to lower case.
-  /////////////////////////////////////////////////////////////////
-
-  void Highlight (const SafeVector<float> &scores, const float cutoff){
-    for (int i = 1; i <= length; i++){
-      if (scores[i-1] >= cutoff)
-        (*data)[i] = toupper ((*data)[i]);
-      else
-        (*data)[i] = tolower ((*data)[i]);
-    }
-  }
-};
-}
-#endif // __SQUENCE_HPP__
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h
deleted file mode 100644 (file)
index f722642..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-/////////////////////////////////////////////////////////////////
-// SparseMatrix.h
-//
-// Sparse matrix computations
-/////////////////////////////////////////////////////////////////
-
-#ifndef SPARSEMATRIX_H
-#define SPARSEMATRIX_H
-
-#include <iostream>
-#include "SafeVector.h"
-#include "nrutil.h"
-
-using namespace std;
-
-const float POSTERIOR_CUTOFF = 0.01;         // minimum posterior probability
-                                             // value that is maintained in the
-                                             // sparse matrix representation
-
-typedef pair<int,float> PIF;                 // Sparse matrix entry type
-                                             //   first --> column
-                                             //   second --> value
-
-namespace MXSCARNA {
-struct PIF2 {        // Sparse matrix entry type
-    int i;
-    int j;
-    float prob;
-};
-}
-
-/////////////////////////////////////////////////////////////////
-// SparseMatrix
-//
-// Class for sparse matrix computations
-/////////////////////////////////////////////////////////////////
-namespace MXSCARNA {
-class SparseMatrix {
-
-  int seq1Length, seq2Length;                     // dimensions of matrix
-  VI rowSize;                                     // rowSize[i] = # of cells in row i
-  SafeVector<PIF> data;                           // data values
-  SafeVector<SafeVector<PIF>::iterator> rowPtrs;  // pointers to the beginning of each row
-
- public:
-  SafeVector<PIF2> data2;
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::SparseMatrix()
-  //
-  // Private constructor.1
-  /////////////////////////////////////////////////////////////////
-  SparseMatrix() { }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::SparseMatrix()
-  //
-  // Constructor.  Builds a sparse matrix from a posterior matrix.
-  // Note that the expected format for the posterior matrix is as
-  // a (seq1Length+1) x (seq2Length+1) matrix where the 0th row
-  // and 0th column are ignored (they should contain all zeroes).
-  /////////////////////////////////////////////////////////////////
-
-  SparseMatrix (int seq1Length, int seq2Length, const VF &posterior) :
-    seq1Length (seq1Length), seq2Length (seq2Length) {
-
-    int numCells = 0;
-
-    assert (seq1Length > 0);
-    assert (seq2Length > 0);
-
-    // calculate memory required; count the number of cells in the
-    // posterior matrix above the threshold
-    VF::const_iterator postPtr = posterior.begin();
-    for (int i = 0; i <= seq1Length; i++){
-      for (int j = 0; j <= seq2Length; j++){
-        if (*(postPtr++) >= POSTERIOR_CUTOFF){
-          assert (i != 0 && j != 0);
-          numCells++;
-        }
-      }
-    }
-    
-    // allocate memory
-    data.resize(numCells);
-    rowSize.resize (seq1Length + 1); rowSize[0] = -1;
-    rowPtrs.resize (seq1Length + 1); rowPtrs[0] = data.end();
-
-    // build sparse matrix
-    postPtr = posterior.begin() + seq2Length + 1;           // note that we're skipping the first row here
-    SafeVector<PIF>::iterator dataPtr = data.begin();
-    for (int i = 1; i <= seq1Length; i++){
-      postPtr++;                                            // and skipping the first column of each row
-      rowPtrs[i] = dataPtr;
-      for (int j = 1; j <= seq2Length; j++){
-        if (*postPtr >= POSTERIOR_CUTOFF){
-          dataPtr->first = j;
-          dataPtr->second = *postPtr;
-          dataPtr++;
-        }
-        postPtr++;
-      }
-      rowSize[i] = dataPtr - rowPtrs[i];
-    }
-  }
-
-  //////////////////////////////////////////////////////////////////////////
-  // SparseMatrix::SetSparseMatrix()
-  // 
-  // Constructor. 
-  //////////////////////////////////////////////////////////////////////////
-  void SetSparseMatrix(int inseq1Length, int inseq2Length, const Trimat<float> &bppMat, float cutoff = 0.01) {
-      seq1Length = inseq1Length;
-      seq2Length = inseq2Length;
-
-      int numCells = 0;
-
-      assert (seq1Length > 0);
-      assert (seq2Length > 0);
-
-      data.clear();
-      rowSize.clear();
-      rowPtrs.clear();
-      for (int i = 1; i <= seq1Length; i++) {
-         for (int j = i; j <= seq2Length; j++) {
-             if (bppMat.ref(i, j) >= cutoff ) {
-                 numCells++;
-             }
-         }
-      }
-
-      // allocate memory
-      data.resize(numCells);
-      for (int i = 0; i < numCells; i++) {
-         data[i].first  = 0;
-         data[i].second = 0;
-      }
-      rowSize.resize (seq1Length + 1); rowSize[0] = -1;
-      rowPtrs.resize (seq1Length + 1); rowPtrs[0] = data.end();
-
-      SafeVector<PIF>::iterator dataPtr = data.begin();
-      for (int i = 1; i <= seq1Length; i++) {
-         rowPtrs[i] = dataPtr;
-         for (int j = i; j <= seq2Length; j++) {
-             if ( bppMat.ref(i, j) >= cutoff ) {
-                 dataPtr->first = j;
-                 dataPtr->second = bppMat.ref(i, j);
-                 dataPtr++;
-             }
-         }
-         rowSize[i] = dataPtr - rowPtrs[i];
-      }
-
-      float tmp;
-      for(int k = 1; k <= seq1Length; k++) {
-         for(int m = k, n = k; n <= k + 300 && m >= 1 && n <= seq2Length; m--, n++) {
-             if ((tmp = GetValue(m, n)) > 0) {
-                 PIF2 p;
-                 p.i    = m;
-                 p.j    = n;
-                 p.prob = tmp;
-                 data2.push_back(p);
-             }
-         }
-    
-         for(int m = k, n = k + 1; n <= k + 300 && m >= 1 && n <= seq2Length; m--, n++) {
-             if ((tmp = GetValue(m, n)) > 0) {
-                 PIF2 p;
-                 p.i    = m;
-                 p.j    = n;
-                 p.prob = tmp;
-                 data2.push_back(p);
-             }
-         }
-      }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetRowPtr()
-  //
-  // Returns the pointer to a particular row in the sparse matrix.
-  /////////////////////////////////////////////////////////////////
-
-  SafeVector<PIF>::iterator GetRowPtr (int row) const {
-    assert (row >= 1 && row <= seq1Length);
-    return rowPtrs[row];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetValue()
-  //
-  // Returns value at a particular row, column.
-  /////////////////////////////////////////////////////////////////
-
-  float GetValue (int row, int col){
-    assert (row >= 1 && row <= seq1Length);
-    assert (col >= 1 && col <= seq2Length);
-    for (int i = 0; i < rowSize[row]; i++){
-      if (rowPtrs[row][i].first == col) return rowPtrs[row][i].second;
-    }
-    return 0;
-  }
-
-  void SetValue(int row, int col, float value) {
-    assert (row >= 1 && row <= seq1Length);
-    assert (col >= 1 && col <= seq2Length);
-    for (int i = 0; i < rowSize[row]; i++){
-      if (rowPtrs[row][i].first == col) rowPtrs[row][i].second = value;
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetRowSize()
-  //
-  // Returns the number of entries in a particular row.
-  /////////////////////////////////////////////////////////////////
-
-  int GetRowSize (int row) const {
-    assert (row >= 1 && row <= seq1Length);
-    return rowSize[row];
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetSeq1Length()
-  //
-  // Returns the first dimension of the matrix.
-  /////////////////////////////////////////////////////////////////
-
-  int GetSeq1Length () const {
-    return seq1Length;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetSeq2Length()
-  //
-  // Returns the second dimension of the matrix.
-  /////////////////////////////////////////////////////////////////
-
-  int GetSeq2Length () const {
-    return seq2Length;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetRowPtr
-  //
-  // Returns the pointer to a particular row in the sparse matrix.
-  /////////////////////////////////////////////////////////////////
-
-  int GetNumCells () const {
-    return data.size();
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::Print()
-  //
-  // Prints out a sparse matrix.
-  /////////////////////////////////////////////////////////////////
-
-  void Print (ostream &outfile) const {
-    outfile << "Sparse Matrix:" << endl;
-    for (int i = 1; i <= seq1Length; i++){
-      outfile << "  " << i << ":";
-      for (int j = 0; j < rowSize[i]; j++){
-        outfile << " (" << rowPtrs[i][j].first << "," << rowPtrs[i][j].second << ")";
-      }
-      outfile << endl;
-    }
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::ComputeTranspose()
-  //
-  // Returns a new sparse matrix containing the transpose of the
-  // current matrix.
-  /////////////////////////////////////////////////////////////////
-
-  SparseMatrix *ComputeTranspose () const {
-
-    // create a new sparse matrix
-    SparseMatrix *ret = new SparseMatrix();
-    int numCells = data.size();
-
-    ret->seq1Length = seq2Length;
-    ret->seq2Length = seq1Length;
-
-    // allocate memory
-    ret->data.resize (numCells);
-    ret->rowSize.resize (seq2Length + 1); ret->rowSize[0] = -1;
-    ret->rowPtrs.resize (seq2Length + 1); ret->rowPtrs[0] = ret->data.end();
-
-    // compute row sizes
-    for (int i = 1; i <= seq2Length; i++) ret->rowSize[i] = 0;
-    for (int i = 0; i < numCells; i++)
-      ret->rowSize[data[i].first]++;
-
-    // compute row ptrs
-    for (int i = 1; i <= seq2Length; i++){
-      ret->rowPtrs[i] = (i == 1) ? ret->data.begin() : ret->rowPtrs[i-1] + ret->rowSize[i-1];
-    }
-
-    // now fill in data
-    SafeVector<SafeVector<PIF>::iterator> currPtrs = ret->rowPtrs;
-
-    for (int i = 1; i <= seq1Length; i++){
-      SafeVector<PIF>::iterator row = rowPtrs[i];
-      for (int j = 0; j < rowSize[i]; j++){
-        currPtrs[row[j].first]->first = i;
-        currPtrs[row[j].first]->second = row[j].second;
-        currPtrs[row[j].first]++;
-      }
-    }
-
-    return ret;
-  }
-
-  /////////////////////////////////////////////////////////////////
-  // SparseMatrix::GetPosterior()
-  //
-  // Return the posterior representation of the sparse matrix.
-  /////////////////////////////////////////////////////////////////
-
-  VF *GetPosterior () const {
-
-    // create a new posterior matrix
-    VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1)); assert (posteriorPtr);
-    VF &posterior = *posteriorPtr;
-
-    // build the posterior matrix
-    for (int i = 0; i < (seq1Length+1) * (seq2Length+1); i++) posterior[i] = 0;
-    for (int i = 1; i <= seq1Length; i++){
-      VF::iterator postPtr = posterior.begin() + i * (seq2Length+1);
-      for (int j = 0; j < rowSize[i]; j++){
-        postPtr[rowPtrs[i][j].first] = rowPtrs[i][j].second;
-      }
-    }
-
-    return posteriorPtr;
-  }
-
-};
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0
deleted file mode 100644 (file)
index 43e501f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-0.96 0.02 0.02
-0.01 0.01
-0.4 0.4
-ACGUTN
-0.148724
-0.0184143 0.158392
-0.0361397 0.0275537 0.197932
-0.0238474 0.0389291 0.0244289 0.155748
-0.0238474 0.0389291 0.0244289 0.155748 0.155748
-3.75308e-05 8.15823e-05 8.24765e-05 7.43985e-05 7.43985e-05 2.63252e-05
-0.227079 0.242208 0.283932 0.246468 0.246468 0.000312465
diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script
deleted file mode 100644 (file)
index de909da..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-./probcons -p mlparams0 -t params1 ../bralibase/*
-./probcons -p params1 -t params2 ../bralibase/*
-./probcons -p params2 -t params3 ../bralibase/*
-./probcons -p params3 -t params4 ../bralibase/*
-./probcons -p params4 -t params5 ../bralibase/*
-./probcons -p params5 -t params6 ../bralibase/*
-./probcons -p params6 -t params7 ../bralibase/*
-./probcons -p params7 -t params8 ../bralibase/*
-./probcons -p params8 -t params9 ../bralibase/*
-./probcons -p params9 -t params10 ../bralibase/*
-./probcons -p params10 -t params11 ../bralibase/*
-./probcons -p params11 -t params12 ../bralibase/*
-./probcons -p params12 -t params13 ../bralibase/*
-./probcons -p params13 -t params14 ../bralibase/*
-./probcons -p params14 -t params15 ../bralibase/*
-./probcons -p params15 -t params16 ../bralibase/*
-./probcons -p params16 -t params17 ../bralibase/*
-./probcons -p params17 -t params18 ../bralibase/*
-./probcons -p params18 -t params19 ../bralibase/*
-./probcons -p params19 -t params20 ../bralibase/*
-./probcons -p params20 -t params21 ../bralibase/*
-./probcons -p params21 -t params22 ../bralibase/*
-./probcons -p params22 -t params23 ../bralibase/*
-./probcons -p params23 -t params24 ../bralibase/*
-./probcons -p params24 -t params25 ../bralibase/*
-./probcons -p params25 -t params26 ../bralibase/*
-./probcons -p params26 -t params27 ../bralibase/*
-./probcons -p params27 -t params28 ../bralibase/*
-./probcons -p params28 -t params29 ../bralibase/*
-./probcons -p params29 -t params30 ../bralibase/*
diff --git a/binaries/src/mafft/extensions/mxscarna_src/scarna.hpp b/binaries/src/mafft/extensions/mxscarna_src/scarna.hpp
deleted file mode 100644 (file)
index ac58548..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-
-#ifndef __SCARNA_HPP__
-#define __SCARNA_HPP__
-
-#include <iostream>
-using namespace std;
-
-#define WORDLENGTH 2        /* default word length in stem candidates (SCs) */
-
-#define THR 0.01
-
-// the parameter trained by maximazing the sps of tRNA
-//#define MULTISCORE    9.870619  //multiple score with the constant.
-//#define MULTIRIBOSUM  0.452626  //multiple ribosum_score with the constant
-//#define MULTIPENALTY  24.263776 //multiple penalty with the constatnt
-//#define MULTISTACKING 45.208927 //multiple stacking energy with the constatnt
-
-/*
-#define MULTIRIBOSUM       1
-#define MULTIPENALTY       3.1
-#define MULTISCORE         3.7
-#define MULTISTACKING      0.1
-#define MULTIDELTASCORE    9.4
-#define MULTIDELTASTACKING 8.6
-*/
-/*
-#define MULTIRIBOSUM       1
-#define MULTIPENALTY       1.1162
-#define MULTISCORE         0.53299
-#define MULTISTACKING      4.25669
-#define MULTIDELTASCORE    1.17805
-#define MULTIDELTASTACKING 4.2016
-*/
-// new CRF DATA 550 sigma 1
-
-#define MULTIRIBOSUM       1
-#define MULTIPENALTY       1.82294
-#define MULTISCORE         0.250631
-#define MULTISTACKING      2.35517
-#define MULTIDELTASCORE    1.1781
-#define MULTIDELTASTACKING 2.45417
-
-/*
-#define MULTIRIBOSUM       1
-#define MULTIPENALTY       0.478054
-#define MULTISCORE         1.36322
-#define MULTISTACKING      4.96635
-#define MULTIDELTASCORE    1.14239
-#define MULTIDELTASTACKING 7.32992
-*/
-// CRF DATA 900 sigma 1
-/*
-#define  MULTIRIBOSUM       1
-#define  MULTIPENALTY       2.28364
-#define  MULTISCORE         0.00945681
-#define  MULTISTACKING      2.25357
-#define  MULTIDELTASCORE    1.02201
-#define  MULTIDELTASTACKING 2.21293
-*/
-
-/*
-#define RNAMATCHAA    506159
-#define RNAMATCHAT    359916
-#define RNAMATCHAG    451319
-#define RNAMATCHAC    390720
-#define RNAMATCHTT    398658
-#define RNAMATCHTG    377069
-#define RNAMATCHTC    378456
-#define RNAMATCHGG    554695
-#define RNAMATCHGC    419950
-#define RNAMATCHCC    479030
-#define GAPPENALTY    190947
-#define GAPEXTENTIONPENALTY -118817
-*/
-// RIBOSUM 
-#define RNAMATCHAA    2.22
-#define RNAMATCHAT    -1.39
-#define RNAMATCHAG    -1.46
-#define RNAMATCHAC    -1.86
-#define RNAMATCHTT     1.65
-#define RNAMATCHTG    -1.74
-#define RNAMATCHTC    -1.05
-#define RNAMATCHGG     1.03
-#define RNAMATCHGC    -2.48
-#define RNAMATCHCC     1.16
-//#define GAPPENALTY     9.42   // 3default linear gap penalry in RNA sequence alignment
-//#define GAPPENALTY    9.18743
-//#define GAPPENALTY     5.00
-//#define GAPEXTENTIONPENALTY 7.15
-//#define GAPEXTENTIONPENALTY 9.62003
-
-#define GAPPENALTY 5
-#define GAPEXTENTIONPENALTY 2.5
-//#define GAPPENALTY 8.08875
-//#define GAPEXTENTIONPENALTY 3.89655
-
-#define REFINEMENTREPS 0
-#define SCSLENGTH 2
-#define BASEPROBTHRESHOLD 0.01
-#define BASEPAIRCONST 6
-#define BANDWIDTH 500
-#define USERFOLD false
-
-extern float  RNA_Match_AA;
-extern float  RNA_Match_AT;
-extern float  RNA_Match_AG;
-extern float  RNA_Match_AC;
-extern float  RNA_Match_TT;
-extern float  RNA_Match_TG;
-extern float  RNA_Match_TC;
-extern float  RNA_Match_GG;
-extern float  RNA_Match_GC;
-extern float  RNA_Match_CC;
-extern float  RNA_Gap_Penalty;
-extern float  RNA_Gap_Extension;
-
-extern int numIterativeRefinementReps;
-extern bool PostProcessAlignment;
-extern int scsLength;
-extern float BaseProbThreshold;
-extern float BasePairConst;
-
-#endif /*__SCARNA_HPP__*/
-
diff --git a/binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp b/binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp
deleted file mode 100644 (file)
index 24d99f7..0000000
+++ /dev/null
@@ -1,620 +0,0 @@
-///////////////////////////////////////////////////////////////
-// seq2scs.cpp
-//
-// make SCS(Stem Candidate Sequence) from the profile
-//////////////////////////////////////////////////////////////
-
-#include "scarna.hpp"
-#include "SafeVector.h"
-#include "StemCandidate.hpp"
-#include "Sequence.h"
-#include "MultiSequence.h"
-#include "BPPMatrix.hpp"
-#include "nrutil.h"
-#include <vector>
-#include <algorithm>
-#include <stdio.h>
-#include <cstring>
-#include <stdio.h>
-#include <math.h>
-
-using namespace std;
-using namespace::MXSCARNA;
-
-// for alipfold
-/*
-#include "utils.h"
-#include "fold_vars.h"
-#include "fold.h"
-#include "part_func.h"
-#include "inverse.h"
-#include "RNAstruct.h"
-#include "treedist.h"
-#include "stringdist.h"
-#include "profiledist.h"
-#include "alifold.h"
-#include "aln_util.h"
-#include "dist_vars.h"
-*/
-double Stacking_Energy[36] ={
- -0.9,-2.1,-1.7,-0.5,-0.9,-1.0,
- -1.8,-2.9,-2.0,-1.2,-1.7,-1.9,
- -2.3,-3.4,-2.9,-1.4,-2.1,-2.1,
- -1.1,-2.1,-1.9,-0.4,-1.0,1.5,
- -1.1,-2.3,-1.8,-0.8,-0.9,-1.1,
- -0.8,-1.4,-1.2,-0.2,-0.5,-0.4 };
-
-static Trimat<float>* makeProfileBPPMatrix(MultiSequence *Sequences, SafeVector<BPPMatrix*> &BPPMatrices);
-static int countSCS(MultiSequence *Sequences, Trimat<float>* consBppMat, int BandWidth);
-static std::vector<StemCandidate>* makeProfileScs(std::vector<StemCandidate> *pscs, MultiSequence *Sequences, Trimat<float>* consBppMat, int BandWidth);
-static void printScs(std::vector<StemCandidate> *pscs);
-static std::vector<StemCandidate>* doubleScs(std::vector<StemCandidate> *pscs);
-static std::vector<StemCandidate>* findRelations(std::vector<StemCandidate> *pscs);
-static std::vector<StemCandidate>* findCorresponding(std::vector<StemCandidate>* pscs);
-static std::vector<StemCandidate>* calculateStackingEnergy(std::vector<StemCandidate>* pscs);
-
-//float alipf_fold(char **sequences, char *structure, pair_info **pi);
-
-struct SortCmp {
-    bool operator()(const StemCandidate &sc1, const StemCandidate &sc2) const {
-       if      (sc1.GetPosition() > sc2.GetPosition()) return false;
-       else if (sc1.GetPosition() < sc2.GetPosition()) return true;
-       else if (sc1.GetDistance() > sc2.GetDistance()) return false;
-       else return true;
-    }
-};
-
-
-vector<StemCandidate>*
-seq2scs(MultiSequence *Sequences, SafeVector<BPPMatrix*> &BPPMatrices, int BandWidth)
-{
-
-    Trimat<float> *consBppMat = makeProfileBPPMatrix(Sequences, BPPMatrices);
-
-    int numberScs = countSCS(Sequences, consBppMat, BandWidth);
-
-    std::vector<StemCandidate> *pscs = new std::vector<StemCandidate>(); // Profile Stem Candidate Sequence
-//    cout << "numberScs=" << numberScs << endl;
-    pscs->resize(numberScs+1);
-
-    pscs = makeProfileScs(pscs, Sequences, consBppMat, BandWidth);
-
-    pscs = doubleScs(pscs);
-
-    std::vector<StemCandidate>::iterator startIter = pscs->begin();
-    std::vector<StemCandidate>::iterator endIter   = pscs->end();
-    ++startIter;
-    std::sort(startIter, endIter, SortCmp());
-    
-//    printScs(pscs);
-    pscs = findRelations(pscs);
-
-    pscs = findCorresponding(pscs);
-
-    pscs = calculateStackingEnergy(pscs);
-
-//    findStemRelation()
-    
-//    exit(1);
-    delete consBppMat;
-
-    return pscs;
-}
-
-static Trimat<float>*
-makeProfileBPPMatrix(MultiSequence *Sequences, SafeVector<BPPMatrix*> &BPPMatrices)
-{
-    int length = Sequences->GetSequence(0)->GetLength();
-//    float thr  = BaseProbThreshold;
-    Trimat<float> *consBppMat = new Trimat<float>(length + 1);
-    fill(consBppMat->begin(), consBppMat->end(), 0);
-
-// gabage
-//    for(int i = 0; i <= length; i++) 
-//     for(int j = i; j <= length; j++) 
-//         cout << "i=" << i << " j=" << j << " " << consBppMat->ref(i,j) << endl;
-//         consBppMat->ref(i,j) = 0;
-
-
-    int number = Sequences->GetNumSequences();
-//    if( number == 1) {
-    for(int seqNum = 0; seqNum < number; seqNum++) {
-       SafeVector<int> *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber();
-       int label = Sequences->GetSequence(seqNum)->GetLabel();
-       BPPMatrix *tmpBppMatrix = BPPMatrices[label];
-           
-       for(int i = 1; i <= length ; i++) {
-           int originI = tmpMap->at(i);
-           for(int j = i + 3; j <= length; j++) {
-               int originJ = tmpMap->at(j);
-               if(originI != 0 && originJ != 0) {
-                   float tmpProb = tmpBppMatrix->GetProb(originI, originJ);
-
-//                 if(tmpProb >= thr) {
-                       consBppMat->ref(i, j) += tmpProb;
-//                     cout << i << " " << j << " " << consBppMat->ref(i,j) << endl;
-//                 }
-               }
-           }
-       }
-    }
-
-       /* compute the mean of base pairing probability  */
-    for(int i = 1; i <= length; i++) {
-       for(int j = i + 3; j <= length; j++) {
-           consBppMat->ref(i,j) = consBppMat->ref(i,j)/(float)number;
-           //consBppMat->ref(i,j) = std::sqrt[number](consBppMat->ref(i,j));
-           //      cout << i << " " << j <<  " " << consBppMat->ref(i,j) << endl;
-       }
-    }
-
-
-/*
-    else {
-       char **Seqs;
-       Seqs = (char **) malloc(sizeof(char*) * number);
-
-       for(int i = 0; i < number; i++) {
-           Seqs[i] = (char *) malloc(sizeof(char) * (length + 1));
-           for(int j = 1; j <= length; j++) {
-               Seqs[i][j-1] = Sequences->GetSequence(i)->GetPosition(j);
-           }
-           Seqs[i][length] = '\0';
-       }
-
-       
-       char *structure = NULL;
-       pair_info *pi;
-           
-       alipf_fold(Seqs, structure, &pi, number);
-
-       for(int iter = 0; iter < length; iter++) {
-           if(pi[iter].i == 0) break;
-           consBppMat->ref(pi[iter].i, pi[iter].j) = pi[iter].p;
-       }
-
-       for(int i = 0; i < number; i++) {
-           free (Seqs[i]);
-       }
-       free (Seqs);
-       
-//     free_alifold_arrays(void);
-    }
-*/  
-
-    return consBppMat;
-}
-static int 
-countSCS(MultiSequence *Sequences, Trimat<float> *consBppMat, int BandWidth)
-{
-
-    int length = Sequences->GetSequence(0)->GetLength();
-    int Word_Length = scsLength;
-
-    int i, j, k, s;
-    int count;
-    int sum;
-
-    sum = 0;
-    for(k = 1; k <= length; k++) {
-        count = 0;
-
-        for(i = k, j = k; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) {
-           if(consBppMat->ref(i, j) >= BaseProbThreshold) {
-               count++;
-           }
-           else if(count >= Word_Length) {
-               for(s = 0; s <= count - Word_Length; s++) 
-                 sum++;
-
-               count = 0;
-           }
-           else {
-               count = 0;
-           }
-           if(consBppMat->ref(i, j) >= BaseProbThreshold && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) {
-               for(s = 0; s <= count - Word_Length; s++) 
-                   sum++;
-
-               count = 0;
-           }
-       }
-    
-       count = 0;
-       for(i = k, j = k + 1; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) {
-           if(consBppMat->ref(i, j) >= BaseProbThreshold) {
-               count++;
-           }
-           else if(count >= Word_Length) {
-               for(s = 0; s <= count - Word_Length; s++) sum++;
-
-               count = 0;
-           }
-           else {
-               count = 0;
-           }
-
-           if(consBppMat->ref(i, j) >= BaseProbThreshold && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) {
-               for(s = 0; s <= count - Word_Length; s++) sum++;
-
-               count = 0;
-           }
-       }
-    }
-
-    return 2 * sum;
-}
-
-static std::vector<StemCandidate>* 
-makeProfileScs(std::vector<StemCandidate> *pscs, MultiSequence *Sequences, Trimat<float>* consBppMat, int BandWidth)
-{
-
-    int length = Sequences->GetSequence(0)->GetLength();
-    int Word_Length = scsLength;
-    float Thr = BaseProbThreshold;
-    int i, j, k, s, t, m, n, l;
-    int count;
-    int sum;
-    
-    sum = 0;
-    for(k = 1; k <= length; k++) {
-        count = 0;
-        for(i = k, j = k; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) {
-            if(consBppMat->ref(i,j) >= Thr) {
-               count++;
-           }
-           else if(count >= Word_Length) {
-               for(s = 0; s <= count- Word_Length; s++) {
-                   sum++;
-                   pscs->at(sum).SetLength(Word_Length);
-                   pscs->at(sum).SetPosition(i+1+s);
-                   pscs->at(sum).SetRvposition(j-count+(count-Word_Length-s));
-                   pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length));
-                   pscs->at(sum).SetNumSeq(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences());
-                   for(m = i + 1 + s, n = j - count + (count-Word_Length-s), l = j - 1 - s, t = 0; n < j-s; m++, n++, l--, t++) {
-                       for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                           Sequence *seq = Sequences->GetSequence(num);
-//                         cout << num << "; " << m << ":" << seq->GetPosition(m) << " " << n << ":" << seq->GetPosition(n) << endl;
-                           pscs->at(sum).AddSubstr(num, seq->GetPosition(m));
-                           pscs->at(sum).AddRvstr(num, seq->GetPosition(n));
-                       }
-                       //          assert(pr[iindx[m]-l] > Thr);
-//                     cout << "prob=" << consBppMat->ref(m,l) << endl;
-                       pscs->at(sum).AddScore(consBppMat->ref(m,l));
-                       pscs->at(sum).AddBaseScore(consBppMat->ref(m, l));
-                   }
-                   for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                       pscs->at(sum).AddSubstr(num, '\0'); 
-                       pscs->at(sum).AddRvstr(num, '\0');
-                   }
-               }
-               count = 0;
-           }
-           else {
-               count = 0;
-           }
-           if(consBppMat->ref(i,j) >= Thr && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) {
-               for(s = 0; s <= count- Word_Length; s++) {
-                   sum++;
-                   pscs->at(sum).SetLength(Word_Length);
-                   pscs->at(sum).SetPosition(i+s);
-                   pscs->at(sum).SetRvposition(j-count+1+(count-Word_Length-s));
-                   pscs->at(sum).SetDistance((j-count+1+count-Word_Length-s) - (i+s+Word_Length));
-                   pscs->at(sum).SetNumSeq(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences());
-                   for(m = i + s, n = j - count + 1 + (count-Word_Length-s), l = j - s, t = 0; n <= j-s; m++, n++, l--, t++) {
-                       for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                           Sequence *seq = Sequences->GetSequence(num);
-                           pscs->at(sum).AddSubstr(num, seq->GetPosition(m));
-                           pscs->at(sum).AddRvstr(num, seq->GetPosition(n));
-                       }
-
-                       pscs->at(sum).AddScore(consBppMat->ref(m,l));
-                       pscs->at(sum).AddBaseScore(consBppMat->ref(m, l));
-                   }
-                   for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                       pscs->at(sum).AddSubstr(num, '\0'); 
-                       pscs->at(sum).AddRvstr(num, '\0');
-                   }
-               }
-               count = 0;
-           }
-       }
-       count = 0;
-       for(i = k, j = k + 1; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) {
-           if(consBppMat->ref(i,j) >= Thr) {
-               count++;
-           }
-           else if(count >= Word_Length) {
-               for(s = 0; s <= count- Word_Length; s++) {
-                   sum++;
-                   pscs->at(sum).SetLength(Word_Length);
-                   pscs->at(sum).SetPosition(i+1+s);
-                   pscs->at(sum).SetRvposition( j-count+(count-Word_Length-s));
-                   pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length));
-                   pscs->at(sum).SetNumSeq(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences());
-                   for(m = i + 1 + s, n = j - count + (count-Word_Length-s), l = j - 1 - s, t = 0; n < j-s; m++, n++, l--, t++) {
-                       for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                           Sequence *seq = Sequences->GetSequence(num);
-                           pscs->at(sum).AddSubstr(num, seq->GetPosition(m));
-                           pscs->at(sum).AddRvstr(num, seq->GetPosition(n));
-                       }
-
-                       pscs->at(sum).AddScore(consBppMat->ref(m,l));
-                       pscs->at(sum).AddBaseScore(consBppMat->ref(m, l));
-                   }
-                   for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                       pscs->at(sum).AddSubstr(num, '\0'); 
-                       pscs->at(sum).AddRvstr(num, '\0');
-                   }
-               }
-               count = 0;
-           }
-           else {
-               count = 0;
-           }
-           if(consBppMat->ref(i,j) >= Thr && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) {
-               for(s = 0; s <= count - Word_Length; s++) {
-                   sum++;
-                   pscs->at(sum).SetLength(Word_Length);
-                   pscs->at(sum).SetPosition(i+s);
-                   pscs->at(sum).SetRvposition(j-count+1+(count-Word_Length-s));
-                   pscs->at(sum).SetDistance((j-count+1+count-Word_Length-s) - (i+s+Word_Length));
-//                 pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length));
-                   pscs->at(sum).SetNumSeq(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences());
-                   pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences());
-                   for(m = i + s, n = j - count + 1 + (count-Word_Length-s), l = j - s, t=0; n <= j-s; m++, n++, l--, t++) {
-                       for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                           Sequence *seq = Sequences->GetSequence(num);
-                           pscs->at(sum).AddSubstr(num, seq->GetPosition(m));
-                           pscs->at(sum).AddRvstr(num, seq->GetPosition(n));
-                       }
-
-                       pscs->at(sum).AddScore(consBppMat->ref(m,l));
-                       pscs->at(sum).AddBaseScore(consBppMat->ref(m, l));
-                   }
-                   for(int num = 0; num < Sequences->GetNumSequences(); num++) {
-                       pscs->at(sum).AddSubstr(num, '\0'); 
-                       pscs->at(sum).AddRvstr(num, '\0');
-                   }
-               }
-               count = 0;
-           }
-       }
-    }
-
-    return pscs;
-}
-
-static std::vector<StemCandidate>* 
-doubleScs(std::vector<StemCandidate> *pscs)
-{
-    int num = pscs->size()/2;
-    
-    for(int i = 1; i <= num; i++) {
-       int latter = num + i;
-       //cout << i << " " << latter << endl;
-       StemCandidate &tmpScs = pscs->at(i);
-       pscs->at(latter).SetLength(tmpScs.GetLength());
-       pscs->at(latter).SetPosition(tmpScs.GetRvposition());
-       pscs->at(latter).SetRvposition(tmpScs.GetPosition());
-       pscs->at(latter).SetDistance(-tmpScs.GetDistance());
-       pscs->at(latter).SetNumSeq(tmpScs.GetNumSeq());
-       pscs->at(latter).SetNumSubstr(tmpScs.GetNumSeq());
-       pscs->at(latter).SetNumRvstr(tmpScs.GetNumSeq());
-
-       pscs->at(latter).SetScore(tmpScs.GetScore());
-       for(int num = 0; num < tmpScs.GetNumSeq(); num++) {
-           string tmpSubstr = tmpScs.GetSubstr(num);
-           string tmpRvstr  = tmpScs.GetRvstr(num);
-
-           for(int k = 0; k < tmpScs.GetLength(); k++) {
-               pscs->at(latter).AddSubstr(num, tmpSubstr[k]);
-               pscs->at(latter).AddRvstr(num, tmpRvstr[k]);
-           }
-       }
-       for(int k = 0; k < tmpScs.GetLength(); k++) {
-           pscs->at(latter).AddBaseScore(tmpScs.GetBaseScore(k));
-       }
-    }
-    return pscs;
-}
-
-
-static void 
-printScs(std::vector<StemCandidate> *pscs)
-{
-    int num = pscs->size();
-//    std::cout << "size = " << num << endl;
-    for(int i = 1; i < num; i++) {
-        StemCandidate &sc = pscs->at(i);
-       
-       std::cout << i << "\t" << sc.GetLength() << "\t" << sc.GetPosition() << "\t" << 
-           sc.GetRvposition() << "\t" << sc.GetDistance() << "\t" << sc.GetNumSeq() << 
-           "\t" << sc.GetScore() << "\t" << sc.GetContPos() << "\t" << sc.GetBeforePos() << 
-           "\t" << sc.GetRvscnumber() << "\t" << sc.GetStacking() << "\t" << sc.GetStemStacking() << 
-           "\t" << sc.GetBaseScore(0) << "\t" << sc.GetBaseScore(1) << endl;
-       cout << "substr:" << endl;
-       for(int k = 0; k < sc.GetNumSeq(); k++) {
-           cout << k << "\t" << sc.GetSubstr(k) << "\t" << sc.GetRvstr(k) << "\t" << endl;
-       }
-       
-    }
-
-}
-
-static std::vector<StemCandidate>*
-findRelations(std::vector<StemCandidate> *pscs)
-{
-    int num = pscs->size();
-    
-    for(int i = 1; i < num; i++) {
-       int pt = i-1; 
-       StemCandidate &sc = pscs->at(i);
-       sc.SetContPos(-1);
-       while(sc.GetPosition() == pscs->at(pt).GetPosition()) { pt--; }
-       
-       while((sc.GetPosition() == pscs->at(pt).GetPosition() + 1) && (pt > 0)) {
-           if(sc.GetRvposition() == pscs->at(pt).GetRvposition() - 1) {
-               sc.SetContPos(pt);
-               break;
-           }
-           --pt;
-       }
-       while((sc.GetPosition() < pscs->at(pt).GetPosition() + pscs->at(pt).GetLength())&&(pt > 0)) { pt--; }
-       sc.SetBeforePos(pt);
-    }
-    
-    return pscs;
-}
-
-static std::vector<StemCandidate>*
-findCorresponding(std::vector<StemCandidate>* pscs)
-{
-    int num = pscs->size();
-    
-    for(int i = 1; i < num; i++) { pscs->at(i).SetRvscnumber(0); }
-    
-    for(int i = 1; i < num; i++) {
-       if(pscs->at(i).GetDistance() > 0) {
-           for(int j = i + 1; j < num; j++) {
-               if ( (pscs->at(j).GetPosition() == pscs->at(i).GetRvposition())
-                    && (pscs->at(i).GetPosition() == pscs->at(j).GetRvposition()) ) {
-                   pscs->at(i).SetRvscnumber(j);
-                   pscs->at(j).SetRvscnumber(i);
-                   break;
-               }
-           }
-       }
-       if(pscs->at(i).GetRvscnumber() == 0) {
-           std::cerr << "error in findCorresponding" << " i=" << i << endl;
-//         exit(1);
-       }
-    }
-
-    return pscs;
-}
-
-static std::vector<StemCandidate>*
-calculateStackingEnergy(std::vector<StemCandidate>* pscs)
-{
-    int num = pscs->size();
-    int wordLength = scsLength;
-
-    for(int i = 1; i < num; i++) {
-       StemCandidate &scI = pscs->at(i);
-       int j = pscs->at(i).GetContPos();
-       
-       if(j > 0) {
-
-           StemCandidate &scJ = pscs->at(j);
-           float stacking = 0;
-           int profNum =  scJ.GetNumSeq();
-           for(int k = 0; k < profNum; k++) {
-               string substr = scJ.GetSubstr(k);
-               string rvstr  = scJ.GetRvstr(k);
-               int index = 0;
-               switch(substr[wordLength - 1]) {
-                       case 'A': if(     rvstr[0]=='U' ) {index += 0;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'C': if(     rvstr[0]=='G' ) {index += 6;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'G': if(     rvstr[0]=='C'){index += 12;}
-                                 else if(rvstr[0]=='U'){index += 18;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'U': if(     rvstr[0]=='A'){index += 24;}
-                                 else if(rvstr[0]=='G'){index += 30;}
-                                 else{ index = - 1000; }
-                                 break;
-               }
-               substr = scI.GetSubstr(k);
-               rvstr  = scI.GetRvstr(k);
-               switch(substr[wordLength - 1]){
-                       case 'A': if(     rvstr[0]=='U'){index += 0;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'C': if(     rvstr[0]=='G'){index += 1;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'G': if(     rvstr[0]=='C'){index += 2;}
-                                 else if(rvstr[0]=='U'){index += 3;}
-                                 else{ index = -1000; }
-                                 break;
-                       case 'U': if(     rvstr[0]=='A'){index += 4;}
-                                 else if(rvstr[0]=='G'){index += 5;}
-                                 else{ index = -1000; }
-                                 break;
-               }
-               if(index > 0) {
-                   stacking += Stacking_Energy[index];
-               }
-           }
-           scI.SetStacking(stacking/(float)profNum);
-       }
-       else {
-           scI.SetStacking(1000);
-       }
-    }
-
-    for(int i = 1; i < num; i++) {
-       StemCandidate &sc = pscs->at(i);
-       float stemStacking = 0;
-       int profNum = sc.GetNumSeq();
-       for(int k = 0; k < profNum; k++) {
-           string substr = sc.GetSubstr(k);
-           string rvstr  = sc.GetRvstr(k);
-           for(int j = 0; j < wordLength-1; j++) {
-               int index = 0;
-
-               switch(substr[j]) {
-                   case 'A': if(   rvstr[wordLength-1-j]=='U'){index += 0;}
-                             else{ index = -1000; }
-                             break;
-                   case 'C': if(   rvstr[wordLength-1-j]=='G'){index += 6;}
-                             else{ index = -1000; }
-                             break;
-                   case 'G': if(   rvstr[wordLength-1-j]=='C'){index += 12;}
-                              else if(rvstr[wordLength-1-j]=='U'){index += 18;}
-                             else{ index = -1000; }
-                             break;
-                   case 'U': if(   rvstr[wordLength-1-j]=='A'){index += 24;}
-                             else if(rvstr[wordLength-1-j]=='G'){index += 30;}
-                             else{ index = -1000; }
-                             break;
-               }
-               switch(substr[j+1]){
-                   case 'A': if(   rvstr[wordLength-1-(j+1)]=='U'){index += 0;}
-                             else{ index = -1000; }
-                             break;
-                   case 'C': if(   rvstr[wordLength-1-(j+1)]=='G'){index += 1;}
-                             else{ index = -1000; }
-                             break;
-                   case 'G': if(     rvstr[wordLength-1-(j+1)]=='C'){index += 2;}
-                             else if(rvstr[wordLength-1-(j+1)]=='U'){index += 3;}
-                             else{ index = -1000; }
-                             break;
-                   case 'U': if(     rvstr[wordLength-1-(j+1)]=='A'){index += 4;}
-                             else if(rvstr[wordLength-1-(j+1)]=='G'){index += 5;}
-                             else{ index = -1000; }
-                             break;
-               }
-               if(index > 0) {
-                   stemStacking += Stacking_Energy[index];
-               }
-           }
-           sc.SetStemStacking(stemStacking/(float)profNum);
-       }
-    }
-    return pscs;
-}
-
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING b/binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING
deleted file mode 100644 (file)
index 42607ac..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-                        Disclaimer and Copyright
-
-The programs, library and source code of the Vienna RNA Package are free
-software. They are distributed in the hope that they will be useful
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-Permission is granted for research, educational, and commercial use
-and modification so long as 1) the package and any derived works are not
-redistributed for any fee, other than media costs, 2) proper credit is
-given to the authors and the Institute for Theoretical Chemistry of the 
-University of Vienna.
-
-If you want to include this software in a commercial product, please contact 
-the authors. 
\ No newline at end of file
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h
deleted file mode 100644 (file)
index 04892da..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-
-   energy constants, formerly defined in
-             energy_par.h
-
-   customized for use with RNAedit by
-   S.Kopp, IMB-Jena, Germany, Mar 1996
-   
-*/
-
-#ifndef _ENERGY_CONST_H
-#define _ENERGY_CONST_H 1
-
-#define GASCONST 1.98717  /* in [cal/K] */
-#define K0  273.15
-#define INF 1000000
-#define FORBIDDEN 9999
-#define BONUS 10000
-#define NBPAIRS 7
-#define TURN 3
-#define MAXLOOP 30
-
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h
deleted file mode 100644 (file)
index 48b2737..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/* 
-   prototypes for energy_par.c
-*/
-
-#include "energy_const.h"
-namespace MXSCARNA {
-extern double lxc37;   /* parameter for logarithmic loop
-                         energy extrapolation            */
-
-extern int stack37[NBPAIRS+1][NBPAIRS+1];
-extern int enthalpies[NBPAIRS+1][NBPAIRS+1]; /* stack enthalpies */
-extern int entropies[NBPAIRS+1][NBPAIRS+1];  /* not used anymore */
-
-extern int hairpin37[31];
-extern int bulge37[31];
-extern int internal_loop37[31];
-extern int internal2_energy;
-extern int old_mismatch_37[NBPAIRS+1][5][5];
-extern int mismatchI37[NBPAIRS+1][5][5];  /* interior loop mismatches */
-extern int mismatchH37[NBPAIRS+1][5][5];  /* same for hairpins */
-extern int mismatchM37[NBPAIRS+1][5][5];  /* same for multiloops */
-extern int mism_H[NBPAIRS+1][5][5];       /* mismatch enthalpies */
-
-extern int dangle5_37[NBPAIRS+1][5];      /* 5' dangle exterior of pair */
-extern int dangle3_37[NBPAIRS+1][5];      /* 3' dangle */
-extern int dangle3_H[NBPAIRS+1][5];       /* corresponding enthalpies */
-extern int dangle5_H[NBPAIRS+1][5];
-
-extern int int11_37[NBPAIRS+1][NBPAIRS+1][5][5]; /* 1x1 interior loops */
-extern int int11_H[NBPAIRS+1][NBPAIRS+1][5][5];
-
-extern int int21_37[NBPAIRS+1][NBPAIRS+1][5][5][5]; /* 2x1 interior loops */
-extern int int21_H[NBPAIRS+1][NBPAIRS+1][5][5][5];
-
-extern int int22_37[NBPAIRS+1][NBPAIRS+1][5][5][5][5]; /* 2x2 interior loops */
-extern int int22_H[NBPAIRS+1][NBPAIRS+1][5][5][5][5];
-
-/* constants for linearly destabilizing contributions for multi-loops
-   F = ML_closing + ML_intern*(k-1) + ML_BASE*u  */
-extern int ML_BASE37;
-extern int ML_closing37;
-extern int ML_intern37;
-
-/* Ninio-correction for asymmetric internal loops with branches n1 and n2 */
-/*    ninio_energy = min{max_ninio, |n1-n2|*F_ninio[min{4.0, n1, n2}] } */
-extern int         MAX_NINIO;                   /* maximum correction */
-extern int F_ninio37[5];
-
-/* penalty for helices terminated by AU (actually not GC) */
-extern int TerminalAU;
-/* penalty for forming bi-molecular duplex */
-extern int DuplexInit;
-/* stabilizing contribution due to special hairpins of size 4 (tetraloops) */
-extern char Tetraloops[];  /* string containing the special tetraloops */
-extern int  TETRA_ENERGY37[];  /* Bonus energy for special tetraloops */
-extern int  TETRA_ENTH37;
-extern char Triloops[];    /* string containing the special triloops */
-extern int  Triloop_E37[]; /* Bonus energy for special Triloops */  
-
-extern double Tmeasure;       /* temperature of param measurements */
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp
deleted file mode 100644 (file)
index 6834c6e..0000000
+++ /dev/null
@@ -1,11600 +0,0 @@
-#include "energy_param.hpp"
-
-
-
-namespace MXSCARNA {
-const int    energy_param::INF       = 10000;
-const int    energy_param::NST       = 0;
-const int    energy_param::DEF       = -50;
-const double energy_param::lxc37     = 107.856;
-const int 
-energy_param::
-stack37[8][8] =
-/*          CG     GC     GU     UG     AU     UA  */
-{ {  INF,   INF,   INF,   INF,   INF,   INF,   INF, INF},
-  {  INF,  -240,  -330,  -210,  -140,  -210,  -210, NST}, // CG
-  {  INF,  -330,  -340,  -250,  -150,  -220,  -240, NST}, // GC
-  {  INF,  -210,  -250,   130,   -50,  -140,  -130, NST}, // GU
-  {  INF,  -140,  -150,   -50,    30,   -60,  -100, NST}, // UG
-  {  INF,  -210,  -220,  -140,   -60,  -110,   -90, NST}, // AU
-  {  INF,  -210,  -240,  -130,  -100,   -90,  -130, NST}, // UA
-  {  INF,   NST,   NST,   NST,   NST,   NST,   NST, NST}};
-
-/* enthalpies (0.01*kcal/mol at 37 C) for stacked pairs */
-/* different from mfold-2.3, which uses values from mfold-2.2 */
-const int 
-energy_param::
-enthalpies[8][8] = 
-/*          CG     GC     GU     UG     AU     UA  */
-{ {  INF,   INF,   INF,   INF,   INF,   INF,   INF, INF}, 
-  {  INF, -1060, -1340, -1210,  -560, -1050, -1040, NST},
-  {  INF, -1340, -1490, -1260,  -830, -1140, -1240, NST},
-  {  INF, -1210, -1260, -1460, -1350,  -880, -1280, NST},
-  {  INF,  -560,  -830, -1350,  -930,  -320,  -700, NST},
-  {  INF, -1050, -1140,  -880,  -320,  -940,  -680, NST},
-  {  INF, -1040, -1240, -1280,  -700,  -680,  -770, NST},
-  {  INF,   NST,   NST,   NST,   NST,   NST,   NST, NST}};
-
-/* old values are here just for comparison */
-const int energy_param::oldhairpin37[31] = { /* from ViennaRNA 1.3 */
-  INF, INF, INF, 410, 490, 440, 470, 500, 510, 520, 531,
-       542, 551, 560, 568, 575, 582, 589, 595, 601, 606,
-       611, 616, 621, 626, 630, 634, 638, 642, 646, 650};
-
-const int energy_param::hairpin37[31] = {
-  INF, INF, INF, 570, 560, 560, 540, 590, 560, 640, 650,
-       660, 670, 678, 686, 694, 701, 707, 713, 719, 725,
-       730, 735, 740, 744, 749, 753, 757, 761, 765, 769};
-
-const int energy_param::oldbulge37[31] = {
-  INF, 390, 310, 350, 420, 480, 500, 516, 531, 543, 555,
-       565, 574, 583, 591, 598, 605, 612, 618, 624, 630,
-       635, 640, 645, 649, 654, 658, 662, 666, 670, 673};
-
-const int energy_param::bulge37[31] = {
-  INF, 380, 280, 320, 360, 400, 440, 459, 470, 480, 490,
-       500, 510, 519, 527, 534, 541, 548, 554, 560, 565,
-  571, 576, 580, 585, 589, 594, 598, 602, 605, 609};
-
-const int energy_param::oldinternal_loop37[31] = {
-  INF, INF, 410, 510, 490, 530, 570, 587, 601, 614, 625,
-       635, 645, 653, 661, 669, 676, 682, 688, 694, 700,
-       705, 710, 715, 720, 724, 728, 732, 736, 740, 744};
-
-const int energy_param::internal_loop37[31] = {
-  INF, INF, 410, 510, 170, 180, 200, 220, 230, 240, 250,
-       260, 270, 278, 286, 294, 301, 307, 313, 319, 325,
-       330, 335, 340, 345, 349, 353, 357, 361, 365, 369};
-  
-/* terminal mismatches */
-/* mismatch free energies for interior loops at 37C */
-const int energy_param::mismatchI37[8][5][5] =
-{ /* @@ */
-  {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
-  { /* CG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,    0,    0, -110,    0}, /* A@  AA  AC  AG  AU */
-   {   0,    0,    0,    0,    0}, /* C@  CA  CC  CG  CU */
-   {   0, -110,    0,    0,    0}, /* G@  GA  GC  GG  GU */
-   {   0,    0,    0,    0,  -70}},/* U@  UA  UC  UG  UU */
-  { /* GC */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,    0,    0, -110,    0}, /* A@  AA  AC  AG  AU */
-   {   0,    0,    0,    0,    0}, /* C@  CA  CC  CG  CU */
-   {   0, -110,    0,    0,    0}, /* G@  GA  GC  GG  GU */
-   {   0,    0,    0,    0,  -70}},/* U@  UA  UC  UG  UU */
-  { /* GU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,   70,   70,  -40,   70}, /* A@  AA  AC  AG  AU */
-   {   0,   70,   70,   70,   70}, /* C@  CA  CC  CG  CU */
-   {   0,  -40,   70,   70,   70}, /* G@  GA  GC  GG  GU */
-   {   0,   70,   70,   70,    0}},/* U@  UA  UC  UG  UU */
-  { /* UG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,   70,   70,  -40,   70}, /* A@  AA  AC  AG  AU */
-   {   0,   70,   70,   70,   70}, /* C@  CA  CC  CG  CU */
-   {   0,  -40,   70,   70,   70}, /* G@  GA  GC  GG  GU */
-   {   0,   70,   70,   70,    0}},/* U@  UA  UC  UG  UU */
-  { /* AU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,   70,   70,  -40,   70}, /* A@  AA  AC  AG  AU */
-   {   0,   70,   70,   70,   70}, /* C@  CA  CC  CG  CU */
-   {   0,  -40,   70,   70,   70}, /* G@  GA  GC  GG  GU */
-   {   0,   70,   70,   70,    0}},/* U@  UA  UC  UG  UU */
-  { /* UA */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,   70,   70,  -40,   70}, /* A@  AA  AC  AG  AU */
-   {   0,   70,   70,   70,   70}, /* C@  CA  CC  CG  CU */
-   {   0,  -40,   70,   70,   70}, /* G@  GA  GC  GG  GU */
-   {   0,   70,   70,   70,    0}},/* U@  UA  UC  UG  UU */
-  { /* @@ */
-   { 90, 90, 90, 90, 90},{ 90, 90, 90, 90,-20},{ 90, 90, 90, 90, 90},
-   { 90,-20, 90, 90, 90},{ 90, 90, 90, 90, 20}}
-};
-
-/* mismatch free energies for hairpins at 37C */
-const int energy_param::mismatchH37[8][5][5] =
-{ /* @@ */
-  {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
-  { /* CG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { -90, -150, -150, -140, -180}, /* A@  AA  AC  AG  AU */
-   { -90, -100,  -90, -290,  -80}, /* C@  CA  CC  CG  CU */
-   { -90, -220, -200, -160, -110}, /* G@  GA  GC  GG  GU */
-   { -90, -170, -140, -180, -200}},/* U@  UA  UC  UG  UU */
-  { /* GC */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { -70, -110, -150, -130, -210}, /* A@  AA  AC  AG  AU */
-   { -70, -110,  -70, -240,  -50}, /* C@  CA  CC  CG  CU */
-   { -70, -240, -290, -140, -120}, /* G@  GA  GC  GG  GU */
-   { -70, -190, -100, -220, -150}},/* U@  UA  UC  UG  UU */
-  { /* GU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,   20,  -50,  -30,  -30}, /* A@  AA  AC  AG  AU */
-   {   0,  -10,  -20, -150,  -20}, /* C@  CA  CC  CG  CU */
-   {   0,  -90, -110,  -30,    0}, /* G@  GA  GC  GG  GU */
-   {   0,  -30,  -30,  -40, -110}},/* U@  UA  UC  UG  UU */
-  { /* UG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,  -50,  -30,  -60,  -50}, /* A@  AA  AC  AG  AU */
-   {   0,  -20,  -10, -170,    0}, /* C@  CA  CC  CG  CU */
-   {   0,  -80, -120,  -30,  -70}, /* G@  GA  GC  GG  GU */
-   {   0,  -60,  -10,  -60,  -80}},/* U@  UA  UC  UG  UU */
-  { /* AU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,  -30,  -50,  -30,  -30}, /* A@  AA  AC  AG  AU */
-   {   0,  -10,  -20, -150,  -20}, /* C@  CA  CC  CG  CU */
-   {   0, -110, -120,  -20,   20}, /* G@  GA  GC  GG  GU */
-   {   0,  -30,  -30,  -60, -110}},/* U@  UA  UC  UG  UU */
-  { /* UA */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   {   0,  -50,  -30,  -60,  -50}, /* A@  AA  AC  AG  AU */
-   {   0,  -20,  -10, -120,   -0}, /* C@  CA  CC  CG  CU */
-   {   0, -140, -120,  -70,  -20}, /* G@  GA  GC  GG  GU */
-   {   0,  -30,  -10,  -50,  -80}},/* U@  UA  UC  UG  UU */
-  { /* @@ */
-   {  0,  0,  0,  0,  0},{  0,  0,  0,  0,  0},{  0,  0,  0,  0,  0},
-   {  0,  0,  0,  0,  0},{  0,  0,  0,  0,  0}}
-};
-
-/* mismatch energies in multiloops */
-
-/* these are probably junk */
-/* mismatch enthalpies for temperature scaling */
-const int energy_param::mism_H[8][5][5] =
-{ /* no pair */
-  {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
-  { /* CG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF,-1030, -950,-1030,-1030}, /* A@  AA  AC  AG  AU */
-   { DEF, -520, -450, -520, -670}, /* C@  CA  CC  CG  CU */
-   { DEF, -940, -940, -940, -940}, /* G@  GA  GC  GG  GU */
-   { DEF, -810, -740, -810, -860}},/* U@  UA  UC  UG  UU */
-  { /* GC */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF, -520, -880, -560, -880}, /* A@  AA  AC  AG  AU */
-   { DEF, -720, -310, -310, -390}, /* C@  CA  CC  CG  CU */
-   { DEF, -710, -740, -620, -740}, /* G@  GA  GC  GG  GU */
-   { DEF, -500, -500, -500, -570}},/* U@  UA  UC  UG  UU */
-  { /* GU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF, -430, -600, -600, -600}, /* A@  AA  AC  AG  AU */
-   { DEF, -260, -240, -240, -240}, /* C@  CA  CC  CG  CU */
-   { DEF, -340, -690, -690, -690}, /* G@  GA  GC  GG  GU */
-   { DEF, -330, -330, -330, -330}},/* U@  UA  UC  UG  UU */
-  { /* UG */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF, -720, -790, -960, -810}, /* A@  AA  AC  AG  AU */
-   { DEF, -480, -480, -360, -480}, /* C@  CA  CC  CG  CU */
-   { DEF, -660, -810, -920, -810}, /* G@  GA  GC  GG  GU */
-   { DEF, -550, -440, -550, -360}},/* U@  UA  UC  UG  UU */
-  { /* AU */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF, -430, -600, -600, -600}, /* A@  AA  AC  AG  AU */
-   { DEF, -260, -240, -240, -240}, /* C@  CA  CC  CG  CU */
-   { DEF, -340, -690, -690, -690}, /* G@  GA  GC  GG  GU */
-   { DEF, -330, -330, -330, -330}},/* U@  UA  UC  UG  UU */
-  { /* UA */
-   {   0,    0,    0,    0,    0}, /* @@  @A  @C  @G  @U */
-   { DEF, -400, -630, -890, -590}, /* A@  AA  AC  AG  AU */
-   { DEF, -430, -510, -200, -180}, /* C@  CA  CC  CG  CU */
-   { DEF, -380, -680, -890, -680}, /* G@  GA  GC  GG  GU */
-   { DEF, -280, -140, -280, -140}},/* U@  UA  UC  UG  UU */
-  { /* nonstandard pair */
-   {DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF},
-   {DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF}}
-};
-
-/* 5' dangling ends (unpaird base stacks on first paired base) */
-const int energy_param::dangle5_37[8][5]=
-{/*   @     A     C     G     U   */
-   { INF,  INF,  INF,  INF,  INF}, /* no pair */
-   { INF,  -50,  -30,  -20,  -10}, /* CG  (stacks on C) */
-   { INF,  -20,  -30,   -0,   -0}, /* GC  (stacks on G) */
-   { INF,  -30,  -30,  -40,  -20}, /* GU */
-   { INF,  -30,  -10,  -20,  -20}, /* UG */
-   { INF,  -30,  -30,  -40,  -20}, /* AU */
-   { INF,  -30,  -10,  -20,  -20}, /* UA */
-   {   0,    0,     0,    0,   0}  /*  @ */
-};
-
-/* 3' dangling ends (unpaired base stacks on second paired base */
-const int energy_param::dangle3_37[8][5]=
-{/*   @     A     C     G     U   */
-   { INF,  INF,  INF,  INF,  INF},  /* no pair */
-   { INF, -110,  -40, -130,  -60},  /* CG  (stacks on G) */
-   { INF, -170,  -80, -170, -120},  /* GC */
-   { INF,  -70,  -10,  -70,  -10},  /* GU */
-   { INF,  -80,  -50,  -80,  -60},  /* UG */
-   { INF,  -70,  -10,  -70,  -10},  /* AU */
-   { INF,  -80,  -50,  -80,  -60},  /* UA */
-   {   0,    0,     0,    0,   0}   /*  @ */
-};
-
-/* enthalpies for temperature scaling */
-const int energy_param::dangle3_H[8][5] =
-{/*   @     A     C     G     U   */
-   { INF,  INF,  INF,  INF,  INF},  /* no pair */
-   {   0, -740, -280, -640, -360},
-   {   0, -900, -410, -860, -750},
-   {   0, -740, -240, -720, -490},
-   {   0, -490,  -90, -550, -230},
-   {   0, -570,  -70, -580, -220},
-   {   0, -490,  -90, -550, -230},
-   {   0,    0,    0,    0,   0}
-};
-
-const int energy_param::dangle5_H[8][5] =
-{/*   @     A     C     G     U   */
-   { INF,  INF,  INF,  INF,  INF},  /* no pair */
-   {   0, -240,  330,   80, -140},
-   {   0, -160,   70, -460,  -40},
-   {   0,  160,  220,   70,  310},
-   {   0, -150,  510,   10,  100},
-   {   0,  160,  220,   70,  310},
-   {   0,  -50,  690,  -60,  -60},
-   {   0,    0,    0,    0,   0}
-};
-
-
-/* constants for linearly destabilizing contributions for multi-loops
-   F = ML_closing + ML_intern*k + ML_BASE*u  */
-/* old versions erroneously used ML_intern*(k-1) */
-
-const int energy_param::ML_BASE37 = 0;
-const int energy_param::ML_closing37 = 340;
-const int energy_param::ML_intern37 =  40;
-
-
-/* Ninio-correction for asymmetric internal loops with branches n1 and n2 */
-/*    ninio_energy = min{max_ninio, |n1-n2|*F_ninio[min{4.0, n1, n2}] } */
-const int energy_param::MAX_NINIO = 300;                   /* maximum correction */
-const int energy_param::F_ninio37[5] = { 0, 40, 50, 20, 10 };      /* only F[2] used */
-
-/* stabilizing contribution due to special hairpins of size 4 (tetraloops) */
-
-const char energy_param::Tetraloops[1400] =  /* place for up to 200 tetra loops */
-  "GGGGAC "
-  "GGUGAC "
-  "CGAAAG "
-  "GGAGAC "
-  "CGCAAG "
-  "GGAAAC "
-  "CGGAAG "
-  "CUUCGG "
-  "CGUGAG "
-  "CGAAGG "
-  "CUACGG "
-  "GGCAAC "
-  "CGCGAG "
-  "UGAGAG "
-  "CGAGAG "
-  "AGAAAU "
-  "CGUAAG "
-  "CUAACG "
-  "UGAAAG "
-  "GGAAGC "
-  "GGGAAC "
-  "UGAAAA "
-  "AGCAAU "
-  "AGUAAU "
-  "CGGGAG "
-  "AGUGAU "
-  "GGCGAC "
-  "GGGAGC "
-  "GUGAAC "
-  "UGGAAA "
-;
-
-const char energy_param::Tetrastrings[30][7] = {
-    "GGGGAC",
-    "GGUGAC",
-    "CGAAAG",
-    "GGAGAC",
-    "CGCAAG",
-    "GGAAAC",
-    "CGGAAG",
-    "CUUCGG",
-    "CGUGAG",
-    "CGAAGG",
-    "CUACGG",
-    "GGCAAC",
-    "CGCGAG",
-    "UGAGAG",
-    "CGAGAG",
-    "AGAAAU",
-    "CGUAAG",
-    "CUAACG",
-    "UGAAAG",
-    "GGAAGC",
-    "GGGAAC",
-    "UGAAAA",
-    "AGCAAU",
-    "AGUAAU",
-    "CGGGAG",
-    "AGUGAU",
-    "GGCGAC",
-    "GGGAGC",
-    "GUGAAC",
-    "UGGAAA"
-};
-
-const int energy_param::TETRA_ENERGY37[200] = {
-  -300, -300, -300, -300, -300, -300, -300, -300, -300, -250, -250, -250,
-  -250, -250, -200, -200, -200, -200, -200, -150, -150, -150, -150, -150,
-  -150, -150, -150, -150, -150, -150};
-
-const int energy_param::TETRA_ENTH37   = -400;
-
-
-/* penalty for AU (or GU) terminating helix) */
-/* mismatches already contain these */
-const int energy_param::TerminalAU = 50;
-
-/* penalty for forming a bi-molecular duplex */
-const int energy_param::DuplexInit = 410;
-
-//#include "intloops.h"
-
-
-const int energy_param::int11_37[8][8][5][5] =
-{ /* noPair */ {{{0}}},
-  { /* noPair */ {{0}},
-/* CG..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110,  40,  40,  40},
-{ 110,  40,  40,  40,  40},
-{ 110,  40,  40, -140,  40},
-{ 110,  40,  40,  40,  40}
-},
-/* CG..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110,  40, -40,  40,  40},
-{ 110,  30,  50,  40,  50},
-{ 110, -10,  40, -170,  40},
-{ 110,  40,   0,  40, -30}
-},
-/* CG..GU */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* CG..UG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* CG..AU */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* CG..UA */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* CG..?? */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110}
-}
-},
-{ /* noPair */ {{0}},
-/* GC..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110,  40,  30, -10,  40},
-{ 110, -40,  50,  40,   0},
-{ 110,  40,  40, -170,  40},
-{ 110,  40,  50,  40, -30}
-},
-/* GC..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110,  80,  40,  40,  40},
-{ 110,  40,  40,  40,  40},
-{ 110,  40,  40, -210,  40},
-{ 110,  40,  40,  40, -70}
-},
-/* GC..GU */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* GC..UG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* GC..AU */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 100}
-},
-/* GC..UA */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* GC..?? */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110}
-}
-},
-{ /* noPair */ {{0}},
-/* GU..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* GU..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* GU..GU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* GU..UG */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* GU..AU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* GU..UA */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* GU..?? */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-}
-},
-{ /* noPair */ {{0}},
-/* UG..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* UG..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* UG..GU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UG..UG */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UG..AU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UG..UA */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UG..?? */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-}
-},
-{ /* noPair */ {{0}},
-/* AU..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* AU..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 100}
-},
-/* AU..GU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* AU..UG */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* AU..AU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 120}
-},
-/* AU..UA */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 150}
-},
-/* AU..?? */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-}
-},
-{ /* noPair */ {{0}},
-/* UA..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* UA..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, -100, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* UA..GU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UA..UG */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* UA..AU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 150}
-},
-/* UA..UA */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, -40, 170},
-{ 170, 170, 170, 170, 180}
-},
-/* UA..?? */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-}
-},
-{ /* noPair */ {{0}},
-/* ??..CG */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* ??..GC */
-{{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110},
-{ 110, 110, 110, 110, 110}
-},
-/* ??..GU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* ??..UG */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* ??..AU */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* ??..UA */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-},
-/* ??..?? */
-{{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170},
-{ 170, 170, 170, 170, 170}
-}
-}
-};
-
-const int energy_param::int11_H[8][8][5][5] = 
- /* GC..GC */ 
-{ /* noPair */ {{{0}}},
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GC.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /* CG..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* CG.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /* GU..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* GU.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /* UG..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UG.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /* AU..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* AU.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /* UA..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /* UA.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}},
- /*  @..GC */ 
-{ /* noPair */ {{0}},
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @..CG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @..GU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @..UG */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @..AU */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @..UA */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}},
- /*  @.. @ */ 
-{ {  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0},
-{  0, 0, 0, 0, 0}}}};
-
-const int energy_param::int21_37[8][8][5][5][5] = 
-{ /* noPair */ {{{{0}}}},
-{ /* noPair */ {{{0}}},
-{
-/* CG.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 240, 220, 160, 400},{ 550, 210, 170, 160, 400},{ 550, 100,  60,  40, 400},{ 550, 400, 400, 400, 400}},
-/* CG.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}},
-/* CG.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 170, 400,  80, 400},{ 550, 400, 400, 400, 400},{ 550,  80, 400, 220, 400},{ 550, 400, 400, 400, 400}},
-/* CG.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 130},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}}
-},
-{
-/* CG.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 110, 400},{ 550, 210, 170, 160, 400},{ 550,  80,  60,  40, 400},{ 550, 400, 400, 400, 400}},
-/* CG.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}},
-/* CG.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 170, 400,  80, 400},{ 550, 400, 400, 400, 400},{ 550,  80, 400, 220, 400},{ 550, 400, 400, 400, 400}},
-/* CG.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 150},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}}
-},
-{
-/* CG.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* CG.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* CG.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* CG.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* CG.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* CG.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* CG.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* CG.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* CG.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* CG.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* CG.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* CG.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* CG.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* CG.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* CG.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* CG.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* CG.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* CG.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* GC.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 220, 210, 400},{ 550, 210, 170, 160, 400},{ 550, 120,  60,  40, 400},{ 550, 400, 400, 400, 400}},
-/* GC.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}},
-/* GC.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 170, 400,  80, 400},{ 550, 400, 400, 400, 400},{ 550,  80, 400, 220, 400},{ 550, 400, 400, 400, 400}},
-/* GC.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 120},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}}
-},
-{
-/* GC.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 240, 220, 160, 400},{ 550, 210, 170, 160, 400},{ 550, 100,  60,  40, 400},{ 550, 400, 400, 400, 400}},
-/* GC.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}},
-/* GC.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 170, 400,  80, 400},{ 550, 400, 400, 400, 400},{ 550,  80, 400, 220, 400},{ 550, 400, 400, 400, 400}},
-/* GC.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 130},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}}
-},
-{
-/* GC.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GC.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GC.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GC.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GC.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GC.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GC.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GC.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GC.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GC.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GC.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GC.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GC.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GC.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GC.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GC.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GC.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GC.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* GU.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GU.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GU.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GU.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GU.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* GU.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* GU.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* GU.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* GU.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* GU.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* GU.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* GU.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* GU.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* GU.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* GU.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* GU.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* GU.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* GU.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* GU.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* GU.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* GU.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* GU.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* GU.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* GU.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* GU.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* GU.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* UG.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* UG.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* UG.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* UG.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* UG.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* UG.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* UG.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* UG.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* UG.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UG.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UG.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UG.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UG.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UG.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UG.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UG.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UG.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UG.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UG.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UG.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UG.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UG.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UG.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UG.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UG.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UG.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* AU.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* AU.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* AU.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* AU.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* AU.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* AU.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* AU.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* AU.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* AU.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* AU.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* AU.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* AU.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* AU.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* AU.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* AU.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* AU.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* AU.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* AU.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* AU.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* AU.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* AU.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* AU.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* AU.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* AU.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* AU.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* AU.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* UA.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* UA.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* UA.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* UA.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* UA.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}},
-/* UA.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}},
-/* UA.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}},
-/* UA.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}}
-},
-{
-/* UA.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UA.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UA.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UA.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UA.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UA.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UA.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UA.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UA.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UA.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UA.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UA.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UA.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}},
-/* UA.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}},
-/* UA.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}},
-/* UA.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}}
-},
-{
-/* UA.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* UA.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* ??.@..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..GC */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..CG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..UG */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..GU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..UA */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..AU */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-},
-{
-/* ??.@..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.A..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.C..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.G..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}},
-/* ??.U..?? */
-{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}
-}
-}
-};
-
-const int energy_param::int21_H[8][8][5][5][5] = 
-{ /* noPair */ {{{{0}}}},
-{ /* noPair */ {{{0}}},
-{
-/* CG.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..CG */
-{{  -50,-1029, -949,-1029,-1029},{-1079,-2058,-1978,-2058,-2058},{ -569,-1548,-1468,-1548,-1548},{ -989,-1968,-1888,-1968,-1968},{ -859,-1838,-1758,-1838,-1838}},
-/* CG.C..CG */
-{{  -50, -519, -449, -519, -669},{ -999,-1468,-1398,-1468,-1618},{ -499, -968, -898, -968,-1118},{ -989,-1458,-1388,-1458,-1608},{ -789,-1258,-1188,-1258,-1408}},
-/* CG.G..CG */
-{{  -50, -939, -939, -939, -939},{-1079,-1968,-1968,-1968,-1968},{ -569,-1458,-1458,-1458,-1458},{ -989,-1878,-1878,-1878,-1878},{ -859,-1748,-1748,-1748,-1748}},
-/* CG.U..CG */
-{{  -50, -809, -739, -809, -859},{-1079,-1838,-1768,-1838,-1888},{ -719,-1478,-1408,-1478,-1528},{ -989,-1748,-1678,-1748,-1798},{ -909,-1668,-1598,-1668,-1718}}
-},
-{
-/* CG.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..GC */
-{{  -50,-1029, -949,-1029,-1029},{ -569,-1548,-1468,-1548,-1548},{ -769,-1748,-1668,-1748,-1748},{ -759,-1738,-1658,-1738,-1738},{ -549,-1528,-1448,-1528,-1528}},
-/* CG.C..GC */
-{{  -50, -519, -449, -519, -669},{ -929,-1398,-1328,-1398,-1548},{ -359, -828, -758, -828, -978},{ -789,-1258,-1188,-1258,-1408},{ -549,-1018, -948,-1018,-1168}},
-/* CG.G..GC */
-{{  -50, -939, -939, -939, -939},{ -609,-1498,-1498,-1498,-1498},{ -359,-1248,-1248,-1248,-1248},{ -669,-1558,-1558,-1558,-1558},{ -549,-1438,-1438,-1438,-1438}},
-/* CG.U..GC */
-{{  -50, -809, -739, -809, -859},{ -929,-1688,-1618,-1688,-1738},{ -439,-1198,-1128,-1198,-1248},{ -789,-1548,-1478,-1548,-1598},{ -619,-1378,-1308,-1378,-1428}}
-},
-{
-/* CG.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..GU */
-{{  -50,-1029, -949,-1029,-1029},{ -479,-1458,-1378,-1458,-1458},{ -309,-1288,-1208,-1288,-1288},{ -389,-1368,-1288,-1368,-1368},{ -379,-1358,-1278,-1358,-1358}},
-/* CG.C..GU */
-{{  -50, -519, -449, -519, -669},{ -649,-1118,-1048,-1118,-1268},{ -289, -758, -688, -758, -908},{ -739,-1208,-1138,-1208,-1358},{ -379, -848, -778, -848, -998}},
-/* CG.G..GU */
-{{  -50, -939, -939, -939, -939},{ -649,-1538,-1538,-1538,-1538},{ -289,-1178,-1178,-1178,-1178},{ -739,-1628,-1628,-1628,-1628},{ -379,-1268,-1268,-1268,-1268}},
-/* CG.U..GU */
-{{  -50, -809, -739, -809, -859},{ -649,-1408,-1338,-1408,-1458},{ -289,-1048, -978,-1048,-1098},{ -739,-1498,-1428,-1498,-1548},{ -379,-1138,-1068,-1138,-1188}}
-},
-{
-/* CG.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..UG */
-{{  -50,-1029, -949,-1029,-1029},{ -769,-1748,-1668,-1748,-1748},{ -529,-1508,-1428,-1508,-1508},{ -709,-1688,-1608,-1688,-1688},{ -599,-1578,-1498,-1578,-1578}},
-/* CG.C..UG */
-{{  -50, -519, -449, -519, -669},{ -839,-1308,-1238,-1308,-1458},{ -529, -998, -928, -998,-1148},{ -859,-1328,-1258,-1328,-1478},{ -489, -958, -888, -958,-1108}},
-/* CG.G..UG */
-{{  -50, -939, -939, -939, -939},{-1009,-1898,-1898,-1898,-1898},{ -409,-1298,-1298,-1298,-1298},{ -969,-1858,-1858,-1858,-1858},{ -599,-1488,-1488,-1488,-1488}},
-/* CG.U..UG */
-{{  -50, -809, -739, -809, -859},{ -859,-1618,-1548,-1618,-1668},{ -529,-1288,-1218,-1288,-1338},{ -859,-1618,-1548,-1618,-1668},{ -409,-1168,-1098,-1168,-1218}}
-},
-{
-/* CG.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..AU */
-{{  -50,-1029, -949,-1029,-1029},{ -479,-1458,-1378,-1458,-1458},{ -309,-1288,-1208,-1288,-1288},{ -389,-1368,-1288,-1368,-1368},{ -379,-1358,-1278,-1358,-1358}},
-/* CG.C..AU */
-{{  -50, -519, -449, -519, -669},{ -649,-1118,-1048,-1118,-1268},{ -289, -758, -688, -758, -908},{ -739,-1208,-1138,-1208,-1358},{ -379, -848, -778, -848, -998}},
-/* CG.G..AU */
-{{  -50, -939, -939, -939, -939},{ -649,-1538,-1538,-1538,-1538},{ -289,-1178,-1178,-1178,-1178},{ -739,-1628,-1628,-1628,-1628},{ -379,-1268,-1268,-1268,-1268}},
-/* CG.U..AU */
-{{  -50, -809, -739, -809, -859},{ -649,-1408,-1338,-1408,-1458},{ -289,-1048, -978,-1048,-1098},{ -739,-1498,-1428,-1498,-1548},{ -379,-1138,-1068,-1138,-1188}}
-},
-{
-/* CG.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A..UA */
-{{  -50,-1029, -949,-1029,-1029},{ -449,-1428,-1348,-1428,-1428},{ -479,-1458,-1378,-1458,-1458},{ -429,-1408,-1328,-1408,-1408},{ -329,-1308,-1228,-1308,-1308}},
-/* CG.C..UA */
-{{  -50, -519, -449, -519, -669},{ -679,-1148,-1078,-1148,-1298},{ -559,-1028, -958,-1028,-1178},{ -729,-1198,-1128,-1198,-1348},{ -189, -658, -588, -658, -808}},
-/* CG.G..UA */
-{{  -50, -939, -939, -939, -939},{ -939,-1828,-1828,-1828,-1828},{ -249,-1138,-1138,-1138,-1138},{ -939,-1828,-1828,-1828,-1828},{ -329,-1218,-1218,-1218,-1218}},
-/* CG.U..UA */
-{{  -50, -809, -739, -809, -859},{ -639,-1398,-1328,-1398,-1448},{ -229, -988, -918, -988,-1038},{ -729,-1488,-1418,-1488,-1538},{ -190, -949, -879, -949, -999}}
-},
-{
-/* CG.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* CG.A.. @ */
-{{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079}},
-/* CG.C.. @ */
-{{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719}},
-/* CG.G.. @ */
-{{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989}},
-/* CG.U.. @ */
-{{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* GC.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..CG */
-{{  -50, -519, -879, -559, -879},{-1079,-1548,-1908,-1588,-1908},{ -569,-1038,-1398,-1078,-1398},{ -989,-1458,-1818,-1498,-1818},{ -859,-1328,-1688,-1368,-1688}},
-/* GC.C..CG */
-{{  -50, -719, -309, -309, -389},{ -999,-1668,-1258,-1258,-1338},{ -499,-1168, -758, -758, -838},{ -989,-1658,-1248,-1248,-1328},{ -789,-1458,-1048,-1048,-1128}},
-/* GC.G..CG */
-{{  -50, -709, -739, -619, -739},{-1079,-1738,-1768,-1648,-1768},{ -569,-1228,-1258,-1138,-1258},{ -989,-1648,-1678,-1558,-1678},{ -859,-1518,-1548,-1428,-1548}},
-/* GC.U..CG */
-{{  -50, -499, -499, -499, -569},{-1079,-1528,-1528,-1528,-1598},{ -719,-1168,-1168,-1168,-1238},{ -989,-1438,-1438,-1438,-1508},{ -909,-1358,-1358,-1358,-1428}}
-},
-{
-/* GC.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..GC */
-{{  -50, -519, -879, -559, -879},{ -569,-1038,-1398,-1078,-1398},{ -769,-1238,-1598,-1278,-1598},{ -759,-1228,-1588,-1268,-1588},{ -549,-1018,-1378,-1058,-1378}},
-/* GC.C..GC */
-{{  -50, -719, -309, -309, -389},{ -929,-1598,-1188,-1188,-1268},{ -359,-1028, -618, -618, -698},{ -789,-1458,-1048,-1048,-1128},{ -549,-1218, -808, -808, -888}},
-/* GC.G..GC */
-{{  -50, -709, -739, -619, -739},{ -609,-1268,-1298,-1178,-1298},{ -359,-1018,-1048, -928,-1048},{ -669,-1328,-1358,-1238,-1358},{ -549,-1208,-1238,-1118,-1238}},
-/* GC.U..GC */
-{{  -50, -499, -499, -499, -569},{ -929,-1378,-1378,-1378,-1448},{ -439, -888, -888, -888, -958},{ -789,-1238,-1238,-1238,-1308},{ -619,-1068,-1068,-1068,-1138}}
-},
-{
-/* GC.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..GU */
-{{  -50, -519, -879, -559, -879},{ -479, -948,-1308, -988,-1308},{ -309, -778,-1138, -818,-1138},{ -389, -858,-1218, -898,-1218},{ -379, -848,-1208, -888,-1208}},
-/* GC.C..GU */
-{{  -50, -719, -309, -309, -389},{ -649,-1318, -908, -908, -988},{ -289, -958, -548, -548, -628},{ -739,-1408, -998, -998,-1078},{ -379,-1048, -638, -638, -718}},
-/* GC.G..GU */
-{{  -50, -709, -739, -619, -739},{ -649,-1308,-1338,-1218,-1338},{ -289, -948, -978, -858, -978},{ -739,-1398,-1428,-1308,-1428},{ -379,-1038,-1068, -948,-1068}},
-/* GC.U..GU */
-{{  -50, -499, -499, -499, -569},{ -649,-1098,-1098,-1098,-1168},{ -289, -738, -738, -738, -808},{ -739,-1188,-1188,-1188,-1258},{ -379, -828, -828, -828, -898}}
-},
-{
-/* GC.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..UG */
-{{  -50, -519, -879, -559, -879},{ -769,-1238,-1598,-1278,-1598},{ -529, -998,-1358,-1038,-1358},{ -709,-1178,-1538,-1218,-1538},{ -599,-1068,-1428,-1108,-1428}},
-/* GC.C..UG */
-{{  -50, -719, -309, -309, -389},{ -839,-1508,-1098,-1098,-1178},{ -529,-1198, -788, -788, -868},{ -859,-1528,-1118,-1118,-1198},{ -489,-1158, -748, -748, -828}},
-/* GC.G..UG */
-{{  -50, -709, -739, -619, -739},{-1009,-1668,-1698,-1578,-1698},{ -409,-1068,-1098, -978,-1098},{ -969,-1628,-1658,-1538,-1658},{ -599,-1258,-1288,-1168,-1288}},
-/* GC.U..UG */
-{{  -50, -499, -499, -499, -569},{ -859,-1308,-1308,-1308,-1378},{ -529, -978, -978, -978,-1048},{ -859,-1308,-1308,-1308,-1378},{ -409, -858, -858, -858, -928}}
-},
-{
-/* GC.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..AU */
-{{  -50, -519, -879, -559, -879},{ -479, -948,-1308, -988,-1308},{ -309, -778,-1138, -818,-1138},{ -389, -858,-1218, -898,-1218},{ -379, -848,-1208, -888,-1208}},
-/* GC.C..AU */
-{{  -50, -719, -309, -309, -389},{ -649,-1318, -908, -908, -988},{ -289, -958, -548, -548, -628},{ -739,-1408, -998, -998,-1078},{ -379,-1048, -638, -638, -718}},
-/* GC.G..AU */
-{{  -50, -709, -739, -619, -739},{ -649,-1308,-1338,-1218,-1338},{ -289, -948, -978, -858, -978},{ -739,-1398,-1428,-1308,-1428},{ -379,-1038,-1068, -948,-1068}},
-/* GC.U..AU */
-{{  -50, -499, -499, -499, -569},{ -649,-1098,-1098,-1098,-1168},{ -289, -738, -738, -738, -808},{ -739,-1188,-1188,-1188,-1258},{ -379, -828, -828, -828, -898}}
-},
-{
-/* GC.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A..UA */
-{{  -50, -519, -879, -559, -879},{ -449, -918,-1278, -958,-1278},{ -479, -948,-1308, -988,-1308},{ -429, -898,-1258, -938,-1258},{ -329, -798,-1158, -838,-1158}},
-/* GC.C..UA */
-{{  -50, -719, -309, -309, -389},{ -679,-1348, -938, -938,-1018},{ -559,-1228, -818, -818, -898},{ -729,-1398, -988, -988,-1068},{ -189, -858, -448, -448, -528}},
-/* GC.G..UA */
-{{  -50, -709, -739, -619, -739},{ -939,-1598,-1628,-1508,-1628},{ -249, -908, -938, -818, -938},{ -939,-1598,-1628,-1508,-1628},{ -329, -988,-1018, -898,-1018}},
-/* GC.U..UA */
-{{  -50, -499, -499, -499, -569},{ -639,-1088,-1088,-1088,-1158},{ -229, -678, -678, -678, -748},{ -729,-1178,-1178,-1178,-1248},{ -190, -639, -639, -639, -709}}
-},
-{
-/* GC.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GC.A.. @ */
-{{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929}},
-/* GC.C.. @ */
-{{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439}},
-/* GC.G.. @ */
-{{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789}},
-/* GC.U.. @ */
-{{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* GU.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..CG */
-{{  -50, -429, -599, -599, -599},{-1079,-1458,-1628,-1628,-1628},{ -569, -948,-1118,-1118,-1118},{ -989,-1368,-1538,-1538,-1538},{ -859,-1238,-1408,-1408,-1408}},
-/* GU.C..CG */
-{{  -50, -259, -239, -239, -239},{ -999,-1208,-1188,-1188,-1188},{ -499, -708, -688, -688, -688},{ -989,-1198,-1178,-1178,-1178},{ -789, -998, -978, -978, -978}},
-/* GU.G..CG */
-{{  -50, -339, -689, -689, -689},{-1079,-1368,-1718,-1718,-1718},{ -569, -858,-1208,-1208,-1208},{ -989,-1278,-1628,-1628,-1628},{ -859,-1148,-1498,-1498,-1498}},
-/* GU.U..CG */
-{{  -50, -329, -329, -329, -329},{-1079,-1358,-1358,-1358,-1358},{ -719, -998, -998, -998, -998},{ -989,-1268,-1268,-1268,-1268},{ -909,-1188,-1188,-1188,-1188}}
-},
-{
-/* GU.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..GC */
-{{  -50, -429, -599, -599, -599},{ -569, -948,-1118,-1118,-1118},{ -769,-1148,-1318,-1318,-1318},{ -759,-1138,-1308,-1308,-1308},{ -549, -928,-1098,-1098,-1098}},
-/* GU.C..GC */
-{{  -50, -259, -239, -239, -239},{ -929,-1138,-1118,-1118,-1118},{ -359, -568, -548, -548, -548},{ -789, -998, -978, -978, -978},{ -549, -758, -738, -738, -738}},
-/* GU.G..GC */
-{{  -50, -339, -689, -689, -689},{ -609, -898,-1248,-1248,-1248},{ -359, -648, -998, -998, -998},{ -669, -958,-1308,-1308,-1308},{ -549, -838,-1188,-1188,-1188}},
-/* GU.U..GC */
-{{  -50, -329, -329, -329, -329},{ -929,-1208,-1208,-1208,-1208},{ -439, -718, -718, -718, -718},{ -789,-1068,-1068,-1068,-1068},{ -619, -898, -898, -898, -898}}
-},
-{
-/* GU.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..GU */
-{{  -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}},
-/* GU.C..GU */
-{{  -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}},
-/* GU.G..GU */
-{{  -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}},
-/* GU.U..GU */
-{{  -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}}
-},
-{
-/* GU.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..UG */
-{{  -50, -429, -599, -599, -599},{ -769,-1148,-1318,-1318,-1318},{ -529, -908,-1078,-1078,-1078},{ -709,-1088,-1258,-1258,-1258},{ -599, -978,-1148,-1148,-1148}},
-/* GU.C..UG */
-{{  -50, -259, -239, -239, -239},{ -839,-1048,-1028,-1028,-1028},{ -529, -738, -718, -718, -718},{ -859,-1068,-1048,-1048,-1048},{ -489, -698, -678, -678, -678}},
-/* GU.G..UG */
-{{  -50, -339, -689, -689, -689},{-1009,-1298,-1648,-1648,-1648},{ -409, -698,-1048,-1048,-1048},{ -969,-1258,-1608,-1608,-1608},{ -599, -888,-1238,-1238,-1238}},
-/* GU.U..UG */
-{{  -50, -329, -329, -329, -329},{ -859,-1138,-1138,-1138,-1138},{ -529, -808, -808, -808, -808},{ -859,-1138,-1138,-1138,-1138},{ -409, -688, -688, -688, -688}}
-},
-{
-/* GU.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..AU */
-{{  -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}},
-/* GU.C..AU */
-{{  -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}},
-/* GU.G..AU */
-{{  -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}},
-/* GU.U..AU */
-{{  -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}}
-},
-{
-/* GU.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A..UA */
-{{  -50, -429, -599, -599, -599},{ -449, -828, -998, -998, -998},{ -479, -858,-1028,-1028,-1028},{ -429, -808, -978, -978, -978},{ -329, -708, -878, -878, -878}},
-/* GU.C..UA */
-{{  -50, -259, -239, -239, -239},{ -679, -888, -868, -868, -868},{ -559, -768, -748, -748, -748},{ -729, -938, -918, -918, -918},{ -189, -398, -378, -378, -378}},
-/* GU.G..UA */
-{{  -50, -339, -689, -689, -689},{ -939,-1228,-1578,-1578,-1578},{ -249, -538, -888, -888, -888},{ -939,-1228,-1578,-1578,-1578},{ -329, -618, -968, -968, -968}},
-/* GU.U..UA */
-{{  -50, -329, -329, -329, -329},{ -639, -918, -918, -918, -918},{ -229, -508, -508, -508, -508},{ -729,-1008,-1008,-1008,-1008},{ -190, -469, -469, -469, -469}}
-},
-{
-/* GU.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* GU.A.. @ */
-{{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649}},
-/* GU.C.. @ */
-{{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289}},
-/* GU.G.. @ */
-{{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739}},
-/* GU.U.. @ */
-{{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* UG.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..CG */
-{{  -50, -719, -789, -959, -809},{-1079,-1748,-1818,-1988,-1838},{ -569,-1238,-1308,-1478,-1328},{ -989,-1658,-1728,-1898,-1748},{ -859,-1528,-1598,-1768,-1618}},
-/* UG.C..CG */
-{{  -50, -479, -479, -359, -479},{ -999,-1428,-1428,-1308,-1428},{ -499, -928, -928, -808, -928},{ -989,-1418,-1418,-1298,-1418},{ -789,-1218,-1218,-1098,-1218}},
-/* UG.G..CG */
-{{  -50, -659, -809, -919, -809},{-1079,-1688,-1838,-1948,-1838},{ -569,-1178,-1328,-1438,-1328},{ -989,-1598,-1748,-1858,-1748},{ -859,-1468,-1618,-1728,-1618}},
-/* UG.U..CG */
-{{  -50, -549, -439, -549, -359},{-1079,-1578,-1468,-1578,-1388},{ -719,-1218,-1108,-1218,-1028},{ -989,-1488,-1378,-1488,-1298},{ -909,-1408,-1298,-1408,-1218}}
-},
-{
-/* UG.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..GC */
-{{  -50, -719, -789, -959, -809},{ -569,-1238,-1308,-1478,-1328},{ -769,-1438,-1508,-1678,-1528},{ -759,-1428,-1498,-1668,-1518},{ -549,-1218,-1288,-1458,-1308}},
-/* UG.C..GC */
-{{  -50, -479, -479, -359, -479},{ -929,-1358,-1358,-1238,-1358},{ -359, -788, -788, -668, -788},{ -789,-1218,-1218,-1098,-1218},{ -549, -978, -978, -858, -978}},
-/* UG.G..GC */
-{{  -50, -659, -809, -919, -809},{ -609,-1218,-1368,-1478,-1368},{ -359, -968,-1118,-1228,-1118},{ -669,-1278,-1428,-1538,-1428},{ -549,-1158,-1308,-1418,-1308}},
-/* UG.U..GC */
-{{  -50, -549, -439, -549, -359},{ -929,-1428,-1318,-1428,-1238},{ -439, -938, -828, -938, -748},{ -789,-1288,-1178,-1288,-1098},{ -619,-1118,-1008,-1118, -928}}
-},
-{
-/* UG.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..GU */
-{{  -50, -719, -789, -959, -809},{ -479,-1148,-1218,-1388,-1238},{ -309, -978,-1048,-1218,-1068},{ -389,-1058,-1128,-1298,-1148},{ -379,-1048,-1118,-1288,-1138}},
-/* UG.C..GU */
-{{  -50, -479, -479, -359, -479},{ -649,-1078,-1078, -958,-1078},{ -289, -718, -718, -598, -718},{ -739,-1168,-1168,-1048,-1168},{ -379, -808, -808, -688, -808}},
-/* UG.G..GU */
-{{  -50, -659, -809, -919, -809},{ -649,-1258,-1408,-1518,-1408},{ -289, -898,-1048,-1158,-1048},{ -739,-1348,-1498,-1608,-1498},{ -379, -988,-1138,-1248,-1138}},
-/* UG.U..GU */
-{{  -50, -549, -439, -549, -359},{ -649,-1148,-1038,-1148, -958},{ -289, -788, -678, -788, -598},{ -739,-1238,-1128,-1238,-1048},{ -379, -878, -768, -878, -688}}
-},
-{
-/* UG.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..UG */
-{{  -50, -719, -789, -959, -809},{ -769,-1438,-1508,-1678,-1528},{ -529,-1198,-1268,-1438,-1288},{ -709,-1378,-1448,-1618,-1468},{ -599,-1268,-1338,-1508,-1358}},
-/* UG.C..UG */
-{{  -50, -479, -479, -359, -479},{ -839,-1268,-1268,-1148,-1268},{ -529, -958, -958, -838, -958},{ -859,-1288,-1288,-1168,-1288},{ -489, -918, -918, -798, -918}},
-/* UG.G..UG */
-{{  -50, -659, -809, -919, -809},{-1009,-1618,-1768,-1878,-1768},{ -409,-1018,-1168,-1278,-1168},{ -969,-1578,-1728,-1838,-1728},{ -599,-1208,-1358,-1468,-1358}},
-/* UG.U..UG */
-{{  -50, -549, -439, -549, -359},{ -859,-1358,-1248,-1358,-1168},{ -529,-1028, -918,-1028, -838},{ -859,-1358,-1248,-1358,-1168},{ -409, -908, -798, -908, -718}}
-},
-{
-/* UG.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..AU */
-{{  -50, -719, -789, -959, -809},{ -479,-1148,-1218,-1388,-1238},{ -309, -978,-1048,-1218,-1068},{ -389,-1058,-1128,-1298,-1148},{ -379,-1048,-1118,-1288,-1138}},
-/* UG.C..AU */
-{{  -50, -479, -479, -359, -479},{ -649,-1078,-1078, -958,-1078},{ -289, -718, -718, -598, -718},{ -739,-1168,-1168,-1048,-1168},{ -379, -808, -808, -688, -808}},
-/* UG.G..AU */
-{{  -50, -659, -809, -919, -809},{ -649,-1258,-1408,-1518,-1408},{ -289, -898,-1048,-1158,-1048},{ -739,-1348,-1498,-1608,-1498},{ -379, -988,-1138,-1248,-1138}},
-/* UG.U..AU */
-{{  -50, -549, -439, -549, -359},{ -649,-1148,-1038,-1148, -958},{ -289, -788, -678, -788, -598},{ -739,-1238,-1128,-1238,-1048},{ -379, -878, -768, -878, -688}}
-},
-{
-/* UG.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A..UA */
-{{  -50, -719, -789, -959, -809},{ -449,-1118,-1188,-1358,-1208},{ -479,-1148,-1218,-1388,-1238},{ -429,-1098,-1168,-1338,-1188},{ -329, -998,-1068,-1238,-1088}},
-/* UG.C..UA */
-{{  -50, -479, -479, -359, -479},{ -679,-1108,-1108, -988,-1108},{ -559, -988, -988, -868, -988},{ -729,-1158,-1158,-1038,-1158},{ -189, -618, -618, -498, -618}},
-/* UG.G..UA */
-{{  -50, -659, -809, -919, -809},{ -939,-1548,-1698,-1808,-1698},{ -249, -858,-1008,-1118,-1008},{ -939,-1548,-1698,-1808,-1698},{ -329, -938,-1088,-1198,-1088}},
-/* UG.U..UA */
-{{  -50, -549, -439, -549, -359},{ -639,-1138,-1028,-1138, -948},{ -229, -728, -618, -728, -538},{ -729,-1228,-1118,-1228,-1038},{ -190, -689, -579, -689, -499}}
-},
-{
-/* UG.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UG.A.. @ */
-{{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859}},
-/* UG.C.. @ */
-{{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529}},
-/* UG.G.. @ */
-{{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859}},
-/* UG.U.. @ */
-{{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* AU.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..CG */
-{{  -50, -429, -599, -599, -599},{-1079,-1458,-1628,-1628,-1628},{ -569, -948,-1118,-1118,-1118},{ -989,-1368,-1538,-1538,-1538},{ -859,-1238,-1408,-1408,-1408}},
-/* AU.C..CG */
-{{  -50, -259, -239, -239, -239},{ -999,-1208,-1188,-1188,-1188},{ -499, -708, -688, -688, -688},{ -989,-1198,-1178,-1178,-1178},{ -789, -998, -978, -978, -978}},
-/* AU.G..CG */
-{{  -50, -339, -689, -689, -689},{-1079,-1368,-1718,-1718,-1718},{ -569, -858,-1208,-1208,-1208},{ -989,-1278,-1628,-1628,-1628},{ -859,-1148,-1498,-1498,-1498}},
-/* AU.U..CG */
-{{  -50, -329, -329, -329, -329},{-1079,-1358,-1358,-1358,-1358},{ -719, -998, -998, -998, -998},{ -989,-1268,-1268,-1268,-1268},{ -909,-1188,-1188,-1188,-1188}}
-},
-{
-/* AU.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..GC */
-{{  -50, -429, -599, -599, -599},{ -569, -948,-1118,-1118,-1118},{ -769,-1148,-1318,-1318,-1318},{ -759,-1138,-1308,-1308,-1308},{ -549, -928,-1098,-1098,-1098}},
-/* AU.C..GC */
-{{  -50, -259, -239, -239, -239},{ -929,-1138,-1118,-1118,-1118},{ -359, -568, -548, -548, -548},{ -789, -998, -978, -978, -978},{ -549, -758, -738, -738, -738}},
-/* AU.G..GC */
-{{  -50, -339, -689, -689, -689},{ -609, -898,-1248,-1248,-1248},{ -359, -648, -998, -998, -998},{ -669, -958,-1308,-1308,-1308},{ -549, -838,-1188,-1188,-1188}},
-/* AU.U..GC */
-{{  -50, -329, -329, -329, -329},{ -929,-1208,-1208,-1208,-1208},{ -439, -718, -718, -718, -718},{ -789,-1068,-1068,-1068,-1068},{ -619, -898, -898, -898, -898}}
-},
-{
-/* AU.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..GU */
-{{  -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}},
-/* AU.C..GU */
-{{  -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}},
-/* AU.G..GU */
-{{  -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}},
-/* AU.U..GU */
-{{  -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}}
-},
-{
-/* AU.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..UG */
-{{  -50, -429, -599, -599, -599},{ -769,-1148,-1318,-1318,-1318},{ -529, -908,-1078,-1078,-1078},{ -709,-1088,-1258,-1258,-1258},{ -599, -978,-1148,-1148,-1148}},
-/* AU.C..UG */
-{{  -50, -259, -239, -239, -239},{ -839,-1048,-1028,-1028,-1028},{ -529, -738, -718, -718, -718},{ -859,-1068,-1048,-1048,-1048},{ -489, -698, -678, -678, -678}},
-/* AU.G..UG */
-{{  -50, -339, -689, -689, -689},{-1009,-1298,-1648,-1648,-1648},{ -409, -698,-1048,-1048,-1048},{ -969,-1258,-1608,-1608,-1608},{ -599, -888,-1238,-1238,-1238}},
-/* AU.U..UG */
-{{  -50, -329, -329, -329, -329},{ -859,-1138,-1138,-1138,-1138},{ -529, -808, -808, -808, -808},{ -859,-1138,-1138,-1138,-1138},{ -409, -688, -688, -688, -688}}
-},
-{
-/* AU.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..AU */
-{{  -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}},
-/* AU.C..AU */
-{{  -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}},
-/* AU.G..AU */
-{{  -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}},
-/* AU.U..AU */
-{{  -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}}
-},
-{
-/* AU.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A..UA */
-{{  -50, -429, -599, -599, -599},{ -449, -828, -998, -998, -998},{ -479, -858,-1028,-1028,-1028},{ -429, -808, -978, -978, -978},{ -329, -708, -878, -878, -878}},
-/* AU.C..UA */
-{{  -50, -259, -239, -239, -239},{ -679, -888, -868, -868, -868},{ -559, -768, -748, -748, -748},{ -729, -938, -918, -918, -918},{ -189, -398, -378, -378, -378}},
-/* AU.G..UA */
-{{  -50, -339, -689, -689, -689},{ -939,-1228,-1578,-1578,-1578},{ -249, -538, -888, -888, -888},{ -939,-1228,-1578,-1578,-1578},{ -329, -618, -968, -968, -968}},
-/* AU.U..UA */
-{{  -50, -329, -329, -329, -329},{ -639, -918, -918, -918, -918},{ -229, -508, -508, -508, -508},{ -729,-1008,-1008,-1008,-1008},{ -190, -469, -469, -469, -469}}
-},
-{
-/* AU.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* AU.A.. @ */
-{{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649}},
-/* AU.C.. @ */
-{{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289}},
-/* AU.G.. @ */
-{{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739}},
-/* AU.U.. @ */
-{{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/* UA.@..CG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..CG */
-{{  -50, -399, -629, -889, -589},{-1079,-1428,-1658,-1918,-1618},{ -569, -918,-1148,-1408,-1108},{ -989,-1338,-1568,-1828,-1528},{ -859,-1208,-1438,-1698,-1398}},
-/* UA.C..CG */
-{{  -50, -429, -509, -199, -179},{ -999,-1378,-1458,-1148,-1128},{ -499, -878, -958, -648, -628},{ -989,-1368,-1448,-1138,-1118},{ -789,-1168,-1248, -938, -918}},
-/* UA.G..CG */
-{{  -50, -379, -679, -889, -679},{-1079,-1408,-1708,-1918,-1708},{ -569, -898,-1198,-1408,-1198},{ -989,-1318,-1618,-1828,-1618},{ -859,-1188,-1488,-1698,-1488}},
-/* UA.U..CG */
-{{  -50, -279, -139, -279, -140},{-1079,-1308,-1168,-1308,-1169},{ -719, -948, -808, -948, -809},{ -989,-1218,-1078,-1218,-1079},{ -909,-1138, -998,-1138, -999}}
-},
-{
-/* UA.@..GC */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..GC */
-{{  -50, -399, -629, -889, -589},{ -569, -918,-1148,-1408,-1108},{ -769,-1118,-1348,-1608,-1308},{ -759,-1108,-1338,-1598,-1298},{ -549, -898,-1128,-1388,-1088}},
-/* UA.C..GC */
-{{  -50, -429, -509, -199, -179},{ -929,-1308,-1388,-1078,-1058},{ -359, -738, -818, -508, -488},{ -789,-1168,-1248, -938, -918},{ -549, -928,-1008, -698, -678}},
-/* UA.G..GC */
-{{  -50, -379, -679, -889, -679},{ -609, -938,-1238,-1448,-1238},{ -359, -688, -988,-1198, -988},{ -669, -998,-1298,-1508,-1298},{ -549, -878,-1178,-1388,-1178}},
-/* UA.U..GC */
-{{  -50, -279, -139, -279, -140},{ -929,-1158,-1018,-1158,-1019},{ -439, -668, -528, -668, -529},{ -789,-1018, -878,-1018, -879},{ -619, -848, -708, -848, -709}}
-},
-{
-/* UA.@..GU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..GU */
-{{  -50, -399, -629, -889, -589},{ -479, -828,-1058,-1318,-1018},{ -309, -658, -888,-1148, -848},{ -389, -738, -968,-1228, -928},{ -379, -728, -958,-1218, -918}},
-/* UA.C..GU */
-{{  -50, -429, -509, -199, -179},{ -649,-1028,-1108, -798, -778},{ -289, -668, -748, -438, -418},{ -739,-1118,-1198, -888, -868},{ -379, -758, -838, -528, -508}},
-/* UA.G..GU */
-{{  -50, -379, -679, -889, -679},{ -649, -978,-1278,-1488,-1278},{ -289, -618, -918,-1128, -918},{ -739,-1068,-1368,-1578,-1368},{ -379, -708,-1008,-1218,-1008}},
-/* UA.U..GU */
-{{  -50, -279, -139, -279, -140},{ -649, -878, -738, -878, -739},{ -289, -518, -378, -518, -379},{ -739, -968, -828, -968, -829},{ -379, -608, -468, -608, -469}}
-},
-{
-/* UA.@..UG */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..UG */
-{{  -50, -399, -629, -889, -589},{ -769,-1118,-1348,-1608,-1308},{ -529, -878,-1108,-1368,-1068},{ -709,-1058,-1288,-1548,-1248},{ -599, -948,-1178,-1438,-1138}},
-/* UA.C..UG */
-{{  -50, -429, -509, -199, -179},{ -839,-1218,-1298, -988, -968},{ -529, -908, -988, -678, -658},{ -859,-1238,-1318,-1008, -988},{ -489, -868, -948, -638, -618}},
-/* UA.G..UG */
-{{  -50, -379, -679, -889, -679},{-1009,-1338,-1638,-1848,-1638},{ -409, -738,-1038,-1248,-1038},{ -969,-1298,-1598,-1808,-1598},{ -599, -928,-1228,-1438,-1228}},
-/* UA.U..UG */
-{{  -50, -279, -139, -279, -140},{ -859,-1088, -948,-1088, -949},{ -529, -758, -618, -758, -619},{ -859,-1088, -948,-1088, -949},{ -409, -638, -498, -638, -499}}
-},
-{
-/* UA.@..AU */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..AU */
-{{  -50, -399, -629, -889, -589},{ -479, -828,-1058,-1318,-1018},{ -309, -658, -888,-1148, -848},{ -389, -738, -968,-1228, -928},{ -379, -728, -958,-1218, -918}},
-/* UA.C..AU */
-{{  -50, -429, -509, -199, -179},{ -649,-1028,-1108, -798, -778},{ -289, -668, -748, -438, -418},{ -739,-1118,-1198, -888, -868},{ -379, -758, -838, -528, -508}},
-/* UA.G..AU */
-{{  -50, -379, -679, -889, -679},{ -649, -978,-1278,-1488,-1278},{ -289, -618, -918,-1128, -918},{ -739,-1068,-1368,-1578,-1368},{ -379, -708,-1008,-1218,-1008}},
-/* UA.U..AU */
-{{  -50, -279, -139, -279, -140},{ -649, -878, -738, -878, -739},{ -289, -518, -378, -518, -379},{ -739, -968, -828, -968, -829},{ -379, -608, -468, -608, -469}}
-},
-{
-/* UA.@..UA */
-{{    0,    0,    0,    0,    0},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A..UA */
-{{  -50, -399, -629, -889, -589},{ -449, -798,-1028,-1288, -988},{ -479, -828,-1058,-1318,-1018},{ -429, -778,-1008,-1268, -968},{ -329, -678, -908,-1168, -868}},
-/* UA.C..UA */
-{{  -50, -429, -509, -199, -179},{ -679,-1058,-1138, -828, -808},{ -559, -938,-1018, -708, -688},{ -729,-1108,-1188, -878, -858},{ -189, -568, -648, -338, -318}},
-/* UA.G..UA */
-{{  -50, -379, -679, -889, -679},{ -939,-1268,-1568,-1778,-1568},{ -249, -578, -878,-1088, -878},{ -939,-1268,-1568,-1778,-1568},{ -329, -658, -958,-1168, -958}},
-/* UA.U..UA */
-{{  -50, -279, -139, -279, -140},{ -639, -868, -728, -868, -729},{ -229, -458, -318, -458, -319},{ -729, -958, -818, -958, -819},{ -190, -419, -279, -419, -280}}
-},
-{
-/* UA.@.. @ */
-{{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50},{  -50,  -50,  -50,  -50,  -50}},
-/* UA.A.. @ */
-{{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639}},
-/* UA.C.. @ */
-{{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229}},
-/* UA.G.. @ */
-{{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729}},
-/* UA.U.. @ */
-{{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190}}
-}
-},
-{ /* noPair */ {{{0}}},
-{
-/*  @.@..CG */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..CG */
-{{  -50,  -50,  -50,  -50,  -50},{-1079,-1079,-1079,-1079,-1079},{ -569, -569, -569, -569, -569},{ -989, -989, -989, -989, -989},{ -859, -859, -859, -859, -859}},
-/*  @.C..CG */
-{{  -50,  -50,  -50,  -50,  -50},{ -999, -999, -999, -999, -999},{ -499, -499, -499, -499, -499},{ -989, -989, -989, -989, -989},{ -789, -789, -789, -789, -789}},
-/*  @.G..CG */
-{{  -50,  -50,  -50,  -50,  -50},{-1079,-1079,-1079,-1079,-1079},{ -569, -569, -569, -569, -569},{ -989, -989, -989, -989, -989},{ -859, -859, -859, -859, -859}},
-/*  @.U..CG */
-{{  -50,  -50,  -50,  -50,  -50},{-1079,-1079,-1079,-1079,-1079},{ -719, -719, -719, -719, -719},{ -989, -989, -989, -989, -989},{ -909, -909, -909, -909, -909}}
-},
-{
-/*  @.@..GC */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..GC */
-{{  -50,  -50,  -50,  -50,  -50},{ -569, -569, -569, -569, -569},{ -769, -769, -769, -769, -769},{ -759, -759, -759, -759, -759},{ -549, -549, -549, -549, -549}},
-/*  @.C..GC */
-{{  -50,  -50,  -50,  -50,  -50},{ -929, -929, -929, -929, -929},{ -359, -359, -359, -359, -359},{ -789, -789, -789, -789, -789},{ -549, -549, -549, -549, -549}},
-/*  @.G..GC */
-{{  -50,  -50,  -50,  -50,  -50},{ -609, -609, -609, -609, -609},{ -359, -359, -359, -359, -359},{ -669, -669, -669, -669, -669},{ -549, -549, -549, -549, -549}},
-/*  @.U..GC */
-{{  -50,  -50,  -50,  -50,  -50},{ -929, -929, -929, -929, -929},{ -439, -439, -439, -439, -439},{ -789, -789, -789, -789, -789},{ -619, -619, -619, -619, -619}}
-},
-{
-/*  @.@..GU */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..GU */
-{{  -50,  -50,  -50,  -50,  -50},{ -479, -479, -479, -479, -479},{ -309, -309, -309, -309, -309},{ -389, -389, -389, -389, -389},{ -379, -379, -379, -379, -379}},
-/*  @.C..GU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}},
-/*  @.G..GU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}},
-/*  @.U..GU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}
-},
-{
-/*  @.@..UG */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..UG */
-{{  -50,  -50,  -50,  -50,  -50},{ -769, -769, -769, -769, -769},{ -529, -529, -529, -529, -529},{ -709, -709, -709, -709, -709},{ -599, -599, -599, -599, -599}},
-/*  @.C..UG */
-{{  -50,  -50,  -50,  -50,  -50},{ -839, -839, -839, -839, -839},{ -529, -529, -529, -529, -529},{ -859, -859, -859, -859, -859},{ -489, -489, -489, -489, -489}},
-/*  @.G..UG */
-{{  -50,  -50,  -50,  -50,  -50},{-1009,-1009,-1009,-1009,-1009},{ -409, -409, -409, -409, -409},{ -969, -969, -969, -969, -969},{ -599, -599, -599, -599, -599}},
-/*  @.U..UG */
-{{  -50,  -50,  -50,  -50,  -50},{ -859, -859, -859, -859, -859},{ -529, -529, -529, -529, -529},{ -859, -859, -859, -859, -859},{ -409, -409, -409, -409, -409}}
-},
-{
-/*  @.@..AU */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..AU */
-{{  -50,  -50,  -50,  -50,  -50},{ -479, -479, -479, -479, -479},{ -309, -309, -309, -309, -309},{ -389, -389, -389, -389, -389},{ -379, -379, -379, -379, -379}},
-/*  @.C..AU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}},
-/*  @.G..AU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}},
-/*  @.U..AU */
-{{  -50,  -50,  -50,  -50,  -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}
-},
-{
-/*  @.@..UA */
-{{  -50,  -50,  -50,  -50,  -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A..UA */
-{{  -50,  -50,  -50,  -50,  -50},{ -449, -449, -449, -449, -449},{ -479, -479, -479, -479, -479},{ -429, -429, -429, -429, -429},{ -329, -329, -329, -329, -329}},
-/*  @.C..UA */
-{{  -50,  -50,  -50,  -50,  -50},{ -679, -679, -679, -679, -679},{ -559, -559, -559, -559, -559},{ -729, -729, -729, -729, -729},{ -189, -189, -189, -189, -189}},
-/*  @.G..UA */
-{{  -50,  -50,  -50,  -50,  -50},{ -939, -939, -939, -939, -939},{ -249, -249, -249, -249, -249},{ -939, -939, -939, -939, -939},{ -329, -329, -329, -329, -329}},
-/*  @.U..UA */
-{{  -50,  -50,  -50,  -50,  -50},{ -639, -639, -639, -639, -639},{ -229, -229, -229, -229, -229},{ -729, -729, -729, -729, -729},{ -190, -190, -190, -190, -190}}
-},
-{
-/*  @.@.. @ */
-{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.A.. @ */
-{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.C.. @ */
-{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.G.. @ */
-{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}},
-/*  @.U.. @ */
-{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}
-}
-}
-};
-
-const int energy_param::int22_37[8][8][5][5][5][5] = {
-/* noPair */ {{{{{0}}}}},
-{ /* noPair */ {{{{0}}}},
-/* CG....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 160,  30, 200},{ 340, 120, 150,  20, 200},{ 340,  30,  60, -70, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 200,  60, 200},{ 340, 210, 180, 150, 200},{ 340, 200, 200, 200, 200},{ 340, 190, 170, 130, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  30,  60, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 100, 140,   0, 200},{ 340, -40, -110, -60, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 170, 130, 200},{ 340, 110,  40,  90, 200},{ 340, 140,  80, 130, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 120, 210, 200, 190},{ 340, 110, 140, 200, 120},{ 340,  20, 150, 200, 130},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 180, 200, 170},{ 340, 140, 170, 200, 150},{ 340, 200, 200, 200, 200},{ 340, 120, 150, 200, 140}},
-{{ 340, 340, 340, 340, 340},{ 340,  20, 150, 200, 130},{ 340, 200, 200, 200, 200},{ 340,  90, 180, 200, 170},{ 340, -150, -20, 200, -40}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 150, 200, 140},{ 340,   0, 130, 200, 110},{ 340,  30,  60, 200,  50}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 200, 100, 110},{ 340,  20, 200,  90,   0},{ 340, -70, 200,   0,  90},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 200, 140,  40},{ 340, 150, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340, 130, 200, 170, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, -70, 200,   0,  90},{ 340, 200, 200, 200, 200},{ 340,   0, 200,  80,  90},{ 340, -60, 200, -70, -260}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 130, 200, 170, 110},{ 340,  90, 200,  90, -110},{ 340, 130, 200, 120, 110}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -40, 140},{ 340, 200, 120, -150,  30},{ 340, 200, 130, -60, 130},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -110,  80},{ 340, 200, 150, -20,  60},{ 340, 200, 200, 200, 200},{ 340, 200, 140, -40,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 130, -60, 130},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70, 120},{ 340, 200, -40, -420, -50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 140, -40,  50},{ 340, 200, 110, -260, 110},{ 340, 200,  50, -50, -40}}
-}
-},
-/* CG....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  50,  60,   0, 200},{ 340, 110, 150, -70, 200},{ 340, -30,  10, -160, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 110, -100, 200},{ 340, 170, 150, -60, 200},{ 340, 200, 200, 200, 200},{ 340,  70,  50,  20, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  40,  50, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 100, 140,   0, 200},{ 340,  10, -70, -80, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 150, 120, 200},{ 340, -50, -60, -60, 200},{ 340, 150,   0,  90, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 200},{ 340, 100, 130, 200, 120},{ 340, -70,  70, 200,  40},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 190, 200, 110},{ 340, 100, 130, 200, 120},{ 340, 200, 200, 200, 200},{ 340,   0,  30, 200, 170}},
-{{ 340, 340, 340, 340, 340},{ 340,  70,  70, 200, 100},{ 340, 200, 200, 200, 200},{ 340,  90, 180, 200, 170},{ 340, -190, -30, 200, -70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 110, 140, 200, 120},{ 340, -150, -20, 200, -30},{ 340, -20, -10, 200,  20}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 110,  90},{ 340, -40, 200,  90,   0},{ 340, -170, 200, -90,  30},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200,  80, -10},{ 340, 110, 200, 150, 100},{ 340, 200, 200, 200, 200},{ 340,  20, 200,  50,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, -50, 200, -20,  60},{ 340, 200, 200, 200, 200},{ 340,   0, 200,  80,  90},{ 340, -90, 200, -100, -300}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 200, 150, 100},{ 340, -130, 200, -60, -240},{ 340,  90, 200, 110,  60}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, -10, 140},{ 340, 200, 120, -160,  30},{ 340, 200,  40, -160,  50},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 110, -160,  30},{ 340, 200, 120, -60,  30},{ 340, 200, 200, 200, 200},{ 340, 200,  20, -160,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  50, -60, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70, 120},{ 340, 200, -70, -440, -100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 120, -50,  30},{ 340, 200, -10, -410,  10},{ 340, 200,  40, -100,  60}}
-}
-},
-/* CG....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 180, 210,  80, 200},{ 340,  80, 110, -20, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 220,  90, 200},{ 340, 230, 210, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 110, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 170,  30, 200},{ 340,  60,   0,  40, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 160,  90, 140, 200},{ 340, 190, 130, 180, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 170, 200, 200, 180},{ 340,  70, 200, 200, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 210, 200, 190},{ 340, 160, 190, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 120, 210, 200, 200},{ 340, -50,  80, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340,  50, 180, 200, 160},{ 340,  80, 110, 200, 100}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340,  80, 200, 150,  60},{ 340, -20, 200,  50, 140},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 200, 160,  70},{ 340, 170, 200, 210, 150},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150}},
-{{ 340, 340, 340, 340, 340},{ 340, -20, 200,  50, 140},{ 340, 200, 200, 200, 200},{ 340,  30, 200, 110, 110},{ 340,  40, 200,  40, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 140, 200, 130, -60},{ 340, 180, 200, 170, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 220},{ 340, 200, 180, -90,  90},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -80, 100},{ 340, 200, 180,   0,  90},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -40, 150},{ 340, 200,  70, -310,  60}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90},{ 340, 200, 160, -210, 160},{ 340, 200, 100,   0,  10}}
-}
-},
-/* CG....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 160, 190,  60, 200},{ 340, 100, 130,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 260, 240, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 260, 240, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 130,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 170,  40, 200},{ 340,  20, -40,   0, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 150,  80, 130, 200},{ 340, 220, 150, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 150, 180, 200, 160},{ 340,  90, 220, 200, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 200, 210},{ 340, 190, 220, 200, 210},{ 340, 200, 200, 200, 200},{ 340, 190, 220, 200, 210}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 220, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 220, 200, 200},{ 340, -90,  40, 200,  30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340,  40, 170, 200, 150},{ 340, 110, 140, 200, 120}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340,  60, 200, 130,  40},{ 340,   0, 200,  70, 160},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180,  80},{ 340, 200, 200, 240, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 240, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200,  70, 160},{ 340, 200, 200, 200, 200},{ 340,  40, 200, 110, 120},{ 340,   0, 200,   0, -200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 130, 200, 120, -70},{ 340, 200, 200, 190, 180}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 220},{ 340, 200, 160, -110,  70},{ 340, 200, 200,  10, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 210, -70, 120},{ 340, 200, 210,  30, 120},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200,  10, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -30, 150},{ 340, 200,  30, -350,  20}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90},{ 340, 200, 150, -220, 150},{ 340, 200, 120,  30,  30}}
-}
-},
-/* CG....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 180, 210,  80, 200},{ 340,  80, 110, -20, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 220,  90, 200},{ 340, 230, 210, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 110, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 170,  30, 200},{ 340,  60,   0,  40, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 160,  90, 140, 200},{ 340, 190, 130, 180, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 170, 200, 200, 180},{ 340,  70, 200, 200, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 210, 200, 190},{ 340, 160, 190, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 120, 210, 200, 200},{ 340, -50,  80, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340,  50, 180, 200, 160},{ 340,  80, 110, 200, 100}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340,  80, 200, 150,  60},{ 340, -20, 200,  50, 140},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 200, 160,  70},{ 340, 170, 200, 210, 150},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150}},
-{{ 340, 340, 340, 340, 340},{ 340, -20, 200,  50, 140},{ 340, 200, 200, 200, 200},{ 340,  30, 200, 110, 110},{ 340,  40, 200,  40, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 140, 200, 130, -60},{ 340, 180, 200, 170, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 220},{ 340, 200, 180, -90,  90},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -80, 100},{ 340, 200, 180,   0,  90},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -40, 150},{ 340, 200,  70, -310,  60}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90},{ 340, 200, 160, -210, 160},{ 340, 200, 100,   0,  10}}
-}
-},
-/* CG....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 160, 190,  60, 200},{ 340, 100, 130,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 260, 240, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 260, 240, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 130,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 170,  40, 200},{ 340,  20, -40,   0, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 150,  80, 130, 200},{ 340, 220, 150, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 150, 180, 200, 160},{ 340,  90, 220, 200, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 200, 210},{ 340, 190, 220, 200, 210},{ 340, 200, 200, 200, 200},{ 340, 190, 220, 200, 210}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 220, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 220, 200, 200},{ 340, -90,  40, 200,  30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340,  40, 170, 200, 150},{ 340, 110, 140, 200, 120}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340,  60, 200, 130,  40},{ 340,   0, 200,  70, 160},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180,  80},{ 340, 200, 200, 240, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 240, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200,  70, 160},{ 340, 200, 200, 200, 200},{ 340,  40, 200, 110, 120},{ 340,   0, 200,   0, -200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 130, 200, 120, -70},{ 340, 200, 200, 190, 180}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 220},{ 340, 200, 160, -110,  70},{ 340, 200, 200,  10, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 210, -70, 120},{ 340, 200, 210,  30, 120},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200,  10, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -30, 150},{ 340, 200,  30, -350,  20}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,   0,  90},{ 340, 200, 150, -220, 150},{ 340, 200, 120,  30,  30}}
-}
-},
-/* CG....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* GC....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 110,  40, 200},{ 340, 130, 100,  70, 200},{ 340, -20,  70, -50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 110,  50, 200},{ 340, 220, 190,  70, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 110,  50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, -100, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 110,  80, -20, 200},{ 340, -10, -160, -60, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 110, 100, 200},{ 340,  90, -10,  60, 200},{ 340, 140,  30, 140, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 170, 200, 180},{ 340, 100, 100, 200, 110},{ 340, -40, 110, 200, 120},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 200, 150},{ 340, 130, 130, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 120, 120, 200, 120}},
-{{ 340, 340, 340, 340, 340},{ 340, -70, -60, 200, 120},{ 340, 200, 200, 200, 200},{ 340,  90, 150, 200, 150},{ 340, -160, -60, 200, -50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 120, 200, 120},{ 340,   0, 100, 200, 100},{ 340,  30,  30, 200,  30}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, -30, 200, 100, -50},{ 340, -70, 200,  90, -150},{ 340, -170, 200,   0, -130},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 140, -60},{ 340,  70, 200, 180, -20},{ 340, 200, 200, 200, 200},{ 340,  40, 200, 170, -10}},
-{{ 340, 340, 340, 340, 340},{ 340, -160, 200,   0, -60},{ 340, 200, 200, 200, 200},{ 340, -90, 200,  80, -60},{ 340, -160, 200, -70, -410}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  40, 200, 170, -30},{ 340,  30, 200,  90, -240},{ 340,  50, 200, 120,  10}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  70,  10, 150},{ 340, 200,   0, -190, -20},{ 340, 200,  20, -90,  90},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  50, -70,   0},{ 340, 200,  30, -30, -10},{ 340, 200, 200, 200, 200},{ 340, 200,  20, -70,  40}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  20, -80,  90},{ 340, 200, 200, 200, 200},{ 340, 200,  50, -100, 110},{ 340, 200, -160, -440, -100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70,  20},{ 340, 200,   0, -300,  60},{ 340, 200,  10, -100,  60}}
-}
-},
-/* GC....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 120,  10, 200},{ 340, 120,  90, -10, 200},{ 340, -50, -80, -190, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 120,  90, -20, 200},{ 340, 180,  90,  90, 200},{ 340, 200, 200, 200, 200},{ 340,  80,   0, -10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, -20, -130, 200},{ 340, 200, 200, 200, 200},{ 340, 110,  80, -20, 200},{ 340, -70, -200, -130, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 100,  90, 200},{ 340, -30, -160, -90, 200},{ 340, 150,  20,  90, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 120, 180, 200, 190},{ 340, 100, 100, 200, 100},{ 340, -80,  20, 200,  30},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  90,  90, 200, 100},{ 340, 100, 100, 200, 100},{ 340, 200, 200, 200, 200},{ 340,   0,   0, 200,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, -10,  90, 200,  90},{ 340, 200, 200, 200, 200},{ 340,  90, 150, 200, 150},{ 340, -190, -90, 200, -90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 100, 100, 200, 110},{ 340, -150, -50, 200, -50},{ 340,  20,  20, 200,  30}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, -50, 200, 110, -30},{ 340, -80, 200,  90, -150},{ 340, -260, 200, -90, -150},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, -80, 200,  80, -160},{ 340,  20, 200, 150, -50},{ 340, 200, 200, 200, 200},{ 340, -80, 200,  50, -150}},
-{{ 340, 340, 340, 340, 340},{ 340, -190, 200, -20, -90},{ 340, 200, 200, 200, 200},{ 340, -90, 200,  80, -60},{ 340, -190, 200, -100, -450}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  30, 200, 150, -50},{ 340, -150, 200, -60, -410},{ 340,  30, 200, 110, -50}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  80, -70, 150},{ 340, 200,   0, -190,  20},{ 340, 200, -80, -190,  30},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,   0, -200,  20},{ 340, 200,   0, -90,  20},{ 340, 200, 200, 200, 200},{ 340, 200, -100, -190, -70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, -10, -130,  90},{ 340, 200, 200, 200, 200},{ 340, 200,  50, -100, 110},{ 340, 200, -190, -490, -90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200,   0, -90,  30},{ 340, 200, -150, -450, -50},{ 340, 200, -70, -90, -50}}
-}
-},
-/* GC....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 190, 160,  50, 200},{ 340,  90,  60, -50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170,  60, 200},{ 340, 240, 150, 140, 200},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  90,  60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 110,   0, 200},{ 340,  70, -60,  10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 170,  40, 110, 200},{ 340, 200,  70, 150, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 160, 160, 200, 170},{ 340,  60, 160, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 200, 180},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 160, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 180},{ 340, -50,  50, 200,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340,  40, 140, 200, 150},{ 340,  80,  80, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180,  40},{ 340, -10, 200, 150, -90},{ 340, -110, 200,  50, -10},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200, 160, -80},{ 340,  80, 200, 210,  10},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, -110, 200,  50, -10},{ 340, 200, 200, 200, 200},{ 340, -60, 200, 110, -30},{ 340, -50, 200,  40, -310}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10},{ 340,  50, 200, 130, -210},{ 340,  80, 200, 170,  10}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150,   0, 210},{ 340, 200,  60, -130,  90},{ 340, 200,  70, -50, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  70, -120, 100},{ 340, 200,  60, -30,  80},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  70, -50, 170},{ 340, 200, 200, 200, 200},{ 340, 200,  80, -70, 140},{ 340, 200, -50, -350,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80},{ 340, 200,  50, -250, 150},{ 340, 200, -20, -30,   0}}
-}
-},
-/* GC....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 170, 140,  30, 200},{ 340, 110,  80, -30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 270, 180, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 180, 170, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 110,  80, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 120,  10, 200},{ 340,  30, -100, -30, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 160,  30, 100, 200},{ 340, 230, 100, 170, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 140, 140, 200, 150},{ 340,  80, 180, 200, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 190, 200, 190},{ 340, 190, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 190, 190, 200, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 180, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 190},{ 340, -90,  10, 200,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340,  30, 130, 200, 140},{ 340, 100, 100, 200, 110}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180,  40},{ 340, -30, 200, 130, -110},{ 340, -90, 200,  70,  10},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180, -60},{ 340, 110, 200, 240,  40},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 240,  40}},
-{{ 340, 340, 340, 340, 340},{ 340, -90, 200,  70,  10},{ 340, 200, 200, 200, 200},{ 340, -50, 200, 110, -30},{ 340, -90, 200,   0, -350}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10},{ 340,  40, 200, 120, -220},{ 340, 110, 200, 190,  30}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150,   0, 210},{ 340, 200,  40, -150,  70},{ 340, 200,  90, -30, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  90, -100, 110},{ 340, 200,  90,   0, 110},{ 340, 200, 200, 200, 200},{ 340, 200,  90,   0, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  90, -30, 190},{ 340, 200, 200, 200, 200},{ 340, 200,  80, -70, 150},{ 340, 200, -90, -390,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80},{ 340, 200,  40, -260, 140},{ 340, 200,   0, -10,  30}}
-}
-},
-/* GC....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 190, 160,  50, 200},{ 340,  90,  60, -50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170,  60, 200},{ 340, 240, 150, 140, 200},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  90,  60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 110,   0, 200},{ 340,  70, -60,  10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 170,  40, 110, 200},{ 340, 200,  70, 150, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 160, 160, 200, 170},{ 340,  60, 160, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 200, 180},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 160, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 180},{ 340, -50,  50, 200,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340,  40, 140, 200, 150},{ 340,  80,  80, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180,  40},{ 340, -10, 200, 150, -90},{ 340, -110, 200,  50, -10},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200, 160, -80},{ 340,  80, 200, 210,  10},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, -110, 200,  50, -10},{ 340, 200, 200, 200, 200},{ 340, -60, 200, 110, -30},{ 340, -50, 200,  40, -310}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10},{ 340,  50, 200, 130, -210},{ 340,  80, 200, 170,  10}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150,   0, 210},{ 340, 200,  60, -130,  90},{ 340, 200,  70, -50, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  70, -120, 100},{ 340, 200,  60, -30,  80},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  70, -50, 170},{ 340, 200, 200, 200, 200},{ 340, 200,  80, -70, 140},{ 340, 200, -50, -350,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80},{ 340, 200,  50, -250, 150},{ 340, 200, -20, -30,   0}}
-}
-},
-/* GC....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 170, 140,  30, 200},{ 340, 110,  80, -30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 180,  70, 200},{ 340, 270, 180, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 180, 170, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 110,  80, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 120,  10, 200},{ 340,  30, -100, -30, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 160,  30, 100, 200},{ 340, 230, 100, 170, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 140, 140, 200, 150},{ 340,  80, 180, 200, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 190, 200, 190},{ 340, 190, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 190, 190, 200, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 180, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 190},{ 340, -90,  10, 200,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340,  30, 130, 200, 140},{ 340, 100, 100, 200, 110}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180,  40},{ 340, -30, 200, 130, -110},{ 340, -90, 200,  70,  10},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  10, 200, 180, -60},{ 340, 110, 200, 240,  40},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 240,  40}},
-{{ 340, 340, 340, 340, 340},{ 340, -90, 200,  70,  10},{ 340, 200, 200, 200, 200},{ 340, -50, 200, 110, -30},{ 340, -90, 200,   0, -350}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 210,  10},{ 340,  40, 200, 120, -220},{ 340, 110, 200, 190,  30}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150,   0, 210},{ 340, 200,  40, -150,  70},{ 340, 200,  90, -30, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  90, -100, 110},{ 340, 200,  90,   0, 110},{ 340, 200, 200, 200, 200},{ 340, 200,  90,   0, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200,  90, -30, 190},{ 340, 200, 200, 200, 200},{ 340, 200,  80, -70, 150},{ 340, 200, -90, -390,  10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -30,  80},{ 340, 200,  40, -260, 140},{ 340, 200,   0, -10,  30}}
-}
-},
-/* GC....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* GU....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 190,  80, 200},{ 340, 190, 180,  70, 200},{ 340, 100,  90, -20, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 220, 110, 200},{ 340, 280, 210, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100,  90, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160,  50, 200},{ 340,  30, -80, -10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200},{ 340, 180,  70, 140, 200},{ 340, 220, 100, 180, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 230, 200, 230},{ 340, 170, 160, 200, 160},{ 340,  80, 170, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 200, 210},{ 340, 200, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 170, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -90,   0, 200,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180},{ 340,  60, 150, 200, 150},{ 340,  90,  90, 200,  90}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 200, 130, 160},{ 340,  70, 200, 120,  50},{ 340, -20, 200,  30, 140},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 170,  90},{ 340, 200, 200, 210, 180},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, -20, 200,  30, 140},{ 340, 200, 200, 200, 200},{ 340,  50, 200, 110, 130},{ 340, -10, 200, -40, -210}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160},{ 340, 140, 200, 110, -60},{ 340, 180, 200, 150, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  60, 190},{ 340, 200, 160, -50,  80},{ 340, 200, 170,  40, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 210,   0, 130},{ 340, 200, 190,  80, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 180,  70, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170,  40, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  40, 170},{ 340, 200,   0, -310,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,  70, 100},{ 340, 200, 150, -160, 160},{ 340, 200,  90,  60,  10}}
-}
-},
-/* GU....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 200,  90, 200},{ 340, 190, 170,  60, 200},{ 340,  10,   0, -110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 170,  60, 200},{ 340, 250, 170, 160, 200},{ 340, 200, 200, 200, 200},{ 340, 150,  70,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  70,  60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160,  50, 200},{ 340,   0, -120, -50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 180, 170, 200},{ 340,  40, -80, -10, 200},{ 340, 210, 100, 170, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 240},{ 340, 160, 160, 200, 160},{ 340, -10,  80, 200,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 150, 200, 150},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340,  60,  60, 200,  60}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 140, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -130, -30, 200, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 160, 200, 160},{ 340, -90,  10, 200,  10},{ 340,  90,  80, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 200, 140, 170},{ 340,  60, 200, 120,  40},{ 340, -110, 200, -60,  50},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 200, 110,  40},{ 340, 160, 200, 180, 140},{ 340, 200, 200, 200, 200},{ 340,  70, 200,  80,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, -50, 200,   0, 110},{ 340, 200, 200, 200, 200},{ 340,  50, 200, 110, 130},{ 340, -50, 200, -70, -250}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 180, 150},{ 340, -10, 200, -30, -210},{ 340, 170, 200, 140, 150}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240,  70, 200},{ 340, 200, 160, -50,  80},{ 340, 200,  80, -50,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150, -60,  70},{ 340, 200, 160,  50,  80},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -50, -20}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 140,  10, 150},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  40, 170},{ 340, 200, -30, -350, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 160,  50,  80},{ 340, 200,  10, -310,  10},{ 340, 200,  80,  50,   0}}
-}
-},
-/* GU....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190,  80, 200},{ 340, 130,  20,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340,  10, 100, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 140, 160},{ 340,  90, 200,  70, -110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220,  10, 140},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200, 100, -210, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110,  60}}
-}
-},
-/* GU....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200,  90, 200},{ 340, 100, -20,  50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30,  70, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160,  90},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340,  90, 200, 140, 170},{ 340,  50, 200,  30, -150}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200,  70, -250,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130,  80}}
-}
-},
-/* GU....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190,  80, 200},{ 340, 130,  20,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340,  10, 100, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 140, 160},{ 340,  90, 200,  70, -110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220,  10, 140},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200, 100, -210, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110,  60}}
-}
-},
-/* GU....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200,  90, 200},{ 340, 100, -20,  50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30,  70, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160,  90},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340,  90, 200, 140, 170},{ 340,  50, 200,  30, -150}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200,  70, -250,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130,  80}}
-}
-},
-/* GU....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* UG....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 100, 200},{ 340, 190, 190,  90, 200},{ 340, 100, 100,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 240, 130, 200},{ 340, 280, 220, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 100,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180,  70, 200},{ 340,  30, -70,  10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200},{ 340, 180,  80, 160, 200},{ 340, 220, 120, 190, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 260, 200, 230},{ 340, 150, 190, 200, 160},{ 340,  60, 200, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 210},{ 340, 180, 220, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 200, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -110,  30, 200,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180},{ 340,  40, 180, 200, 150},{ 340,  70, 120, 200,  90}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 140, 150},{ 340,  90, 200, 130,  40},{ 340,   0, 200,  40, 130},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 200, 170,  80},{ 340, 220, 200, 220, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200,  40, 130},{ 340, 200, 200, 200, 200},{ 340,  70, 200, 110, 120},{ 340,  10, 200, -30, -220}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150},{ 340, 160, 200, 120, -70},{ 340, 190, 200, 150, 150}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260,  20, 220},{ 340, 200, 190, -90, 110},{ 340, 200, 200,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, -40, 150},{ 340, 200, 220,  40, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 240,   0, 190},{ 340, 200,  30, -350,  30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120},{ 340, 200, 180, -200, 180},{ 340, 200, 120,  20,  30}}
-}
-},
-/* UG....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 110, 200},{ 340, 190, 190,  80, 200},{ 340,  10,  10, -90, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 180,  80, 200},{ 340, 250, 190, 180, 200},{ 340, 200, 200, 200, 200},{ 340, 150,  90,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  70,  70, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180,  70, 200},{ 340,   0, -100, -30, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 190, 190, 200},{ 340,  40, -60,  10, 200},{ 340, 210, 110, 190, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 270, 200, 240},{ 340, 140, 190, 200, 160},{ 340, -30, 110, 200,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 180, 200, 150},{ 340, 140, 190, 200, 160},{ 340, 200, 200, 200, 200},{ 340,  40,  90, 200,  60}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 170, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -150,   0, 200, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 150, 190, 200, 160},{ 340, -110,  40, 200,  10},{ 340,  70, 110, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 150, 160},{ 340,  80, 200, 120,  30},{ 340, -90, 200, -50,  40},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 200, 120,  30},{ 340, 180, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340,  90, 200,  80,  40}},
-{{ 340, 340, 340, 340, 340},{ 340, -30, 200,  10, 100},{ 340, 200, 200, 200, 200},{ 340,  70, 200, 110, 120},{ 340, -30, 200, -70, -260}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 200, 190, 140},{ 340,  10, 200, -30, -220},{ 340, 190, 200, 150, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 230},{ 340, 200, 190, -90, 100},{ 340, 200, 110, -90, 110},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -100, 100},{ 340, 200, 190,  10, 100},{ 340, 200, 200, 200, 200},{ 340, 200,  90, -90,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -30, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 240,   0, 190},{ 340, 200,   0, -390, -10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 190,  10, 110},{ 340, 200,  40, -350,  30},{ 340, 200, 110,  10,  30}}
-}
-},
-/* UG....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130,  30, 110, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  90, 230, 200, 200},{ 340, 120, 170, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200,  70, -120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250,  70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 220},{ 340, 200, 130, -250, 130}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170,  70,  80}}
-}
-},
-/* UG....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100,   0,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  80, 220, 200, 190},{ 340, 150, 190, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170,  80},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340,  70, 200,  30, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 280,   0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 230},{ 340, 200, 100, -290,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190,  90, 110}}
-}
-},
-/* UG....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130,  30, 110, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  90, 230, 200, 200},{ 340, 120, 170, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200,  70, -120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250,  70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 220},{ 340, 200, 130, -250, 130}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170,  70,  80}}
-}
-},
-/* UG....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100,   0,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  80, 220, 200, 190},{ 340, 150, 190, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170,  80},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340,  70, 200,  30, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 280,   0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 230},{ 340, 200, 100, -290,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190,  90, 110}}
-}
-},
-/* UG....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* AU....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 190,  80, 200},{ 340, 190, 180,  70, 200},{ 340, 100,  90, -20, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 220, 110, 200},{ 340, 280, 210, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100,  90, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160,  50, 200},{ 340,  30, -80, -10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200},{ 340, 180,  70, 140, 200},{ 340, 220, 100, 180, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 230, 200, 230},{ 340, 170, 160, 200, 160},{ 340,  80, 170, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 200, 210},{ 340, 200, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 170, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -90,   0, 200,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180},{ 340,  60, 150, 200, 150},{ 340,  90,  90, 200,  90}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 200, 130, 160},{ 340,  70, 200, 120,  50},{ 340, -20, 200,  30, 140},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 170,  90},{ 340, 200, 200, 210, 180},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, -20, 200,  30, 140},{ 340, 200, 200, 200, 200},{ 340,  50, 200, 110, 130},{ 340, -10, 200, -40, -210}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160},{ 340, 140, 200, 110, -60},{ 340, 180, 200, 150, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  60, 190},{ 340, 200, 160, -50,  80},{ 340, 200, 170,  40, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 210,   0, 130},{ 340, 200, 190,  80, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 180,  70, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170,  40, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  40, 170},{ 340, 200,   0, -310,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180,  70, 100},{ 340, 200, 150, -160, 160},{ 340, 200,  90,  60,  10}}
-}
-},
-/* AU....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 200,  90, 200},{ 340, 190, 170,  60, 200},{ 340,  10,   0, -110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 170,  60, 200},{ 340, 250, 170, 160, 200},{ 340, 200, 200, 200, 200},{ 340, 150,  70,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  70,  60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160,  50, 200},{ 340,   0, -120, -50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 180, 170, 200},{ 340,  40, -80, -10, 200},{ 340, 210, 100, 170, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 240},{ 340, 160, 160, 200, 160},{ 340, -10,  80, 200,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 150, 200, 150},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340,  60,  60, 200,  60}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 140, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -130, -30, 200, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 160, 200, 160},{ 340, -90,  10, 200,  10},{ 340,  90,  80, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340,  90, 200, 140, 170},{ 340,  60, 200, 120,  40},{ 340, -110, 200, -60,  50},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 200, 110,  40},{ 340, 160, 200, 180, 140},{ 340, 200, 200, 200, 200},{ 340,  70, 200,  80,  50}},
-{{ 340, 340, 340, 340, 340},{ 340, -50, 200,   0, 110},{ 340, 200, 200, 200, 200},{ 340,  50, 200, 110, 130},{ 340, -50, 200, -70, -250}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 180, 150},{ 340, -10, 200, -30, -210},{ 340, 170, 200, 140, 150}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240,  70, 200},{ 340, 200, 160, -50,  80},{ 340, 200,  80, -50,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 150, -60,  70},{ 340, 200, 160,  50,  80},{ 340, 200, 200, 200, 200},{ 340, 200,  60, -50, -20}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 140,  10, 150},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  40, 170},{ 340, 200, -30, -350, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 160,  50,  80},{ 340, 200,  10, -310,  10},{ 340, 200,  80,  50,   0}}
-}
-},
-/* AU....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190,  80, 200},{ 340, 130,  20,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340,  10, 100, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 140, 160},{ 340,  90, 200,  70, -110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220,  10, 140},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200, 100, -210, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110,  60}}
-}
-},
-/* AU....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200,  90, 200},{ 340, 100, -20,  50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30,  70, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160,  90},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340,  90, 200, 140, 170},{ 340,  50, 200,  30, -150}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200,  70, -250,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130,  80}}
-}
-},
-/* AU....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 140,  30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190,  80, 200},{ 340, 130,  20,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340,  10, 100, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 200,  80, 190},{ 340, 200, 200, 200, 200},{ 340,  80, 200, 140, 160},{ 340,  90, 200,  70, -110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220,  10, 140},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 230,  20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 220,  90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200, 100, -210, 110}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110,  60}}
-}
-},
-/* AU....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 160,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200,  90, 200},{ 340, 100, -20,  50, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30,  70, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160,  90},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340,  90, 200, 140, 170},{ 340,  50, 200,  30, -150}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240,  70, 200},{ 340, 200,  70, -250,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130,  80}}
-}
-},
-/* AU....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* UA....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 100, 200},{ 340, 190, 190,  90, 200},{ 340, 100, 100,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 240, 240, 130, 200},{ 340, 280, 220, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 100,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180,  70, 200},{ 340,  30, -70,  10, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200},{ 340, 180,  80, 160, 200},{ 340, 220, 120, 190, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 260, 200, 230},{ 340, 150, 190, 200, 160},{ 340,  60, 200, 200, 170},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 210},{ 340, 180, 220, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180}},
-{{ 340, 340, 340, 340, 340},{ 340,  60, 200, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -110,  30, 200,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180},{ 340,  40, 180, 200, 150},{ 340,  70, 120, 200,  90}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 140, 150},{ 340,  90, 200, 130,  40},{ 340,   0, 200,  40, 130},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 200, 170,  80},{ 340, 220, 200, 220, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150}},
-{{ 340, 340, 340, 340, 340},{ 340,   0, 200,  40, 130},{ 340, 200, 200, 200, 200},{ 340,  70, 200, 110, 120},{ 340,  10, 200, -30, -220}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150},{ 340, 160, 200, 120, -70},{ 340, 190, 200, 150, 150}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260,  20, 220},{ 340, 200, 190, -90, 110},{ 340, 200, 200,   0, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 240, -40, 150},{ 340, 200, 220,  40, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200,   0, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 240,   0, 190},{ 340, 200,  30, -350,  30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 210,  30, 120},{ 340, 200, 180, -200, 180},{ 340, 200, 120,  20,  30}}
-}
-},
-/* UA....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 110, 200},{ 340, 190, 190,  80, 200},{ 340,  10,  10, -90, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 180, 180,  80, 200},{ 340, 250, 190, 180, 200},{ 340, 200, 200, 200, 200},{ 340, 150,  90,  90, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  70,  70, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180,  70, 200},{ 340,   0, -100, -30, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 190, 190, 200},{ 340,  40, -60,  10, 200},{ 340, 210, 110, 190, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 270, 200, 240},{ 340, 140, 190, 200, 160},{ 340, -30, 110, 200,  80},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 140, 180, 200, 150},{ 340, 140, 190, 200, 160},{ 340, 200, 200, 200, 200},{ 340,  40,  90, 200,  60}},
-{{ 340, 340, 340, 340, 340},{ 340,  30, 170, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -150,   0, 200, -30}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 150, 190, 200, 160},{ 340, -110,  40, 200,  10},{ 340,  70, 110, 200,  80}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 150, 160},{ 340,  80, 200, 120,  30},{ 340, -90, 200, -50,  40},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340,  80, 200, 120,  30},{ 340, 180, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340,  90, 200,  80,  40}},
-{{ 340, 340, 340, 340, 340},{ 340, -30, 200,  10, 100},{ 340, 200, 200, 200, 200},{ 340,  70, 200, 110, 120},{ 340, -30, 200, -70, -260}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 200, 190, 140},{ 340,  10, 200, -30, -220},{ 340, 190, 200, 150, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  30, 230},{ 340, 200, 190, -90, 100},{ 340, 200, 110, -90, 110},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -100, 100},{ 340, 200, 190,  10, 100},{ 340, 200, 200, 200, 200},{ 340, 200,  90, -90,   0}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -30, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 240,   0, 190},{ 340, 200,   0, -390, -10}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 190,  10, 110},{ 340, 200,  40, -350,  30},{ 340, 200, 110,  10,  30}}
-}
-},
-/* UA....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130,  30, 110, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  90, 230, 200, 200},{ 340, 120, 170, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200,  70, -120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250,  70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 220},{ 340, 200, 130, -250, 130}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170,  70,  80}}
-}
-},
-/* UA....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100,   0,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  80, 220, 200, 190},{ 340, 150, 190, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170,  80},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340,  70, 200,  30, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 280,   0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 230},{ 340, 200, 100, -290,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190,  90, 110}}
-}
-},
-/* UA....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 150, 150,  50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130,  30, 110, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}},
-{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  90, 230, 200, 200},{ 340, 120, 170, 200, 140}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}},
-{{ 340, 340, 340, 340, 340},{ 340,  50, 200,  90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200,  70, -120}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250,  70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 250,  50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 220},{ 340, 200, 130, -250, 130}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170,  70,  80}}
-}
-},
-/* UA....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 170,  70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100,   0,  70, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}},
-{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200,  70}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340,  80, 220, 200, 190},{ 340, 150, 190, 200, 160}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170,  80},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}},
-{{ 340, 340, 340, 340, 340},{ 340,  70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340,  70, 200,  30, -160}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 280,   0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 270,  70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270,  30, 230},{ 340, 200, 100, -290,  90}},
-{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250,  70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190,  90, 110}}
-}
-},
-/* UA....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-},
-{ /* noPair */ {{{{0}}}},
-/* ??....CG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....GC */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....GU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....UG */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....AU */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....UA */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-},
-/* ??....?? */
-{{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-},
-{
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}},
-{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}
-}
-}
-}
-};
-
-const int energy_param::int22_H[8][8][5][5][5][5] = 
-{ /* noPair */ {{{{{0}}}}},
-{ /* noPair */ {{{{0}}}},
-/* CG.@@..CG */
-{ { { {  0, 0, 0, 0, 0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..CG */
-{ {  0, 0, 0, 0, 0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* CG.@C..CG */
-{ {  0, 0, 0, 0, 0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* CG.@G..CG */
-{ {  0, 0, 0, 0, 0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* CG.@U..CG */
-{ {  0, 0, 0, 0, 0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* CG.A@..CG */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..CG */
-{{  -50,-1029, -949,-1029,-1029},
-{-1079,-2058,-1978,-2058,-2058},
-{ -569,-1548,-1468,-1548,-1548},
-{ -989,-1968,-1888,-1968,-1968},
-{ -859,-1838,-1758,-1838,-1838}},
-/* CG.AC..CG */
-{{  -50,-1029, -949,-1029,-1029},
-{ -999,-1978,-1898,-1978,-1978},
-{ -499,-1478,-1398,-1478,-1478},
-{ -989,-1968,-1888,-1968,-1968},
-{ -789,-1768,-1688,-1768,-1768}},
-/* CG.AG..CG */
-{{  -50,-1029, -949,-1029,-1029},
-{-1079,-2058,-1978,-2058,-2058},
-{ -569,-1548,-1468,-1548,-1548},
-{ -989,-1968,-1888,-1968,-1968},
-{ -859,-1838,-1758,-1838,-1838}},
-/* CG.AU..CG */
-{{  -50,-1029, -949,-1029,-1029},
-{-1079,-2058,-1978,-2058,-2058},
-{ -719,-1698,-1618,-1698,-1698},
-{ -989,-1968,-1888,-1968,-1968},
-{ -909,-1888,-1808,-1888,-1888}}},
-/* CG.C@..CG */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..CG */
-{{  -50, -519, -449, -519, -669},
-{-1079,-1548,-1478,-1548,-1698},
-{ -569,-1038, -968,-1038,-1188},
-{ -989,-1458,-1388,-1458,-1608},
-{ -859,-1328,-1258,-1328,-1478}},
-/* CG.CC..CG */
-{{  -50, -519, -449, -519, -669},
-{ -999,-1468,-1398,-1468,-1618},
-{ -499, -968, -898, -968,-1118},
-{ -989,-1458,-1388,-1458,-1608},
-{ -789,-1258,-1188,-1258,-1408}},
-/* CG.CG..CG */
-{{  -50, -519, -449, -519, -669},
-{-1079,-1548,-1478,-1548,-1698},
-{ -569,-1038, -968,-1038,-1188},
-{ -989,-1458,-1388,-1458,-1608},
-{ -859,-1328,-1258,-1328,-1478}},
-/* CG.CU..CG */
-{{  -50, -519, -449, -519, -669},
-{-1079,-1548,-1478,-1548,-1698},
-{ -719,-1188,-1118,-1188,-1338},
-{ -989,-1458,-1388,-1458,-1608},
-{ -909,-1378,-1308,-1378,-1528}}},
-/* CG.G@..CG */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..CG */
-{{  -50, -939, -939, -939, -939},
-{-1079,-1968,-1968,-1968,-1968},
-{ -569,-1458,-1458,-1458,-1458},
-{ -989,-1878,-1878,-1878,-1878},
-{ -859,-1748,-1748,-1748,-1748}},
-/* CG.GC..CG */
-{{  -50, -939, -939, -939, -939},
-{ -999,-1888,-1888,-1888,-1888},
-{ -499,-1388,-1388,-1388,-1388},
-{ -989,-1878,-1878,-1878,-1878},
-{ -789,-1678,-1678,-1678,-1678}},
-/* CG.GG..CG */
-{{  -50, -939, -939, -939, -939},
-{-1079,-1968,-1968,-1968,-1968},
-{ -569,-1458,-1458,-1458,-1458},
-{ -989,-1878,-1878,-1878,-1878},
-{ -859,-1748,-1748,-1748,-1748}},
-/* CG.GU..CG */
-{{  -50, -939, -939, -939, -939},
-{-1079,-1968,-1968,-1968,-1968},
-{ -719,-1608,-1608,-1608,-1608},
-{ -989,-1878,-1878,-1878,-1878},
-{ -909,-1798,-1798,-1798,-1798}}},
-/* CG.U@..CG */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..CG */
-{{  -50, -809, -739, -809, -859},
-{-1079,-1838,-1768,-1838,-1888},
-{ -569,-1328,-1258,-1328,-1378},
-{ -989,-1748,-1678,-1748,-1798},
-{ -859,-1618,-1548,-1618,-1668}},
-/* CG.UC..CG */
-{{  -50, -809, -739, -809, -859},
-{ -999,-1758,-1688,-1758,-1808},
-{ -499,-1258,-1188,-1258,-1308},
-{ -989,-1748,-1678,-1748,-1798},
-{ -789,-1548,-1478,-1548,-1598}},
-/* CG.UG..CG */
-{{  -50, -809, -739, -809, -859},
-{-1079,-1838,-1768,-1838,-1888},
-{ -569,-1328,-1258,-1328,-1378},
-{ -989,-1748,-1678,-1748,-1798},
-{ -859,-1618,-1548,-1618,-1668}},
-/* CG.UU..CG */
-{{  -50, -809, -739, -809, -859},
-{-1079,-1838,-1768,-1838,-1888},
-{ -719,-1478,-1408,-1478,-1528},
-{ -989,-1748,-1678,-1748,-1798},
-{ -909,-1668,-1598,-1668,-1718}}}},
-/* CG.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* CG.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* CG.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* CG.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* CG.A@..GC */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..GC */
-{{  -50,-1029, -949,-1029,-1029},
-{ -569,-1548,-1468,-1548,-1548},
-{ -769,-1748,-1668,-1748,-1748},
-{ -759,-1738,-1658,-1738,-1738},
-{ -549,-1528,-1448,-1528,-1528}},
-/* CG.AC..GC */
-{{  -50,-1029, -949,-1029,-1029},
-{ -929,-1908,-1828,-1908,-1908},
-{ -359,-1338,-1258,-1338,-1338},
-{ -789,-1768,-1688,-1768,-1768},
-{ -549,-1528,-1448,-1528,-1528}},
-/* CG.AG..GC */
-{{  -50,-1029, -949,-1029,-1029},
-{ -609,-1588,-1508,-1588,-1588},
-{ -359,-1338,-1258,-1338,-1338},
-{ -669,-1648,-1568,-1648,-1648},
-{ -549,-1528,-1448,-1528,-1528}},
-/* CG.AU..GC */
-{{  -50,-1029, -949,-1029,-1029},
-{ -929,-1908,-1828,-1908,-1908},
-{ -439,-1418,-1338,-1418,-1418},
-{ -789,-1768,-1688,-1768,-1768},
-{ -619,-1598,-1518,-1598,-1598}}},
-/* CG.C@..GC */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..GC */
-{{  -50, -519, -449, -519, -669},
-{ -569,-1038, -968,-1038,-1188},
-{ -769,-1238,-1168,-1238,-1388},
-{ -759,-1228,-1158,-1228,-1378},
-{ -549,-1018, -948,-1018,-1168}},
-/* CG.CC..GC */
-{{  -50, -519, -449, -519, -669},
-{ -929,-1398,-1328,-1398,-1548},
-{ -359, -828, -758, -828, -978},
-{ -789,-1258,-1188,-1258,-1408},
-{ -549,-1018, -948,-1018,-1168}},
-/* CG.CG..GC */
-{{  -50, -519, -449, -519, -669},
-{ -609,-1078,-1008,-1078,-1228},
-{ -359, -828, -758, -828, -978},
-{ -669,-1138,-1068,-1138,-1288},
-{ -549,-1018, -948,-1018,-1168}},
-/* CG.CU..GC */
-{{  -50, -519, -449, -519, -669},
-{ -929,-1398,-1328,-1398,-1548},
-{ -439, -908, -838, -908,-1058},
-{ -789,-1258,-1188,-1258,-1408},
-{ -619,-1088,-1018,-1088,-1238}}},
-/* CG.G@..GC */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..GC */
-{{  -50, -939, -939, -939, -939},
-{ -569,-1458,-1458,-1458,-1458},
-{ -769,-1658,-1658,-1658,-1658},
-{ -759,-1648,-1648,-1648,-1648},
-{ -549,-1438,-1438,-1438,-1438}},
-/* CG.GC..GC */
-{{  -50, -939, -939, -939, -939},
-{ -929,-1818,-1818,-1818,-1818},
-{ -359,-1248,-1248,-1248,-1248},
-{ -789,-1678,-1678,-1678,-1678},
-{ -549,-1438,-1438,-1438,-1438}},
-/* CG.GG..GC */
-{{  -50, -939, -939, -939, -939},
-{ -609,-1498,-1498,-1498,-1498},
-{ -359,-1248,-1248,-1248,-1248},
-{ -669,-1558,-1558,-1558,-1558},
-{ -549,-1438,-1438,-1438,-1438}},
-/* CG.GU..GC */
-{{  -50, -939, -939, -939, -939},
-{ -929,-1818,-1818,-1818,-1818},
-{ -439,-1328,-1328,-1328,-1328},
-{ -789,-1678,-1678,-1678,-3080},
-{ -619,-1508,-1508,-1508,-1508}}},
-/* CG.U@..GC */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..GC */
-{{  -50, -809, -739, -809, -859},
-{ -569,-1328,-1258,-1328,-1378},
-{ -769,-1528,-1458,-1528,-1578},
-{ -759,-1518,-1448,-1518,-1568},
-{ -549,-1308,-1238,-1308,-1358}},
-/* CG.UC..GC */
-{{  -50, -809, -739, -809, -859},
-{ -929,-1688,-1618,-1688,-1738},
-{ -359,-1118,-1048,-1118,-1168},
-{ -789,-1548,-1478,-1548,-1598},
-{ -549,-1308,-1238,-1308,-1358}},
-/* CG.UG..GC */
-{{  -50, -809, -739, -809, -859},
-{ -609,-1368,-1298,-1368,-1418},
-{ -359,-1118,-1048,-1118,-1168},
-{ -669,-1428,-1358,-1428,-1478},
-{ -549,-1308,-1238,-1308,-1358}},
-/* CG.UU..GC */
-{{  -50, -809, -739, -809, -859},
-{ -929,-1688,-1618,-1688,-1738},
-{ -439,-1198,-1128,-1198,-1248},
-{ -789,-1548,-1478,-1548,-1598},
-{ -619,-1378,-1308,-1378,-1428}}}},
-/* CG.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* CG.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* CG.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* CG.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* CG.A@..GU */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..GU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -479,-1458,-1378,-1458,-1458},
-{ -309,-1288,-1208,-1288,-1288},
-{ -389,-1368,-1288,-1368,-1368},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AC..GU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AG..GU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AU..GU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}}},
-/* CG.C@..GU */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..GU */
-{{  -50, -519, -449, -519, -669},
-{ -479, -948, -878, -948,-1098},
-{ -309, -778, -708, -778, -928},
-{ -389, -858, -788, -858,-1008},
-{ -379, -848, -778, -848, -998}},
-/* CG.CC..GU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}},
-/* CG.CG..GU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}},
-/* CG.CU..GU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}}},
-/* CG.G@..GU */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..GU */
-{{  -50, -939, -939, -939, -939},
-{ -479,-1368,-1368,-1368,-1368},
-{ -309,-1198,-1198,-1198,-1198},
-{ -389,-1278,-1278,-1278,-1278},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GC..GU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GG..GU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GU..GU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}}},
-/* CG.U@..GU */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..GU */
-{{  -50, -809, -739, -809, -859},
-{ -479,-1238,-1168,-1238,-1288},
-{ -309,-1068, -998,-1068,-1118},
-{ -389,-1148,-1078,-1148,-1198},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UC..GU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UG..GU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UU..GU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}}}},
-/* CG.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* CG.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* CG.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* CG.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* CG.A@..UG */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..UG */
-{{  -50,-1029, -949,-1029,-1029},
-{ -769,-1748,-1668,-1748,-1748},
-{ -529,-1508,-1428,-1508,-1508},
-{ -709,-1688,-1608,-1688,-1688},
-{ -599,-1578,-1498,-1578,-1578}},
-/* CG.AC..UG */
-{{  -50,-1029, -949,-1029,-1029},
-{ -839,-1818,-1738,-1818,-1818},
-{ -529,-1508,-1428,-1508,-1508},
-{ -859,-1838,-1758,-1838,-1838},
-{ -489,-1468,-1388,-1468,-1468}},
-/* CG.AG..UG */
-{{  -50,-1029, -949,-1029,-1029},
-{-1009,-1988,-1908,-1988,-1988},
-{ -409,-1388,-1308,-1388,-1388},
-{ -969,-1948,-1868,-1948,-1948},
-{ -599,-1578,-1498,-1578,-1578}},
-/* CG.AU..UG */
-{{  -50,-1029, -949,-1029,-1029},
-{ -859,-1838,-1758,-1838,-1838},
-{ -529,-1508,-1428,-1508,-1508},
-{ -859,-1838,-1758,-1838,-1838},
-{ -409,-1388,-1308,-1388,-1388}}},
-/* CG.C@..UG */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..UG */
-{{  -50, -519, -449, -519, -669},
-{ -769,-1238,-1168,-1238,-1388},
-{ -529, -998, -928, -998,-1148},
-{ -709,-1178,-1108,-1178,-1328},
-{ -599,-1068, -998,-1068,-1218}},
-/* CG.CC..UG */
-{{  -50, -519, -449, -519, -669},
-{ -839,-1308,-1238,-1308,-1458},
-{ -529, -998, -928, -998,-1148},
-{ -859,-1328,-1258,-1328,-1478},
-{ -489, -958, -888, -958,-1108}},
-/* CG.CG..UG */
-{{  -50, -519, -449, -519, -669},
-{-1009,-1478,-1408,-1478,-1628},
-{ -409, -878, -808, -878,-1028},
-{ -969,-1438,-1368,-1438,-1588},
-{ -599,-1068, -998,-1068,-1218}},
-/* CG.CU..UG */
-{{  -50, -519, -449, -519, -669},
-{ -859,-1328,-1258,-1328,-1478},
-{ -529, -998, -928, -998,-1148},
-{ -859,-1328,-1258,-1328,-1478},
-{ -409, -878, -808, -878,-1028}}},
-/* CG.G@..UG */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..UG */
-{{  -50, -939, -939, -939, -939},
-{ -769,-1658,-1658,-1658,-1658},
-{ -529,-1418,-1418,-1418,-1418},
-{ -709,-1598,-1598,-1598,-1598},
-{ -599,-1488,-1488,-1488,-1488}},
-/* CG.GC..UG */
-{{  -50, -939, -939, -939, -939},
-{ -839,-1728,-1728,-1728,-1728},
-{ -529,-1418,-1418,-1418,-1418},
-{ -859,-1748,-1748,-1748,-1748},
-{ -489,-1378,-1378,-1378,-1378}},
-/* CG.GG..UG */
-{{  -50, -939, -939, -939, -939},
-{-1009,-1898,-1898,-1898,-1898},
-{ -409,-1298,-1298,-1298,-1298},
-{ -969,-1858,-1858,-1858,-1858},
-{ -599,-1488,-1488,-1488,-1488}},
-/* CG.GU..UG */
-{{  -50, -939, -939, -939, -939},
-{ -859,-1748,-1748,-1748,-1748},
-{ -529,-1418,-1418,-1418,-1418},
-{ -859,-1748,-1748,-1748,-1748},
-{ -409,-1298,-1298,-1298,-1298}}},
-/* CG.U@..UG */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..UG */
-{{  -50, -809, -739, -809, -859},
-{ -769,-1528,-1458,-1528,-1578},
-{ -529,-1288,-1218,-1288,-1338},
-{ -709,-1468,-1398,-1468,-1518},
-{ -599,-1358,-1288,-1358,-1408}},
-/* CG.UC..UG */
-{{  -50, -809, -739, -809, -859},
-{ -839,-1598,-1528,-1598,-1648},
-{ -529,-1288,-1218,-1288,-1338},
-{ -859,-1618,-1548,-1618,-1668},
-{ -489,-1248,-1178,-1248,-1298}},
-/* CG.UG..UG */
-{{  -50, -809, -739, -809, -859},
-{-1009,-1768,-1698,-1768,-1818},
-{ -409,-1168,-1098,-1168,-1218},
-{ -969,-1728,-1658,-1728,-1778},
-{ -599,-1358,-1288,-1358,-1408}},
-/* CG.UU..UG */
-{{  -50, -809, -739, -809, -859},
-{ -859,-1618,-1548,-1618,-1668},
-{ -529,-1288,-1218,-1288,-1338},
-{ -859,-1618,-1548,-1618,-1668},
-{ -409,-1168,-1098,-1168,-1218}}}},
-/* CG.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* CG.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* CG.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* CG.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* CG.A@..AU */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..AU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -479,-1458,-1378,-1458,-1458},
-{ -309,-1288,-1208,-1288,-1288},
-{ -389,-1368,-1288,-1368,-1368},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AC..AU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AG..AU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}},
-/* CG.AU..AU */
-{{  -50,-1029, -949,-1029,-1029},
-{ -649,-1628,-1548,-1628,-1628},
-{ -289,-1268,-1188,-1268,-1268},
-{ -739,-1718,-1638,-1718,-1718},
-{ -379,-1358,-1278,-1358,-1358}}},
-/* CG.C@..AU */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..AU */
-{{  -50, -519, -449, -519, -669},
-{ -479, -948, -878, -948,-1098},
-{ -309, -778, -708, -778, -928},
-{ -389, -858, -788, -858,-1008},
-{ -379, -848, -778, -848, -998}},
-/* CG.CC..AU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}},
-/* CG.CG..AU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}},
-/* CG.CU..AU */
-{{  -50, -519, -449, -519, -669},
-{ -649,-1118,-1048,-1118,-1268},
-{ -289, -758, -688, -758, -908},
-{ -739,-1208,-1138,-1208,-1358},
-{ -379, -848, -778, -848, -998}}},
-/* CG.G@..AU */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..AU */
-{{  -50, -939, -939, -939, -939},
-{ -479,-1368,-1368,-1368,-1368},
-{ -309,-1198,-1198,-1198,-1198},
-{ -389,-1278,-1278,-1278,-1278},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GC..AU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GG..AU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}},
-/* CG.GU..AU */
-{{  -50, -939, -939, -939, -939},
-{ -649,-1538,-1538,-1538,-1538},
-{ -289,-1178,-1178,-1178,-1178},
-{ -739,-1628,-1628,-1628,-1628},
-{ -379,-1268,-1268,-1268,-1268}}},
-/* CG.U@..AU */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..AU */
-{{  -50, -809, -739, -809, -859},
-{ -479,-1238,-1168,-1238,-1288},
-{ -309,-1068, -998,-1068,-1118},
-{ -389,-1148,-1078,-1148,-1198},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UC..AU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UG..AU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}},
-/* CG.UU..AU */
-{{  -50, -809, -739, -809, -859},
-{ -649,-1408,-1338,-1408,-1458},
-{ -289,-1048, -978,-1048,-1098},
-{ -739,-1498,-1428,-1498,-1548},
-{ -379,-1138,-1068,-1138,-1188}}}},
-/* CG.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* CG.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* CG.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* CG.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* CG.A@..UA */
-{{{  -50,-1029, -949,-1029,-1029},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA..UA */
-{{  -50,-1029, -949,-1029,-1029},
-{ -449,-1428,-1348,-1428,-1428},
-{ -479,-1458,-1378,-1458,-1458},
-{ -429,-1408,-1328,-1408,-1408},
-{ -329,-1308,-1228,-1308,-1308}},
-/* CG.AC..UA */
-{{  -50,-1029, -949,-1029,-1029},
-{ -679,-1658,-1578,-1658,-1658},
-{ -559,-1538,-1458,-1538,-1538},
-{ -729,-1708,-1628,-1708,-1708},
-{ -189,-1168,-1088,-1168,-1168}},
-/* CG.AG..UA */
-{{  -50,-1029, -949,-1029,-1029},
-{ -939,-1918,-1838,-1918,-1918},
-{ -249,-1228,-1148,-1228,-1228},
-{ -939,-1918,-1838,-1918,-1918},
-{ -329,-1308,-1228,-1308,-1308}},
-/* CG.AU..UA */
-{{  -50,-1029, -949,-1029,-1029},
-{ -639,-1618,-1538,-1618,-1618},
-{ -229,-1208,-1128,-1208,-1208},
-{ -729,-1708,-1628,-1708,-1708},
-{ -190,-1169,-1089,-1169,-1169}}},
-/* CG.C@..UA */
-{{{  -50, -519, -449, -519, -669},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA..UA */
-{{  -50, -519, -449, -519, -669},
-{ -449, -918, -848, -918,-1068},
-{ -479, -948, -878, -948,-1098},
-{ -429, -898, -828, -898,-1048},
-{ -329, -798, -728, -798, -948}},
-/* CG.CC..UA */
-{{  -50, -519, -449, -519, -669},
-{ -679,-1148,-1078,-1148,-1298},
-{ -559,-1028, -958,-1028,-1178},
-{ -729,-1198,-1128,-1198,-1348},
-{ -189, -658, -588, -658, -808}},
-/* CG.CG..UA */
-{{  -50, -519, -449, -519, -669},
-{ -939,-1408,-1338,-1408,-1558},
-{ -249, -718, -648, -718, -868},
-{ -939,-1408,-1338,-1408,-1558},
-{ -329, -798, -728, -798, -948}},
-/* CG.CU..UA */
-{{  -50, -519, -449, -519, -669},
-{ -639,-1108,-1038,-1108,-1258},
-{ -229, -698, -628, -698, -848},
-{ -729,-1198,-1128,-1198,-1348},
-{ -190, -659, -589, -659, -809}}},
-/* CG.G@..UA */
-{{{  -50, -939, -939, -939, -939},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA..UA */
-{{  -50, -939, -939, -939, -939},
-{ -449,-1338,-1338,-1338,-1338},
-{ -479,-1368,-1368,-1368,-1368},
-{ -429,-1318,-1318,-1318,-1318},
-{ -329,-1218,-1218,-1218,-1218}},
-/* CG.GC..UA */
-{{  -50, -939, -939, -939, -939},
-{ -679,-1568,-1568,-1568,-1568},
-{ -559,-1448,-1448,-1448,-1448},
-{ -729,-1618,-1618,-1618,-1618},
-{ -189,-1078,-1078,-1078,-1078}},
-/* CG.GG..UA */
-{{  -50, -939, -939, -939, -939},
-{ -939,-1828,-1828,-1828,-1828},
-{ -249,-1138,-1138,-1138,-1138},
-{ -939,-1828,-1828,-1828,-1828},
-{ -329,-1218,-1218,-1218,-1218}},
-/* CG.GU..UA */
-{{  -50, -939, -939, -939, -939},
-{ -639,-1528,-1528,-1528,-1528},
-{ -229,-1118,-1118,-1118,-1118},
-{ -729,-1618,-1618,-1618,-1618},
-{ -190,-1079,-1079,-1079,-1079}}},
-/* CG.U@..UA */
-{{{  -50, -809, -739, -809, -859},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA..UA */
-{{  -50, -809, -739, -809, -859},
-{ -449,-1208,-1138,-1208,-1258},
-{ -479,-1238,-1168,-1238,-1288},
-{ -429,-1188,-1118,-1188,-1238},
-{ -329,-1088,-1018,-1088,-1138}},
-/* CG.UC..UA */
-{{  -50, -809, -739, -809, -859},
-{ -679,-1438,-1368,-1438,-1488},
-{ -559,-1318,-1248,-1318,-1368},
-{ -729,-1488,-1418,-1488,-1538},
-{ -189, -948, -878, -948, -998}},
-/* CG.UG..UA */
-{{  -50, -809, -739, -809, -859},
-{ -939,-1698,-1628,-1698,-1748},
-{ -249,-1008, -938,-1008,-1058},
-{ -939,-1698,-1628,-1698,-1748},
-{ -329,-1088,-1018,-1088,-1138}},
-/* CG.UU..UA */
-{{  -50, -809, -739, -809, -859},
-{ -639,-1398,-1328,-1398,-1448},
-{ -229, -988, -918, -988,-1038},
-{ -729,-1488,-1418,-1488,-1538},
-{ -190, -949, -879, -949, -999}}}},
-/* CG.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* CG.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* CG.A@.. @ */
-{{{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AA.. @ */
-{{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AC.. @ */
-{{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AG.. @ */
-{{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}},
-/* CG.AU.. @ */
-{{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079},
-{ -100,-1079, -999,-1079,-1079}}},
-/* CG.C@.. @ */
-{{{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CA.. @ */
-{{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CC.. @ */
-{{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CG.. @ */
-{{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}},
-/* CG.CU.. @ */
-{{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719},
-{ -100, -569, -499, -569, -719}}},
-/* CG.G@.. @ */
-{{{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GA.. @ */
-{{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GC.. @ */
-{{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GG.. @ */
-{{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}},
-/* CG.GU.. @ */
-{{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989},
-{ -100, -989, -989, -989, -989}}},
-/* CG.U@.. @ */
-{{{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UA.. @ */
-{{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UC.. @ */
-{{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UG.. @ */
-{{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}},
-/* CG.UU.. @ */
-{{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909},
-{ -100, -859, -789, -859, -909}}}}},
-{ /* noPair */ {{{{0}}}},
-/* GC.@@..CG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* GC.@C..CG */
-{{    0,    0,    0,    0,    0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* GC.@G..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* GC.@U..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* GC.A@..CG */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..CG */
-{{  -50, -519, -879, -559, -879},
-{-1079,-1548,-1908,-1588,-1908},
-{ -569,-1038,-1398,-1078,-1398},
-{ -989,-1458,-1818,-1498,-1818},
-{ -859,-1328,-1688,-1368,-1688}},
-/* GC.AC..CG */
-{{  -50, -519, -879, -559, -879},
-{ -999,-1468,-1828,-1508,-1828},
-{ -499, -968,-1328,-1008,-1328},
-{ -989,-1458,-1818,-1498,-1818},
-{ -789,-1258,-1618,-1298,-1618}},
-/* GC.AG..CG */
-{{  -50, -519, -879, -559, -879},
-{-1079,-1548,-1908,-1588,-1908},
-{ -569,-1038,-1398,-1078,-1398},
-{ -989,-1458,-1818,-1498,-1818},
-{ -859,-1328,-1688,-1368,-1688}},
-/* GC.AU..CG */
-{{  -50, -519, -879, -559, -879},
-{-1079,-1548,-1908,-1588,-1908},
-{ -719,-1188,-1548,-1228,-1548},
-{ -989,-1458,-1818,-1498,-1818},
-{ -909,-1378,-1738,-1418,-1738}}},
-/* GC.C@..CG */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..CG */
-{{  -50, -719, -309, -309, -389},
-{-1079,-1748,-1338,-1338,-1418},
-{ -569,-1238, -828, -828, -908},
-{ -989,-1658,-1248,-1248,-1328},
-{ -859,-1528,-1118,-1118,-1198}},
-/* GC.CC..CG */
-{{  -50, -719, -309, -309, -389},
-{ -999,-1668,-1258,-1258,-1338},
-{ -499,-1168, -758, -758, -838},
-{ -989,-1658,-1248,-1248,-1328},
-{ -789,-1458,-1048,-1048,-1128}},
-/* GC.CG..CG */
-{{  -50, -719, -309, -309, -389},
-{-1079,-1748,-1338,-1338,-1418},
-{ -569,-1238, -828, -828, -908},
-{ -989,-1658,-1248,-1248,-1328},
-{ -859,-1528,-1118,-1118,-1198}},
-/* GC.CU..CG */
-{{  -50, -719, -309, -309, -389},
-{-1079,-1748,-1338,-1338,-1418},
-{ -719,-1388, -978, -978,-1058},
-{ -989,-1658,-1248,-1248,-1328},
-{ -909,-1578,-1168,-1168,-1248}}},
-/* GC.G@..CG */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..CG */
-{{  -50, -709, -739, -619, -739},
-{-1079,-1738,-1768,-1648,-1768},
-{ -569,-1228,-1258,-1138,-1258},
-{ -989,-1648,-1678,-1558,-1678},
-{ -859,-1518,-1548,-1428,-1548}},
-/* GC.GC..CG */
-{{  -50, -709, -739, -619, -739},
-{ -999,-1658,-1688,-1568,-1688},
-{ -499,-1158,-1188,-1068,-1188},
-{ -989,-1648,-1678,-1558,-1678},
-{ -789,-1448,-1478,-1358,-1478}},
-/* GC.GG..CG */
-{{  -50, -709, -739, -619, -739},
-{-1079,-1738,-1768,-1648,-1768},
-{ -569,-1228,-1258,-1138,-1258},
-{ -989,-1648,-1678,-1558,-1678},
-{ -859,-1518,-1548,-1428,-1548}},
-/* GC.GU..CG */
-{{  -50, -709, -739, -619, -739},
-{-1079,-1738,-1768,-1648,-1768},
-{ -719,-1378,-1408,-1288,-1408},
-{ -989,-1648,-1678,-1558,-3080},
-{ -909,-1568,-1598,-1478,-1598}}},
-/* GC.U@..CG */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..CG */
-{{  -50, -499, -499, -499, -569},
-{-1079,-1528,-1528,-1528,-1598},
-{ -569,-1018,-1018,-1018,-1088},
-{ -989,-1438,-1438,-1438,-1508},
-{ -859,-1308,-1308,-1308,-1378}},
-/* GC.UC..CG */
-{{  -50, -499, -499, -499, -569},
-{ -999,-1448,-1448,-1448,-1518},
-{ -499, -948, -948, -948,-1018},
-{ -989,-1438,-1438,-1438,-1508},
-{ -789,-1238,-1238,-1238,-1308}},
-/* GC.UG..CG */
-{{  -50, -499, -499, -499, -569},
-{-1079,-1528,-1528,-1528,-1598},
-{ -569,-1018,-1018,-1018,-1088},
-{ -989,-1438,-1438,-1438,-1508},
-{ -859,-1308,-1308,-1308,-1378}},
-/* GC.UU..CG */
-{{  -50, -499, -499, -499, -569},
-{-1079,-1528,-1528,-1528,-1598},
-{ -719,-1168,-1168,-1168,-1238},
-{ -989,-1438,-1438,-1438,-1508},
-{ -909,-1358,-1358,-1358,-1428}}}},
-/* GC.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* GC.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* GC.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* GC.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* GC.A@..GC */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..GC */
-{{  -50, -519, -879, -559, -879},
-{ -569,-1038,-1398,-1078,-1398},
-{ -769,-1238,-1598,-1278,-1598},
-{ -759,-1228,-1588,-1268,-1588},
-{ -549,-1018,-1378,-1058,-1378}},
-/* GC.AC..GC */
-{{  -50, -519, -879, -559, -879},
-{ -929,-1398,-1758,-1438,-1758},
-{ -359, -828,-1188, -868,-1188},
-{ -789,-1258,-1618,-1298,-1618},
-{ -549,-1018,-1378,-1058,-1378}},
-/* GC.AG..GC */
-{{  -50, -519, -879, -559, -879},
-{ -609,-1078,-1438,-1118,-1438},
-{ -359, -828,-1188, -868,-1188},
-{ -669,-1138,-1498,-1178,-1498},
-{ -549,-1018,-1378,-1058,-1378}},
-/* GC.AU..GC */
-{{  -50, -519, -879, -559, -879},
-{ -929,-1398,-1758,-1438,-1758},
-{ -439, -908,-1268, -948,-1268},
-{ -789,-1258,-1618,-1298,-1618},
-{ -619,-1088,-1448,-1128,-1448}}},
-/* GC.C@..GC */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..GC */
-{{  -50, -719, -309, -309, -389},
-{ -569,-1238, -828, -828, -908},
-{ -769,-1438,-1028,-1028,-1108},
-{ -759,-1428,-1018,-1018,-1098},
-{ -549,-1218, -808, -808, -888}},
-/* GC.CC..GC */
-{{  -50, -719, -309, -309, -389},
-{ -929,-1598,-1188,-1188,-1268},
-{ -359,-1028, -618, -618, -698},
-{ -789,-1458,-1048,-1048,-1128},
-{ -549,-1218, -808, -808, -888}},
-/* GC.CG..GC */
-{{  -50, -719, -309, -309, -389},
-{ -609,-1278, -868, -868, -948},
-{ -359,-1028, -618, -618, -698},
-{ -669,-1338, -928, -928,-1008},
-{ -549,-1218, -808, -808, -888}},
-/* GC.CU..GC */
-{{  -50, -719, -309, -309, -389},
-{ -929,-1598,-1188,-1188,-1268},
-{ -439,-1108, -698, -698, -778},
-{ -789,-1458,-1048,-1048,-1128},
-{ -619,-1288, -878, -878, -958}}},
-/* GC.G@..GC */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..GC */
-{{  -50, -709, -739, -619, -739},
-{ -569,-1228,-1258,-1138,-1258},
-{ -769,-1428,-1458,-1338,-1458},
-{ -759,-1418,-1448,-1328,-1448},
-{ -549,-1208,-1238,-1118,-1238}},
-/* GC.GC..GC */
-{{  -50, -709, -739, -619, -739},
-{ -929,-1588,-1618,-1498,-1618},
-{ -359,-1018,-1048, -928,-1048},
-{ -789,-1448,-1478,-1358,-1478},
-{ -549,-1208,-1238,-1118,-1238}},
-/* GC.GG..GC */
-{{  -50, -709, -739, -619, -739},
-{ -609,-1268,-1298,-1178,-1298},
-{ -359,-1018,-1048, -928,-1048},
-{ -669,-1328,-1358,-1238,-1358},
-{ -549,-1208,-1238,-1118,-1238}},
-/* GC.GU..GC */
-{{  -50, -709, -739, -619, -739},
-{ -929,-1588,-1618,-1498,-1618},
-{ -439,-1098,-1128,-1008,-1128},
-{ -789,-1448,-1478,-1358,-3080},
-{ -619,-1278,-1308,-1188,-1308}}},
-/* GC.U@..GC */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..GC */
-{{  -50, -499, -499, -499, -569},
-{ -569,-1018,-1018,-1018,-1088},
-{ -769,-1218,-1218,-1218,-1288},
-{ -759,-1208,-1208,-1208,-1278},
-{ -549, -998, -998, -998,-1068}},
-/* GC.UC..GC */
-{{  -50, -499, -499, -499, -569},
-{ -929,-1378,-1378,-1378,-1448},
-{ -359, -808, -808, -808, -878},
-{ -789,-1238,-1238,-1238,-1308},
-{ -549, -998, -998, -998,-1068}},
-/* GC.UG..GC */
-{{  -50, -499, -499, -499, -569},
-{ -609,-1058,-1058,-1058,-1128},
-{ -359, -808, -808, -808, -878},
-{ -669,-1118,-1118,-1118,-1188},
-{ -549, -998, -998, -998,-1068}},
-/* GC.UU..GC */
-{{  -50, -499, -499, -499, -569},
-{ -929,-1378,-1378,-1378,-1448},
-{ -439, -888, -888, -888, -958},
-{ -789,-1238,-1238,-1238,-1308},
-{ -619,-1068,-1068,-1068,-1138}}}},
-/* GC.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* GC.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GC.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GC.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* GC.A@..GU */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..GU */
-{{  -50, -519, -879, -559, -879},
-{ -479, -948,-1308, -988,-1308},
-{ -309, -778,-1138, -818,-1138},
-{ -389, -858,-1218, -898,-1218},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AC..GU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AG..GU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AU..GU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}}},
-/* GC.C@..GU */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..GU */
-{{  -50, -719, -309, -309, -389},
-{ -479,-1148, -738, -738, -818},
-{ -309, -978, -568, -568, -648},
-{ -389,-1058, -648, -648, -728},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CC..GU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CG..GU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CU..GU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}}},
-/* GC.G@..GU */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..GU */
-{{  -50, -709, -739, -619, -739},
-{ -479,-1138,-1168,-1048,-1168},
-{ -309, -968, -998, -878, -998},
-{ -389,-1048,-1078, -958,-1078},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GC..GU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GG..GU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GU..GU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}}},
-/* GC.U@..GU */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..GU */
-{{  -50, -499, -499, -499, -569},
-{ -479, -928, -928, -928, -998},
-{ -309, -758, -758, -758, -828},
-{ -389, -838, -838, -838, -908},
-{ -379, -828, -828, -828, -898}},
-/* GC.UC..GU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}},
-/* GC.UG..GU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}},
-/* GC.UU..GU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}}}},
-/* GC.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* GC.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* GC.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* GC.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* GC.A@..UG */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..UG */
-{{  -50, -519, -879, -559, -879},
-{ -769,-1238,-1598,-1278,-1598},
-{ -529, -998,-1358,-1038,-1358},
-{ -709,-1178,-1538,-1218,-1538},
-{ -599,-1068,-1428,-1108,-1428}},
-/* GC.AC..UG */
-{{  -50, -519, -879, -559, -879},
-{ -839,-1308,-1668,-1348,-1668},
-{ -529, -998,-1358,-1038,-1358},
-{ -859,-1328,-1688,-1368,-1688},
-{ -489, -958,-1318, -998,-1318}},
-/* GC.AG..UG */
-{{  -50, -519, -879, -559, -879},
-{-1009,-1478,-1838,-1518,-1838},
-{ -409, -878,-1238, -918,-1238},
-{ -969,-1438,-1798,-1478,-1798},
-{ -599,-1068,-1428,-1108,-1428}},
-/* GC.AU..UG */
-{{  -50, -519, -879, -559, -879},
-{ -859,-1328,-1688,-1368,-1688},
-{ -529, -998,-1358,-1038,-1358},
-{ -859,-1328,-1688,-1368,-1688},
-{ -409, -878,-1238, -918,-1238}}},
-/* GC.C@..UG */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..UG */
-{{  -50, -719, -309, -309, -389},
-{ -769,-1438,-1028,-1028,-1108},
-{ -529,-1198, -788, -788, -868},
-{ -709,-1378, -968, -968,-1048},
-{ -599,-1268, -858, -858, -938}},
-/* GC.CC..UG */
-{{  -50, -719, -309, -309, -389},
-{ -839,-1508,-1098,-1098,-1178},
-{ -529,-1198, -788, -788, -868},
-{ -859,-1528,-1118,-1118,-1198},
-{ -489,-1158, -748, -748, -828}},
-/* GC.CG..UG */
-{{  -50, -719, -309, -309, -389},
-{-1009,-1678,-1268,-1268,-1348},
-{ -409,-1078, -668, -668, -748},
-{ -969,-1638,-1228,-1228,-1308},
-{ -599,-1268, -858, -858, -938}},
-/* GC.CU..UG */
-{{  -50, -719, -309, -309, -389},
-{ -859,-1528,-1118,-1118,-1198},
-{ -529,-1198, -788, -788, -868},
-{ -859,-1528,-1118,-1118,-1198},
-{ -409,-1078, -668, -668, -748}}},
-/* GC.G@..UG */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..UG */
-{{  -50, -709, -739, -619, -739},
-{ -769,-1428,-1458,-1338,-1458},
-{ -529,-1188,-1218,-1098,-1218},
-{ -709,-1368,-1398,-1278,-1398},
-{ -599,-1258,-1288,-1168,-1288}},
-/* GC.GC..UG */
-{{  -50, -709, -739, -619, -739},
-{ -839,-1498,-1528,-1408,-1528},
-{ -529,-1188,-1218,-1098,-1218},
-{ -859,-1518,-1548,-1428,-1548},
-{ -489,-1148,-1178,-1058,-1178}},
-/* GC.GG..UG */
-{{  -50, -709, -739, -619, -739},
-{-1009,-1668,-1698,-1578,-1698},
-{ -409,-1068,-1098, -978,-1098},
-{ -969,-1628,-1658,-1538,-1658},
-{ -599,-1258,-1288,-1168,-1288}},
-/* GC.GU..UG */
-{{  -50, -709, -739, -619, -739},
-{ -859,-1518,-1548,-1428,-1548},
-{ -529,-1188,-1218,-1098,-1218},
-{ -859,-1518,-1548,-1428,-1548},
-{ -409,-1068,-1098, -978,-1098}}},
-/* GC.U@..UG */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..UG */
-{{  -50, -499, -499, -499, -569},
-{ -769,-1218,-1218,-1218,-1288},
-{ -529, -978, -978, -978,-1048},
-{ -709,-1158,-1158,-1158,-1228},
-{ -599,-1048,-1048,-1048,-1118}},
-/* GC.UC..UG */
-{{  -50, -499, -499, -499, -569},
-{ -839,-1288,-1288,-1288,-1358},
-{ -529, -978, -978, -978,-1048},
-{ -859,-1308,-1308,-1308,-1378},
-{ -489, -938, -938, -938,-1008}},
-/* GC.UG..UG */
-{{  -50, -499, -499, -499, -569},
-{-1009,-1458,-1458,-1458,-1528},
-{ -409, -858, -858, -858, -928},
-{ -969,-1418,-1418,-1418,-1488},
-{ -599,-1048,-1048,-1048,-1118}},
-/* GC.UU..UG */
-{{  -50, -499, -499, -499, -569},
-{ -859,-1308,-1308,-1308,-1378},
-{ -529, -978, -978, -978,-1048},
-{ -859,-1308,-1308,-1308,-1378},
-{ -409, -858, -858, -858, -928}}}},
-/* GC.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* GC.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GC.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GC.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* GC.A@..AU */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..AU */
-{{  -50, -519, -879, -559, -879},
-{ -479, -948,-1308, -988,-1308},
-{ -309, -778,-1138, -818,-1138},
-{ -389, -858,-1218, -898,-1218},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AC..AU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AG..AU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}},
-/* GC.AU..AU */
-{{  -50, -519, -879, -559, -879},
-{ -649,-1118,-1478,-1158,-1478},
-{ -289, -758,-1118, -798,-1118},
-{ -739,-1208,-1568,-1248,-1568},
-{ -379, -848,-1208, -888,-1208}}},
-/* GC.C@..AU */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..AU */
-{{  -50, -719, -309, -309, -389},
-{ -479,-1148, -738, -738, -818},
-{ -309, -978, -568, -568, -648},
-{ -389,-1058, -648, -648, -728},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CC..AU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CG..AU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}},
-/* GC.CU..AU */
-{{  -50, -719, -309, -309, -389},
-{ -649,-1318, -908, -908, -988},
-{ -289, -958, -548, -548, -628},
-{ -739,-1408, -998, -998,-1078},
-{ -379,-1048, -638, -638, -718}}},
-/* GC.G@..AU */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..AU */
-{{  -50, -709, -739, -619, -739},
-{ -479,-1138,-1168,-1048,-1168},
-{ -309, -968, -998, -878, -998},
-{ -389,-1048,-1078, -958,-1078},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GC..AU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GG..AU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}},
-/* GC.GU..AU */
-{{  -50, -709, -739, -619, -739},
-{ -649,-1308,-1338,-1218,-1338},
-{ -289, -948, -978, -858, -978},
-{ -739,-1398,-1428,-1308,-1428},
-{ -379,-1038,-1068, -948,-1068}}},
-/* GC.U@..AU */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..AU */
-{{  -50, -499, -499, -499, -569},
-{ -479, -928, -928, -928, -998},
-{ -309, -758, -758, -758, -828},
-{ -389, -838, -838, -838, -908},
-{ -379, -828, -828, -828, -898}},
-/* GC.UC..AU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}},
-/* GC.UG..AU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}},
-/* GC.UU..AU */
-{{  -50, -499, -499, -499, -569},
-{ -649,-1098,-1098,-1098,-1168},
-{ -289, -738, -738, -738, -808},
-{ -739,-1188,-1188,-1188,-1258},
-{ -379, -828, -828, -828, -898}}}},
-/* GC.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* GC.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* GC.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* GC.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* GC.A@..UA */
-{{{  -50, -519, -879, -559, -879},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA..UA */
-{{  -50, -519, -879, -559, -879},
-{ -449, -918,-1278, -958,-1278},
-{ -479, -948,-1308, -988,-1308},
-{ -429, -898,-1258, -938,-1258},
-{ -329, -798,-1158, -838,-1158}},
-/* GC.AC..UA */
-{{  -50, -519, -879, -559, -879},
-{ -679,-1148,-1508,-1188,-1508},
-{ -559,-1028,-1388,-1068,-1388},
-{ -729,-1198,-1558,-1238,-1558},
-{ -189, -658,-1018, -698,-1018}},
-/* GC.AG..UA */
-{{  -50, -519, -879, -559, -879},
-{ -939,-1408,-1768,-1448,-1768},
-{ -249, -718,-1078, -758,-1078},
-{ -939,-1408,-1768,-1448,-1768},
-{ -329, -798,-1158, -838,-1158}},
-/* GC.AU..UA */
-{{  -50, -519, -879, -559, -879},
-{ -639,-1108,-1468,-1148,-1468},
-{ -229, -698,-1058, -738,-1058},
-{ -729,-1198,-1558,-1238,-1558},
-{ -190, -659,-1019, -699,-1019}}},
-/* GC.C@..UA */
-{{{  -50, -719, -309, -309, -389},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA..UA */
-{{  -50, -719, -309, -309, -389},
-{ -449,-1118, -708, -708, -788},
-{ -479,-1148, -738, -738, -818},
-{ -429,-1098, -688, -688, -768},
-{ -329, -998, -588, -588, -668}},
-/* GC.CC..UA */
-{{  -50, -719, -309, -309, -389},
-{ -679,-1348, -938, -938,-1018},
-{ -559,-1228, -818, -818, -898},
-{ -729,-1398, -988, -988,-1068},
-{ -189, -858, -448, -448, -528}},
-/* GC.CG..UA */
-{{  -50, -719, -309, -309, -389},
-{ -939,-1608,-1198,-1198,-1278},
-{ -249, -918, -508, -508, -588},
-{ -939,-1608,-1198,-1198,-1278},
-{ -329, -998, -588, -588, -668}},
-/* GC.CU..UA */
-{{  -50, -719, -309, -309, -389},
-{ -639,-1308, -898, -898, -978},
-{ -229, -898, -488, -488, -568},
-{ -729,-1398, -988, -988,-1068},
-{ -190, -859, -449, -449, -529}}},
-/* GC.G@..UA */
-{{{  -50, -709, -739, -619, -739},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA..UA */
-{{  -50, -709, -739, -619, -739},
-{ -449,-1108,-1138,-1018,-1138},
-{ -479,-1138,-1168,-1048,-1168},
-{ -429,-1088,-1118, -998,-1118},
-{ -329, -988,-1018, -898,-1018}},
-/* GC.GC..UA */
-{{  -50, -709, -739, -619, -739},
-{ -679,-1338,-1368,-1248,-1368},
-{ -559,-1218,-1248,-1128,-1248},
-{ -729,-1388,-1418,-1298,-1418},
-{ -189, -848, -878, -758, -878}},
-/* GC.GG..UA */
-{{  -50, -709, -739, -619, -739},
-{ -939,-1598,-1628,-1508,-1628},
-{ -249, -908, -938, -818, -938},
-{ -939,-1598,-1628,-1508,-1628},
-{ -329, -988,-1018, -898,-1018}},
-/* GC.GU..UA */
-{{  -50, -709, -739, -619, -739},
-{ -639,-1298,-1328,-1208,-1328},
-{ -229, -888, -918, -798, -918},
-{ -729,-1388,-1418,-1298,-1418},
-{ -190, -849, -879, -759, -879}}},
-/* GC.U@..UA */
-{{{  -50, -499, -499, -499, -569},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA..UA */
-{{  -50, -499, -499, -499, -569},
-{ -449, -898, -898, -898, -968},
-{ -479, -928, -928, -928, -998},
-{ -429, -878, -878, -878, -948},
-{ -329, -778, -778, -778, -848}},
-/* GC.UC..UA */
-{{  -50, -499, -499, -499, -569},
-{ -679,-1128,-1128,-1128,-1198},
-{ -559,-1008,-1008,-1008,-1078},
-{ -729,-1178,-1178,-1178,-1248},
-{ -189, -638, -638, -638, -708}},
-/* GC.UG..UA */
-{{  -50, -499, -499, -499, -569},
-{ -939,-1388,-1388,-1388,-1458},
-{ -249, -698, -698, -698, -768},
-{ -939,-1388,-1388,-1388,-1458},
-{ -329, -778, -778, -778, -848}},
-/* GC.UU..UA */
-{{  -50, -499, -499, -499, -569},
-{ -639,-1088,-1088,-1088,-1158},
-{ -229, -678, -678, -678, -748},
-{ -729,-1178,-1178,-1178,-1248},
-{ -190, -639, -639, -639, -709}}}},
-/* GC.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GC.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* GC.A@.. @ */
-{{{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AA.. @ */
-{{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AC.. @ */
-{{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AG.. @ */
-{{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}},
-/* GC.AU.. @ */
-{{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929},
-{ -100, -569, -929, -609, -929}}},
-/* GC.C@.. @ */
-{{{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CA.. @ */
-{{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CC.. @ */
-{{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CG.. @ */
-{{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}},
-/* GC.CU.. @ */
-{{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439},
-{ -100, -769, -359, -359, -439}}},
-/* GC.G@.. @ */
-{{{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GA.. @ */
-{{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GC.. @ */
-{{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GG.. @ */
-{{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}},
-/* GC.GU.. @ */
-{{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789},
-{ -100, -759, -789, -669, -789}}},
-/* GC.U@.. @ */
-{{{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UA.. @ */
-{{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UC.. @ */
-{{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UG.. @ */
-{{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}},
-/* GC.UU.. @ */
-{{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619},
-{ -100, -549, -549, -549, -619}}}}},
-{ /* noPair */ {{{{0}}}},
-/* GU.@@..CG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* GU.@C..CG */
-{{    0,    0,    0,    0,    0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* GU.@G..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* GU.@U..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* GU.A@..CG */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -569, -948,-1118,-1118,-1118},
-{ -989,-1368,-1538,-1538,-1538},
-{ -859,-1238,-1408,-1408,-1408}},
-/* GU.AC..CG */
-{{  -50, -429, -599, -599, -599},
-{ -999,-1378,-1548,-1548,-1548},
-{ -499, -878,-1048,-1048,-1048},
-{ -989,-1368,-1538,-1538,-1538},
-{ -789,-1168,-1338,-1338,-1338}},
-/* GU.AG..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -569, -948,-1118,-1118,-1118},
-{ -989,-1368,-1538,-1538,-1538},
-{ -859,-1238,-1408,-1408,-1408}},
-/* GU.AU..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -719,-1098,-1268,-1268,-1268},
-{ -989,-1368,-1538,-1538,-1538},
-{ -909,-1288,-1458,-1458,-1458}}},
-/* GU.C@..CG */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -569, -778, -758, -758, -758},
-{ -989,-1198,-1178,-1178,-1178},
-{ -859,-1068,-1048,-1048,-1048}},
-/* GU.CC..CG */
-{{  -50, -259, -239, -239, -239},
-{ -999,-1208,-1188,-1188,-1188},
-{ -499, -708, -688, -688, -688},
-{ -989,-1198,-1178,-1178,-1178},
-{ -789, -998, -978, -978, -978}},
-/* GU.CG..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -569, -778, -758, -758, -758},
-{ -989,-1198,-1178,-1178,-1178},
-{ -859,-1068,-1048,-1048,-1048}},
-/* GU.CU..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -719, -928, -908, -908, -908},
-{ -989,-1198,-1178,-1178,-1178},
-{ -909,-1118,-1098,-1098,-1098}}},
-/* GU.G@..CG */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -569, -858,-1208,-1208,-1208},
-{ -989,-1278,-1628,-1628,-1628},
-{ -859,-1148,-1498,-1498,-1498}},
-/* GU.GC..CG */
-{{  -50, -339, -689, -689, -689},
-{ -999,-1288,-1638,-1638,-1638},
-{ -499, -788,-1138,-1138,-1138},
-{ -989,-1278,-1628,-1628,-1628},
-{ -789,-1078,-1428,-1428,-1428}},
-/* GU.GG..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -569, -858,-1208,-1208,-1208},
-{ -989,-1278,-1628,-1628,-1628},
-{ -859,-1148,-1498,-1498,-1498}},
-/* GU.GU..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -719,-1008,-1358,-1358,-1358},
-{ -989,-1278,-1628,-1628,-1628},
-{ -909,-1198,-1548,-1548,-1548}}},
-/* GU.U@..CG */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -569, -848, -848, -848, -848},
-{ -989,-1268,-1268,-1268,-1268},
-{ -859,-1138,-1138,-1138,-1138}},
-/* GU.UC..CG */
-{{  -50, -329, -329, -329, -329},
-{ -999,-1278,-1278,-1278,-1278},
-{ -499, -778, -778, -778, -778},
-{ -989,-1268,-1268,-1268,-1268},
-{ -789,-1068,-1068,-1068,-1068}},
-/* GU.UG..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -569, -848, -848, -848, -848},
-{ -989,-1268,-1268,-1268,-1268},
-{ -859,-1138,-1138,-1138,-1138}},
-/* GU.UU..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -719, -998, -998, -998, -998},
-{ -989,-1268,-1268,-1268,-1268},
-{ -909,-1188,-1188,-1188,-1188}}}},
-/* GU.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* GU.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* GU.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* GU.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* GU.A@..GC */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..GC */
-{{  -50, -429, -599, -599, -599},
-{ -569, -948,-1118,-1118,-1118},
-{ -769,-1148,-1318,-1318,-1318},
-{ -759,-1138,-1308,-1308,-1308},
-{ -549, -928,-1098,-1098,-1098}},
-/* GU.AC..GC */
-{{  -50, -429, -599, -599, -599},
-{ -929,-1308,-1478,-1478,-1478},
-{ -359, -738, -908, -908, -908},
-{ -789,-1168,-1338,-1338,-1338},
-{ -549, -928,-1098,-1098,-1098}},
-/* GU.AG..GC */
-{{  -50, -429, -599, -599, -599},
-{ -609, -988,-1158,-1158,-1158},
-{ -359, -738, -908, -908, -908},
-{ -669,-1048,-1218,-1218,-1218},
-{ -549, -928,-1098,-1098,-1098}},
-/* GU.AU..GC */
-{{  -50, -429, -599, -599, -599},
-{ -929,-1308,-1478,-1478,-1478},
-{ -439, -818, -988, -988, -988},
-{ -789,-1168,-1338,-1338,-1338},
-{ -619, -998,-1168,-1168,-1168}}},
-/* GU.C@..GC */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..GC */
-{{  -50, -259, -239, -239, -239},
-{ -569, -778, -758, -758, -758},
-{ -769, -978, -958, -958, -958},
-{ -759, -968, -948, -948, -948},
-{ -549, -758, -738, -738, -738}},
-/* GU.CC..GC */
-{{  -50, -259, -239, -239, -239},
-{ -929,-1138,-1118,-1118,-1118},
-{ -359, -568, -548, -548, -548},
-{ -789, -998, -978, -978, -978},
-{ -549, -758, -738, -738, -738}},
-/* GU.CG..GC */
-{{  -50, -259, -239, -239, -239},
-{ -609, -818, -798, -798, -798},
-{ -359, -568, -548, -548, -548},
-{ -669, -878, -858, -858, -858},
-{ -549, -758, -738, -738, -738}},
-/* GU.CU..GC */
-{{  -50, -259, -239, -239, -239},
-{ -929,-1138,-1118,-1118,-1118},
-{ -439, -648, -628, -628, -628},
-{ -789, -998, -978, -978, -978},
-{ -619, -828, -808, -808, -808}}},
-/* GU.G@..GC */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..GC */
-{{  -50, -339, -689, -689, -689},
-{ -569, -858,-1208,-1208,-1208},
-{ -769,-1058,-1408,-1408,-1408},
-{ -759,-1048,-1398,-1398,-1398},
-{ -549, -838,-1188,-1188,-1188}},
-/* GU.GC..GC */
-{{  -50, -339, -689, -689, -689},
-{ -929,-1218,-1568,-1568,-1568},
-{ -359, -648, -998, -998, -998},
-{ -789,-1078,-1428,-1428,-1428},
-{ -549, -838,-1188,-1188,-1188}},
-/* GU.GG..GC */
-{{  -50, -339, -689, -689, -689},
-{ -609, -898,-1248,-1248,-1248},
-{ -359, -648, -998, -998, -998},
-{ -669, -958,-1308,-1308,-1308},
-{ -549, -838,-1188,-1188,-1188}},
-/* GU.GU..GC */
-{{  -50, -339, -689, -689, -689},
-{ -929,-1218,-1568,-1568,-1568},
-{ -439, -728,-1078,-1078,-1078},
-{ -789,-1078,-1428,-1428,-1428},
-{ -619, -908,-1258,-1258,-1258}}},
-/* GU.U@..GC */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..GC */
-{{  -50, -329, -329, -329, -329},
-{ -569, -848, -848, -848, -848},
-{ -769,-1048,-1048,-1048,-1048},
-{ -759,-1038,-1038,-1038,-1038},
-{ -549, -828, -828, -828, -828}},
-/* GU.UC..GC */
-{{  -50, -329, -329, -329, -329},
-{ -929,-1208,-1208,-1208,-1208},
-{ -359, -638, -638, -638, -638},
-{ -789,-1068,-1068,-1068,-1068},
-{ -549, -828, -828, -828, -828}},
-/* GU.UG..GC */
-{{  -50, -329, -329, -329, -329},
-{ -609, -888, -888, -888, -888},
-{ -359, -638, -638, -638, -638},
-{ -669, -948, -948, -948, -948},
-{ -549, -828, -828, -828, -828}},
-/* GU.UU..GC */
-{{  -50, -329, -329, -329, -329},
-{ -929,-1208,-1208,-1208,-1208},
-{ -439, -718, -718, -718, -718},
-{ -789,-1068,-1068,-1068,-1068},
-{ -619, -898, -898, -898, -898}}}},
-/* GU.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* GU.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GU.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GU.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* GU.A@..GU */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..GU */
-{{  -50, -429, -599, -599, -599},
-{ -479, -858,-1028,-1028,-1028},
-{ -309, -688, -858, -858, -858},
-{ -389, -768, -938, -938, -938},
-{ -379, -758, -928, -928, -928}},
-/* GU.AC..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* GU.AG..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* GU.AU..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}}},
-/* GU.C@..GU */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..GU */
-{{  -50, -259, -239, -239, -239},
-{ -479, -688, -668, -668, -668},
-{ -309, -518, -498, -498, -498},
-{ -389, -598, -578, -578, -578},
-{ -379, -588, -568, -568, -568}},
-/* GU.CC..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* GU.CG..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* GU.CU..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}}},
-/* GU.G@..GU */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..GU */
-{{  -50, -339, -689, -689, -689},
-{ -479, -768,-1118,-1118,-1118},
-{ -309, -598, -948, -948, -948},
-{ -389, -678,-1028,-1028,-1028},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GC..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GG..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GU..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}}},
-/* GU.U@..GU */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..GU */
-{{  -50, -329, -329, -329, -329},
-{ -479, -758, -758, -758, -758},
-{ -309, -588, -588, -588, -588},
-{ -389, -668, -668, -668, -668},
-{ -379, -658, -658, -658, -658}},
-/* GU.UC..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* GU.UG..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* GU.UU..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}}}},
-/* GU.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* GU.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* GU.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* GU.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* GU.A@..UG */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..UG */
-{{  -50, -429, -599, -599, -599},
-{ -769,-1148,-1318,-1318,-1318},
-{ -529, -908,-1078,-1078,-1078},
-{ -709,-1088,-1258,-1258,-1258},
-{ -599, -978,-1148,-1148,-1148}},
-/* GU.AC..UG */
-{{  -50, -429, -599, -599, -599},
-{ -839,-1218,-1388,-1388,-1388},
-{ -529, -908,-1078,-1078,-1078},
-{ -859,-1238,-1408,-1408,-1408},
-{ -489, -868,-1038,-1038,-1038}},
-/* GU.AG..UG */
-{{  -50, -429, -599, -599, -599},
-{-1009,-1388,-1558,-1558,-1558},
-{ -409, -788, -958, -958, -958},
-{ -969,-1348,-1518,-1518,-1518},
-{ -599, -978,-1148,-1148,-1148}},
-/* GU.AU..UG */
-{{  -50, -429, -599, -599, -599},
-{ -859,-1238,-1408,-1408,-1408},
-{ -529, -908,-1078,-1078,-1078},
-{ -859,-1238,-1408,-1408,-1408},
-{ -409, -788, -958, -958, -958}}},
-/* GU.C@..UG */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..UG */
-{{  -50, -259, -239, -239, -239},
-{ -769, -978, -958, -958, -958},
-{ -529, -738, -718, -718, -718},
-{ -709, -918, -898, -898, -898},
-{ -599, -808, -788, -788, -788}},
-/* GU.CC..UG */
-{{  -50, -259, -239, -239, -239},
-{ -839,-1048,-1028,-1028,-1028},
-{ -529, -738, -718, -718, -718},
-{ -859,-1068,-1048,-1048,-1048},
-{ -489, -698, -678, -678, -678}},
-/* GU.CG..UG */
-{{  -50, -259, -239, -239, -239},
-{-1009,-1218,-1198,-1198,-1198},
-{ -409, -618, -598, -598, -598},
-{ -969,-1178,-1158,-1158,-1158},
-{ -599, -808, -788, -788, -788}},
-/* GU.CU..UG */
-{{  -50, -259, -239, -239, -239},
-{ -859,-1068,-1048,-1048,-1048},
-{ -529, -738, -718, -718, -718},
-{ -859,-1068,-1048,-1048,-1048},
-{ -409, -618, -598, -598, -598}}},
-/* GU.G@..UG */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..UG */
-{{  -50, -339, -689, -689, -689},
-{ -769,-1058,-1408,-1408,-1408},
-{ -529, -818,-1168,-1168,-1168},
-{ -709, -998,-1348,-1348,-1348},
-{ -599, -888,-1238,-1238,-1238}},
-/* GU.GC..UG */
-{{  -50, -339, -689, -689, -689},
-{ -839,-1128,-1478,-1478,-1478},
-{ -529, -818,-1168,-1168,-1168},
-{ -859,-1148,-1498,-1498,-1498},
-{ -489, -778,-1128,-1128,-1128}},
-/* GU.GG..UG */
-{{  -50, -339, -689, -689, -689},
-{-1009,-1298,-1648,-1648,-1648},
-{ -409, -698,-1048,-1048,-1048},
-{ -969,-1258,-1608,-1608,-1608},
-{ -599, -888,-1238,-1238,-1238}},
-/* GU.GU..UG */
-{{  -50, -339, -689, -689, -689},
-{ -859,-1148,-1498,-1498,-1498},
-{ -529, -818,-1168,-1168,-1168},
-{ -859,-1148,-1498,-1498,-1498},
-{ -409, -698,-1048,-1048,-1048}}},
-/* GU.U@..UG */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..UG */
-{{  -50, -329, -329, -329, -329},
-{ -769,-1048,-1048,-1048,-1048},
-{ -529, -808, -808, -808, -808},
-{ -709, -988, -988, -988, -988},
-{ -599, -878, -878, -878, -878}},
-/* GU.UC..UG */
-{{  -50, -329, -329, -329, -329},
-{ -839,-1118,-1118,-1118,-1118},
-{ -529, -808, -808, -808, -808},
-{ -859,-1138,-1138,-1138,-1138},
-{ -489, -768, -768, -768, -768}},
-/* GU.UG..UG */
-{{  -50, -329, -329, -329, -329},
-{-1009,-1288,-1288,-1288,-1288},
-{ -409, -688, -688, -688, -688},
-{ -969,-1248,-1248,-1248,-1248},
-{ -599, -878, -878, -878, -878}},
-/* GU.UU..UG */
-{{  -50, -329, -329, -329, -329},
-{ -859,-1138,-1138,-1138,-1138},
-{ -529, -808, -808, -808, -808},
-{ -859,-1138,-1138,-1138,-1138},
-{ -409, -688, -688, -688, -688}}}},
-/* GU.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* GU.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GU.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* GU.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* GU.A@..AU */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..AU */
-{{  -50, -429, -599, -599, -599},
-{ -479, -858,-1028,-1028,-1028},
-{ -309, -688, -858, -858, -858},
-{ -389, -768, -938, -938, -938},
-{ -379, -758, -928, -928, -928}},
-/* GU.AC..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* GU.AG..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* GU.AU..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}}},
-/* GU.C@..AU */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..AU */
-{{  -50, -259, -239, -239, -239},
-{ -479, -688, -668, -668, -668},
-{ -309, -518, -498, -498, -498},
-{ -389, -598, -578, -578, -578},
-{ -379, -588, -568, -568, -568}},
-/* GU.CC..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* GU.CG..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* GU.CU..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}}},
-/* GU.G@..AU */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..AU */
-{{  -50, -339, -689, -689, -689},
-{ -479, -768,-1118,-1118,-1118},
-{ -309, -598, -948, -948, -948},
-{ -389, -678,-1028,-1028,-1028},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GC..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GG..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* GU.GU..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}}},
-/* GU.U@..AU */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..AU */
-{{  -50, -329, -329, -329, -329},
-{ -479, -758, -758, -758, -758},
-{ -309, -588, -588, -588, -588},
-{ -389, -668, -668, -668, -668},
-{ -379, -658, -658, -658, -658}},
-/* GU.UC..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* GU.UG..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* GU.UU..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}}}},
-/* GU.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* GU.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* GU.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* GU.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* GU.A@..UA */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA..UA */
-{{  -50, -429, -599, -599, -599},
-{ -449, -828, -998, -998, -998},
-{ -479, -858,-1028,-1028,-1028},
-{ -429, -808, -978, -978, -978},
-{ -329, -708, -878, -878, -878}},
-/* GU.AC..UA */
-{{  -50, -429, -599, -599, -599},
-{ -679,-1058,-1228,-1228,-1228},
-{ -559, -938,-1108,-1108,-1108},
-{ -729,-1108,-1278,-1278,-1278},
-{ -189, -568, -738, -738, -738}},
-/* GU.AG..UA */
-{{  -50, -429, -599, -599, -599},
-{ -939,-1318,-1488,-1488,-1488},
-{ -249, -628, -798, -798, -798},
-{ -939,-1318,-1488,-1488,-1488},
-{ -329, -708, -878, -878, -878}},
-/* GU.AU..UA */
-{{  -50, -429, -599, -599, -599},
-{ -639,-1018,-1188,-1188,-1188},
-{ -229, -608, -778, -778, -778},
-{ -729,-1108,-1278,-1278,-1278},
-{ -190, -569, -739, -739, -739}}},
-/* GU.C@..UA */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA..UA */
-{{  -50, -259, -239, -239, -239},
-{ -449, -658, -638, -638, -638},
-{ -479, -688, -668, -668, -668},
-{ -429, -638, -618, -618, -618},
-{ -329, -538, -518, -518, -518}},
-/* GU.CC..UA */
-{{  -50, -259, -239, -239, -239},
-{ -679, -888, -868, -868, -868},
-{ -559, -768, -748, -748, -748},
-{ -729, -938, -918, -918, -918},
-{ -189, -398, -378, -378, -378}},
-/* GU.CG..UA */
-{{  -50, -259, -239, -239, -239},
-{ -939,-1148,-1128,-1128,-1128},
-{ -249, -458, -438, -438, -438},
-{ -939,-1148,-1128,-1128,-1128},
-{ -329, -538, -518, -518, -518}},
-/* GU.CU..UA */
-{{  -50, -259, -239, -239, -239},
-{ -639, -848, -828, -828, -828},
-{ -229, -438, -418, -418, -418},
-{ -729, -938, -918, -918, -918},
-{ -190, -399, -379, -379, -379}}},
-/* GU.G@..UA */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA..UA */
-{{  -50, -339, -689, -689, -689},
-{ -449, -738,-1088,-1088,-1088},
-{ -479, -768,-1118,-1118,-1118},
-{ -429, -718,-1068,-1068,-1068},
-{ -329, -618, -968, -968, -968}},
-/* GU.GC..UA */
-{{  -50, -339, -689, -689, -689},
-{ -679, -968,-1318,-1318,-1318},
-{ -559, -848,-1198,-1198,-1198},
-{ -729,-1018,-1368,-1368,-1368},
-{ -189, -478, -828, -828, -828}},
-/* GU.GG..UA */
-{{  -50, -339, -689, -689, -689},
-{ -939,-1228,-1578,-1578,-1578},
-{ -249, -538, -888, -888, -888},
-{ -939,-1228,-1578,-1578,-1578},
-{ -329, -618, -968, -968, -968}},
-/* GU.GU..UA */
-{{  -50, -339, -689, -689, -689},
-{ -639, -928,-1278,-1278,-1278},
-{ -229, -518, -868, -868, -868},
-{ -729,-1018,-1368,-1368,-1368},
-{ -190, -479, -829, -829, -829}}},
-/* GU.U@..UA */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA..UA */
-{{  -50, -329, -329, -329, -329},
-{ -449, -728, -728, -728, -728},
-{ -479, -758, -758, -758, -758},
-{ -429, -708, -708, -708, -708},
-{ -329, -608, -608, -608, -608}},
-/* GU.UC..UA */
-{{  -50, -329, -329, -329, -329},
-{ -679, -958, -958, -958, -958},
-{ -559, -838, -838, -838, -838},
-{ -729,-1008,-1008,-1008,-1008},
-{ -189, -468, -468, -468, -468}},
-/* GU.UG..UA */
-{{  -50, -329, -329, -329, -329},
-{ -939,-1218,-1218,-1218,-1218},
-{ -249, -528, -528, -528, -528},
-{ -939,-1218,-1218,-1218,-1218},
-{ -329, -608, -608, -608, -608}},
-/* GU.UU..UA */
-{{  -50, -329, -329, -329, -329},
-{ -639, -918, -918, -918, -918},
-{ -229, -508, -508, -508, -508},
-{ -729,-1008,-1008,-1008,-1008},
-{ -190, -469, -469, -469, -469}}}},
-/* GU.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* GU.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* GU.A@.. @ */
-{{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AA.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AC.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AG.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* GU.AU.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}}},
-/* GU.C@.. @ */
-{{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CA.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CC.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CG.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* GU.CU.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}}},
-/* GU.G@.. @ */
-{{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GA.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GC.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GG.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* GU.GU.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}}},
-/* GU.U@.. @ */
-{{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UA.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UC.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UG.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* GU.UU.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}}}}},
-{ /* noPair */ {{{{0}}}},
-/* UG.@@..CG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* UG.@C..CG */
-{{    0,    0,    0,    0,    0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* UG.@G..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* UG.@U..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* UG.A@..CG */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..CG */
-{{  -50, -719, -789, -959, -809},
-{-1079,-1748,-1818,-1988,-1838},
-{ -569,-1238,-1308,-1478,-1328},
-{ -989,-1658,-1728,-1898,-1748},
-{ -859,-1528,-1598,-1768,-1618}},
-/* UG.AC..CG */
-{{  -50, -719, -789, -959, -809},
-{ -999,-1668,-1738,-1908,-1758},
-{ -499,-1168,-1238,-1408,-1258},
-{ -989,-1658,-1728,-1898,-1748},
-{ -789,-1458,-1528,-1698,-1548}},
-/* UG.AG..CG */
-{{  -50, -719, -789, -959, -809},
-{-1079,-1748,-1818,-1988,-1838},
-{ -569,-1238,-1308,-1478,-1328},
-{ -989,-1658,-1728,-1898,-1748},
-{ -859,-1528,-1598,-1768,-1618}},
-/* UG.AU..CG */
-{{  -50, -719, -789, -959, -809},
-{-1079,-1748,-1818,-1988,-1838},
-{ -719,-1388,-1458,-1628,-1478},
-{ -989,-1658,-1728,-1898,-1748},
-{ -909,-1578,-1648,-1818,-1668}}},
-/* UG.C@..CG */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..CG */
-{{  -50, -479, -479, -359, -479},
-{-1079,-1508,-1508,-1388,-1508},
-{ -569, -998, -998, -878, -998},
-{ -989,-1418,-1418,-1298,-1418},
-{ -859,-1288,-1288,-1168,-1288}},
-/* UG.CC..CG */
-{{  -50, -479, -479, -359, -479},
-{ -999,-1428,-1428,-1308,-1428},
-{ -499, -928, -928, -808, -928},
-{ -989,-1418,-1418,-1298,-1418},
-{ -789,-1218,-1218,-1098,-1218}},
-/* UG.CG..CG */
-{{  -50, -479, -479, -359, -479},
-{-1079,-1508,-1508,-1388,-1508},
-{ -569, -998, -998, -878, -998},
-{ -989,-1418,-1418,-1298,-1418},
-{ -859,-1288,-1288,-1168,-1288}},
-/* UG.CU..CG */
-{{  -50, -479, -479, -359, -479},
-{-1079,-1508,-1508,-1388,-1508},
-{ -719,-1148,-1148,-1028,-1148},
-{ -989,-1418,-1418,-1298,-1418},
-{ -909,-1338,-1338,-1218,-1338}}},
-/* UG.G@..CG */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..CG */
-{{  -50, -659, -809, -919, -809},
-{-1079,-1688,-1838,-1948,-1838},
-{ -569,-1178,-1328,-1438,-1328},
-{ -989,-1598,-1748,-1858,-1748},
-{ -859,-1468,-1618,-1728,-1618}},
-/* UG.GC..CG */
-{{  -50, -659, -809, -919, -809},
-{ -999,-1608,-1758,-1868,-1758},
-{ -499,-1108,-1258,-1368,-1258},
-{ -989,-1598,-1748,-1858,-1748},
-{ -789,-1398,-1548,-1658,-1548}},
-/* UG.GG..CG */
-{{  -50, -659, -809, -919, -809},
-{-1079,-1688,-1838,-1948,-1838},
-{ -569,-1178,-1328,-1438,-1328},
-{ -989,-1598,-1748,-1858,-1748},
-{ -859,-1468,-1618,-1728,-1618}},
-/* UG.GU..CG */
-{{  -50, -659, -809, -919, -809},
-{-1079,-1688,-1838,-1948,-1838},
-{ -719,-1328,-1478,-1588,-1478},
-{ -989,-1598,-1748,-1858,-1748},
-{ -909,-1518,-1668,-1778,-1668}}},
-/* UG.U@..CG */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..CG */
-{{  -50, -549, -439, -549, -359},
-{-1079,-1578,-1468,-1578,-1388},
-{ -569,-1068, -958,-1068, -878},
-{ -989,-1488,-1378,-1488,-1298},
-{ -859,-1358,-1248,-1358,-1168}},
-/* UG.UC..CG */
-{{  -50, -549, -439, -549, -359},
-{ -999,-1498,-1388,-1498,-1308},
-{ -499, -998, -888, -998, -808},
-{ -989,-1488,-1378,-1488,-1298},
-{ -789,-1288,-1178,-1288,-1098}},
-/* UG.UG..CG */
-{{  -50, -549, -439, -549, -359},
-{-1079,-1578,-1468,-1578,-1388},
-{ -569,-1068, -958,-1068, -878},
-{ -989,-1488,-1378,-1488,-1298},
-{ -859,-1358,-1248,-1358,-1168}},
-/* UG.UU..CG */
-{{  -50, -549, -439, -549, -359},
-{-1079,-1578,-1468,-1578,-1388},
-{ -719,-1218,-1108,-1218,-1028},
-{ -989,-1488,-1378,-1488,-1298},
-{ -909,-1408,-1298,-1408,-1218}}}},
-/* UG.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* UG.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* UG.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* UG.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* UG.A@..GC */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..GC */
-{{  -50, -719, -789, -959, -809},
-{ -569,-1238,-1308,-1478,-1328},
-{ -769,-1438,-1508,-1678,-1528},
-{ -759,-1428,-1498,-1668,-1518},
-{ -549,-1218,-1288,-1458,-1308}},
-/* UG.AC..GC */
-{{  -50, -719, -789, -959, -809},
-{ -929,-1598,-1668,-1838,-1688},
-{ -359,-1028,-1098,-1268,-1118},
-{ -789,-1458,-1528,-1698,-1548},
-{ -549,-1218,-1288,-1458,-1308}},
-/* UG.AG..GC */
-{{  -50, -719, -789, -959, -809},
-{ -609,-1278,-1348,-1518,-1368},
-{ -359,-1028,-1098,-1268,-1118},
-{ -669,-1338,-1408,-1578,-1428},
-{ -549,-1218,-1288,-1458,-1308}},
-/* UG.AU..GC */
-{{  -50, -719, -789, -959, -809},
-{ -929,-1598,-1668,-1838,-1688},
-{ -439,-1108,-1178,-1348,-1198},
-{ -789,-1458,-1528,-1698,-1548},
-{ -619,-1288,-1358,-1528,-1378}}},
-/* UG.C@..GC */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..GC */
-{{  -50, -479, -479, -359, -479},
-{ -569, -998, -998, -878, -998},
-{ -769,-1198,-1198,-1078,-1198},
-{ -759,-1188,-1188,-1068,-1188},
-{ -549, -978, -978, -858, -978}},
-/* UG.CC..GC */
-{{  -50, -479, -479, -359, -479},
-{ -929,-1358,-1358,-1238,-1358},
-{ -359, -788, -788, -668, -788},
-{ -789,-1218,-1218,-1098,-1218},
-{ -549, -978, -978, -858, -978}},
-/* UG.CG..GC */
-{{  -50, -479, -479, -359, -479},
-{ -609,-1038,-1038, -918,-1038},
-{ -359, -788, -788, -668, -788},
-{ -669,-1098,-1098, -978,-1098},
-{ -549, -978, -978, -858, -978}},
-/* UG.CU..GC */
-{{  -50, -479, -479, -359, -479},
-{ -929,-1358,-1358,-1238,-1358},
-{ -439, -868, -868, -748, -868},
-{ -789,-1218,-1218,-1098,-1218},
-{ -619,-1048,-1048, -928,-1048}}},
-/* UG.G@..GC */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..GC */
-{{  -50, -659, -809, -919, -809},
-{ -569,-1178,-1328,-1438,-1328},
-{ -769,-1378,-1528,-1638,-1528},
-{ -759,-1368,-1518,-1628,-1518},
-{ -549,-1158,-1308,-1418,-1308}},
-/* UG.GC..GC */
-{{  -50, -659, -809, -919, -809},
-{ -929,-1538,-1688,-1798,-1688},
-{ -359, -968,-1118,-1228,-1118},
-{ -789,-1398,-1548,-1658,-1548},
-{ -549,-1158,-1308,-1418,-1308}},
-/* UG.GG..GC */
-{{  -50, -659, -809, -919, -809},
-{ -609,-1218,-1368,-1478,-1368},
-{ -359, -968,-1118,-1228,-1118},
-{ -669,-1278,-1428,-1538,-1428},
-{ -549,-1158,-1308,-1418,-1308}},
-/* UG.GU..GC */
-{{  -50, -659, -809, -919, -809},
-{ -929,-1538,-1688,-1798,-1688},
-{ -439,-1048,-1198,-1308,-1198},
-{ -789,-1398,-1548,-1658,-1548},
-{ -619,-1228,-1378,-1488,-1378}}},
-/* UG.U@..GC */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..GC */
-{{  -50, -549, -439, -549, -359},
-{ -569,-1068, -958,-1068, -878},
-{ -769,-1268,-1158,-1268,-1078},
-{ -759,-1258,-1148,-1258,-1068},
-{ -549,-1048, -938,-1048, -858}},
-/* UG.UC..GC */
-{{  -50, -549, -439, -549, -359},
-{ -929,-1428,-1318,-1428,-1238},
-{ -359, -858, -748, -858, -668},
-{ -789,-1288,-1178,-1288,-1098},
-{ -549,-1048, -938,-1048, -858}},
-/* UG.UG..GC */
-{{  -50, -549, -439, -549, -359},
-{ -609,-1108, -998,-1108, -918},
-{ -359, -858, -748, -858, -668},
-{ -669,-1168,-1058,-1168, -978},
-{ -549,-1048, -938,-1048, -858}},
-/* UG.UU..GC */
-{{  -50, -549, -439, -549, -359},
-{ -929,-1428,-1318,-1428,-1238},
-{ -439, -938, -828, -938, -748},
-{ -789,-1288,-1178,-1288,-1098},
-{ -619,-1118,-1008,-1118, -928}}}},
-/* UG.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* UG.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UG.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UG.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* UG.A@..GU */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..GU */
-{{  -50, -719, -789, -959, -809},
-{ -479,-1148,-1218,-1388,-1238},
-{ -309, -978,-1048,-1218,-1068},
-{ -389,-1058,-1128,-1298,-1148},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AC..GU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AG..GU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AU..GU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}}},
-/* UG.C@..GU */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..GU */
-{{  -50, -479, -479, -359, -479},
-{ -479, -908, -908, -788, -908},
-{ -309, -738, -738, -618, -738},
-{ -389, -818, -818, -698, -818},
-{ -379, -808, -808, -688, -808}},
-/* UG.CC..GU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}},
-/* UG.CG..GU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}},
-/* UG.CU..GU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}}},
-/* UG.G@..GU */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..GU */
-{{  -50, -659, -809, -919, -809},
-{ -479,-1088,-1238,-1348,-1238},
-{ -309, -918,-1068,-1178,-1068},
-{ -389, -998,-1148,-1258,-1148},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GC..GU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GG..GU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GU..GU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}}},
-/* UG.U@..GU */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..GU */
-{{  -50, -549, -439, -549, -359},
-{ -479, -978, -868, -978, -788},
-{ -309, -808, -698, -808, -618},
-{ -389, -888, -778, -888, -698},
-{ -379, -878, -768, -878, -688}},
-/* UG.UC..GU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}},
-/* UG.UG..GU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}},
-/* UG.UU..GU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}}}},
-/* UG.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* UG.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* UG.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* UG.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* UG.A@..UG */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..UG */
-{{  -50, -719, -789, -959, -809},
-{ -769,-1438,-1508,-1678,-1528},
-{ -529,-1198,-1268,-1438,-1288},
-{ -709,-1378,-1448,-1618,-1468},
-{ -599,-1268,-1338,-1508,-1358}},
-/* UG.AC..UG */
-{{  -50, -719, -789, -959, -809},
-{ -839,-1508,-1578,-1748,-1598},
-{ -529,-1198,-1268,-1438,-1288},
-{ -859,-1528,-1598,-1768,-1618},
-{ -489,-1158,-1228,-1398,-1248}},
-/* UG.AG..UG */
-{{  -50, -719, -789, -959, -809},
-{-1009,-1678,-1748,-1918,-1768},
-{ -409,-1078,-1148,-1318,-1168},
-{ -969,-1638,-1708,-1878,-1728},
-{ -599,-1268,-1338,-1508,-1358}},
-/* UG.AU..UG */
-{{  -50, -719, -789, -959, -809},
-{ -859,-1528,-1598,-1768,-1618},
-{ -529,-1198,-1268,-1438,-1288},
-{ -859,-1528,-1598,-1768,-1618},
-{ -409,-1078,-1148,-1318,-1168}}},
-/* UG.C@..UG */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..UG */
-{{  -50, -479, -479, -359, -479},
-{ -769,-1198,-1198,-1078,-1198},
-{ -529, -958, -958, -838, -958},
-{ -709,-1138,-1138,-1018,-1138},
-{ -599,-1028,-1028, -908,-1028}},
-/* UG.CC..UG */
-{{  -50, -479, -479, -359, -479},
-{ -839,-1268,-1268,-1148,-1268},
-{ -529, -958, -958, -838, -958},
-{ -859,-1288,-1288,-1168,-1288},
-{ -489, -918, -918, -798, -918}},
-/* UG.CG..UG */
-{{  -50, -479, -479, -359, -479},
-{-1009,-1438,-1438,-1318,-1438},
-{ -409, -838, -838, -718, -838},
-{ -969,-1398,-1398,-1278,-1398},
-{ -599,-1028,-1028, -908,-1028}},
-/* UG.CU..UG */
-{{  -50, -479, -479, -359, -479},
-{ -859,-1288,-1288,-1168,-1288},
-{ -529, -958, -958, -838, -958},
-{ -859,-1288,-1288,-1168,-1288},
-{ -409, -838, -838, -718, -838}}},
-/* UG.G@..UG */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..UG */
-{{  -50, -659, -809, -919, -809},
-{ -769,-1378,-1528,-1638,-1528},
-{ -529,-1138,-1288,-1398,-1288},
-{ -709,-1318,-1468,-1578,-1468},
-{ -599,-1208,-1358,-1468,-1358}},
-/* UG.GC..UG */
-{{  -50, -659, -809, -919, -809},
-{ -839,-1448,-1598,-1708,-1598},
-{ -529,-1138,-1288,-1398,-1288},
-{ -859,-1468,-1618,-1728,-1618},
-{ -489,-1098,-1248,-1358,-1248}},
-/* UG.GG..UG */
-{{  -50, -659, -809, -919, -809},
-{-1009,-1618,-1768,-1878,-1768},
-{ -409,-1018,-1168,-1278,-1168},
-{ -969,-1578,-1728,-1838,-1728},
-{ -599,-1208,-1358,-1468,-1358}},
-/* UG.GU..UG */
-{{  -50, -659, -809, -919, -809},
-{ -859,-1468,-1618,-1728,-1618},
-{ -529,-1138,-1288,-1398,-1288},
-{ -859,-1468,-1618,-1728,-1618},
-{ -409,-1018,-1168,-1278,-1168}}},
-/* UG.U@..UG */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..UG */
-{{  -50, -549, -439, -549, -359},
-{ -769,-1268,-1158,-1268,-1078},
-{ -529,-1028, -918,-1028, -838},
-{ -709,-1208,-1098,-1208,-1018},
-{ -599,-1098, -988,-1098, -908}},
-/* UG.UC..UG */
-{{  -50, -549, -439, -549, -359},
-{ -839,-1338,-1228,-1338,-1148},
-{ -529,-1028, -918,-1028, -838},
-{ -859,-1358,-1248,-1358,-1168},
-{ -489, -988, -878, -988, -798}},
-/* UG.UG..UG */
-{{  -50, -549, -439, -549, -359},
-{-1009,-1508,-1398,-1508,-1318},
-{ -409, -908, -798, -908, -718},
-{ -969,-1468,-1358,-1468,-1278},
-{ -599,-1098, -988,-1098, -908}},
-/* UG.UU..UG */
-{{  -50, -549, -439, -549, -359},
-{ -859,-1358,-1248,-1358,-1168},
-{ -529,-1028, -918,-1028, -838},
-{ -859,-1358,-1248,-1358,-1168},
-{ -409, -908, -798, -908, -718}}}},
-/* UG.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* UG.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UG.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UG.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* UG.A@..AU */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..AU */
-{{  -50, -719, -789, -959, -809},
-{ -479,-1148,-1218,-1388,-1238},
-{ -309, -978,-1048,-1218,-1068},
-{ -389,-1058,-1128,-1298,-1148},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AC..AU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AG..AU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}},
-/* UG.AU..AU */
-{{  -50, -719, -789, -959, -809},
-{ -649,-1318,-1388,-1558,-1408},
-{ -289, -958,-1028,-1198,-1048},
-{ -739,-1408,-1478,-1648,-1498},
-{ -379,-1048,-1118,-1288,-1138}}},
-/* UG.C@..AU */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..AU */
-{{  -50, -479, -479, -359, -479},
-{ -479, -908, -908, -788, -908},
-{ -309, -738, -738, -618, -738},
-{ -389, -818, -818, -698, -818},
-{ -379, -808, -808, -688, -808}},
-/* UG.CC..AU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}},
-/* UG.CG..AU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}},
-/* UG.CU..AU */
-{{  -50, -479, -479, -359, -479},
-{ -649,-1078,-1078, -958,-1078},
-{ -289, -718, -718, -598, -718},
-{ -739,-1168,-1168,-1048,-1168},
-{ -379, -808, -808, -688, -808}}},
-/* UG.G@..AU */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..AU */
-{{  -50, -659, -809, -919, -809},
-{ -479,-1088,-1238,-1348,-1238},
-{ -309, -918,-1068,-1178,-1068},
-{ -389, -998,-1148,-1258,-1148},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GC..AU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GG..AU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}},
-/* UG.GU..AU */
-{{  -50, -659, -809, -919, -809},
-{ -649,-1258,-1408,-1518,-1408},
-{ -289, -898,-1048,-1158,-1048},
-{ -739,-1348,-1498,-1608,-1498},
-{ -379, -988,-1138,-1248,-1138}}},
-/* UG.U@..AU */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..AU */
-{{  -50, -549, -439, -549, -359},
-{ -479, -978, -868, -978, -788},
-{ -309, -808, -698, -808, -618},
-{ -389, -888, -778, -888, -698},
-{ -379, -878, -768, -878, -688}},
-/* UG.UC..AU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}},
-/* UG.UG..AU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}},
-/* UG.UU..AU */
-{{  -50, -549, -439, -549, -359},
-{ -649,-1148,-1038,-1148, -958},
-{ -289, -788, -678, -788, -598},
-{ -739,-1238,-1128,-1238,-1048},
-{ -379, -878, -768, -878, -688}}}},
-/* UG.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* UG.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* UG.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* UG.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* UG.A@..UA */
-{{{  -50, -719, -789, -959, -809},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA..UA */
-{{  -50, -719, -789, -959, -809},
-{ -449,-1118,-1188,-1358,-1208},
-{ -479,-1148,-1218,-1388,-1238},
-{ -429,-1098,-1168,-1338,-1188},
-{ -329, -998,-1068,-1238,-1088}},
-/* UG.AC..UA */
-{{  -50, -719, -789, -959, -809},
-{ -679,-1348,-1418,-1588,-1438},
-{ -559,-1228,-1298,-1468,-1318},
-{ -729,-1398,-1468,-1638,-1488},
-{ -189, -858, -928,-1098, -948}},
-/* UG.AG..UA */
-{{  -50, -719, -789, -959, -809},
-{ -939,-1608,-1678,-1848,-1698},
-{ -249, -918, -988,-1158,-1008},
-{ -939,-1608,-1678,-1848,-1698},
-{ -329, -998,-1068,-1238,-1088}},
-/* UG.AU..UA */
-{{  -50, -719, -789, -959, -809},
-{ -639,-1308,-1378,-1548,-1398},
-{ -229, -898, -968,-1138, -988},
-{ -729,-1398,-1468,-1638,-1488},
-{ -190, -859, -929,-1099, -949}}},
-/* UG.C@..UA */
-{{{  -50, -479, -479, -359, -479},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA..UA */
-{{  -50, -479, -479, -359, -479},
-{ -449, -878, -878, -758, -878},
-{ -479, -908, -908, -788, -908},
-{ -429, -858, -858, -738, -858},
-{ -329, -758, -758, -638, -758}},
-/* UG.CC..UA */
-{{  -50, -479, -479, -359, -479},
-{ -679,-1108,-1108, -988,-1108},
-{ -559, -988, -988, -868, -988},
-{ -729,-1158,-1158,-1038,-1158},
-{ -189, -618, -618, -498, -618}},
-/* UG.CG..UA */
-{{  -50, -479, -479, -359, -479},
-{ -939,-1368,-1368,-1248,-1368},
-{ -249, -678, -678, -558, -678},
-{ -939,-1368,-1368,-1248,-1368},
-{ -329, -758, -758, -638, -758}},
-/* UG.CU..UA */
-{{  -50, -479, -479, -359, -479},
-{ -639,-1068,-1068, -948,-1068},
-{ -229, -658, -658, -538, -658},
-{ -729,-1158,-1158,-1038,-1158},
-{ -190, -619, -619, -499, -619}}},
-/* UG.G@..UA */
-{{{  -50, -659, -809, -919, -809},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA..UA */
-{{  -50, -659, -809, -919, -809},
-{ -449,-1058,-1208,-1318,-1208},
-{ -479,-1088,-1238,-1348,-1238},
-{ -429,-1038,-1188,-1298,-1188},
-{ -329, -938,-1088,-1198,-1088}},
-/* UG.GC..UA */
-{{  -50, -659, -809, -919, -809},
-{ -679,-1288,-1438,-1548,-1438},
-{ -559,-1168,-1318,-1428,-1318},
-{ -729,-1338,-1488,-1598,-1488},
-{ -189, -798, -948,-1058, -948}},
-/* UG.GG..UA */
-{{  -50, -659, -809, -919, -809},
-{ -939,-1548,-1698,-1808,-1698},
-{ -249, -858,-1008,-1118,-1008},
-{ -939,-1548,-1698,-1808,-1698},
-{ -329, -938,-1088,-1198,-1088}},
-/* UG.GU..UA */
-{{  -50, -659, -809, -919, -809},
-{ -639,-1248,-1398,-1508,-1398},
-{ -229, -838, -988,-1098, -988},
-{ -729,-1338,-1488,-1598,-1488},
-{ -190, -799, -949,-1059, -949}}},
-/* UG.U@..UA */
-{{{  -50, -549, -439, -549, -359},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA..UA */
-{{  -50, -549, -439, -549, -359},
-{ -449, -948, -838, -948, -758},
-{ -479, -978, -868, -978, -788},
-{ -429, -928, -818, -928, -738},
-{ -329, -828, -718, -828, -638}},
-/* UG.UC..UA */
-{{  -50, -549, -439, -549, -359},
-{ -679,-1178,-1068,-1178, -988},
-{ -559,-1058, -948,-1058, -868},
-{ -729,-1228,-1118,-1228,-1038},
-{ -189, -688, -578, -688, -498}},
-/* UG.UG..UA */
-{{  -50, -549, -439, -549, -359},
-{ -939,-1438,-1328,-1438,-1248},
-{ -249, -748, -638, -748, -558},
-{ -939,-1438,-1328,-1438,-1248},
-{ -329, -828, -718, -828, -638}},
-/* UG.UU..UA */
-{{  -50, -549, -439, -549, -359},
-{ -639,-1138,-1028,-1138, -948},
-{ -229, -728, -618, -728, -538},
-{ -729,-1228,-1118,-1228,-1038},
-{ -190, -689, -579, -689, -499}}}},
-/* UG.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UG.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* UG.A@.. @ */
-{{{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AA.. @ */
-{{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AC.. @ */
-{{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AG.. @ */
-{{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}},
-/* UG.AU.. @ */
-{{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859},
-{ -100, -769, -839,-1009, -859}}},
-/* UG.C@.. @ */
-{{{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CA.. @ */
-{{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CC.. @ */
-{{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CG.. @ */
-{{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}},
-/* UG.CU.. @ */
-{{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529},
-{ -100, -529, -529, -409, -529}}},
-/* UG.G@.. @ */
-{{{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GA.. @ */
-{{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GC.. @ */
-{{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GG.. @ */
-{{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}},
-/* UG.GU.. @ */
-{{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859},
-{ -100, -709, -859, -969, -859}}},
-/* UG.U@.. @ */
-{{{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UA.. @ */
-{{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UC.. @ */
-{{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UG.. @ */
-{{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}},
-/* UG.UU.. @ */
-{{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409},
-{ -100, -599, -489, -599, -409}}}}},
-{ /* noPair */ {{{{0}}}},
-/* AU.@@..CG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* AU.@C..CG */
-{{    0,    0,    0,    0,    0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* AU.@G..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* AU.@U..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* AU.A@..CG */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -569, -948,-1118,-1118,-1118},
-{ -989,-1368,-1538,-1538,-1538},
-{ -859,-1238,-1408,-1408,-1408}},
-/* AU.AC..CG */
-{{  -50, -429, -599, -599, -599},
-{ -999,-1378,-1548,-1548,-1548},
-{ -499, -878,-1048,-1048,-1048},
-{ -989,-1368,-1538,-1538,-1538},
-{ -789,-1168,-1338,-1338,-1338}},
-/* AU.AG..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -569, -948,-1118,-1118,-1118},
-{ -989,-1368,-1538,-1538,-1538},
-{ -859,-1238,-1408,-1408,-1408}},
-/* AU.AU..CG */
-{{  -50, -429, -599, -599, -599},
-{-1079,-1458,-1628,-1628,-1628},
-{ -719,-1098,-1268,-1268,-1268},
-{ -989,-1368,-1538,-1538,-1538},
-{ -909,-1288,-1458,-1458,-1458}}},
-/* AU.C@..CG */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -569, -778, -758, -758, -758},
-{ -989,-1198,-1178,-1178,-1178},
-{ -859,-1068,-1048,-1048,-1048}},
-/* AU.CC..CG */
-{{  -50, -259, -239, -239, -239},
-{ -999,-1208,-1188,-1188,-1188},
-{ -499, -708, -688, -688, -688},
-{ -989,-1198,-1178,-1178,-1178},
-{ -789, -998, -978, -978, -978}},
-/* AU.CG..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -569, -778, -758, -758, -758},
-{ -989,-1198,-1178,-1178,-1178},
-{ -859,-1068,-1048,-1048,-1048}},
-/* AU.CU..CG */
-{{  -50, -259, -239, -239, -239},
-{-1079,-1288,-1268,-1268,-1268},
-{ -719, -928, -908, -908, -908},
-{ -989,-1198,-1178,-1178,-1178},
-{ -909,-1118,-1098,-1098,-1098}}},
-/* AU.G@..CG */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -569, -858,-1208,-1208,-1208},
-{ -989,-1278,-1628,-1628,-1628},
-{ -859,-1148,-1498,-1498,-1498}},
-/* AU.GC..CG */
-{{  -50, -339, -689, -689, -689},
-{ -999,-1288,-1638,-1638,-1638},
-{ -499, -788,-1138,-1138,-1138},
-{ -989,-1278,-1628,-1628,-1628},
-{ -789,-1078,-1428,-1428,-1428}},
-/* AU.GG..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -569, -858,-1208,-1208,-1208},
-{ -989,-1278,-1628,-1628,-1628},
-{ -859,-1148,-1498,-1498,-1498}},
-/* AU.GU..CG */
-{{  -50, -339, -689, -689, -689},
-{-1079,-1368,-1718,-1718,-1718},
-{ -719,-1008,-1358,-1358,-1358},
-{ -989,-1278,-1628,-1628,-1628},
-{ -909,-1198,-1548,-1548,-1548}}},
-/* AU.U@..CG */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -569, -848, -848, -848, -848},
-{ -989,-1268,-1268,-1268,-1268},
-{ -859,-1138,-1138,-1138,-1138}},
-/* AU.UC..CG */
-{{  -50, -329, -329, -329, -329},
-{ -999,-1278,-1278,-1278,-1278},
-{ -499, -778, -778, -778, -778},
-{ -989,-1268,-1268,-1268,-1268},
-{ -789,-1068,-1068,-1068,-1068}},
-/* AU.UG..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -569, -848, -848, -848, -848},
-{ -989,-1268,-1268,-1268,-1268},
-{ -859,-1138,-1138,-1138,-1138}},
-/* AU.UU..CG */
-{{  -50, -329, -329, -329, -329},
-{-1079,-1358,-1358,-1358,-1358},
-{ -719, -998, -998, -998, -998},
-{ -989,-1268,-1268,-1268,-1268},
-{ -909,-1188,-1188,-1188,-1188}}}},
-/* AU.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* AU.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* AU.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* AU.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* AU.A@..GC */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..GC */
-{{  -50, -429, -599, -599, -599},
-{ -569, -948,-1118,-1118,-1118},
-{ -769,-1148,-1318,-1318,-1318},
-{ -759,-1138,-1308,-1308,-1308},
-{ -549, -928,-1098,-1098,-1098}},
-/* AU.AC..GC */
-{{  -50, -429, -599, -599, -599},
-{ -929,-1308,-1478,-1478,-1478},
-{ -359, -738, -908, -908, -908},
-{ -789,-1168,-1338,-1338,-1338},
-{ -549, -928,-1098,-1098,-1098}},
-/* AU.AG..GC */
-{{  -50, -429, -599, -599, -599},
-{ -609, -988,-1158,-1158,-1158},
-{ -359, -738, -908, -908, -908},
-{ -669,-1048,-1218,-1218,-1218},
-{ -549, -928,-1098,-1098,-1098}},
-/* AU.AU..GC */
-{{  -50, -429, -599, -599, -599},
-{ -929,-1308,-1478,-1478,-1478},
-{ -439, -818, -988, -988, -988},
-{ -789,-1168,-1338,-1338,-1338},
-{ -619, -998,-1168,-1168,-1168}}},
-/* AU.C@..GC */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..GC */
-{{  -50, -259, -239, -239, -239},
-{ -569, -778, -758, -758, -758},
-{ -769, -978, -958, -958, -958},
-{ -759, -968, -948, -948, -948},
-{ -549, -758, -738, -738, -738}},
-/* AU.CC..GC */
-{{  -50, -259, -239, -239, -239},
-{ -929,-1138,-1118,-1118,-1118},
-{ -359, -568, -548, -548, -548},
-{ -789, -998, -978, -978, -978},
-{ -549, -758, -738, -738, -738}},
-/* AU.CG..GC */
-{{  -50, -259, -239, -239, -239},
-{ -609, -818, -798, -798, -798},
-{ -359, -568, -548, -548, -548},
-{ -669, -878, -858, -858, -858},
-{ -549, -758, -738, -738, -738}},
-/* AU.CU..GC */
-{{  -50, -259, -239, -239, -239},
-{ -929,-1138,-1118,-1118,-1118},
-{ -439, -648, -628, -628, -628},
-{ -789, -998, -978, -978, -978},
-{ -619, -828, -808, -808, -808}}},
-/* AU.G@..GC */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..GC */
-{{  -50, -339, -689, -689, -689},
-{ -569, -858,-1208,-1208,-1208},
-{ -769,-1058,-1408,-1408,-1408},
-{ -759,-1048,-1398,-1398,-1398},
-{ -549, -838,-1188,-1188,-1188}},
-/* AU.GC..GC */
-{{  -50, -339, -689, -689, -689},
-{ -929,-1218,-1568,-1568,-1568},
-{ -359, -648, -998, -998, -998},
-{ -789,-1078,-1428,-1428,-1428},
-{ -549, -838,-1188,-1188,-1188}},
-/* AU.GG..GC */
-{{  -50, -339, -689, -689, -689},
-{ -609, -898,-1248,-1248,-1248},
-{ -359, -648, -998, -998, -998},
-{ -669, -958,-1308,-1308,-1308},
-{ -549, -838,-1188,-1188,-1188}},
-/* AU.GU..GC */
-{{  -50, -339, -689, -689, -689},
-{ -929,-1218,-1568,-1568,-1568},
-{ -439, -728,-1078,-1078,-1078},
-{ -789,-1078,-1428,-1428,-1428},
-{ -619, -908,-1258,-1258,-1258}}},
-/* AU.U@..GC */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..GC */
-{{  -50, -329, -329, -329, -329},
-{ -569, -848, -848, -848, -848},
-{ -769,-1048,-1048,-1048,-1048},
-{ -759,-1038,-1038,-1038,-1038},
-{ -549, -828, -828, -828, -828}},
-/* AU.UC..GC */
-{{  -50, -329, -329, -329, -329},
-{ -929,-1208,-1208,-1208,-1208},
-{ -359, -638, -638, -638, -638},
-{ -789,-1068,-1068,-1068,-1068},
-{ -549, -828, -828, -828, -828}},
-/* AU.UG..GC */
-{{  -50, -329, -329, -329, -329},
-{ -609, -888, -888, -888, -888},
-{ -359, -638, -638, -638, -638},
-{ -669, -948, -948, -948, -948},
-{ -549, -828, -828, -828, -828}},
-/* AU.UU..GC */
-{{  -50, -329, -329, -329, -329},
-{ -929,-1208,-1208,-1208,-1208},
-{ -439, -718, -718, -718, -718},
-{ -789,-1068,-1068,-1068,-1068},
-{ -619, -898, -898, -898, -898}}}},
-/* AU.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* AU.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* AU.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* AU.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* AU.A@..GU */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..GU */
-{{  -50, -429, -599, -599, -599},
-{ -479, -858,-1028,-1028,-1028},
-{ -309, -688, -858, -858, -858},
-{ -389, -768, -938, -938, -938},
-{ -379, -758, -928, -928, -928}},
-/* AU.AC..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* AU.AG..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* AU.AU..GU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}}},
-/* AU.C@..GU */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..GU */
-{{  -50, -259, -239, -239, -239},
-{ -479, -688, -668, -668, -668},
-{ -309, -518, -498, -498, -498},
-{ -389, -598, -578, -578, -578},
-{ -379, -588, -568, -568, -568}},
-/* AU.CC..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* AU.CG..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* AU.CU..GU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}}},
-/* AU.G@..GU */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..GU */
-{{  -50, -339, -689, -689, -689},
-{ -479, -768,-1118,-1118,-1118},
-{ -309, -598, -948, -948, -948},
-{ -389, -678,-1028,-1028,-1028},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GC..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GG..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GU..GU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}}},
-/* AU.U@..GU */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..GU */
-{{  -50, -329, -329, -329, -329},
-{ -479, -758, -758, -758, -758},
-{ -309, -588, -588, -588, -588},
-{ -389, -668, -668, -668, -668},
-{ -379, -658, -658, -658, -658}},
-/* AU.UC..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* AU.UG..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* AU.UU..GU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}}}},
-/* AU.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* AU.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* AU.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* AU.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* AU.A@..UG */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..UG */
-{{  -50, -429, -599, -599, -599},
-{ -769,-1148,-1318,-1318,-1318},
-{ -529, -908,-1078,-1078,-1078},
-{ -709,-1088,-1258,-1258,-1258},
-{ -599, -978,-1148,-1148,-1148}},
-/* AU.AC..UG */
-{{  -50, -429, -599, -599, -599},
-{ -839,-1218,-1388,-1388,-1388},
-{ -529, -908,-1078,-1078,-1078},
-{ -859,-1238,-1408,-1408,-1408},
-{ -489, -868,-1038,-1038,-1038}},
-/* AU.AG..UG */
-{{  -50, -429, -599, -599, -599},
-{-1009,-1388,-1558,-1558,-1558},
-{ -409, -788, -958, -958, -958},
-{ -969,-1348,-1518,-1518,-1518},
-{ -599, -978,-1148,-1148,-1148}},
-/* AU.AU..UG */
-{{  -50, -429, -599, -599, -599},
-{ -859,-1238,-1408,-1408,-1408},
-{ -529, -908,-1078,-1078,-1078},
-{ -859,-1238,-1408,-1408,-1408},
-{ -409, -788, -958, -958, -958}}},
-/* AU.C@..UG */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..UG */
-{{  -50, -259, -239, -239, -239},
-{ -769, -978, -958, -958, -958},
-{ -529, -738, -718, -718, -718},
-{ -709, -918, -898, -898, -898},
-{ -599, -808, -788, -788, -788}},
-/* AU.CC..UG */
-{{  -50, -259, -239, -239, -239},
-{ -839,-1048,-1028,-1028,-1028},
-{ -529, -738, -718, -718, -718},
-{ -859,-1068,-1048,-1048,-1048},
-{ -489, -698, -678, -678, -678}},
-/* AU.CG..UG */
-{{  -50, -259, -239, -239, -239},
-{-1009,-1218,-1198,-1198,-1198},
-{ -409, -618, -598, -598, -598},
-{ -969,-1178,-1158,-1158,-1158},
-{ -599, -808, -788, -788, -788}},
-/* AU.CU..UG */
-{{  -50, -259, -239, -239, -239},
-{ -859,-1068,-1048,-1048,-1048},
-{ -529, -738, -718, -718, -718},
-{ -859,-1068,-1048,-1048,-1048},
-{ -409, -618, -598, -598, -598}}},
-/* AU.G@..UG */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..UG */
-{{  -50, -339, -689, -689, -689},
-{ -769,-1058,-1408,-1408,-1408},
-{ -529, -818,-1168,-1168,-1168},
-{ -709, -998,-1348,-1348,-1348},
-{ -599, -888,-1238,-1238,-1238}},
-/* AU.GC..UG */
-{{  -50, -339, -689, -689, -689},
-{ -839,-1128,-1478,-1478,-1478},
-{ -529, -818,-1168,-1168,-1168},
-{ -859,-1148,-1498,-1498,-1498},
-{ -489, -778,-1128,-1128,-1128}},
-/* AU.GG..UG */
-{{  -50, -339, -689, -689, -689},
-{-1009,-1298,-1648,-1648,-1648},
-{ -409, -698,-1048,-1048,-1048},
-{ -969,-1258,-1608,-1608,-1608},
-{ -599, -888,-1238,-1238,-1238}},
-/* AU.GU..UG */
-{{  -50, -339, -689, -689, -689},
-{ -859,-1148,-1498,-1498,-1498},
-{ -529, -818,-1168,-1168,-1168},
-{ -859,-1148,-1498,-1498,-1498},
-{ -409, -698,-1048,-1048,-1048}}},
-/* AU.U@..UG */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..UG */
-{{  -50, -329, -329, -329, -329},
-{ -769,-1048,-1048,-1048,-1048},
-{ -529, -808, -808, -808, -808},
-{ -709, -988, -988, -988, -988},
-{ -599, -878, -878, -878, -878}},
-/* AU.UC..UG */
-{{  -50, -329, -329, -329, -329},
-{ -839,-1118,-1118,-1118,-1118},
-{ -529, -808, -808, -808, -808},
-{ -859,-1138,-1138,-1138,-1138},
-{ -489, -768, -768, -768, -768}},
-/* AU.UG..UG */
-{{  -50, -329, -329, -329, -329},
-{-1009,-1288,-1288,-1288,-1288},
-{ -409, -688, -688, -688, -688},
-{ -969,-1248,-1248,-1248,-1248},
-{ -599, -878, -878, -878, -878}},
-/* AU.UU..UG */
-{{  -50, -329, -329, -329, -329},
-{ -859,-1138,-1138,-1138,-1138},
-{ -529, -808, -808, -808, -808},
-{ -859,-1138,-1138,-1138,-1138},
-{ -409, -688, -688, -688, -688}}}},
-/* AU.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* AU.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* AU.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* AU.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* AU.A@..AU */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..AU */
-{{  -50, -429, -599, -599, -599},
-{ -479, -858,-1028,-1028,-1028},
-{ -309, -688, -858, -858, -858},
-{ -389, -768, -938, -938, -938},
-{ -379, -758, -928, -928, -928}},
-/* AU.AC..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* AU.AG..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}},
-/* AU.AU..AU */
-{{  -50, -429, -599, -599, -599},
-{ -649,-1028,-1198,-1198,-1198},
-{ -289, -668, -838, -838, -838},
-{ -739,-1118,-1288,-1288,-1288},
-{ -379, -758, -928, -928, -928}}},
-/* AU.C@..AU */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..AU */
-{{  -50, -259, -239, -239, -239},
-{ -479, -688, -668, -668, -668},
-{ -309, -518, -498, -498, -498},
-{ -389, -598, -578, -578, -578},
-{ -379, -588, -568, -568, -568}},
-/* AU.CC..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* AU.CG..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}},
-/* AU.CU..AU */
-{{  -50, -259, -239, -239, -239},
-{ -649, -858, -838, -838, -838},
-{ -289, -498, -478, -478, -478},
-{ -739, -948, -928, -928, -928},
-{ -379, -588, -568, -568, -568}}},
-/* AU.G@..AU */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..AU */
-{{  -50, -339, -689, -689, -689},
-{ -479, -768,-1118,-1118,-1118},
-{ -309, -598, -948, -948, -948},
-{ -389, -678,-1028,-1028,-1028},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GC..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GG..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}},
-/* AU.GU..AU */
-{{  -50, -339, -689, -689, -689},
-{ -649, -938,-1288,-1288,-1288},
-{ -289, -578, -928, -928, -928},
-{ -739,-1028,-1378,-1378,-1378},
-{ -379, -668,-1018,-1018,-1018}}},
-/* AU.U@..AU */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..AU */
-{{  -50, -329, -329, -329, -329},
-{ -479, -758, -758, -758, -758},
-{ -309, -588, -588, -588, -588},
-{ -389, -668, -668, -668, -668},
-{ -379, -658, -658, -658, -658}},
-/* AU.UC..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* AU.UG..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}},
-/* AU.UU..AU */
-{{  -50, -329, -329, -329, -329},
-{ -649, -928, -928, -928, -928},
-{ -289, -568, -568, -568, -568},
-{ -739,-1018,-1018,-1018,-1018},
-{ -379, -658, -658, -658, -658}}}},
-/* AU.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* AU.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* AU.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* AU.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* AU.A@..UA */
-{{{  -50, -429, -599, -599, -599},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA..UA */
-{{  -50, -429, -599, -599, -599},
-{ -449, -828, -998, -998, -998},
-{ -479, -858,-1028,-1028,-1028},
-{ -429, -808, -978, -978, -978},
-{ -329, -708, -878, -878, -878}},
-/* AU.AC..UA */
-{{  -50, -429, -599, -599, -599},
-{ -679,-1058,-1228,-1228,-1228},
-{ -559, -938,-1108,-1108,-1108},
-{ -729,-1108,-1278,-1278,-1278},
-{ -189, -568, -738, -738, -738}},
-/* AU.AG..UA */
-{{  -50, -429, -599, -599, -599},
-{ -939,-1318,-1488,-1488,-1488},
-{ -249, -628, -798, -798, -798},
-{ -939,-1318,-1488,-1488,-1488},
-{ -329, -708, -878, -878, -878}},
-/* AU.AU..UA */
-{{  -50, -429, -599, -599, -599},
-{ -639,-1018,-1188,-1188,-1188},
-{ -229, -608, -778, -778, -778},
-{ -729,-1108,-1278,-1278,-1278},
-{ -190, -569, -739, -739, -739}}},
-/* AU.C@..UA */
-{{{  -50, -259, -239, -239, -239},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA..UA */
-{{  -50, -259, -239, -239, -239},
-{ -449, -658, -638, -638, -638},
-{ -479, -688, -668, -668, -668},
-{ -429, -638, -618, -618, -618},
-{ -329, -538, -518, -518, -518}},
-/* AU.CC..UA */
-{{  -50, -259, -239, -239, -239},
-{ -679, -888, -868, -868, -868},
-{ -559, -768, -748, -748, -748},
-{ -729, -938, -918, -918, -918},
-{ -189, -398, -378, -378, -378}},
-/* AU.CG..UA */
-{{  -50, -259, -239, -239, -239},
-{ -939,-1148,-1128,-1128,-1128},
-{ -249, -458, -438, -438, -438},
-{ -939,-1148,-1128,-1128,-1128},
-{ -329, -538, -518, -518, -518}},
-/* AU.CU..UA */
-{{  -50, -259, -239, -239, -239},
-{ -639, -848, -828, -828, -828},
-{ -229, -438, -418, -418, -418},
-{ -729, -938, -918, -918, -918},
-{ -190, -399, -379, -379, -379}}},
-/* AU.G@..UA */
-{{{  -50, -339, -689, -689, -689},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA..UA */
-{{  -50, -339, -689, -689, -689},
-{ -449, -738,-1088,-1088,-1088},
-{ -479, -768,-1118,-1118,-1118},
-{ -429, -718,-1068,-1068,-1068},
-{ -329, -618, -968, -968, -968}},
-/* AU.GC..UA */
-{{  -50, -339, -689, -689, -689},
-{ -679, -968,-1318,-1318,-1318},
-{ -559, -848,-1198,-1198,-1198},
-{ -729,-1018,-1368,-1368,-1368},
-{ -189, -478, -828, -828, -828}},
-/* AU.GG..UA */
-{{  -50, -339, -689, -689, -689},
-{ -939,-1228,-1578,-1578,-1578},
-{ -249, -538, -888, -888, -888},
-{ -939,-1228,-1578,-1578,-1578},
-{ -329, -618, -968, -968, -968}},
-/* AU.GU..UA */
-{{  -50, -339, -689, -689, -689},
-{ -639, -928,-1278,-1278,-1278},
-{ -229, -518, -868, -868, -868},
-{ -729,-1018,-1368,-1368,-1368},
-{ -190, -479, -829, -829, -829}}},
-/* AU.U@..UA */
-{{{  -50, -329, -329, -329, -329},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA..UA */
-{{  -50, -329, -329, -329, -329},
-{ -449, -728, -728, -728, -728},
-{ -479, -758, -758, -758, -758},
-{ -429, -708, -708, -708, -708},
-{ -329, -608, -608, -608, -608}},
-/* AU.UC..UA */
-{{  -50, -329, -329, -329, -329},
-{ -679, -958, -958, -958, -958},
-{ -559, -838, -838, -838, -838},
-{ -729,-1008,-1008,-1008,-1008},
-{ -189, -468, -468, -468, -468}},
-/* AU.UG..UA */
-{{  -50, -329, -329, -329, -329},
-{ -939,-1218,-1218,-1218,-1218},
-{ -249, -528, -528, -528, -528},
-{ -939,-1218,-1218,-1218,-1218},
-{ -329, -608, -608, -608, -608}},
-/* AU.UU..UA */
-{{  -50, -329, -329, -329, -329},
-{ -639, -918, -918, -918, -918},
-{ -229, -508, -508, -508, -508},
-{ -729,-1008,-1008,-1008,-1008},
-{ -190, -469, -469, -469, -469}}}},
-/* AU.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* AU.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* AU.A@.. @ */
-{{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AA.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AC.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AG.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}},
-/* AU.AU.. @ */
-{{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649},
-{ -100, -479, -649, -649, -649}}},
-/* AU.C@.. @ */
-{{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CA.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CC.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CG.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}},
-/* AU.CU.. @ */
-{{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289},
-{ -100, -309, -289, -289, -289}}},
-/* AU.G@.. @ */
-{{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GA.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GC.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GG.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}},
-/* AU.GU.. @ */
-{{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739},
-{ -100, -389, -739, -739, -739}}},
-/* AU.U@.. @ */
-{{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UA.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UC.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UG.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}},
-/* AU.UU.. @ */
-{{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379},
-{ -100, -379, -379, -379, -379}}}}},
-{ /* noPair */ {{{{0}}}},
-/* UA.@@..CG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* UA.@C..CG */
-{{    0,    0,    0,    0,    0},
-{ -949, -949, -949, -949, -949},
-{ -449, -449, -449, -449, -449},
-{ -939, -939, -939, -939, -939},
-{ -739, -739, -739, -739, -739}},
-/* UA.@G..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -519, -519, -519, -519, -519},
-{ -939, -939, -939, -939, -939},
-{ -809, -809, -809, -809, -809}},
-/* UA.@U..CG */
-{{    0,    0,    0,    0,    0},
-{-1029,-1029,-1029,-1029,-1029},
-{ -669, -669, -669, -669, -669},
-{ -939, -939, -939, -939, -939},
-{ -859, -859, -859, -859, -859}}},
-/* UA.A@..CG */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..CG */
-{{  -50, -399, -629, -889, -589},
-{-1079,-1428,-1658,-1918,-1618},
-{ -569, -918,-1148,-1408,-1108},
-{ -989,-1338,-1568,-1828,-1528},
-{ -859,-1208,-1438,-1698,-1398}},
-/* UA.AC..CG */
-{{  -50, -399, -629, -889, -589},
-{ -999,-1348,-1578,-1838,-1538},
-{ -499, -848,-1078,-1338,-1038},
-{ -989,-1338,-1568,-1828,-1528},
-{ -789,-1138,-1368,-1628,-1328}},
-/* UA.AG..CG */
-{{  -50, -399, -629, -889, -589},
-{-1079,-1428,-1658,-1918,-1618},
-{ -569, -918,-1148,-1408,-1108},
-{ -989,-1338,-1568,-1828,-1528},
-{ -859,-1208,-1438,-1698,-1398}},
-/* UA.AU..CG */
-{{  -50, -399, -629, -889, -589},
-{-1079,-1428,-1658,-1918,-1618},
-{ -719,-1068,-1298,-1558,-1258},
-{ -989,-1338,-1568,-1828,-1528},
-{ -909,-1258,-1488,-1748,-1448}}},
-/* UA.C@..CG */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..CG */
-{{  -50, -429, -509, -199, -179},
-{-1079,-1458,-1538,-1228,-1208},
-{ -569, -948,-1028, -718, -698},
-{ -989,-1368,-1448,-1138,-1118},
-{ -859,-1238,-1318,-1008, -988}},
-/* UA.CC..CG */
-{{  -50, -429, -509, -199, -179},
-{ -999,-1378,-1458,-1148,-1128},
-{ -499, -878, -958, -648, -628},
-{ -989,-1368,-1448,-1138,-1118},
-{ -789,-1168,-1248, -938, -918}},
-/* UA.CG..CG */
-{{  -50, -429, -509, -199, -179},
-{-1079,-1458,-1538,-1228,-1208},
-{ -569, -948,-1028, -718, -698},
-{ -989,-1368,-1448,-1138,-1118},
-{ -859,-1238,-1318,-1008, -988}},
-/* UA.CU..CG */
-{{  -50, -429, -509, -199, -179},
-{-1079,-1458,-1538,-1228,-1208},
-{ -719,-1098,-1178, -868, -848},
-{ -989,-1368,-1448,-1138,-1118},
-{ -909,-1288,-1368,-1058,-1038}}},
-/* UA.G@..CG */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..CG */
-{{  -50, -379, -679, -889, -679},
-{-1079,-1408,-1708,-1918,-1708},
-{ -569, -898,-1198,-1408,-1198},
-{ -989,-1318,-1618,-1828,-1618},
-{ -859,-1188,-1488,-1698,-1488}},
-/* UA.GC..CG */
-{{  -50, -379, -679, -889, -679},
-{ -999,-1328,-1628,-1838,-1628},
-{ -499, -828,-1128,-1338,-1128},
-{ -989,-1318,-1618,-1828,-1618},
-{ -789,-1118,-1418,-1628,-1418}},
-/* UA.GG..CG */
-{{  -50, -379, -679, -889, -679},
-{-1079,-1408,-1708,-1918,-1708},
-{ -569, -898,-1198,-1408,-1198},
-{ -989,-1318,-1618,-1828,-1618},
-{ -859,-1188,-1488,-1698,-1488}},
-/* UA.GU..CG */
-{{  -50, -379, -679, -889, -679},
-{-1079,-1408,-1708,-1918,-1708},
-{ -719,-1048,-1348,-1558,-1348},
-{ -989,-1318,-1618,-1828,-1618},
-{ -909,-1238,-1538,-1748,-1538}}},
-/* UA.U@..CG */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..CG */
-{{  -50, -279, -139, -279, -140},
-{-1079,-1308,-1168,-1308,-1169},
-{ -569, -798, -658, -798, -659},
-{ -989,-1218,-1078,-1218,-1079},
-{ -859,-1088, -948,-1088, -949}},
-/* UA.UC..CG */
-{{  -50, -279, -139, -279, -140},
-{ -999,-1228,-1088,-1228,-1089},
-{ -499, -728, -588, -728, -589},
-{ -989,-1218,-1078,-1218,-1079},
-{ -789,-1018, -878,-1018, -879}},
-/* UA.UG..CG */
-{{  -50, -279, -139, -279, -140},
-{-1079,-1308,-1168,-1308,-1169},
-{ -569, -798, -658, -798, -659},
-{ -989,-1218,-1078,-1218,-1079},
-{ -859,-1088, -948,-1088, -949}},
-/* UA.UU..CG */
-{{  -50, -279, -139, -279, -140},
-{-1079,-1308,-1168,-1308,-1169},
-{ -719, -948, -808, -948, -809},
-{ -989,-1218,-1078,-1218,-1079},
-{ -909,-1138, -998,-1138, -999}}}},
-/* UA.@@..GC */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..GC */
-{{    0,    0,    0,    0,    0},
-{ -519, -519, -519, -519, -519},
-{ -719, -719, -719, -719, -719},
-{ -709, -709, -709, -709, -709},
-{ -499, -499, -499, -499, -499}},
-/* UA.@C..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -309, -309, -309, -309, -309},
-{ -739, -739, -739, -739, -739},
-{ -499, -499, -499, -499, -499}},
-/* UA.@G..GC */
-{{    0,    0,    0,    0,    0},
-{ -559, -559, -559, -559, -559},
-{ -309, -309, -309, -309, -309},
-{ -619, -619, -619, -619, -619},
-{ -499, -499, -499, -499, -499}},
-/* UA.@U..GC */
-{{    0,    0,    0,    0,    0},
-{ -879, -879, -879, -879, -879},
-{ -389, -389, -389, -389, -389},
-{ -739, -739, -739, -739, -739},
-{ -569, -569, -569, -569, -569}}},
-/* UA.A@..GC */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..GC */
-{{  -50, -399, -629, -889, -589},
-{ -569, -918,-1148,-1408,-1108},
-{ -769,-1118,-1348,-1608,-1308},
-{ -759,-1108,-1338,-1598,-1298},
-{ -549, -898,-1128,-1388,-1088}},
-/* UA.AC..GC */
-{{  -50, -399, -629, -889, -589},
-{ -929,-1278,-1508,-1768,-1468},
-{ -359, -708, -938,-1198, -898},
-{ -789,-1138,-1368,-1628,-1328},
-{ -549, -898,-1128,-1388,-1088}},
-/* UA.AG..GC */
-{{  -50, -399, -629, -889, -589},
-{ -609, -958,-1188,-1448,-1148},
-{ -359, -708, -938,-1198, -898},
-{ -669,-1018,-1248,-1508,-1208},
-{ -549, -898,-1128,-1388,-1088}},
-/* UA.AU..GC */
-{{  -50, -399, -629, -889, -589},
-{ -929,-1278,-1508,-1768,-1468},
-{ -439, -788,-1018,-1278, -978},
-{ -789,-1138,-1368,-1628,-1328},
-{ -619, -968,-1198,-1458,-1158}}},
-/* UA.C@..GC */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..GC */
-{{  -50, -429, -509, -199, -179},
-{ -569, -948,-1028, -718, -698},
-{ -769,-1148,-1228, -918, -898},
-{ -759,-1138,-1218, -908, -888},
-{ -549, -928,-1008, -698, -678}},
-/* UA.CC..GC */
-{{  -50, -429, -509, -199, -179},
-{ -929,-1308,-1388,-1078,-1058},
-{ -359, -738, -818, -508, -488},
-{ -789,-1168,-1248, -938, -918},
-{ -549, -928,-1008, -698, -678}},
-/* UA.CG..GC */
-{{  -50, -429, -509, -199, -179},
-{ -609, -988,-1068, -758, -738},
-{ -359, -738, -818, -508, -488},
-{ -669,-1048,-1128, -818, -798},
-{ -549, -928,-1008, -698, -678}},
-/* UA.CU..GC */
-{{  -50, -429, -509, -199, -179},
-{ -929,-1308,-1388,-1078,-1058},
-{ -439, -818, -898, -588, -568},
-{ -789,-1168,-1248, -938, -918},
-{ -619, -998,-1078, -768, -748}}},
-/* UA.G@..GC */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..GC */
-{{  -50, -379, -679, -889, -679},
-{ -569, -898,-1198,-1408,-1198},
-{ -769,-1098,-1398,-1608,-1398},
-{ -759,-1088,-1388,-1598,-1388},
-{ -549, -878,-1178,-1388,-1178}},
-/* UA.GC..GC */
-{{  -50, -379, -679, -889, -679},
-{ -929,-1258,-1558,-1768,-1558},
-{ -359, -688, -988,-1198, -988},
-{ -789,-1118,-1418,-1628,-1418},
-{ -549, -878,-1178,-1388,-1178}},
-/* UA.GG..GC */
-{{  -50, -379, -679, -889, -679},
-{ -609, -938,-1238,-1448,-1238},
-{ -359, -688, -988,-1198, -988},
-{ -669, -998,-1298,-1508,-1298},
-{ -549, -878,-1178,-1388,-1178}},
-/* UA.GU..GC */
-{{  -50, -379, -679, -889, -679},
-{ -929,-1258,-1558,-1768,-1558},
-{ -439, -768,-1068,-1278,-1068},
-{ -789,-1118,-1418,-1628,-1418},
-{ -619, -948,-1248,-1458,-1248}}},
-/* UA.U@..GC */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..GC */
-{{  -50, -279, -139, -279, -140},
-{ -569, -798, -658, -798, -659},
-{ -769, -998, -858, -998, -859},
-{ -759, -988, -848, -988, -849},
-{ -549, -778, -638, -778, -639}},
-/* UA.UC..GC */
-{{  -50, -279, -139, -279, -140},
-{ -929,-1158,-1018,-1158,-1019},
-{ -359, -588, -448, -588, -449},
-{ -789,-1018, -878,-1018, -879},
-{ -549, -778, -638, -778, -639}},
-/* UA.UG..GC */
-{{  -50, -279, -139, -279, -140},
-{ -609, -838, -698, -838, -699},
-{ -359, -588, -448, -588, -449},
-{ -669, -898, -758, -898, -759},
-{ -549, -778, -638, -778, -639}},
-/* UA.UU..GC */
-{{  -50, -279, -139, -279, -140},
-{ -929,-1158,-1018,-1158,-1019},
-{ -439, -668, -528, -668, -529},
-{ -789,-1018, -878,-1018, -879},
-{ -619, -848, -708, -848, -709}}}},
-/* UA.@@..GU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..GU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* UA.@C..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UA.@G..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UA.@U..GU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* UA.A@..GU */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..GU */
-{{  -50, -399, -629, -889, -589},
-{ -479, -828,-1058,-1318,-1018},
-{ -309, -658, -888,-1148, -848},
-{ -389, -738, -968,-1228, -928},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AC..GU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AG..GU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AU..GU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}}},
-/* UA.C@..GU */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..GU */
-{{  -50, -429, -509, -199, -179},
-{ -479, -858, -938, -628, -608},
-{ -309, -688, -768, -458, -438},
-{ -389, -768, -848, -538, -518},
-{ -379, -758, -838, -528, -508}},
-/* UA.CC..GU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}},
-/* UA.CG..GU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}},
-/* UA.CU..GU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}}},
-/* UA.G@..GU */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..GU */
-{{  -50, -379, -679, -889, -679},
-{ -479, -808,-1108,-1318,-1108},
-{ -309, -638, -938,-1148, -938},
-{ -389, -718,-1018,-1228,-1018},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GC..GU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GG..GU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GU..GU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}}},
-/* UA.U@..GU */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..GU */
-{{  -50, -279, -139, -279, -140},
-{ -479, -708, -568, -708, -569},
-{ -309, -538, -398, -538, -399},
-{ -389, -618, -478, -618, -479},
-{ -379, -608, -468, -608, -469}},
-/* UA.UC..GU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}},
-/* UA.UG..GU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}},
-/* UA.UU..GU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}}}},
-/* UA.@@..UG */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..UG */
-{{    0,    0,    0,    0,    0},
-{ -719, -719, -719, -719, -719},
-{ -479, -479, -479, -479, -479},
-{ -659, -659, -659, -659, -659},
-{ -549, -549, -549, -549, -549}},
-/* UA.@C..UG */
-{{    0,    0,    0,    0,    0},
-{ -789, -789, -789, -789, -789},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -439, -439, -439, -439, -439}},
-/* UA.@G..UG */
-{{    0,    0,    0,    0,    0},
-{ -959, -959, -959, -959, -959},
-{ -359, -359, -359, -359, -359},
-{ -919, -919, -919, -919, -919},
-{ -549, -549, -549, -549, -549}},
-/* UA.@U..UG */
-{{    0,    0,    0,    0,    0},
-{ -809, -809, -809, -809, -809},
-{ -479, -479, -479, -479, -479},
-{ -809, -809, -809, -809, -809},
-{ -359, -359, -359, -359, -359}}},
-/* UA.A@..UG */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..UG */
-{{  -50, -399, -629, -889, -589},
-{ -769,-1118,-1348,-1608,-1308},
-{ -529, -878,-1108,-1368,-1068},
-{ -709,-1058,-1288,-1548,-1248},
-{ -599, -948,-1178,-1438,-1138}},
-/* UA.AC..UG */
-{{  -50, -399, -629, -889, -589},
-{ -839,-1188,-1418,-1678,-1378},
-{ -529, -878,-1108,-1368,-1068},
-{ -859,-1208,-1438,-1698,-1398},
-{ -489, -838,-1068,-1328,-1028}},
-/* UA.AG..UG */
-{{  -50, -399, -629, -889, -589},
-{-1009,-1358,-1588,-1848,-1548},
-{ -409, -758, -988,-1248, -948},
-{ -969,-1318,-1548,-1808,-1508},
-{ -599, -948,-1178,-1438,-1138}},
-/* UA.AU..UG */
-{{  -50, -399, -629, -889, -589},
-{ -859,-1208,-1438,-1698,-1398},
-{ -529, -878,-1108,-1368,-1068},
-{ -859,-1208,-1438,-1698,-1398},
-{ -409, -758, -988,-1248, -948}}},
-/* UA.C@..UG */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..UG */
-{{  -50, -429, -509, -199, -179},
-{ -769,-1148,-1228, -918, -898},
-{ -529, -908, -988, -678, -658},
-{ -709,-1088,-1168, -858, -838},
-{ -599, -978,-1058, -748, -728}},
-/* UA.CC..UG */
-{{  -50, -429, -509, -199, -179},
-{ -839,-1218,-1298, -988, -968},
-{ -529, -908, -988, -678, -658},
-{ -859,-1238,-1318,-1008, -988},
-{ -489, -868, -948, -638, -618}},
-/* UA.CG..UG */
-{{  -50, -429, -509, -199, -179},
-{-1009,-1388,-1468,-1158,-1138},
-{ -409, -788, -868, -558, -538},
-{ -969,-1348,-1428,-1118,-1098},
-{ -599, -978,-1058, -748, -728}},
-/* UA.CU..UG */
-{{  -50, -429, -509, -199, -179},
-{ -859,-1238,-1318,-1008, -988},
-{ -529, -908, -988, -678, -658},
-{ -859,-1238,-1318,-1008, -988},
-{ -409, -788, -868, -558, -538}}},
-/* UA.G@..UG */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..UG */
-{{  -50, -379, -679, -889, -679},
-{ -769,-1098,-1398,-1608,-1398},
-{ -529, -858,-1158,-1368,-1158},
-{ -709,-1038,-1338,-1548,-1338},
-{ -599, -928,-1228,-1438,-1228}},
-/* UA.GC..UG */
-{{  -50, -379, -679, -889, -679},
-{ -839,-1168,-1468,-1678,-1468},
-{ -529, -858,-1158,-1368,-1158},
-{ -859,-1188,-1488,-1698,-1488},
-{ -489, -818,-1118,-1328,-1118}},
-/* UA.GG..UG */
-{{  -50, -379, -679, -889, -679},
-{-1009,-1338,-1638,-1848,-1638},
-{ -409, -738,-1038,-1248,-1038},
-{ -969,-1298,-1598,-1808,-1598},
-{ -599, -928,-1228,-1438,-1228}},
-/* UA.GU..UG */
-{{  -50, -379, -679, -889, -679},
-{ -859,-1188,-1488,-1698,-1488},
-{ -529, -858,-1158,-1368,-1158},
-{ -859,-1188,-1488,-1698,-1488},
-{ -409, -738,-1038,-1248,-1038}}},
-/* UA.U@..UG */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..UG */
-{{  -50, -279, -139, -279, -140},
-{ -769, -998, -858, -998, -859},
-{ -529, -758, -618, -758, -619},
-{ -709, -938, -798, -938, -799},
-{ -599, -828, -688, -828, -689}},
-/* UA.UC..UG */
-{{  -50, -279, -139, -279, -140},
-{ -839,-1068, -928,-1068, -929},
-{ -529, -758, -618, -758, -619},
-{ -859,-1088, -948,-1088, -949},
-{ -489, -718, -578, -718, -579}},
-/* UA.UG..UG */
-{{  -50, -279, -139, -279, -140},
-{-1009,-1238,-1098,-1238,-1099},
-{ -409, -638, -498, -638, -499},
-{ -969,-1198,-1058,-1198,-1059},
-{ -599, -828, -688, -828, -689}},
-/* UA.UU..UG */
-{{  -50, -279, -139, -279, -140},
-{ -859,-1088, -948,-1088, -949},
-{ -529, -758, -618, -758, -619},
-{ -859,-1088, -948,-1088, -949},
-{ -409, -638, -498, -638, -499}}}},
-/* UA.@@..AU */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..AU */
-{{    0,    0,    0,    0,    0},
-{ -429, -429, -429, -429, -429},
-{ -259, -259, -259, -259, -259},
-{ -339, -339, -339, -339, -339},
-{ -329, -329, -329, -329, -329}},
-/* UA.@C..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UA.@G..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}},
-/* UA.@U..AU */
-{{    0,    0,    0,    0,    0},
-{ -599, -599, -599, -599, -599},
-{ -239, -239, -239, -239, -239},
-{ -689, -689, -689, -689, -689},
-{ -329, -329, -329, -329, -329}}},
-/* UA.A@..AU */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..AU */
-{{  -50, -399, -629, -889, -589},
-{ -479, -828,-1058,-1318,-1018},
-{ -309, -658, -888,-1148, -848},
-{ -389, -738, -968,-1228, -928},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AC..AU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AG..AU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}},
-/* UA.AU..AU */
-{{  -50, -399, -629, -889, -589},
-{ -649, -998,-1228,-1488,-1188},
-{ -289, -638, -868,-1128, -828},
-{ -739,-1088,-1318,-1578,-1278},
-{ -379, -728, -958,-1218, -918}}},
-/* UA.C@..AU */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..AU */
-{{  -50, -429, -509, -199, -179},
-{ -479, -858, -938, -628, -608},
-{ -309, -688, -768, -458, -438},
-{ -389, -768, -848, -538, -518},
-{ -379, -758, -838, -528, -508}},
-/* UA.CC..AU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}},
-/* UA.CG..AU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}},
-/* UA.CU..AU */
-{{  -50, -429, -509, -199, -179},
-{ -649,-1028,-1108, -798, -778},
-{ -289, -668, -748, -438, -418},
-{ -739,-1118,-1198, -888, -868},
-{ -379, -758, -838, -528, -508}}},
-/* UA.G@..AU */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..AU */
-{{  -50, -379, -679, -889, -679},
-{ -479, -808,-1108,-1318,-1108},
-{ -309, -638, -938,-1148, -938},
-{ -389, -718,-1018,-1228,-1018},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GC..AU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GG..AU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}},
-/* UA.GU..AU */
-{{  -50, -379, -679, -889, -679},
-{ -649, -978,-1278,-1488,-1278},
-{ -289, -618, -918,-1128, -918},
-{ -739,-1068,-1368,-1578,-1368},
-{ -379, -708,-1008,-1218,-1008}}},
-/* UA.U@..AU */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..AU */
-{{  -50, -279, -139, -279, -140},
-{ -479, -708, -568, -708, -569},
-{ -309, -538, -398, -538, -399},
-{ -389, -618, -478, -618, -479},
-{ -379, -608, -468, -608, -469}},
-/* UA.UC..AU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}},
-/* UA.UG..AU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}},
-/* UA.UU..AU */
-{{  -50, -279, -139, -279, -140},
-{ -649, -878, -738, -878, -739},
-{ -289, -518, -378, -518, -379},
-{ -739, -968, -828, -968, -829},
-{ -379, -608, -468, -608, -469}}}},
-/* UA.@@..UA */
-{{{{    0,    0,    0,    0,    0},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A..UA */
-{{    0,    0,    0,    0,    0},
-{ -399, -399, -399, -399, -399},
-{ -429, -429, -429, -429, -429},
-{ -379, -379, -379, -379, -379},
-{ -279, -279, -279, -279, -279}},
-/* UA.@C..UA */
-{{    0,    0,    0,    0,    0},
-{ -629, -629, -629, -629, -629},
-{ -509, -509, -509, -509, -509},
-{ -679, -679, -679, -679, -679},
-{ -139, -139, -139, -139, -139}},
-/* UA.@G..UA */
-{{    0,    0,    0,    0,    0},
-{ -889, -889, -889, -889, -889},
-{ -199, -199, -199, -199, -199},
-{ -889, -889, -889, -889, -889},
-{ -279, -279, -279, -279, -279}},
-/* UA.@U..UA */
-{{    0,    0,    0,    0,    0},
-{ -589, -589, -589, -589, -589},
-{ -179, -179, -179, -179, -179},
-{ -679, -679, -679, -679, -679},
-{ -140, -140, -140, -140, -140}}},
-/* UA.A@..UA */
-{{{  -50, -399, -629, -889, -589},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA..UA */
-{{  -50, -399, -629, -889, -589},
-{ -449, -798,-1028,-1288, -988},
-{ -479, -828,-1058,-1318,-1018},
-{ -429, -778,-1008,-1268, -968},
-{ -329, -678, -908,-1168, -868}},
-/* UA.AC..UA */
-{{  -50, -399, -629, -889, -589},
-{ -679,-1028,-1258,-1518,-1218},
-{ -559, -908,-1138,-1398,-1098},
-{ -729,-1078,-1308,-1568,-1268},
-{ -189, -538, -768,-1028, -728}},
-/* UA.AG..UA */
-{{  -50, -399, -629, -889, -589},
-{ -939,-1288,-1518,-1778,-1478},
-{ -249, -598, -828,-1088, -788},
-{ -939,-1288,-1518,-1778,-1478},
-{ -329, -678, -908,-1168, -868}},
-/* UA.AU..UA */
-{{  -50, -399, -629, -889, -589},
-{ -639, -988,-1218,-1478,-1178},
-{ -229, -578, -808,-1068, -768},
-{ -729,-1078,-1308,-1568,-1268},
-{ -190, -539, -769,-1029, -729}}},
-/* UA.C@..UA */
-{{{  -50, -429, -509, -199, -179},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA..UA */
-{{  -50, -429, -509, -199, -179},
-{ -449, -828, -908, -598, -578},
-{ -479, -858, -938, -628, -608},
-{ -429, -808, -888, -578, -558},
-{ -329, -708, -788, -478, -458}},
-/* UA.CC..UA */
-{{  -50, -429, -509, -199, -179},
-{ -679,-1058,-1138, -828, -808},
-{ -559, -938,-1018, -708, -688},
-{ -729,-1108,-1188, -878, -858},
-{ -189, -568, -648, -338, -318}},
-/* UA.CG..UA */
-{{  -50, -429, -509, -199, -179},
-{ -939,-1318,-1398,-1088,-1068},
-{ -249, -628, -708, -398, -378},
-{ -939,-1318,-1398,-1088,-1068},
-{ -329, -708, -788, -478, -458}},
-/* UA.CU..UA */
-{{  -50, -429, -509, -199, -179},
-{ -639,-1018,-1098, -788, -768},
-{ -229, -608, -688, -378, -358},
-{ -729,-1108,-1188, -878, -858},
-{ -190, -569, -649, -339, -319}}},
-/* UA.G@..UA */
-{{{  -50, -379, -679, -889, -679},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA..UA */
-{{  -50, -379, -679, -889, -679},
-{ -449, -778,-1078,-1288,-1078},
-{ -479, -808,-1108,-1318,-1108},
-{ -429, -758,-1058,-1268,-1058},
-{ -329, -658, -958,-1168, -958}},
-/* UA.GC..UA */
-{{  -50, -379, -679, -889, -679},
-{ -679,-1008,-1308,-1518,-1308},
-{ -559, -888,-1188,-1398,-1188},
-{ -729,-1058,-1358,-1568,-1358},
-{ -189, -518, -818,-1028, -818}},
-/* UA.GG..UA */
-{{  -50, -379, -679, -889, -679},
-{ -939,-1268,-1568,-1778,-1568},
-{ -249, -578, -878,-1088, -878},
-{ -939,-1268,-1568,-1778,-1568},
-{ -329, -658, -958,-1168, -958}},
-/* UA.GU..UA */
-{{  -50, -379, -679, -889, -679},
-{ -639, -968,-1268,-1478,-1268},
-{ -229, -558, -858,-1068, -858},
-{ -729,-1058,-1358,-1568,-1358},
-{ -190, -519, -819,-1029, -819}}},
-/* UA.U@..UA */
-{{{  -50, -279, -139, -279, -140},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA..UA */
-{{  -50, -279, -139, -279, -140},
-{ -449, -678, -538, -678, -539},
-{ -479, -708, -568, -708, -569},
-{ -429, -658, -518, -658, -519},
-{ -329, -558, -418, -558, -419}},
-/* UA.UC..UA */
-{{  -50, -279, -139, -279, -140},
-{ -679, -908, -768, -908, -769},
-{ -559, -788, -648, -788, -649},
-{ -729, -958, -818, -958, -819},
-{ -189, -418, -278, -418, -279}},
-/* UA.UG..UA */
-{{  -50, -279, -139, -279, -140},
-{ -939,-1168,-1028,-1168,-1029},
-{ -249, -478, -338, -478, -339},
-{ -939,-1168,-1028,-1168,-1029},
-{ -329, -558, -418, -558, -419}},
-/* UA.UU..UA */
-{{  -50, -279, -139, -279, -140},
-{ -639, -868, -728, -868, -729},
-{ -229, -458, -318, -458, -319},
-{ -729, -958, -818, -958, -819},
-{ -190, -419, -279, -419, -280}}}},
-/* UA.@@.. @ */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@A.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@C.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@G.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}},
-/* UA.@U.. @ */
-{{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50},
-{  -50,  -50,  -50,  -50,  -50}}},
-/* UA.A@.. @ */
-{{{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AA.. @ */
-{{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AC.. @ */
-{{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AG.. @ */
-{{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}},
-/* UA.AU.. @ */
-{{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639},
-{ -100, -449, -679, -939, -639}}},
-/* UA.C@.. @ */
-{{{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CA.. @ */
-{{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CC.. @ */
-{{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CG.. @ */
-{{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}},
-/* UA.CU.. @ */
-{{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229},
-{ -100, -479, -559, -249, -229}}},
-/* UA.G@.. @ */
-{{{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GA.. @ */
-{{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GC.. @ */
-{{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GG.. @ */
-{{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}},
-/* UA.GU.. @ */
-{{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729},
-{ -100, -429, -729, -939, -729}}},
-/* UA.U@.. @ */
-{{{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UA.. @ */
-{{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UC.. @ */
-{{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UG.. @ */
-{{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}},
-/* UA.UU.. @ */
-{{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190},
-{ -100, -329, -189, -329, -190}}}}},
-{ /* noPair */ {{{{0}}}},
-/*  @.@@..CG */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.@C..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -999, -999, -999, -999, -999},
-{ -499, -499, -499, -499, -499},
-{ -989, -989, -989, -989, -989},
-{ -789, -789, -789, -789, -789}},
-/*  @.@G..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.@U..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -719, -719, -719, -719, -719},
-{ -989, -989, -989, -989, -989},
-{ -909, -909, -909, -909, -909}}},
-/*  @.A@..CG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.AC..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -999, -999, -999, -999, -999},
-{ -499, -499, -499, -499, -499},
-{ -989, -989, -989, -989, -989},
-{ -789, -789, -789, -789, -789}},
-/*  @.AG..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.AU..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -719, -719, -719, -719, -719},
-{ -989, -989, -989, -989, -989},
-{ -909, -909, -909, -909, -909}}},
-/*  @.C@..CG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.CC..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -999, -999, -999, -999, -999},
-{ -499, -499, -499, -499, -499},
-{ -989, -989, -989, -989, -989},
-{ -789, -789, -789, -789, -789}},
-/*  @.CG..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.CU..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -719, -719, -719, -719, -719},
-{ -989, -989, -989, -989, -989},
-{ -909, -909, -909, -909, -909}}},
-/*  @.G@..CG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.GC..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -999, -999, -999, -999, -999},
-{ -499, -499, -499, -499, -499},
-{ -989, -989, -989, -989, -989},
-{ -789, -789, -789, -789, -789}},
-/*  @.GG..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.GU..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -719, -719, -719, -719, -719},
-{ -989, -989, -989, -989, -989},
-{ -909, -909, -909, -909, -909}}},
-/*  @.U@..CG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.UC..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -999, -999, -999, -999, -999},
-{ -499, -499, -499, -499, -499},
-{ -989, -989, -989, -989, -989},
-{ -789, -789, -789, -789, -789}},
-/*  @.UG..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -569, -569, -569, -569, -569},
-{ -989, -989, -989, -989, -989},
-{ -859, -859, -859, -859, -859}},
-/*  @.UU..CG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1079,-1079,-1079,-1079,-1079},
-{ -719, -719, -719, -719, -719},
-{ -989, -989, -989, -989, -989},
-{ -909, -909, -909, -909, -909}}}},
-/*  @.@@..GC */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -569, -569, -569, -569, -569},
-{ -769, -769, -769, -769, -769},
-{ -759, -759, -759, -759, -759},
-{ -549, -549, -549, -549, -549}},
-/*  @.@C..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -359, -359, -359, -359, -359},
-{ -789, -789, -789, -789, -789},
-{ -549, -549, -549, -549, -549}},
-/*  @.@G..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -609, -609, -609, -609, -609},
-{ -359, -359, -359, -359, -359},
-{ -669, -669, -669, -669, -669},
-{ -549, -549, -549, -549, -549}},
-/*  @.@U..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -439, -439, -439, -439, -439},
-{ -789, -789, -789, -789, -789},
-{ -619, -619, -619, -619, -619}}},
-/*  @.A@..GC */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -569, -569, -569, -569, -569},
-{ -769, -769, -769, -769, -769},
-{ -759, -759, -759, -759, -759},
-{ -549, -549, -549, -549, -549}},
-/*  @.AC..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -359, -359, -359, -359, -359},
-{ -789, -789, -789, -789, -789},
-{ -549, -549, -549, -549, -549}},
-/*  @.AG..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -609, -609, -609, -609, -609},
-{ -359, -359, -359, -359, -359},
-{ -669, -669, -669, -669, -669},
-{ -549, -549, -549, -549, -549}},
-/*  @.AU..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -439, -439, -439, -439, -439},
-{ -789, -789, -789, -789, -789},
-{ -619, -619, -619, -619, -619}}},
-/*  @.C@..GC */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -569, -569, -569, -569, -569},
-{ -769, -769, -769, -769, -769},
-{ -759, -759, -759, -759, -759},
-{ -549, -549, -549, -549, -549}},
-/*  @.CC..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -359, -359, -359, -359, -359},
-{ -789, -789, -789, -789, -789},
-{ -549, -549, -549, -549, -549}},
-/*  @.CG..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -609, -609, -609, -609, -609},
-{ -359, -359, -359, -359, -359},
-{ -669, -669, -669, -669, -669},
-{ -549, -549, -549, -549, -549}},
-/*  @.CU..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -439, -439, -439, -439, -439},
-{ -789, -789, -789, -789, -789},
-{ -619, -619, -619, -619, -619}}},
-/*  @.G@..GC */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -569, -569, -569, -569, -569},
-{ -769, -769, -769, -769, -769},
-{ -759, -759, -759, -759, -759},
-{ -549, -549, -549, -549, -549}},
-/*  @.GC..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -359, -359, -359, -359, -359},
-{ -789, -789, -789, -789, -789},
-{ -549, -549, -549, -549, -549}},
-/*  @.GG..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -609, -609, -609, -609, -609},
-{ -359, -359, -359, -359, -359},
-{ -669, -669, -669, -669, -669},
-{ -549, -549, -549, -549, -549}},
-/*  @.GU..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -439, -439, -439, -439, -439},
-{ -789, -789, -789, -789, -789},
-{ -619, -619, -619, -619, -619}}},
-/*  @.U@..GC */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -569, -569, -569, -569, -569},
-{ -769, -769, -769, -769, -769},
-{ -759, -759, -759, -759, -759},
-{ -549, -549, -549, -549, -549}},
-/*  @.UC..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -359, -359, -359, -359, -359},
-{ -789, -789, -789, -789, -789},
-{ -549, -549, -549, -549, -549}},
-/*  @.UG..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -609, -609, -609, -609, -609},
-{ -359, -359, -359, -359, -359},
-{ -669, -669, -669, -669, -669},
-{ -549, -549, -549, -549, -549}},
-/*  @.UU..GC */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -929, -929, -929, -929, -929},
-{ -439, -439, -439, -439, -439},
-{ -789, -789, -789, -789, -789},
-{ -619, -619, -619, -619, -619}}}},
-/*  @.@@..GU */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.@C..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.@G..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.@U..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.A@..GU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.AC..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.AG..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.AU..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.C@..GU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.CC..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.CG..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.CU..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.G@..GU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.GC..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.GG..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.GU..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.U@..GU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.UC..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.UG..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.UU..GU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}}},
-/*  @.@@..UG */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -769, -769, -769, -769, -769},
-{ -529, -529, -529, -529, -529},
-{ -709, -709, -709, -709, -709},
-{ -599, -599, -599, -599, -599}},
-/*  @.@C..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -839, -839, -839, -839, -839},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -489, -489, -489, -489, -489}},
-/*  @.@G..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1009,-1009,-1009,-1009,-1009},
-{ -409, -409, -409, -409, -409},
-{ -969, -969, -969, -969, -969},
-{ -599, -599, -599, -599, -599}},
-/*  @.@U..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -859, -859, -859, -859, -859},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -409, -409, -409, -409, -409}}},
-/*  @.A@..UG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -769, -769, -769, -769, -769},
-{ -529, -529, -529, -529, -529},
-{ -709, -709, -709, -709, -709},
-{ -599, -599, -599, -599, -599}},
-/*  @.AC..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -839, -839, -839, -839, -839},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -489, -489, -489, -489, -489}},
-/*  @.AG..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1009,-1009,-1009,-1009,-1009},
-{ -409, -409, -409, -409, -409},
-{ -969, -969, -969, -969, -969},
-{ -599, -599, -599, -599, -599}},
-/*  @.AU..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -859, -859, -859, -859, -859},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -409, -409, -409, -409, -409}}},
-/*  @.C@..UG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -769, -769, -769, -769, -769},
-{ -529, -529, -529, -529, -529},
-{ -709, -709, -709, -709, -709},
-{ -599, -599, -599, -599, -599}},
-/*  @.CC..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -839, -839, -839, -839, -839},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -489, -489, -489, -489, -489}},
-/*  @.CG..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1009,-1009,-1009,-1009,-1009},
-{ -409, -409, -409, -409, -409},
-{ -969, -969, -969, -969, -969},
-{ -599, -599, -599, -599, -599}},
-/*  @.CU..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -859, -859, -859, -859, -859},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -409, -409, -409, -409, -409}}},
-/*  @.G@..UG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -769, -769, -769, -769, -769},
-{ -529, -529, -529, -529, -529},
-{ -709, -709, -709, -709, -709},
-{ -599, -599, -599, -599, -599}},
-/*  @.GC..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -839, -839, -839, -839, -839},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -489, -489, -489, -489, -489}},
-/*  @.GG..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1009,-1009,-1009,-1009,-1009},
-{ -409, -409, -409, -409, -409},
-{ -969, -969, -969, -969, -969},
-{ -599, -599, -599, -599, -599}},
-/*  @.GU..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -859, -859, -859, -859, -859},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -409, -409, -409, -409, -409}}},
-/*  @.U@..UG */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -769, -769, -769, -769, -769},
-{ -529, -529, -529, -529, -529},
-{ -709, -709, -709, -709, -709},
-{ -599, -599, -599, -599, -599}},
-/*  @.UC..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -839, -839, -839, -839, -839},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -489, -489, -489, -489, -489}},
-/*  @.UG..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{-1009,-1009,-1009,-1009,-1009},
-{ -409, -409, -409, -409, -409},
-{ -969, -969, -969, -969, -969},
-{ -599, -599, -599, -599, -599}},
-/*  @.UU..UG */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -859, -859, -859, -859, -859},
-{ -529, -529, -529, -529, -529},
-{ -859, -859, -859, -859, -859},
-{ -409, -409, -409, -409, -409}}}},
-/*  @.@@..AU */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.@C..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.@G..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.@U..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.A@..AU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.AC..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.AG..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.AU..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.C@..AU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.CC..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.CG..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.CU..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.G@..AU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.GC..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.GG..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.GU..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}},
-/*  @.U@..AU */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -479, -479, -479, -479, -479},
-{ -309, -309, -309, -309, -309},
-{ -389, -389, -389, -389, -389},
-{ -379, -379, -379, -379, -379}},
-/*  @.UC..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.UG..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}},
-/*  @.UU..AU */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -649, -649, -649, -649, -649},
-{ -289, -289, -289, -289, -289},
-{ -739, -739, -739, -739, -739},
-{ -379, -379, -379, -379, -379}}}},
-/*  @.@@..UA */
-{{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -449, -449, -449, -449, -449},
-{ -479, -479, -479, -479, -479},
-{ -429, -429, -429, -429, -429},
-{ -329, -329, -329, -329, -329}},
-/*  @.@C..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -679, -679, -679, -679, -679},
-{ -559, -559, -559, -559, -559},
-{ -729, -729, -729, -729, -729},
-{ -189, -189, -189, -189, -189}},
-/*  @.@G..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -939, -939, -939, -939, -939},
-{ -249, -249, -249, -249, -249},
-{ -939, -939, -939, -939, -939},
-{ -329, -329, -329, -329, -329}},
-/*  @.@U..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -639, -639, -639, -639, -639},
-{ -229, -229, -229, -229, -229},
-{ -729, -729, -729, -729, -729},
-{ -190, -190, -190, -190, -190}}},
-/*  @.A@..UA */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -449, -449, -449, -449, -449},
-{ -479, -479, -479, -479, -479},
-{ -429, -429, -429, -429, -429},
-{ -329, -329, -329, -329, -329}},
-/*  @.AC..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -679, -679, -679, -679, -679},
-{ -559, -559, -559, -559, -559},
-{ -729, -729, -729, -729, -729},
-{ -189, -189, -189, -189, -189}},
-/*  @.AG..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -939, -939, -939, -939, -939},
-{ -249, -249, -249, -249, -249},
-{ -939, -939, -939, -939, -939},
-{ -329, -329, -329, -329, -329}},
-/*  @.AU..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -639, -639, -639, -639, -639},
-{ -229, -229, -229, -229, -229},
-{ -729, -729, -729, -729, -729},
-{ -190, -190, -190, -190, -190}}},
-/*  @.C@..UA */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -449, -449, -449, -449, -449},
-{ -479, -479, -479, -479, -479},
-{ -429, -429, -429, -429, -429},
-{ -329, -329, -329, -329, -329}},
-/*  @.CC..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -679, -679, -679, -679, -679},
-{ -559, -559, -559, -559, -559},
-{ -729, -729, -729, -729, -729},
-{ -189, -189, -189, -189, -189}},
-/*  @.CG..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -939, -939, -939, -939, -939},
-{ -249, -249, -249, -249, -249},
-{ -939, -939, -939, -939, -939},
-{ -329, -329, -329, -329, -329}},
-/*  @.CU..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -639, -639, -639, -639, -639},
-{ -229, -229, -229, -229, -229},
-{ -729, -729, -729, -729, -729},
-{ -190, -190, -190, -190, -190}}},
-/*  @.G@..UA */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -449, -449, -449, -449, -449},
-{ -479, -479, -479, -479, -479},
-{ -429, -429, -429, -429, -429},
-{ -329, -329, -329, -329, -329}},
-/*  @.GC..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -679, -679, -679, -679, -679},
-{ -559, -559, -559, -559, -559},
-{ -729, -729, -729, -729, -729},
-{ -189, -189, -189, -189, -189}},
-/*  @.GG..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -939, -939, -939, -939, -939},
-{ -249, -249, -249, -249, -249},
-{ -939, -939, -939, -939, -939},
-{ -329, -329, -329, -329, -329}},
-/*  @.GU..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -639, -639, -639, -639, -639},
-{ -229, -229, -229, -229, -229},
-{ -729, -729, -729, -729, -729},
-{ -190, -190, -190, -190, -190}}},
-/*  @.U@..UA */
-{{{  -50,  -50,  -50,  -50,  -50},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -449, -449, -449, -449, -449},
-{ -479, -479, -479, -479, -479},
-{ -429, -429, -429, -429, -429},
-{ -329, -329, -329, -329, -329}},
-/*  @.UC..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -679, -679, -679, -679, -679},
-{ -559, -559, -559, -559, -559},
-{ -729, -729, -729, -729, -729},
-{ -189, -189, -189, -189, -189}},
-/*  @.UG..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -939, -939, -939, -939, -939},
-{ -249, -249, -249, -249, -249},
-{ -939, -939, -939, -939, -939},
-{ -329, -329, -329, -329, -329}},
-/*  @.UU..UA */
-{{  -50,  -50,  -50,  -50,  -50},
-{ -639, -639, -639, -639, -639},
-{ -229, -229, -229, -229, -229},
-{ -729, -729, -729, -729, -729},
-{ -190, -190, -190, -190, -190}}}},
-/*  @.@@.. @ */
-{{{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@A.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@C.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@G.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.@U.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}}},
-/*  @.A@.. @ */
-{{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AA.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AC.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AG.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.AU.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}}},
-/*  @.C@.. @ */
-{{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CA.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CC.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CG.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.CU.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}}},
-/*  @.G@.. @ */
-{{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GA.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GC.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GG.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.GU.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}}},
-/*  @.U@.. @ */
-{{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UA.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UC.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UG.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}},
-/*  @.UU.. @ */
-{{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100},
-{ -100, -100, -100, -100, -100}}}}}};
-
-int 
-energy_param::
-getMaxNinio()      
-{ return MAX_NINIO; }
-    
-int 
-energy_param::
-getNinio(int i)   
-{ return F_ninio37[i]; }
-    
-int 
-energy_param::getDangle5(int i, int j)       
-{ return dangle5_37[convertPairType(i)][convertBaseType(j)]; } 
-    
-int 
-energy_param::
-getDangle3(int i, int j) 
-{ return dangle3_37[convertPairType(i)][convertBaseType(j)]; }
-    
-int 
-energy_param::
-getHairpin(int i) 
-{ return hairpin37[i]; }
-    
-int 
-energy_param::
-getInternalLoop(int i) 
-{ return internal_loop37[i]; }
-    
-int 
-energy_param::getBulge(int i)  
-{ return bulge37[i]; }
-    
-const char 
-*energy_param::
-getTetraLoop(int i) 
-{ return Tetrastrings[i]; }
-    
-int 
-energy_param::
-getTetraLoopEnergy(int i)  
-{ return TETRA_ENERGY37[i]; }
-    
-int 
-energy_param::
-getStack(int i, int j) 
-{ return stack37[convertPairType(i)][convertPairType(j)]; }
-    
-int 
-energy_param::
-getTstackH(int i, int j)      
-{ return mismatchH37[convertPairType(i)][convertLeftType(j)][convertRightType(j)]; }
-    
-int 
-energy_param::
-getTstackI(int i, int j)      
-{ return mismatchI37[convertPairType(i)][convertLeftType(j)][convertRightType(j)]; }
-    
-int 
-energy_param::
-getInt11(int i, int j, int k)
-{ return int11_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertRightType(k)]; }
-    
-int 
-energy_param::
-getInt21(int i, int j, int k, int l)
-{ return int21_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertBaseType(l)][convertRightType(k)]; }
-    
-int 
-energy_param::
-getInt22(int i, int j, int k, int l) 
-{ return int22_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertLeftType(l)][convertRightType(l)][convertRightType(k)]; }
-
-int 
-energy_param::
-getMLintern() 
-{ return ML_intern37;  }
-    
-int 
-energy_param::
-getMLBase()  
-{ return ML_BASE37;    }
-
-int 
-energy_param::
-getMLclosing() 
-{ return ML_closing37; }
-    
-int 
-energy_param::
-getTerminalAU() 
-{ return TerminalAU;   }
-
-/* 
-   1    C<->G    1
-   2    G<->C    2
-   3    G<->U    3
-   5    U<->G    4
-   0    A<->U    5
-   4    U<->A    6
-   6             0
- */
-int 
-energy_param::
-convertPairType(int type) 
-{
-    if     (type == 0)  return 5;
-    else if(type == 1)  return 1;
-    else if(type == 2)  return 2;
-    else if(type == 3)  return 3;
-    else if(type == 4)  return 6;
-    else if(type == 5)  return 4;
-    else if(type == 6)  return 0;
-    else { cerr << "error convertPairType" << endl; exit(1); }
-}
-
-/*   
-    0 A 1
-    1 C 2
-    2 G 3 
-    3 U 4
- */
-int
-energy_param::
-convertBaseType(int type) 
-{
-    if     (type == 0) return 1;
-    else if(type == 1) return 2;
-    else if(type == 2) return 3;
-    else if(type == 3) return 4;
-    else { cerr << "error convertBaseType" << endl; exit(1); }
-}
-
-/*
-  A<->A  0
-  A<->C  1
-  A<->G  2
-  A<->U  3
-  C<->A  4
-  C<->C  5
-  C<->G  6
-  C<->U  7
-  G<->A  8
-  G<->C  9
-  G<->G 10
-  G<->U 11
-  U<->A 12
-  U<->C 13
-  U<->G 14
-  U<->U 15
- */
-int 
-energy_param::
-convertLeftType(int type) 
-{
-    if     (0 <= type && type <= 3 ) { return 1; }
-    else if(4 <= type && type <= 7 ) { return 2; }
-    else if(8 <= type && type <= 11) { return 3; }
-    else if(12<= type && type <= 15) { return 4; }
-    else { cerr << "convertLeftType" << endl; exit(1); }
-}
-
-int
-energy_param::
-convertRightType(int type)
-{
-    if     (type % 4 == 0) { return 1; }
-    else if(type % 4 == 1) { return 2; }
-    else if(type % 4 == 2) { return 3; }
-    else if(type % 4 == 3) { return 4; }
-    else { cerr << "convertRightType" << endl; exit(1); }
-}
-}
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp
deleted file mode 100644 (file)
index b6bcd4c..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* 
-    Current free energy parameters are summarized in:
-
-    D.H.Mathews, J. Sabina, M. ZUker, D.H. Turner
-    "Expanded sequence dependence of thermodynamic parameters improves
-    prediction of RNA secondary structure"
-    JMB, 288, pp 911-940, 1999
-
-    Enthalpies taken from:
-    
-    A. Walter, D Turner, J Kim, M Lyttle, P M"uller, D Mathews, M Zuker
-    "Coaxial stckaing of helices enhances binding of oligoribonucleotides.."
-    PNAS, 91, pp 9218-9222, 1994
-    
-    D.H. Turner, N. Sugimoto, and S.M. Freier.
-    "RNA Structure Prediction",
-    Ann. Rev. Biophys. Biophys. Chem. 17, 167-192, 1988.
-
-    John A.Jaeger, Douglas H.Turner, and Michael Zuker.
-    "Improved predictions of secondary structures for RNA",
-    PNAS, 86, 7706-7710, October 1989.
-    
-    L. He, R. Kierzek, J. SantaLucia, A.E. Walter, D.H. Turner
-    "Nearest-Neughbor Parameters for GU Mismatches...."
-    Biochemistry 1991, 30 11124-11132
-
-    A.E. Peritz, R. Kierzek, N, Sugimoto, D.H. Turner
-    "Thermodynamic Study of Internal Loops in Oligoribonucleotides..."
-    Biochemistry 1991, 30, 6428--6435
-
-    
-*/
-
-#ifndef ENERGY_PARAM_H
-#define ENERGY_PARAM_H
-
-#include <iostream>
-#include <cstdlib> // by katoh
-
-using namespace std;
-namespace MXSCARNA {
-class energy_param {
-
-    static const int    INF;
-    static const int    NST;
-    static const int    DEF;
-
-    static const double lxc37; /* parameter for logarithmic loop
-                             energy extrapolation            */
-    static const int stack37[8][8];
-    static const int enthalpies[8][8];
-    static const int oldhairpin37[31];
-    static const int hairpin37[31];
-    static const int oldbulge37[31];
-    static const int bulge37[31];
-    static const int oldinternal_loop37[31];
-    static const int internal_loop37[31];
-    static const int mismatchI37[8][5][5];
-    static const int mismatchH37[8][5][5];
-    static const int mism_H[8][5][5];
-    static const int dangle5_37[8][5];
-    static const int dangle3_37[8][5];
-    static const int dangle3_H[8][5];
-    static const int dangle5_H[8][5];
-    static const int ML_BASE37;
-    static const int ML_closing37;
-    static const int ML_intern37;
-    static const int MAX_NINIO;
-    static const int F_ninio37[5];
-    static const char Tetraloops[1400];
-    static const char Tetrastrings[30][7];
-    static const int TETRA_ENERGY37[200];
-    static const int TETRA_ENTH37;
-    static const int TerminalAU;
-    static const int DuplexInit;
-
-    static const int int11_37[8][8][5][5];
-    static const int int11_H[8][8][5][5];
-    static const int int21_37[8][8][5][5][5];
-    static const int int21_H[8][8][5][5][5];
-    static const int int22_37[8][8][5][5][5][5];
-    static const int int22_H[8][8][5][5][5][5];
-
-    int convertPairType(int type);
-    int convertBaseType(int type);
-    int convertLeftType(int type);
-    int convertRightType(int type);
- public:
-    int getMaxNinio();
-    int getNinio(int i);
-    int getDangle5(int i, int j);
-    int getDangle3(int i, int j);
-    int getHairpin(int i);
-    int getInternalLoop(int i);
-    int getBulge(int i);
-    const char *getTetraLoop(int i);
-    int getTetraLoopEnergy(int i);
-    int getStack(int i, int j);
-    int getTstackH(int i, int j);
-    int getTstackI(int i, int j);
-    int getInt11(int i, int j, int k);
-    int getInt21(int i, int j, int k, int l);
-    int getInt22(int i, int j, int k, int l);
-    int getMLintern();
-    int getMLBase();
-    int getMLclosing();
-    int getTerminalAU();
-};
-}
-#endif
diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/params.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/params.h
deleted file mode 100644 (file)
index 46d6122..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "energy_const.h"
-typedef struct {
-  int id;
-  int stack[NBPAIRS+1][NBPAIRS+1];
-  int hairpin[31];
-  int bulge[MAXLOOP+1];
-  int internal_loop[MAXLOOP+1];
-  int mismatchI[NBPAIRS+1][5][5];
-  int mismatchH[NBPAIRS+1][5][5];
-  int mismatchM[NBPAIRS+1][5][5];
-  int dangle5[NBPAIRS+1][5];
-  int dangle3[NBPAIRS+1][5];
-  int int11[NBPAIRS+1][NBPAIRS+1][5][5];
-  int int21[NBPAIRS+1][NBPAIRS+1][5][5][5];
-  int int22[NBPAIRS+1][NBPAIRS+1][5][5][5][5];
-  int F_ninio[5];
-  double lxc;
-  int MLbase;
-  int MLintern[NBPAIRS+1];
-  int MLclosing;
-  int TerminalAU;
-  int DuplexInit;
-  int TETRA_ENERGY[200];
-  char Tetraloops[1401];
-  int Triloop_E[40];
-  char Triloops[241];
-  double temperature;
-}  paramT;
-
-extern paramT *scale_parameters(void);
-extern paramT *copy_parameters(void);
-extern paramT *set_parameters(paramT *dest);
diff --git a/binaries/src/mafft/extensions/univscript.tmpl b/binaries/src/mafft/extensions/univscript.tmpl
deleted file mode 100644 (file)
index d6200d2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-progs="_PROGS"
-for prog in $progs; do
-       printf  $prog" "
-done
-
-
-make clean
-make CC="gcc-4.0" CFLAGS="-arch ppc64 -m64 -O3  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch ppc64 -m64 -O3  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4"
-for prog in $progs; do
-       mv $prog $prog.ppc64
-done
-
-make clean
-make CC="gcc-4.0" CFLAGS="-arch ppc -m32 -O3  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch ppc -m32 -O3  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4"
-for prog in $progs; do
-       mv $prog $prog.ppc32
-done
-
-make clean
-make CC="gcc-4.0" CFLAGS="-arch x86_64 -fast -m64  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch x86_64 -fast -m64  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4"
-for prog in $progs; do
-       mv $prog $prog.intel64
-done
-
-make clean
-make CC="gcc-4.0" CFLAGS="-arch i386 -fast -m32  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch i386 -fast -m32  -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4"
-for prog in $progs; do
-       mv $prog $prog.intel32
-done
-
-set $progs
-for prog in $progs; do
-#      lipo -create $prog.icc $prog.ppc32 $prog.ppc64 -output $prog
-       lipo -create $prog.intel64 $prog.intel32 $prog.ppc32 $prog.ppc64 -output $prog
-       cp $prog ../binaries
-done