Repository: nbrg-ppcu/prokbert (language: python)

Issue:
Adding manifest file for wheel



Discussion / hints:

Fix patch:
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..5a5d873
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,4 @@
+prune prokbert/dev_notebooks
+prune src/prokbert/dev_notebooks
+graft docs
+prune docs/_build
diff --git a/dependences_tmp.txt b/dependences_tmp.txt
deleted file mode 100644
index 9f1f87a..0000000
--- a/dependences_tmp.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# Dependencies
-
-pandas
-biopython
-gzip
-intervaltree
-umap-learn
-
-pyyaml
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_all_masked_vectors.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_all_masked_vectors.rst
deleted file mode 100644
index b252d78..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_all_masked_vectors.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_all\_masked\_vectors
-==============================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_all_masked_vectors
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_kmers_for_seq_positions.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_kmers_for_seq_positions.rst
deleted file mode 100644
index 69970f1..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_kmers_for_seq_positions.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_kmers\_for\_seq\_positions
-====================================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_kmers_for_seq_positions
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_mask_predictions.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_mask_predictions.rst
deleted file mode 100644
index e3a5924..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_mask_predictions.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_mask\_predictions
-===========================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_mask_predictions
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_metric_for_masking_position.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_metric_for_masking_position.rst
deleted file mode 100644
index 76cc9d0..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_metric_for_masking_position.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_metric\_for\_masking\_position
-========================================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_metric_for_masking_position
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_prediction_results_for_segment.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_prediction_results_for_segment.rst
deleted file mode 100644
index 89a898b..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_prediction_results_for_segment.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_prediction\_results\_for\_segment
-===========================================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_prediction_results_for_segment
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_pretraining_evaluation_batch_size_megatron_bert_eval_load_model.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_pretraining_evaluation_batch_size_megatron_bert_eval_load_model.rst
deleted file mode 100644
index 2208090..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_pretraining_evaluation_batch_size_megatron_bert_eval_load_model.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_pretraining\_evaluation\_batch\_size\_megatron\_bert\_eval\_load\_model
-=================================================================================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_pretraining_evaluation_batch_size_megatron_bert_eval_load_model
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.get_shift_counts.rst b/docs/api/prokbert.dev_pretraining_eval_lib.get_shift_counts.rst
deleted file mode 100644
index d7c7bf0..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.get_shift_counts.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.get\_shift\_counts
-=======================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: get_shift_counts
\ No newline at end of file
diff --git a/docs/api/prokbert.dev_pretraining_eval_lib.pretty_print_overlapping_sequence.rst b/docs/api/prokbert.dev_pretraining_eval_lib.pretty_print_overlapping_sequence.rst
deleted file mode 100644
index d872355..0000000
--- a/docs/api/prokbert.dev_pretraining_eval_lib.pretty_print_overlapping_sequence.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.dev\_pretraining\_eval\_lib.pretty\_print\_overlapping\_sequence
-=========================================================================
-
-.. currentmodule:: prokbert.dev_pretraining_eval_lib
-
-.. autofunction:: pretty_print_overlapping_sequence
\ No newline at end of file
diff --git a/docs/api/prokbert.dnadatasets.DnaDatasetID.rst b/docs/api/prokbert.dnadatasets.DnaDatasetID.rst
deleted file mode 100644
index 4d12907..0000000
--- a/docs/api/prokbert.dnadatasets.DnaDatasetID.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-﻿prokbert.dnadatasets.DnaDatasetID
-=================================
-
-.. currentmodule:: prokbert.dnadatasets
-
-.. autoclass:: DnaDatasetID
-
-   
-   .. automethod:: __init__
-
-   
-   .. rubric:: Methods
-
-   .. autosummary::
-   
-      ~DnaDatasetID.__init__
-   
-   
-
-   
-   
-   
\ No newline at end of file
diff --git a/docs/api/prokbert.dnadatasets.ProkDataset.rst b/docs/api/prokbert.dnadatasets.ProkDataset.rst
deleted file mode 100644
index c97ecd7..0000000
--- a/docs/api/prokbert.dnadatasets.ProkDataset.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-﻿prokbert.dnadatasets.ProkDataset
-================================
-
-.. currentmodule:: prokbert.dnadatasets
-
-.. autoclass:: ProkDataset
-
-   
-   .. automethod:: __init__
-
-   
-   .. rubric:: Methods
-
-   .. autosummary::
-   
-      ~ProkDataset.__init__
-   
-   
-
-   
-   
-   
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.load_contigs.rst b/docs/api/prokbert.sequtils.load_contigs.rst
deleted file mode 100644
index c3ee45d..0000000
--- a/docs/api/prokbert.sequtils.load_contigs.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.load\_contigs
-===============================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: load_contigs
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.load_vocab.rst b/docs/api/prokbert.sequtils.load_vocab.rst
deleted file mode 100644
index 1f8abb2..0000000
--- a/docs/api/prokbert.sequtils.load_vocab.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.load\_vocab
-=============================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: load_vocab
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.pretty_print_overlapping_sequence.rst b/docs/api/prokbert.sequtils.pretty_print_overlapping_sequence.rst
deleted file mode 100644
index 5db93c4..0000000
--- a/docs/api/prokbert.sequtils.pretty_print_overlapping_sequence.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.pretty\_print\_overlapping\_sequence
-======================================================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: pretty_print_overlapping_sequence
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.segmentate_sequences_from_list.rst b/docs/api/prokbert.sequtils.segmentate_sequences_from_list.rst
deleted file mode 100644
index d000efc..0000000
--- a/docs/api/prokbert.sequtils.segmentate_sequences_from_list.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.segmentate\_sequences\_from\_list
-===================================================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: segmentate_sequences_from_list
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.segmentate_single_sequence.rst b/docs/api/prokbert.sequtils.segmentate_single_sequence.rst
deleted file mode 100644
index fe931dd..0000000
--- a/docs/api/prokbert.sequtils.segmentate_single_sequence.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.segmentate\_single\_sequence
-==============================================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: segmentate_single_sequence
\ No newline at end of file
diff --git a/docs/api/prokbert.sequtils.tokenize_sentence_from_list.rst b/docs/api/prokbert.sequtils.tokenize_sentence_from_list.rst
deleted file mode 100644
index a45304e..0000000
--- a/docs/api/prokbert.sequtils.tokenize_sentence_from_list.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿prokbert.sequtils.tokenize\_sentence\_from\_list
-================================================
-
-.. currentmodule:: prokbert.sequtils
-
-.. autofunction:: tokenize_sentence_from_list
\ No newline at end of file
diff --git a/docs/dev_pretraining_eval_lib.rst b/docs/dev_pretraining_eval_lib.rst
deleted file mode 100644
index 99d30e9..0000000
--- a/docs/dev_pretraining_eval_lib.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-======================
-Pretraining eval
-======================
-
-
-Evaluation of Pretraining
--------------------------
-This part is the eval of pretriain
-
-
-Functions
-~~~~~~~~~~~~~~~~~~~~~~~
-
-.. autosummary::
-   :toctree: api
-
-   prokbert.dev_pretraining_eval_lib.get_shift_counts
-   prokbert.dev_pretraining_eval_lib.get_kmers_for_seq_positions
-   prokbert.dev_pretraining_eval_lib.pretty_print_overlapping_sequence
-   prokbert.dev_pretraining_eval_lib.get_all_masked_vectors
-   prokbert.dev_pretraining_eval_lib.get_pretraining_evaluation_batch_size_megatron_bert_eval_load_model
-   prokbert.dev_pretraining_eval_lib.get_mask_predictions
-   prokbert.dev_pretraining_eval_lib.get_metric_for_masking_position
-   prokbert.dev_pretraining_eval_lib.get_prediction_results_for_segment
\ No newline at end of file
diff --git a/docs/dnadatasets.rst b/docs/dnadatasets.rst
deleted file mode 100644
index 14bb280..0000000
--- a/docs/dnadatasets.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-====================
-DNA DataSets
-====================
-
-ProkDataset
-~~~~~~~~~~~~~~~~~~~~
-
-.. autosummary::
-   :toctree: api
-
-   prokbert.dnadatasets.ProkDataset
-   prokbert.dnadatasets.DnaDatasetID
\ No newline at end of file
diff --git a/docs/dnatokenizer.rst b/docs/dnatokenizer.rst
deleted file mode 100644
index b3f5ec1..0000000
--- a/docs/dnatokenizer.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-========================
-DNA Tokenizer Docs
-========================
\ No newline at end of file
diff --git a/docs/evalutils.rst b/docs/evalutils.rst
deleted file mode 100644
index 90d8cbc..0000000
--- a/docs/evalutils.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-===================
-EvalUtils
-===================
\ No newline at end of file
diff --git a/docs/preproclib.rst b/docs/preproclib.rst
deleted file mode 100644
index 196f3ff..0000000
--- a/docs/preproclib.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-=========================
-ProkBERT preproclib
-=========================
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index d9172b6..a0a945a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,18 +4,19 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "prokbert"
-version = "0.0.19"
+version = "0.0.20"
 description = "ProkBERT"
 readme = "README.md"
-requires-python = ">=3.7"
-dependencies = [ "biopython>=1.79", "pandas>=1.4.4", "intervaltree>=0.0.1", "umap-learn>=0.0.1",]
+requires-python = ">=3.9"
+dependencies = ["transformers>=4.23", "biopython>=1.79", "pandas>=2.0.0", "h5py>=3.9.0", "torch>=2.0.0", "torchvision>=0.15.0", "datasets>2.0.1", "scikit-learn>=1.2.2", "scipy>=1.10.1","tables>=3.8.0","accelerate>=0.20.1",]
 classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent",]
 [[project.authors]]
 name = "nbrg-ppcu"
-email = "nbrg@itk.ppke.hu"
+email = "obalasz@gmail.com"
 
 [project.urls]
 Homepage = "https://github.com/nbrg-ppcu/prokbert"
 "Bug Tracker" = "https://github.com/nbrg-ppcu/prokbert/issues"
 
 [tool.setuptools_scm]
+
diff --git a/src/prokbert/ProkBERTDataCollator.py b/src/prokbert/ProkBERTDataCollator.py
index bb5f841..a1b6b9d 100644
--- a/src/prokbert/ProkBERTDataCollator.py
+++ b/src/prokbert/ProkBERTDataCollator.py
@@ -1,5 +1,3 @@
-import random
-import warnings
 import logging
 from collections.abc import Mapping
 from dataclasses import dataclass
@@ -23,11 +21,11 @@ class ProkBERTDataCollator(DataCollatorForLanguageModeling):
         replace_prob (float): Probability of replacing a token. Default is 0.8.
         random_prob (float): Probability of changing a token to a random token. Default is 0.1.
     """
-
     mask_to_left: int = 0
     mask_to_right: int = 0
     replace_prob: float = 0.8
     random_prob: float = 0.1
+    torch_token_dtype = torch.int16
 
     def __str__(self) -> str:
         """
@@ -36,12 +34,13 @@ def __str__(self) -> str:
         """
         collator_params = '''\
 Collator Parameters:
-Number of tokens masked to left:  {0}
-Number of tokens masked to right: {1}
-Probability of restoring a masked token: {2}
-Probability of changing to a random token: {3}
-MLM Probability: {4}
-'''.format(self.mask_to_left, self.mask_to_right, self.replace_prob, self.random_prob, self.mlm_probability)
+  Number of tokens masked to left:  {0}
+  Number of tokens masked to right: {1}
+  Probability of restoring a masked token: {2}
+  Probability of changing to a random token: {3}
+  MLM Probability: {4}
+  Default token type: {5}
+'''.format(self.mask_to_left, self.mask_to_right, self.replace_prob, self.random_prob, self.mlm_probability, self.torch_token_dtype)
         return collator_params
 
     def set_mask_neighborhood_params(self, mask_to_left: int = 0, mask_to_right: int = 0):
@@ -62,6 +61,10 @@ def set_mask_neighborhood_params(self, mask_to_left: int = 0, mask_to_right: int
         self.mask_to_right = mask_to_right   
         logger.info(f"Mask neighborhood parameters set to: mask_to_left={mask_to_left}, mask_to_right={mask_to_right}")
 
+    def set_torch_token_dtype(self, torch_token_dtype=torch.int16):
+        self.torch_token_dtype = torch_token_dtype
+
+
     def torch_mask_tokens(self, inputs: torch.Tensor, special_tokens_mask: Optional[torch.Tensor] = None) -> Tuple[torch.Tensor, torch.Tensor]:
         """
         Prepare masked tokens inputs/labels for masked language modeling: 80% MASK, 10% random, 10% original.
@@ -75,7 +78,13 @@ def torch_mask_tokens(self, inputs: torch.Tensor, special_tokens_mask: Optional[
         """
         labels = inputs.clone()
         probability_matrix = torch.full(labels.shape, self.mlm_probability)
-        special_tokens_mask = special_tokens_mask.bool() if special_tokens_mask else torch.tensor([], dtype=torch.bool)
+        if special_tokens_mask is None:
+            special_tokens_mask = [
+                self.tokenizer.get_special_tokens_mask(val, already_has_special_tokens=True) for val in labels.tolist()
+            ]
+            special_tokens_mask = torch.tensor(special_tokens_mask, dtype=torch.bool)
+        else:
+            special_tokens_mask = special_tokens_mask.bool()
         probability_matrix.masked_fill_(special_tokens_mask, value=0.0)
         masked_indices = torch.bernoulli(probability_matrix).bool()
         masked_indices_shape = masked_indices.shape
@@ -84,8 +93,8 @@ def torch_mask_tokens(self, inputs: torch.Tensor, special_tokens_mask: Optional[
             mask_coords = act_indeces[masked_indices[i]]
             new_mask_coords = []
             for act_coord in mask_coords:
-                index_start = max(1, act_coord - self.mask_to_left) #végeket nem maszkoljuk ki
-                index_end = min (act_coord + self.mask_to_right + 1, masked_indices_shape[1]-1) #végeket nem maszkoljuk ki
+                index_start = max(1, act_coord - self.mask_to_left) 
+                index_end = min (act_coord + self.mask_to_right + 1, masked_indices_shape[1]-1) 
                 new_range = list(range(index_start, index_end))
                 new_mask_coords.extend(new_range)
             new_mask_coords = list(set(new_mask_coords))
@@ -100,10 +109,12 @@ def torch_mask_tokens(self, inputs: torch.Tensor, special_tokens_mask: Optional[
         # X% of the time, we replace masked input tokens with random word
         if self.random_prob > 0:
             indices_random = torch.bernoulli(torch.full(labels.shape, self.random_prob)).bool() & masked_indices & ~indices_replaced
-            random_words = torch.randint(len(self.tokenizer), labels.shape, dtype=torch.long)
+            random_words = torch.randint(len(self.tokenizer), labels.shape, dtype=self.torch_token_dtype)
             inputs[indices_random] = random_words[indices_random]
 
         # The rest of the time (10% of the time) we keep the masked input tokens unchanged
+        labels = labels.to(dtype=torch.int64)
+        
         return inputs, labels
 
 
diff --git a/src/prokbert/config_utils.py b/src/prokbert/config_utils.py
index 1f15e72..2b04bd3 100644
--- a/src/prokbert/config_utils.py
+++ b/src/prokbert/config_utils.py
@@ -4,52 +4,85 @@
 from os.path import join
 import os
 import numpy as np
+import torch
 from multiprocessing import cpu_count
 
-class SeqConfig:
-    """Class to manage and validate sequence processing configurations."""
+class BaseConfig:
+    """Base class for managing and validating configurations."""
 
-    numpy_dtype_mapping = {1: np.uint8,
-                           2: np.uint16,
-                           8: np.uint64,
-                           4: np.uint32}
+    numpy_dtype_mapping = {1: np.int8,
+                           2: np.int16,
+                           8: np.int64,
+                           4: np.int32}
 
     def __init__(self):
-        """
-        Initialize the configuration, loading default parameters from the YAML file.
-        """
-        self.default_seq_config_file = self._get_default_sequence_processing_config_file()
-        with open(self.default_seq_config_file, 'r') as file:
-            self.parameters = yaml.safe_load(file)
-        # Some postprocessing steps
-        self.parameters['tokenization']['shift']['constraints']['max'] = self.parameters['tokenization']['kmer']['default']-1
-        # Ha valaki update-li a k-mer paramter-t, akkor triggerelni kellene, hogy mi legyen. 
-
-        self.get_set_segmentation_parameters()
-        self.get_and_set_tokenization_params()
-        self.get_set_computational_paramters()
+        super().__init__()
 
-
-        
-
-    def _get_default_sequence_processing_config_file(self) -> str:
+    def cast_to_expected_type(self, parameter_class: str, parameter_name: str, value: any) -> any:
         """
-        Retrieve the default sequence processing configuration file.
+        Cast the given value to the expected type.
 
-        :return: Path to the configuration file.
-        :rtype: str
+        :param parameter_class: The class/category of the parameter.
+        :type parameter_class: str
+        :param parameter_name: The name of the parameter.
+        :type parameter_name: str
+        :param value: The value to be casted.
+        :type value: any
+        :return: Value casted to the expected type.
+        :rtype: any
+        :raises ValueError: If casting fails.
         """
-        current_path = pathlib.Path(__file__).parent
-        prokbert_seq_config_file = join(current_path, 'configs', 'sequence_processing.yaml')
-        self.current_path = current_path
+        expected_type = self.parameters[parameter_class][parameter_name]['type']
+
+        if expected_type in ["integer", "int"]:
+            try:
+                return int(value)
+            except ValueError:
+                raise ValueError(f"Failed to cast value '{value}' to integer for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type == "float":
+            try:
+                return float(value)
+            except ValueError:
+                raise ValueError(f"Failed to cast value '{value}' to float for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type in ["string", "str"]:
+            return str(value)
+        elif expected_type in ["boolean", "bool"]:
+            if isinstance(value, bool):
+                return value
+            elif str(value).lower() == "true":
+                return True
+            elif str(value).lower() == "false":
+                return False
+            else:
+                raise ValueError(f"Failed to cast value '{value}' to boolean for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type == "type":
+            # For this type, we will simply return the value without casting. 
+            # It assumes the configuration provides valid Python types.
+            return value
+        elif expected_type == "list":
+            if isinstance(value, list):
+                return value
+            else:
+                raise ValueError(f"Failed to validate value '{value}' as a list for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type == "tuple":
+            if isinstance(value, tuple):
+                return value
+            else:
+                raise ValueError(f"Failed to validate value '{value}' as a tuple for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type == "set":
+            if isinstance(value, set):
+                return value
+            else:
+                raise ValueError(f"Failed to validate value '{value}' as a set for parameter '{parameter_name}' in class '{parameter_class}'.")
+        elif expected_type == "dict":
+            if isinstance(value, dict):
+                return value
+            else:
+                raise ValueError(f"Failed to validate value '{value}' as a dict for parameter '{parameter_name}' in class '{parameter_class}'.")
+        else:
+            raise ValueError(f"Unknown expected type '{expected_type}' for parameter '{parameter_name}' in class '{parameter_class}'.")
+
 
-        try:
-            # Attempt to read the environment variable
-            prokbert_seq_config_file = os.environ['SEQ_CONFIG_FILE']
-        except KeyError:
-            # Handle the case when the environment variable is not found
-            print("SEQ_CONFIG_FILE environment variable has not been set. Using default value: {0}".format(prokbert_seq_config_file))
-        return prokbert_seq_config_file
 
     def get_parameter(self, parameter_class: str, parameter_name: str) -> any:
         """
@@ -59,10 +92,13 @@ def get_parameter(self, parameter_class: str, parameter_name: str) -> any:
         :type parameter_class: str
         :param parameter_name: The name of the parameter.
         :type parameter_name: str
-        :return: Default value of the parameter.
+        :return: Default value of the parameter, casted to the expected type.
         :rtype: any
         """
-        return self.parameters[parameter_class][parameter_name]['default']
+        default_value = self.parameters[parameter_class][parameter_name]['default']
+        return self.cast_to_expected_type(parameter_class, parameter_name, default_value)
+    
+
     
     def validate_type(self, parameter_class: str, parameter_name: str, value: any) -> bool:
         """
@@ -143,8 +179,48 @@ def describe(self, parameter_class: str, parameter_name: str) -> str:
         :rtype: str
         """
         return self.parameters[parameter_class][parameter_name]['description']
+
+
+
+class SeqConfig(BaseConfig):
+    """Class to manage and validate sequence processing configurations."""
+
+    def __init__(self):
+        super().__init__()
+        self.default_seq_config_file = self._get_default_sequence_processing_config_file()
+        with open(self.default_seq_config_file, 'r') as file:
+            self.parameters = yaml.safe_load(file)
+
+        # Some postprocessing steps
+        self.parameters['tokenization']['shift']['constraints']['max'] = self.parameters['tokenization']['kmer']['default']-1
+        # Ha valaki update-li a k-mer paramter-t, akkor triggerelni kellene, hogy mi legyen. 
+
+        self.get_and_set_segmentation_parameters()
+        self.get_and_set_tokenization_parameters()
+        self.get_and_set_computational_parameters()
+
+    def _get_default_sequence_processing_config_file(self) -> str:
+        """
+        Retrieve the default sequence processing configuration file.
+
+        :return: Path to the configuration file.
+        :rtype: str
+        """
+        current_path = pathlib.Path(__file__).parent
+        prokbert_seq_config_file = join(current_path, 'configs', 'sequence_processing.yaml')
+        self.current_path = current_path
+
+        try:
+            # Attempt to read the environment variable
+            prokbert_seq_config_file = os.environ['SEQ_CONFIG_FILE']
+        except KeyError:
+            # Handle the case when the environment variable is not found
+            pass
+            # print("SEQ_CONFIG_FILE environment variable has not been set. Using default value: {0}".format(prokbert_seq_config_file))
+        return prokbert_seq_config_file
+
     
-    def get_set_segmentation_parameters(self, parameters: dict = {}) -> dict:
+    def get_and_set_segmentation_parameters(self, parameters: dict = {}) -> dict:
         """
         Retrieve and validate the provided parameters for segmentation.
 
@@ -167,7 +243,7 @@ def get_set_segmentation_parameters(self, parameters: dict = {}) -> dict:
         return segmentation_params
 
 
-    def get_and_set_tokenization_params(self, parameters: dict = {}) -> dict:
+    def get_and_set_tokenization_parameters(self, parameters: dict = {}) -> dict:
         # Updating the other parameters if necesseary, i.e. if k-mer has-been changed, then the shift is updated and we run a parameter check at the end
 
         tokenization_params = {k: self.get_parameter('tokenization', k) for k in self.parameters['tokenization']}
@@ -181,18 +257,19 @@ def get_and_set_tokenization_params(self, parameters: dict = {}) -> dict:
         vocabfile=tokenization_params['vocabfile']
         act_kmer = tokenization_params['kmer']
         if vocabfile=='auto':
-            print(self.current_path)
             vocabfile_path = join(self.current_path, 'data/prokbert_vocabs/', f'prokbert-base-dna{act_kmer}', 'vocab.txt')
             tokenization_params['vocabfile'] = vocabfile_path
+        else:
+            vocabfile_path = vocabfile
         with open(vocabfile_path) as vocabfile_in:
             vocabmap = {line.strip(): i for i, line in enumerate(vocabfile_in)}
         tokenization_params['vocabmap'] = vocabmap
 
         # Loading the vocab
         self.tokenization_params = tokenization_params
-        return tokenization_params
-    
-    def get_set_computational_paramters(self, parameters: dict = {}) -> dict:
+        return tokenization_params    
+
+    def get_and_set_computational_parameters(self, parameters: dict = {}) -> dict:
         """ Reading and validating the computational paramters
         """
 
@@ -209,8 +286,8 @@ def get_set_computational_paramters(self, parameters: dict = {}) -> dict:
 
         for param, param_value in parameters.items():
             if param not in computational_params:
-                raise ValueError(f"The provided {param} is an INVALID computatition parameter! The valid parameters are: {list(computational_params.keys())}")
-            self.validate('computatition', param, param_value)
+                raise ValueError(f"The provided {param} is an INVALID computation parameter! The valid parameters are: {list(computational_params.keys())}")
+            self.validate('computation', param, param_value)
             computational_params[param] = param_value
 
         np_tokentype= SeqConfig.numpy_dtype_mapping[computational_params['numpy_token_integer_prec_byte']]
@@ -252,3 +329,116 @@ def get_maximum_token_count_from_max_length(max_segment_length, shift, kmer):
         max_token_count = int(np.ceil((max_segment_length - kmer)/shift+3))
         return max_token_count
 
+class ProkBERTConfig(BaseConfig):
+    """Class to manage and validate pretraining configurations."""
+
+    torch_dtype_mapping = {1: torch.uint8,
+                           2: torch.int16,
+                           8: torch.int64,
+                           4: torch.int32}
+
+    def __init__(self):
+        super().__init__()
+
+        self.default_pretrain_config_file = self._get_default_pretrain_config_file()
+        with open(self.default_pretrain_config_file, 'r') as file:
+            self.parameters = yaml.safe_load(file)
+            
+        # Load and validate each parameter set
+        self.data_collator_params = self.get_set_parameters('data_collator')
+        self.model_params = self.get_set_parameters('model')
+        self.dataset_params = self.get_set_parameters('dataset')
+        self.pretraining_params = self.get_set_parameters('pretraining')
+        # Getting the sequtils params as well
+
+        self.def_seq_config = SeqConfig()
+        self.segmentation_params = self.def_seq_config.get_and_set_segmentation_parameters(self.parameters['segmentation'])
+        self.tokenization_params = self.def_seq_config.get_and_set_tokenization_parameters(self.parameters['tokenization'])
+        self.computation_params = self.def_seq_config.get_and_set_computational_parameters(self.parameters['computation'])
+
+        self.default_torchtype = ProkBERTConfig.torch_dtype_mapping[self.computation_params['numpy_token_integer_prec_byte']]
+
+    def _get_default_pretrain_config_file(self) -> str:
+        """
+        Retrieve the default pretraining configuration file.
+
+        :return: Path to the configuration file.
+        :rtype: str
+        """
+        current_path = pathlib.Path(__file__).parent
+        pretrain_config_file = join(current_path, 'configs', 'pretraining.yaml')
+
+        try:
+            # Attempt to read the environment variable
+            pretrain_config_file = os.environ['PRETRAIN_CONFIG_FILE']
+        except KeyError:
+            # Handle the case when the environment variable is not found
+            pass
+            # print(f"PRETRAIN_CONFIG_FILE environment variable has not been set. Using default value: {pretrain_config_file}")
+        return pretrain_config_file
+    
+    def get_set_parameters(self, parameter_class: str, parameters: dict = {}) -> dict:
+        """
+        Retrieve and validate the provided parameters for a given parameter class.
+
+        :param parameter_class: The class/category of the parameter (e.g., 'data_collator').
+        :type parameter_class: str
+        :param parameters: A dictionary of parameters to be validated.
+        :type parameters: dict
+        :return: A dictionary of validated parameters.
+        :rtype: dict
+        :raises ValueError: If an invalid parameter is provided.
+        """
+        class_params = {k: self.get_parameter(parameter_class, k) for k in self.parameters[parameter_class]}
+
+        # First validatiading the class parameters as well
+        for param, param_value in class_params.items():
+
+            self.validate(parameter_class, param, param_value)
+
+
+        for param, param_value in parameters.items():
+            if param not in class_params:
+                raise ValueError(f"The provided {param} is an INVALID {parameter_class} parameter! The valid parameters are: {list(class_params.keys())}")
+            self.validate(parameter_class, param, param_value)
+            class_params[param] = param_value
+
+        return class_params
+    
+    def get_and_set_model_parameters(self, parameters: dict = {}) -> dict:
+        """ Setting the model parameters """
+
+        self.model_params = self.get_set_parameters('model', parameters)
+
+        return self.model_params
+
+    def get_and_set_dataset_parameters(self, parameters: dict = {}) -> dict:
+        """ Setting the dataset parameters """
+
+        self.dataset_params = self.get_set_parameters('dataset', parameters)
+
+        return self.dataset_params
+
+    def get_and_set_pretraining_parameters(self, parameters: dict = {}) -> dict:
+        """ Setting the model parameters """
+        self.pretraining_params = self.get_set_parameters('pretraining', parameters)
+
+        return self.pretraining_params       
+    
+    
+    def get_and_set_datacollator_parameters(self, parameters: dict = {}) -> dict:
+        """ Setting the model parameters """
+        self.data_collator_params = self.get_set_parameters('data_collator', parameters)
+        return self.data_collator_params
+    
+    def get_and_set_segmentation_parameters(self, parameters: dict = {}) -> dict:
+        self.segmentation_params = self.def_seq_config.get_and_set_segmentation_parameters(parameters)
+
+        return self.segmentation_params 
+    def get_and_set_tokenization_parameters(self, parameters: dict = {}) -> dict:
+        self.tokenization_params = self.def_seq_config.get_and_set_tokenization_parameters(parameters)
+        
+        return self.tokenization_params 
+    def get_and_set_computation_params(self, parameters: dict = {}) -> dict:
+        self.computation_params = self.def_seq_config.get_and_set_computational_parameters(parameters)
+        return self.computation_params    
diff --git a/src/prokbert/configs/pretraining.yaml b/src/prokbert/configs/pretraining.yaml
new file mode 100644
index 0000000..86de6c9
--- /dev/null
+++ b/src/prokbert/configs/pretraining.yaml
@@ -0,0 +1,199 @@
+# One can set here all the parameters needed for the pretraining. Important note, is that it is responsibility of the user to provide proper inputs for the model.
+# Note if not parameter provided then the default is used. 
+
+data_collator:
+  # Data collator related parameters
+  # ProkBERT applies and overlapping k-mer strategy. Therefore if one simply mask a token, it is trivially reconstruable from the neighbouring tokens, because of the overlap. To define proper masking exercise the datacollater mask tokens to the left and right as well. 
+  mask_to_left:
+    default: 3
+    type: "integer"
+    description: "The number of tokens to be masked to the left of the original mask tokens to avoid data leaked."
+    constraints:
+      min: 0
+  mask_to_right:
+    default: 2
+    type: "integer"
+    description: "The number of tokens to be masked to the RIGHT of the original mask tokens to avoid data leaked."
+    constraints:
+      min: 0
+  mlm_probability:
+    default: 0.05
+    type: "float"
+    description: "The probability of defining a task on a given token. "
+    constraints:
+      min: 0.0
+      max: 1.0  
+  replace_prob:
+    default: 0.8
+    type: "float"
+    description: "1- The probability of restoring a masked token. Other others will be changed or restores." 
+    constraints:
+      min: 0.0
+      max: 1.0  
+  random_prob:
+    default: 0.01
+    type: "float"
+    description: "The probability of replacing a token with a random token. It's introduce some random errors to avoid overfitting"
+    constraints:
+      min: 0.0
+      max: 1.0  
+model:
+  model_name:
+    default: 'mini'
+    type: "string"
+    description: "Name of the ProkBERT model."
+  model_outputpath:
+    default: '/scratch/fastscratch/NBL/trained_models/test'
+    type: "string"
+    description: "Path to the models. If it is not defined that it will try to load from the huggingface later. "    
+  vocab_size:
+    default: 4101
+    type: "integer"
+    description: "Size of vocabulary, must align with the tokenizer's vocab."
+  hidden_size:
+    default: 384
+    type: "integer"
+    description: "Size of the hidden state in the Transformer."
+  num_hidden_layers:
+    default: 6
+    type: "integer"
+    description: "Number of hidden layers in the Transformer."
+  num_attention_heads:
+    default: 6
+    type: "integer"
+    description: "Number of attention heads for each Transformer layer."
+  max_position_embeddings:
+    default: 1024
+    type: "integer"
+    description: "Maximum number of position embeddings."
+  intermediate_size:
+    default: 2048
+    type: "integer"
+    description: "Size of the intermediate (feed-forward) layer in the Transformer."
+  position_embedding_type:
+    default: 'relative_key_query'
+    type: "string"
+    description: "Type of position embedding. 'relative_key_query' for relative position embeddings."
+  ResumeTraining:
+    default: True
+    type: "bool"
+    description: "decide whether to contine the pretraining or not"
+    constraints:
+      options: [True, False]
+  resume_or_initiation_model_path:
+    default: ''
+    type: "string"
+    description: "Path to the model to get the initiation paramters and data from. Default is None and initiate the model randomly" 
+dataset:
+  dataset_path:
+    default: ''
+    type: "string"
+    description: "Path to the dataset if needed. It shouldn't be empty. It triggers an error. Note that the preprocessed dataset should be aligned with the tokenizer to be used. "
+  pretraining_dataset_data:
+    default: [[]]
+    type: list
+    description: "The raw dataset data. It is recommended to use preprocessed HDF data for the training. "
+  dataset_class:
+    default: 'IterableProkBERTPretrainingDataset'
+    type: "string"
+    description: "The class of the dataset to be used. The default is IterableProkBERTPretrainingDataset. It is assumed that the dataset is already exists. "
+    options: ['ProkBERTPretrainingHDFDataset', 'IterableProkBERTPretrainingDataset', 'ProkBERTPretrainingDataset']
+  input_batch_size:
+    default: 10000
+    type: "int"
+    description: "Only for iterative HDF, storage based datasets. The size of the batch to be loaded into the memory from the disk. "
+  dataset_iteration_batch_offset:
+    default: 0
+    type: "int"   
+    description: "The offset value, where to start read the dataset. I.e. if the training is restarted, then we should able start the iteration in another position."
+    constraints:
+      min: 0.0
+  max_iteration_over_dataset:
+    default: 10
+    type: "int"   
+    description: "Only for iterative datasets. Maximum how many times we should iterate over a dataset (kind of epoch). I.e. 10 times. After thet stop iteration will be raised"
+    constraints:
+      min: 0.0
+pretraining:
+  output_dir:
+    default: './train_output'
+    type: "string"
+    description: "Output directory for training artifacts."
+  num_train_epochs:
+    default: 1
+    type: "integer"
+    description: "Total number of training epochs."
+  save_steps:
+    default: 1000
+    type: "integer"
+    description: "Save model checkpoint every N steps."
+  save_total_limit:
+    default: 20
+    type: "integer"
+    description: "Maximum number of total checkpoints to keep."
+  logging_steps:
+    default: 50
+    type: "integer"
+    description: "Log metrics every N steps."
+  logging_first_step:
+    default: True
+    type: "boolean"
+    description: "Whether to log metrics for the first step."
+  per_device_train_batch_size:
+    default: 48  # Placeholder; use the appropriate default value
+    type: "integer"
+    description: "Batch size for training."
+  dataloader_num_workers:
+    default: 1
+    type: "integer"
+    description: "Number of subprocesses for data loading."
+  learning_rate:
+    default: 0.0005
+    type: "float"
+    description: "Learning rate for training."
+  adam_epsilon:
+    default: 5e-05
+    type: "float"
+    description: "Epsilon for the Adam optimizer."
+  warmup_steps:
+    default: 500
+    type: "integer"
+    description: "Number of warmup steps for learning rate scheduler."
+  weight_decay:
+    default: 0.1
+    type: "float"
+    description: "Weight decay for optimizer."
+  adam_beta1:
+    default: 0.95
+    type: "float"
+    description: "Beta1 hyperparameter for the Adam optimizer."
+  adam_beta2:
+    default: 0.98
+    type: "float"
+    description: "Beta2 hyperparameter for the Adam optimizer."
+  gradient_accumulation_steps:
+    default: 1  # Placeholder; use the appropriate default value
+    type: "integer"
+    description: "Number of steps to accumulate gradients before updating weights."
+  optim:
+    default: "adamw_torch"
+    type: "string"
+    description: "Optimizer to use for training."
+  ignore_data_skip:
+    default: True
+    type: "boolean"
+    description: "Whether to ignore data skip or not."
+    
+segmentation:
+  type: 'random'
+# For full definiation, please see the documentation of the sequence_processing.yaml
+tokenization:
+  kmer: 6
+  shift: 1
+# For full definiation, please see the documentation of the sequitls parameters
+computation:
+  numpy_token_integer_prec_byte: 2
+
+
+
+    
\ No newline at end of file
diff --git a/src/prokbert/configs/sequence_processing.yaml b/src/prokbert/configs/sequence_processing.yaml
index f50c80d..c886087 100644
--- a/src/prokbert/configs/sequence_processing.yaml
+++ b/src/prokbert/configs/sequence_processing.yaml
@@ -24,7 +24,6 @@ segmentation:
     constraints:
       min: 0.0
       max: 100.0
-
 tokenization:
   type:
     default: lca
@@ -69,12 +68,22 @@ tokenization:
     default: auto
     type: "str"
     description: "Path to the vocabulary file. If set to 'auto', the default vocabulary is utilized."
+  vocabmap:
+    default: {}
+    type: "dict"
+    description: "The default vocabmap loaded from file"  
   isPaddingToMaxLength:
     default: False
     type: "bool"
     description: "Determines if the tokenized sentence should be padded with [PAD] tokens to produce vectors of a fixed length."
     constraints:
       options: [True, False]
+  add_special_token:
+    default: True
+    type: "bool"
+    description: "The tokenizer should add the special starting and setence end tokens. The default is yes"
+    constraints:
+      options: [True, False]    
 computation:
   cpu_cores_for_segmentation:
     default: 10
@@ -103,6 +112,11 @@ computation:
   numpy_token_integer_prec_byte:
     default: 2
     type: "integer"
-    description: "The type of integer to be used during the vectorization. The default is 2, if you want to work larger k-mers then increase it to 4. 1: np.uint8, 2:np.uint16. 4:np.uint32. 8: np.uint64"
+    description: "The type of integer to be used during the vectorization. The default is 2, if you want to work larger k-mers then increase it to 4. 1: np.int8, 2:np.int16. 4:np.int32. 8: np.int64"
     constraints:
       options: [1, 2, 4, 8]
+  np_tokentype:
+    default: np.int16
+    type: "type"
+    description: "Dummy"
+
diff --git a/src/prokbert/data/preprocessed/pretraining.h5 b/src/prokbert/data/preprocessed/pretraining.h5
new file mode 100644
index 0000000..5fe944e
Binary files /dev/null and b/src/prokbert/data/preprocessed/pretraining.h5 differ
diff --git a/src/prokbert/data/preprocessed/pretraininge.h5 b/src/prokbert/data/preprocessed/pretraininge.h5
new file mode 100644
index 0000000..8e1c043
Binary files /dev/null and b/src/prokbert/data/preprocessed/pretraininge.h5 differ
diff --git a/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt b/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt
index 73a738a..a5746e3 100644
--- a/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt
+++ b/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt
@@ -4098,4 +4098,4 @@ TTTTGT
 TTTTTA
 TTTTTC
 TTTTTG
-TTTTTT
+TTTTTT
\ No newline at end of file
diff --git a/src/prokbert/dev_notebooks/dev_paralell_processing_of_large_data.ipynb b/src/prokbert/dev_notebooks/dev_paralell_processing_of_large_data.ipynb
index eb95112..a9a986f 100644
--- a/src/prokbert/dev_notebooks/dev_paralell_processing_of_large_data.ipynb
+++ b/src/prokbert/dev_notebooks/dev_paralell_processing_of_large_data.ipynb
@@ -88,7 +88,6 @@
     "num_cores = comp_params['cpu_cores_for_tokenization']\n",
     "batch_size = comp_params['batch_size_tokenization']\n",
     "numpy_dtype=comp_params['np_tokentype'] # Note that if you use kmer>7 then other is recommended\n",
-    "           \n",
     "input_fasta_dir = join(current_path, 'data/sample_data/pretraining')\n",
     "\n",
     "input_fasta_files = [join(input_fasta_dir, file) for file in get_non_empty_files(input_fasta_dir)]\n",
diff --git a/src/prokbert/dev_notebooks/dev_pretraining.ipynb b/src/prokbert/dev_notebooks/dev_pretraining.ipynb
new file mode 100644
index 0000000..f64ebd1
--- /dev/null
+++ b/src/prokbert/dev_notebooks/dev_pretraining.ipynb
@@ -0,0 +1,467 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "88222642-c405-4efd-beda-471c100cfe81",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n",
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n",
+      "PRETRAIN_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/pretraining.yaml\n",
+      "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "import yaml\n",
+    "import pathlib\n",
+    "from os.path import join\n",
+    "import os\n",
+    "import sys\n",
+    "from Bio.Seq import Seq\n",
+    "from Bio.SeqRecord import SeqRecord\n",
+    "from Bio import SeqIO\n",
+    "\n",
+    "current_path = str(pathlib.Path(os.getcwd()).parent)\n",
+    "sys.path.append(current_path)\n",
+    "\n",
+    "#import sys\n",
+    "#sys.path.append('../)\n",
+    "\n",
+    "from config_utils import *\n",
+    "from sequtils import *\n",
+    "from training_utils import *\n",
+    "from prokbert_tokenizer import ProkBERTTokenizer\n",
+    "from prok_datasets import IterableProkBERTPretrainingDataset\n",
+    "from general_utils import *\n",
+    "from ProkBERTDataCollator import *\n",
+    "from transformers import MegatronBertConfig, MegatronBertForMaskedLM, Trainer, TrainingArguments\n",
+    "\n",
+    "    \n",
+    "pd.set_option('display.max_rows', 10000)\n",
+    "pd.set_option('display.max_columns', 30)\n",
+    "#pd.set_option('display.width', 4000)\n",
+    "#pd.set_option('display.max_colwidth', None)\n",
+    "pd.set_option('display.expand_frame_repr', True)\n",
+    "from IPython.core.interactiveshell import InteractiveShell\n",
+    "\n",
+    "InteractiveShell.ast_node_interactivity = \"all\"\n",
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "\n",
+    "train_model_output_dir = ''\n",
+    "train_model_name = 'LCA_repr_k6s1_l2048hs1536_h16_l16_mlm02_rp8_rndp1_rkv'\n",
+    "\n",
+    "model_params = {'model_outputpath': '/scratch/fastscratch/NBL/trained_models/test/prokbert-mini-k6s1',\n",
+    "                'model_name' : 'prokbert-mini-k6s1'}\n",
+    "dataset_params = {'dataset_path' : '../data/preprocessed/pretraining.h5'}\n",
+    "pretraining_params = {}\n",
+    "tokenization_params = {'kmer' : 6,\n",
+    "                      'shift' : 1}\n",
+    "segmentation_params = {}\n",
+    "computation_params= {}\n",
+    "prokbert_config = ProkBERTConfig()\n",
+    "_ = prokbert_config.get_and_set_model_parameters(model_params)\n",
+    "_ = prokbert_config.get_and_set_dataset_parameters(dataset_params)\n",
+    "_ = prokbert_config.get_and_set_pretraining_parameters(pretraining_params)\n",
+    "_ = prokbert_config.get_and_set_tokenization_parameters(tokenization_params)\n",
+    "_ = prokbert_config.get_and_set_segmentation_parameters(segmentation_params)\n",
+    "_ = prokbert_config.get_and_set_computation_params(computation_params)\n",
+    "prokbert_config.default_torchtype = torch.int32\n",
+    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "63c41f7d-4b5e-4d2e-a990-834dd72948c1",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7c73ec47-804e-4155-ab3c-08849c773eee",
+   "metadata": {},
+   "source": [
+    "### Pretraining folyamata\n",
+    "\n",
+    "Vannak előkészítő feladatok:\n",
+    "  * tokenizáló loadolása\n",
+    "  * collator osztály loadolása\n",
+    "  * Meglévő modellek ellenőrzése, checkpoint-ok ellenőrzése\n",
+    "  * dataset betöltése és inicializálása, ellenőrzése (megfelel-e a követelményeknek vagy sem)\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "aaf28f8e-e095-4444-a528-f7d48001d381",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "bb2a7794-694e-46d1-a6af-ba61394f2d5d",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-15 12:56:42,678 - INFO - Loading the datacollator class!\n",
+      "2023-08-15 12:56:42,679 - INFO - Collator Parameters:\n",
+      "  Number of tokens masked to left:  3\n",
+      "  Number of tokens masked to right: 2\n",
+      "  Probability of restoring a masked token: 0.8\n",
+      "  Probability of changing to a random token: 0.01\n",
+      "  MLM Probability: 0.05\n",
+      "  Default token type: torch.int32\n",
+      "\n",
+      "2023-08-15 12:56:42,680 - INFO - Checking whether the file exists or not!\n",
+      "2023-08-15 12:56:42,680 - INFO - Loading and creating a IterableProkBERTPretrainingDataset\n",
+      "2023-08-15 12:56:42,682 - INFO - Dataset size: 482\n",
+      "2023-08-15 12:56:42,683 - INFO - model_path:  /scratch/fastscratch/NBL/trained_models/test/prokbert-mini-k6s1\n",
+      "2023-08-15 12:56:42,685 - INFO - Dataset size: 482\n",
+      "2023-08-15 12:56:42,686 - INFO - model_path:  /scratch/fastscratch/NBL/trained_models/test/prokbert-mini-k6s1\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+      "Loading the existing model from the chekcpoint folder: /scratch/fastscratch/NBL/trained_models/test/prokbert-mini-k6s1/checkpoint-470000\n"
+     ]
+    }
+   ],
+   "source": [
+    "nr_gpus = count_gpus()\n",
+    "\n",
+    "# Get the training parameters:\n",
+    "training_args = TrainingArguments(**prokbert_config.pretraining_params)\n",
+    "\n",
+    "tokenizer = get_training_tokenizer(prokbert_config)\n",
+    "prokbert_dc = get_data_collator_for_overlapping_sequences(tokenizer, prokbert_config)\n",
+    "hdf_file_exists, ds_size = check_hdf_dataset_file(prokbert_config)\n",
+    "[m_exists, cp_dir, cp, cps] = check_model_existance_and_checkpoint(prokbert_config.model_params['model_outputpath'], \n",
+    "                                     prokbert_config.model_params['model_name'])\n",
+    "iteration_offset = get_the_iteration_offset(batch_size = prokbert_config.pretraining_params['per_device_train_batch_size'],\n",
+    "                                           training_steps = cps[-1],\n",
+    "                                           dataset_size = ds_size,\n",
+    "                                           nr_gpus =nr_gpus,\n",
+    "                                           radient_accumulation_steps = prokbert_config.pretraining_params['gradient_accumulation_steps'])\n",
+    "training_dataset = IterableProkBERTPretrainingDataset(file_path=prokbert_config.dataset_params['dataset_path'],\n",
+    "                                                     input_batch_size=prokbert_config.dataset_params['input_batch_size'],\n",
+    "                                                     ds_offset=iteration_offset)\n",
+    "\n",
+    "model = get_pretrained_model(prokbert_config)\n",
+    "\n",
+    "\n",
+    "\n",
+    "\n",
+    "#prokbert_config.computation_params"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "f713d0f1-4e21-439e-90bd-1bed12bce01a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "('/home/ligeti/huggingface/prokbert-mini-k6s1/tokenizer_config.json',\n",
+       " '/home/ligeti/huggingface/prokbert-mini-k6s1/special_tokens_map.json',\n",
+       " '/home/ligeti/huggingface/prokbert-mini-k6s1/vocab.txt',\n",
+       " '/home/ligeti/huggingface/prokbert-mini-k6s1/added_tokens.json')"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "#model.save_pretrained('/home/ligeti/huggingface/prokbert/prokbert-large-k6s1')\n",
+    "\n",
+    "#model.save_pretrained('/home/ligeti/huggingface/prokbert-mini-k6s1/')\n",
+    "tokenizer.save_pretrained('/home/ligeti/huggingface/prokbert-mini-k6s1/')\n",
+    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "b32832e3-c051-4b10-8c41-2f487115dabf",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#tokenizer.save_pretrained('/home/ligeti/huggingface/test_tokenizer/')\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "5cec7cb3-3fd7-4106-b625-de51a50af5df",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The target hard link /home/ligeti/huggingface/prokbert-mini-k6s1/general_utils.py exist. Skipping...\n",
+      "The target hard link /home/ligeti/huggingface/prokbert-mini-k6s1/prokbert_tokenizer.py exist. Skipping...\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "'Hard links for specified files created in /home/ligeti/huggingface/prokbert-mini-k6s1/ from /home/ligeti/github/prokbert/src/prokbert.'"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Its existing, delete or do sg about it if you want\n",
+      "All hidden files removed from /home/ligeti/huggingface/prokbert-mini-k6s1/data.\n"
+     ]
+    }
+   ],
+   "source": [
+    "import shutil\n",
+    "source_dir = '/home/ligeti/github/prokbert/src/prokbert'\n",
+    "file_list =  ['general_utils.py', 'prokbert_tokenizer.py', 'config_utils.py']\n",
+    "target_dir = '/home/ligeti/huggingface/prokbert-mini-k6s1/'\n",
+    "vocab_data_dir_example = '/home/ligeti/github/prokbert/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/temp'\n",
+    "vocab_data_source_dir = '/home/ligeti/github/prokbert/src/prokbert/data/prokbert_vocabs'\n",
+    "target_vocab_dir = '/home/ligeti/huggingface/prokbert-mini-k6s1/data/prokbert_vocabs'\n",
+    "\n",
+    "\n",
+    "\n",
+    "create_selected_hard_links(source_dir, target_dir, file_list)\n",
+    "#create_directory_for_filepath(vocab_data_dir_example)\n",
+    "try:\n",
+    "    shutil.copytree(vocab_data_source_dir, target_vocab_dir)\n",
+    "except FileExistsError:\n",
+    "    print('Its existing, delete or do sg about it if you want')\n",
+    "remove_hidden_files(join(target_dir, 'data'))\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f46d4fef-2cc0-4684-94a0-62a6ca8bb906",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "0c85f972-1eea-458d-9b28-bf58b781cee0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "## Sampling the dataset\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a643b4d5-b005-4d4f-9e4e-16429d3ab35c",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "bff1127c-890b-4f76-bf23-94b3fa73b93f",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e43b4d85-989a-4c5c-808e-513530f54063",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "91def6db-3602-4064-85b5-aff3563f0580",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c74a59b8-f668-41ba-b5c7-2e27f3c878c0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prokbert_config.model_params\n",
+    "\n",
+    "[m_exists, cp_dir, cp, cps] = check_model_existance_and_checkpoint(prokbert_config.model_params['model_outputpath'], \n",
+    "                                     prokbert_config.model_params['model_name'])\n",
+    "# Conclusion: The current model extsts and can be resumed. \n",
+    "\n",
+    "# Cheking initiation model, if training required\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b1befd96-abdd-4469-a761-c4dcc0f5708b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# checking hdf dataset\n",
+    "hdf_file_exists, ds_size = check_hdf_dataset_file(prokbert_config)\n",
+    "\n",
+    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8527b77c-e10c-4d4e-84d3-7053c41ec43b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prokbert_config.dataset_params\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f5bfd702-cbc5-450c-9867-a3da2e412b1a",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "381d9432-afff-494d-aa41-5ef51e714a4d",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c0b5babd-c5d9-4293-bd94-640aae2db126",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7d5a0bd8-5a1c-4803-a448-c66e41547814",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print('Loading the datacollator class!')\n",
+    "prokbert_dc = ProkBERTDataCollator(tokenizer,\n",
+    "                                  mask_to_left=prokbert_config.data_collator_params['mask_to_left'], \n",
+    "                                  mask_to_right=prokbert_config.data_collator_params['mask_to_right'],\n",
+    "                                  mlm_probability =   prokbert_config.data_collator_params['mlm_probability'],\n",
+    "                                  replace_prob =prokbert_config.data_collator_params['replace_prob'],\n",
+    "                                  random_prob = prokbert_config.data_collator_params['random_prob'])\n",
+    "print(str(prokbert_dc))\n",
+    "\n",
+    "inputs, labels = prokbert_dc.torch_mask_tokens(ds[0:3][:,0:30])\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d06ee3c5-a01e-4049-ad4c-2a6ff1cb47a3",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prokbert_config.default_torchtype"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f6a78975-d81b-4e24-b072-60c9f9ac23c2",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a129c4a2-1dad-434e-97d7-06482b3e1ef8",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.17"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/src/prokbert/dev_notebooks/dev_pretraining_datasets.ipynb b/src/prokbert/dev_notebooks/dev_pretraining_datasets.ipynb
new file mode 100644
index 0000000..11aa602
--- /dev/null
+++ b/src/prokbert/dev_notebooks/dev_pretraining_datasets.ipynb
@@ -0,0 +1,330 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "f332ed85-8a44-4acb-94f5-79aadf4c611e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-17 13:39:16,580 - INFO - Note: NumExpr detected 48 cores but \"NUMEXPR_MAX_THREADS\" not set, so enforcing safe limit of 8.\n",
+      "2023-08-17 13:39:16,581 - INFO - NumExpr defaulting to 8 threads.\n"
+     ]
+    },
+    {
+     "ename": "ImportError",
+     "evalue": "attempted relative import with no known parent package",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[1], line 19\u001b[0m\n\u001b[1;32m     15\u001b[0m \u001b[38;5;66;03m#import sys\u001b[39;00m\n\u001b[1;32m     16\u001b[0m \u001b[38;5;66;03m#sys.path.append('../)\u001b[39;00m\n\u001b[1;32m     18\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mconfig_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[0;32m---> 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msequtils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m     20\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mprokbert_tokenizer\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ProkBERTTokenizer\n\u001b[1;32m     22\u001b[0m pd\u001b[38;5;241m.\u001b[39mset_option(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdisplay.max_rows\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;241m10000\u001b[39m)\n",
+      "File \u001b[0;32m~/github/prokbert/src/prokbert/sequtils.py:29\u001b[0m\n\u001b[1;32m     26\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dict, List, Type, Tuple\n\u001b[1;32m     27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mitertools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m product\n\u001b[0;32m---> 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgeneral_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m     30\u001b[0m \u001b[38;5;66;03m# Ezt a felhasználónak kellene biztosatania \u001b[39;00m\n\u001b[1;32m     31\u001b[0m \u001b[38;5;66;03m# VOCAB_FILES_NAMES = {\"vocab_file\": \"vocab.txt\"}\u001b[39;00m\n\u001b[1;32m     33\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mh5py\u001b[39;00m\n",
+      "\u001b[0;31mImportError\u001b[0m: attempted relative import with no known parent package"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "import yaml\n",
+    "import pathlib\n",
+    "from os.path import join\n",
+    "import os\n",
+    "import sys\n",
+    "from Bio.Seq import Seq\n",
+    "from Bio.SeqRecord import SeqRecord\n",
+    "from Bio import SeqIO\n",
+    "\n",
+    "current_path = str(pathlib.Path(os.getcwd()).parent)\n",
+    "sys.path.append(current_path)\n",
+    "\n",
+    "#import sys\n",
+    "#sys.path.append('../)\n",
+    "\n",
+    "from config_utils import *\n",
+    "from sequtils import *\n",
+    "from prokbert_tokenizer import ProkBERTTokenizer\n",
+    "    \n",
+    "pd.set_option('display.max_rows', 10000)\n",
+    "pd.set_option('display.max_columns', 30)\n",
+    "#pd.set_option('display.width', 4000)\n",
+    "#pd.set_option('display.max_colwidth', None)\n",
+    "pd.set_option('display.expand_frame_repr', True)\n",
+    "from IPython.core.interactiveshell import InteractiveShell\n",
+    "\n",
+    "InteractiveShell.ast_node_interactivity = \"all\"\n",
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "defconfig = SeqConfig()\n",
+    "         \n",
+    "segmentation_params = {'type': 'random'}\n",
+    "tokenization_params = {'shift':2} \n",
+    "                   \n",
+    "comp_params = defconfig.get_set_computational_paramters()\n",
+    "tokenizer = ProkBERTTokenizer(tokenization_params=tokenization_params, \n",
+    "                              segmentation_params=segmentation_params,\n",
+    "                              operation_space='sequence')\n",
+    "segment = 'AATCAAGGAATTATTATCGTT'\n",
+    "       \n",
+    "segmentation_params = defconfig.get_set_segmentation_parameters()\n",
+    "tokenization_params = defconfig.get_and_set_tokenization_params({'shift':2})             \n",
+    "comp_params = defconfig.get_set_computational_paramters()\n",
+    "\n",
+    "num_cores = comp_params['cpu_cores_for_tokenization']\n",
+    "batch_size = comp_params['batch_size_tokenization']\n",
+    "numpy_dtype=comp_params['np_tokentype'] # Note that if you use kmer>7 then other is recommended\n",
+    "input_fasta_dir = join(current_path, 'data/sample_data/pretraining')\n",
+    "\n",
+    "input_fasta_files = [join(input_fasta_dir, file) for file in get_non_empty_files(input_fasta_dir)]\n",
+    "contigs = load_contigs(input_fasta_files,IsAddHeader=True,AsDataFrame=True, adding_reverse_complement=False)\n",
+    "contigs['sequence_id'] = list(range(len(contigs)))\n",
+    "contigs = contigs[['sequence', 'sequence_id']]\n",
+    "segment_db = segment_sequences(contigs, segmentation_params, AsDataFrame=True)\n",
+    "\n",
+    "tokenized = batch_tokenize_segments_with_ids(segment_db, tokenization_params, num_cores, batch_size, numpy_dtype)\n",
+    "expected_max_token = max(len(arr) for arrays in tokenized.values() for arr in arrays)\n",
+    "X, torchdb = get_rectangular_array_from_tokenized_dataset(tokenized,\n",
+    "                                                          tokenization_params['shift'],\n",
+    "                                                          expected_max_token, numpy_dtype = numpy_dtype)\n",
+    "hdf_file = '../data/preprocessed/pretraining.h5'\n",
+    "save_to_hdf(X, hdf_file, database = torchdb, compression=True)\n",
+    "                  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "id": "953d31b8-83e2-465b-ab55-c9ada9237871",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-14 09:38:22,001 - INFO - Dataset size: 482\n",
+      "2023-08-14 09:38:22,010 - INFO - Stopping the iteration.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Check hdf file\n",
+    "from prok_datasets import IterableProkBERTPretrainingDataset, ProkBERTPretrainingHDFDataset, ProkBERTPretrainingDataset\n",
+    "\n",
+    "ds = IterableProkBERTPretrainingDataset(hdf_file, input_batch_size=482, max_iteration_over_ds=2)\n",
+    "\n",
+    "for i, r in enumerate(ds):\n",
+    "    #r[0:10]\n",
+    "    pass\n",
+    "\n",
+    "ds = ProkBERTPretrainingHDFDataset(hdf_file)\n",
+    "#len(ds)\n",
+    "#ds[0:2]\n",
+    "ds = ProkBERTPretrainingDataset(X)\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4d40b35f-4a1d-4062-8836-90a0066ee514",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "np.floor(3.1)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d8003658-666a-429e-bf2e-5525bb6002ee",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "with h5py.File(hdf_file, 'r') as dataset_file:\n",
+    "    dataset_file['training_data']['X'].shape[0]\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "05149138-e5a1-41b7-9e98-7e2f681c5f53",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-14 09:28:11,629 - INFO - Dataset size: 482\n",
+      "Exception ignored in: <function IterableProkBERTPretrainingDataset.__del__ at 0x7ff3886c5a60>\n",
+      "Traceback (most recent call last):\n",
+      "  File \"/home/ligeti/github/prokbert/src/prokbert/prok_datasets.py\", line 125, in __del__\n",
+      "    if not self.dataset_file.closed:\n",
+      "AttributeError: 'File' object has no attribute 'closed'\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "[tensor([   2, 3329, 4038, 3103,  427, 2667, 1639, 1587,  753, 3784, 3130,  867,\n",
+       "         1514, 3671, 1331,  745, 3653, 1029,    8,   57,  838, 1045,  266,   86,\n",
+       "         1314,  484, 3573, 3851,  106, 1622, 1314,  478, 3482, 2396, 1411, 2036,\n",
+       "         3833, 3911, 1063,  556,  642, 2005, 3341,  136, 2107,  869, 1545,   72,\n",
+       "         1077,  774,   22,  291,  492, 3704, 1853,  910, 2199, 2354,  730, 3414,\n",
+       "         1301,  265,   79, 1193, 2642, 1248, 3521, 3015, 3118,  672, 2499, 3049,\n",
+       "         3655, 1069,  646, 2078,  419, 2537, 3665, 1228, 3196, 1918, 1941, 2316,\n",
+       "          123, 1902, 1697, 2514, 3291, 3443, 1772, 3714, 2013, 3468, 2178, 2012,\n",
+       "         3454, 1941, 2322,  228, 3586, 4060, 3454, 1942, 2325,  275,  234, 3684,\n",
+       "         1540, 4093, 3980, 2170, 1891, 1510, 3607,  304,  696, 2879,  947, 2804,\n",
+       "         3833, 3919, 1192, 2619,  872, 1598,  927, 2472, 2619,  870, 1559,  297,\n",
+       "          582, 1058,  478, 3487, 2472, 2619,  870, 1570,  473, 3405, 1164, 2173,\n",
+       "         1925, 2058,   97, 1488, 3267, 3058, 3811, 3566, 3736, 2367,  939, 2669,\n",
+       "         1681, 2245, 3092,  258, 4053, 3346,  222, 3491, 2541, 3725, 2194, 2270,\n",
+       "         3492, 2562, 4063, 3505, 2769, 3281, 3279, 3243, 2661, 1542,   26,  342,\n",
+       "         1308,  386, 2007, 3377,  715, 3177, 1612, 1154, 2008, 3390,  930, 2521,\n",
+       "         3410, 1240, 3388,  894, 1955, 2548, 3844, 4098, 4064, 3509, 2833,  198,\n",
+       "         3101,  392, 2107,  883, 1778, 3807, 3504, 2752, 3009, 3020, 3202, 2011,\n",
+       "         3434, 1624, 1348, 1028, 4094, 3993, 2382, 1186, 2518, 3353,  328, 1086,\n",
+       "          925, 2449, 2249, 3153, 1225, 3153, 1228, 3194, 1878, 1313,  464, 3265,\n",
+       "         3026, 3296, 3523, 3048, 3652, 1027, 4082, 3801, 3398, 1045,  268,  131,\n",
+       "         2034, 3799,    3,    0], dtype=torch.int32)]"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "ename": "KeyError",
+     "evalue": "'Unable to synchronously open object (invalid identifier type to function)'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[19], line 7\u001b[0m\n\u001b[1;32m      4\u001b[0m ds\u001b[38;5;241m.\u001b[39mdataset_file\u001b[38;5;241m.\u001b[39mclose()\n\u001b[1;32m      5\u001b[0m \u001b[38;5;66;03m#ds = IterableProkBERTPretrainingDataset(hdf_file, input_batch_size=482, max_iteration_over_ds=2)\u001b[39;00m\n\u001b[0;32m----> 7\u001b[0m \u001b[43mds\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m\n",
+      "File \u001b[0;32m~/github/prokbert/src/prokbert/prok_datasets.py:118\u001b[0m, in \u001b[0;36mIterableProkBERTPretrainingDataset.__getitem__\u001b[0;34m(self, index)\u001b[0m\n\u001b[1;32m    115\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mtensor(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset_file[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtraining_data\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mX\u001b[39m\u001b[38;5;124m'\u001b[39m][index], dtype\u001b[38;5;241m=\u001b[39mtorch\u001b[38;5;241m.\u001b[39mint16)\n\u001b[1;32m    116\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(index, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m    117\u001b[0m     \u001b[38;5;66;03m# Return slice\u001b[39;00m\n\u001b[0;32m--> 118\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m [torch\u001b[38;5;241m.\u001b[39mtensor(item, dtype\u001b[38;5;241m=\u001b[39mtorch\u001b[38;5;241m.\u001b[39mint) \u001b[38;5;28;01mfor\u001b[39;00m item \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdataset_file\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtraining_data\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mX\u001b[39m\u001b[38;5;124m'\u001b[39m][index]]\n",
+      "File \u001b[0;32mh5py/_objects.pyx:54\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n",
+      "File \u001b[0;32mh5py/_objects.pyx:55\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n",
+      "File \u001b[0;32m/scratch/fastscratch/NBL/ptbin/miniconda3/lib/python3.9/site-packages/h5py/_hl/group.py:357\u001b[0m, in \u001b[0;36mGroup.__getitem__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m    355\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid HDF5 object reference\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    356\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(name, (\u001b[38;5;28mbytes\u001b[39m, \u001b[38;5;28mstr\u001b[39m)):\n\u001b[0;32m--> 357\u001b[0m     oid \u001b[38;5;241m=\u001b[39m \u001b[43mh5o\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_e\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlapl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lapl\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    358\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m    359\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAccessing a group is done with bytes or str, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    360\u001b[0m                     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnot \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mtype\u001b[39m(name)))\n",
+      "File \u001b[0;32mh5py/_objects.pyx:54\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n",
+      "File \u001b[0;32mh5py/_objects.pyx:55\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n",
+      "File \u001b[0;32mh5py/h5o.pyx:190\u001b[0m, in \u001b[0;36mh5py.h5o.open\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;31mKeyError\u001b[0m: 'Unable to synchronously open object (invalid identifier type to function)'"
+     ]
+    }
+   ],
+   "source": [
+    "ds = IterableProkBERTPretrainingDataset(hdf_file, input_batch_size=482, max_iteration_over_ds=2)\n",
+    "\n",
+    "ds[0:1]\n",
+    "ds.dataset_file.close()\n",
+    "#ds = IterableProkBERTPretrainingDataset(hdf_file, input_batch_size=482, max_iteration_over_ds=2)\n",
+    "\n",
+    "ds[0:3]\n",
+    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "id": "e31c0590-c429-4efc-ad65-bc168ffafe35",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-14 09:32:07,657 - INFO - Dataset size: 482\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "'r'"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "ds = IterableProkBERTPretrainingDataset(hdf_file, input_batch_size=482, max_iteration_over_ds=2)\n",
+    "ds.dataset_file.close()\n",
+    "\n",
+    "ds._ensure_file_open()\n",
+    "\n",
+    "ds.dataset_file.mode\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "e06356b3-756b-4697-a760-ae4a35dde2d7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dataset_file = h5py.File(hdf_file, 'r')\n",
+    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "b9db1914-55ed-4c23-8813-b22c81384e84",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'File' object has no attribute 'closed'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdataset_file\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclosed\u001b[49m\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'File' object has no attribute 'closed'"
+     ]
+    }
+   ],
+   "source": [
+    "dataset_file.closed\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "015570ab-c415-4668-805e-5b5d57ed4402",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.9"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/src/prokbert/dev_notebooks/dev_tokenization.ipynb b/src/prokbert/dev_notebooks/dev_tokenization.ipynb
index 74664b9..a14c91b 100644
--- a/src/prokbert/dev_notebooks/dev_tokenization.ipynb
+++ b/src/prokbert/dev_notebooks/dev_tokenization.ipynb
@@ -17,12 +17,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 50,
+   "execution_count": 3,
    "id": "0f3adb19-b27f-48f0-897e-03673588a9f6",
    "metadata": {
     "scrolled": true
    },
    "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-14 11:43:25,115 - INFO - Loading sequence data into memory!\n",
+      "2023-08-14 11:43:25,116 - INFO - Since the fasta_files_list is a string, not list, we convert to a list.\n",
+      "2023-08-14 11:43:25,128 - INFO - Checking input DataFrame!\n",
+      "2023-08-14 11:43:25,129 - INFO - Checking input sequence_id is valid primary key in the DataFrame\n"
+     ]
+    },
     {
      "name": "stdout",
      "output_type": "stream",
@@ -33,13 +43,7 @@
       "  %reload_ext autoreload\n",
       "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
       "/home/ligeti/github/prokbert/src/prokbert\n",
-      "/home/ligeti/github/prokbert/src/prokbert\n",
-      "Loading sequence data into memory!\n",
-      "Since the fasta_files_list is a string, not list, we convert to a list.\n",
-      "Sequences is a list, therefore adding tracking information.\n",
-      "Checking input DataFrame!\n",
-      "Checking input sequence_id is valid primary key in the DataFrame\n",
-      "Creating a DataFrame from the segments. \n"
+      "/home/ligeti/github/prokbert/src/prokbert\n"
      ]
     }
    ],
@@ -75,7 +79,7 @@
     "%autoreload 2\n",
     "\n",
     "defconfig = SeqConfig()\n",
-    "segmentation_params = defconfig.get_segmentation_parameters()  \n",
+    "segmentation_params = defconfig.get_and_set_segmentation_parameters()  \n",
     "tokenization_params = defconfig.get_and_set_tokenization_params()  \n",
     "\n",
     "samplefasta_file = '/home/ligeti/github/prokbert/src/prokbert/data/sample_data/ESKAPE_sample.fasta'\n",
@@ -87,77 +91,53 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
+   "execution_count": 7,
    "id": "8739a064-7bcb-495c-9fa3-b11f48db835f",
-   "metadata": {
-    "collapsed": true,
-    "jupyter": {
-     "outputs_hidden": true
-    }
-   },
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "/home/ligeti/github/prokbert/src/prokbert\n",
-      "{'type': 'lca', 'kmer': 6, 'shift': 1, 'max_segment_length': 1027, 'token_limit': 78, 'max_unknown_token_proportion': 0, 'vocabfile': '/home/ligeti/github/prokbert/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt', 'isPaddingToMaxLength': False, 'vocabmap': {'[PAD]': 0, '[UNK]': 1, '[CLS]': 2, '[SEP]': 3, '[MASK]': 4, 'AAAAAA': 5, 'AAAAAC': 6, 'AAAAAG': 7, 'AAAAAT': 8, 'AAAACA': 9, 'AAAACC': 10, 'AAAACG': 11, 'AAAACT': 12, 'AAAAGA': 13, 'AAAAGC': 14, 'AAAAGG': 15, 'AAAAGT': 16, 'AAAATA': 17, 'AAAATC': 18, 'AAAATG': 19, 'AAAATT': 20, 'AAACAA': 21, 'AAACAC': 22, 'AAACAG': 23, 'AAACAT': 24, 'AAACCA': 25, 'AAACCC': 26, 'AAACCG': 27, 'AAACCT': 28, 'AAACGA': 29, 'AAACGC': 30, 'AAACGG': 31, 'AAACGT': 32, 'AAACTA': 33, 'AAACTC': 34, 'AAACTG': 35, 'AAACTT': 36, 'AAAGAA': 37, 'AAAGAC': 38, 'AAAGAG': 39, 'AAAGAT': 40, 'AAAGCA': 41, 'AAAGCC': 42, 'AAAGCG': 43, 'AAAGCT': 44, 'AAAGGA': 45, 'AAAGGC': 46, 'AAAGGG': 47, 'AAAGGT': 48, 'AAAGTA': 49, 'AAAGTC': 50, 'AAAGTG': 51, 'AAAGTT': 52, 'AAATAA': 53, 'AAATAC': 54, 'AAATAG': 55, 'AAATAT': 56, 'AAATCA': 57, 'AAATCC': 58, 'AAATCG': 59, 'AAATCT': 60, 'AAATGA': 61, 'AAATGC': 62, 'AAATGG': 63, 'AAATGT': 64, 'AAATTA': 65, 'AAATTC': 66, 'AAATTG': 67, 'AAATTT': 68, 'AACAAA': 69, 'AACAAC': 70, 'AACAAG': 71, 'AACAAT': 72, 'AACACA': 73, 'AACACC': 74, 'AACACG': 75, 'AACACT': 76, 'AACAGA': 77, 'AACAGC': 78, 'AACAGG': 79, 'AACAGT': 80, 'AACATA': 81, 'AACATC': 82, 'AACATG': 83, 'AACATT': 84, 'AACCAA': 85, 'AACCAC': 86, 'AACCAG': 87, 'AACCAT': 88, 'AACCCA': 89, 'AACCCC': 90, 'AACCCG': 91, 'AACCCT': 92, 'AACCGA': 93, 'AACCGC': 94, 'AACCGG': 95, 'AACCGT': 96, 'AACCTA': 97, 'AACCTC': 98, 'AACCTG': 99, 'AACCTT': 100, 'AACGAA': 101, 'AACGAC': 102, 'AACGAG': 103, 'AACGAT': 104, 'AACGCA': 105, 'AACGCC': 106, 'AACGCG': 107, 'AACGCT': 108, 'AACGGA': 109, 'AACGGC': 110, 'AACGGG': 111, 'AACGGT': 112, 'AACGTA': 113, 'AACGTC': 114, 'AACGTG': 115, 'AACGTT': 116, 'AACTAA': 117, 'AACTAC': 118, 'AACTAG': 119, 'AACTAT': 120, 'AACTCA': 121, 'AACTCC': 122, 'AACTCG': 123, 'AACTCT': 124, 'AACTGA': 125, 'AACTGC': 126, 'AACTGG': 127, 'AACTGT': 128, 'AACTTA': 129, 'AACTTC': 130, 'AACTTG': 131, 'AACTTT': 132, 'AAGAAA': 133, 'AAGAAC': 134, 'AAGAAG': 135, 'AAGAAT': 136, 'AAGACA': 137, 'AAGACC': 138, 'AAGACG': 139, 'AAGACT': 140, 'AAGAGA': 141, 'AAGAGC': 142, 'AAGAGG': 143, 'AAGAGT': 144, 'AAGATA': 145, 'AAGATC': 146, 'AAGATG': 147, 'AAGATT': 148, 'AAGCAA': 149, 'AAGCAC': 150, 'AAGCAG': 151, 'AAGCAT': 152, 'AAGCCA': 153, 'AAGCCC': 154, 'AAGCCG': 155, 'AAGCCT': 156, 'AAGCGA': 157, 'AAGCGC': 158, 'AAGCGG': 159, 'AAGCGT': 160, 'AAGCTA': 161, 'AAGCTC': 162, 'AAGCTG': 163, 'AAGCTT': 164, 'AAGGAA': 165, 'AAGGAC': 166, 'AAGGAG': 167, 'AAGGAT': 168, 'AAGGCA': 169, 'AAGGCC': 170, 'AAGGCG': 171, 'AAGGCT': 172, 'AAGGGA': 173, 'AAGGGC': 174, 'AAGGGG': 175, 'AAGGGT': 176, 'AAGGTA': 177, 'AAGGTC': 178, 'AAGGTG': 179, 'AAGGTT': 180, 'AAGTAA': 181, 'AAGTAC': 182, 'AAGTAG': 183, 'AAGTAT': 184, 'AAGTCA': 185, 'AAGTCC': 186, 'AAGTCG': 187, 'AAGTCT': 188, 'AAGTGA': 189, 'AAGTGC': 190, 'AAGTGG': 191, 'AAGTGT': 192, 'AAGTTA': 193, 'AAGTTC': 194, 'AAGTTG': 195, 'AAGTTT': 196, 'AATAAA': 197, 'AATAAC': 198, 'AATAAG': 199, 'AATAAT': 200, 'AATACA': 201, 'AATACC': 202, 'AATACG': 203, 'AATACT': 204, 'AATAGA': 205, 'AATAGC': 206, 'AATAGG': 207, 'AATAGT': 208, 'AATATA': 209, 'AATATC': 210, 'AATATG': 211, 'AATATT': 212, 'AATCAA': 213, 'AATCAC': 214, 'AATCAG': 215, 'AATCAT': 216, 'AATCCA': 217, 'AATCCC': 218, 'AATCCG': 219, 'AATCCT': 220, 'AATCGA': 221, 'AATCGC': 222, 'AATCGG': 223, 'AATCGT': 224, 'AATCTA': 225, 'AATCTC': 226, 'AATCTG': 227, 'AATCTT': 228, 'AATGAA': 229, 'AATGAC': 230, 'AATGAG': 231, 'AATGAT': 232, 'AATGCA': 233, 'AATGCC': 234, 'AATGCG': 235, 'AATGCT': 236, 'AATGGA': 237, 'AATGGC': 238, 'AATGGG': 239, 'AATGGT': 240, 'AATGTA': 241, 'AATGTC': 242, 'AATGTG': 243, 'AATGTT': 244, 'AATTAA': 245, 'AATTAC': 246, 'AATTAG': 247, 'AATTAT': 248, 'AATTCA': 249, 'AATTCC': 250, 'AATTCG': 251, 'AATTCT': 252, 'AATTGA': 253, 'AATTGC': 254, 'AATTGG': 255, 'AATTGT': 256, 'AATTTA': 257, 'AATTTC': 258, 'AATTTG': 259, 'AATTTT': 260, 'ACAAAA': 261, 'ACAAAC': 262, 'ACAAAG': 263, 'ACAAAT': 264, 'ACAACA': 265, 'ACAACC': 266, 'ACAACG': 267, 'ACAACT': 268, 'ACAAGA': 269, 'ACAAGC': 270, 'ACAAGG': 271, 'ACAAGT': 272, 'ACAATA': 273, 'ACAATC': 274, 'ACAATG': 275, 'ACAATT': 276, 'ACACAA': 277, 'ACACAC': 278, 'ACACAG': 279, 'ACACAT': 280, 'ACACCA': 281, 'ACACCC': 282, 'ACACCG': 283, 'ACACCT': 284, 'ACACGA': 285, 'ACACGC': 286, 'ACACGG': 287, 'ACACGT': 288, 'ACACTA': 289, 'ACACTC': 290, 'ACACTG': 291, 'ACACTT': 292, 'ACAGAA': 293, 'ACAGAC': 294, 'ACAGAG': 295, 'ACAGAT': 296, 'ACAGCA': 297, 'ACAGCC': 298, 'ACAGCG': 299, 'ACAGCT': 300, 'ACAGGA': 301, 'ACAGGC': 302, 'ACAGGG': 303, 'ACAGGT': 304, 'ACAGTA': 305, 'ACAGTC': 306, 'ACAGTG': 307, 'ACAGTT': 308, 'ACATAA': 309, 'ACATAC': 310, 'ACATAG': 311, 'ACATAT': 312, 'ACATCA': 313, 'ACATCC': 314, 'ACATCG': 315, 'ACATCT': 316, 'ACATGA': 317, 'ACATGC': 318, 'ACATGG': 319, 'ACATGT': 320, 'ACATTA': 321, 'ACATTC': 322, 'ACATTG': 323, 'ACATTT': 324, 'ACCAAA': 325, 'ACCAAC': 326, 'ACCAAG': 327, 'ACCAAT': 328, 'ACCACA': 329, 'ACCACC': 330, 'ACCACG': 331, 'ACCACT': 332, 'ACCAGA': 333, 'ACCAGC': 334, 'ACCAGG': 335, 'ACCAGT': 336, 'ACCATA': 337, 'ACCATC': 338, 'ACCATG': 339, 'ACCATT': 340, 'ACCCAA': 341, 'ACCCAC': 342, 'ACCCAG': 343, 'ACCCAT': 344, 'ACCCCA': 345, 'ACCCCC': 346, 'ACCCCG': 347, 'ACCCCT': 348, 'ACCCGA': 349, 'ACCCGC': 350, 'ACCCGG': 351, 'ACCCGT': 352, 'ACCCTA': 353, 'ACCCTC': 354, 'ACCCTG': 355, 'ACCCTT': 356, 'ACCGAA': 357, 'ACCGAC': 358, 'ACCGAG': 359, 'ACCGAT': 360, 'ACCGCA': 361, 'ACCGCC': 362, 'ACCGCG': 363, 'ACCGCT': 364, 'ACCGGA': 365, 'ACCGGC': 366, 'ACCGGG': 367, 'ACCGGT': 368, 'ACCGTA': 369, 'ACCGTC': 370, 'ACCGTG': 371, 'ACCGTT': 372, 'ACCTAA': 373, 'ACCTAC': 374, 'ACCTAG': 375, 'ACCTAT': 376, 'ACCTCA': 377, 'ACCTCC': 378, 'ACCTCG': 379, 'ACCTCT': 380, 'ACCTGA': 381, 'ACCTGC': 382, 'ACCTGG': 383, 'ACCTGT': 384, 'ACCTTA': 385, 'ACCTTC': 386, 'ACCTTG': 387, 'ACCTTT': 388, 'ACGAAA': 389, 'ACGAAC': 390, 'ACGAAG': 391, 'ACGAAT': 392, 'ACGACA': 393, 'ACGACC': 394, 'ACGACG': 395, 'ACGACT': 396, 'ACGAGA': 397, 'ACGAGC': 398, 'ACGAGG': 399, 'ACGAGT': 400, 'ACGATA': 401, 'ACGATC': 402, 'ACGATG': 403, 'ACGATT': 404, 'ACGCAA': 405, 'ACGCAC': 406, 'ACGCAG': 407, 'ACGCAT': 408, 'ACGCCA': 409, 'ACGCCC': 410, 'ACGCCG': 411, 'ACGCCT': 412, 'ACGCGA': 413, 'ACGCGC': 414, 'ACGCGG': 415, 'ACGCGT': 416, 'ACGCTA': 417, 'ACGCTC': 418, 'ACGCTG': 419, 'ACGCTT': 420, 'ACGGAA': 421, 'ACGGAC': 422, 'ACGGAG': 423, 'ACGGAT': 424, 'ACGGCA': 425, 'ACGGCC': 426, 'ACGGCG': 427, 'ACGGCT': 428, 'ACGGGA': 429, 'ACGGGC': 430, 'ACGGGG': 431, 'ACGGGT': 432, 'ACGGTA': 433, 'ACGGTC': 434, 'ACGGTG': 435, 'ACGGTT': 436, 'ACGTAA': 437, 'ACGTAC': 438, 'ACGTAG': 439, 'ACGTAT': 440, 'ACGTCA': 441, 'ACGTCC': 442, 'ACGTCG': 443, 'ACGTCT': 444, 'ACGTGA': 445, 'ACGTGC': 446, 'ACGTGG': 447, 'ACGTGT': 448, 'ACGTTA': 449, 'ACGTTC': 450, 'ACGTTG': 451, 'ACGTTT': 452, 'ACTAAA': 453, 'ACTAAC': 454, 'ACTAAG': 455, 'ACTAAT': 456, 'ACTACA': 457, 'ACTACC': 458, 'ACTACG': 459, 'ACTACT': 460, 'ACTAGA': 461, 'ACTAGC': 462, 'ACTAGG': 463, 'ACTAGT': 464, 'ACTATA': 465, 'ACTATC': 466, 'ACTATG': 467, 'ACTATT': 468, 'ACTCAA': 469, 'ACTCAC': 470, 'ACTCAG': 471, 'ACTCAT': 472, 'ACTCCA': 473, 'ACTCCC': 474, 'ACTCCG': 475, 'ACTCCT': 476, 'ACTCGA': 477, 'ACTCGC': 478, 'ACTCGG': 479, 'ACTCGT': 480, 'ACTCTA': 481, 'ACTCTC': 482, 'ACTCTG': 483, 'ACTCTT': 484, 'ACTGAA': 485, 'ACTGAC': 486, 'ACTGAG': 487, 'ACTGAT': 488, 'ACTGCA': 489, 'ACTGCC': 490, 'ACTGCG': 491, 'ACTGCT': 492, 'ACTGGA': 493, 'ACTGGC': 494, 'ACTGGG': 495, 'ACTGGT': 496, 'ACTGTA': 497, 'ACTGTC': 498, 'ACTGTG': 499, 'ACTGTT': 500, 'ACTTAA': 501, 'ACTTAC': 502, 'ACTTAG': 503, 'ACTTAT': 504, 'ACTTCA': 505, 'ACTTCC': 506, 'ACTTCG': 507, 'ACTTCT': 508, 'ACTTGA': 509, 'ACTTGC': 510, 'ACTTGG': 511, 'ACTTGT': 512, 'ACTTTA': 513, 'ACTTTC': 514, 'ACTTTG': 515, 'ACTTTT': 516, 'AGAAAA': 517, 'AGAAAC': 518, 'AGAAAG': 519, 'AGAAAT': 520, 'AGAACA': 521, 'AGAACC': 522, 'AGAACG': 523, 'AGAACT': 524, 'AGAAGA': 525, 'AGAAGC': 526, 'AGAAGG': 527, 'AGAAGT': 528, 'AGAATA': 529, 'AGAATC': 530, 'AGAATG': 531, 'AGAATT': 532, 'AGACAA': 533, 'AGACAC': 534, 'AGACAG': 535, 'AGACAT': 536, 'AGACCA': 537, 'AGACCC': 538, 'AGACCG': 539, 'AGACCT': 540, 'AGACGA': 541, 'AGACGC': 542, 'AGACGG': 543, 'AGACGT': 544, 'AGACTA': 545, 'AGACTC': 546, 'AGACTG': 547, 'AGACTT': 548, 'AGAGAA': 549, 'AGAGAC': 550, 'AGAGAG': 551, 'AGAGAT': 552, 'AGAGCA': 553, 'AGAGCC': 554, 'AGAGCG': 555, 'AGAGCT': 556, 'AGAGGA': 557, 'AGAGGC': 558, 'AGAGGG': 559, 'AGAGGT': 560, 'AGAGTA': 561, 'AGAGTC': 562, 'AGAGTG': 563, 'AGAGTT': 564, 'AGATAA': 565, 'AGATAC': 566, 'AGATAG': 567, 'AGATAT': 568, 'AGATCA': 569, 'AGATCC': 570, 'AGATCG': 571, 'AGATCT': 572, 'AGATGA': 573, 'AGATGC': 574, 'AGATGG': 575, 'AGATGT': 576, 'AGATTA': 577, 'AGATTC': 578, 'AGATTG': 579, 'AGATTT': 580, 'AGCAAA': 581, 'AGCAAC': 582, 'AGCAAG': 583, 'AGCAAT': 584, 'AGCACA': 585, 'AGCACC': 586, 'AGCACG': 587, 'AGCACT': 588, 'AGCAGA': 589, 'AGCAGC': 590, 'AGCAGG': 591, 'AGCAGT': 592, 'AGCATA': 593, 'AGCATC': 594, 'AGCATG': 595, 'AGCATT': 596, 'AGCCAA': 597, 'AGCCAC': 598, 'AGCCAG': 599, 'AGCCAT': 600, 'AGCCCA': 601, 'AGCCCC': 602, 'AGCCCG': 603, 'AGCCCT': 604, 'AGCCGA': 605, 'AGCCGC': 606, 'AGCCGG': 607, 'AGCCGT': 608, 'AGCCTA': 609, 'AGCCTC': 610, 'AGCCTG': 611, 'AGCCTT': 612, 'AGCGAA': 613, 'AGCGAC': 614, 'AGCGAG': 615, 'AGCGAT': 616, 'AGCGCA': 617, 'AGCGCC': 618, 'AGCGCG': 619, 'AGCGCT': 620, 'AGCGGA': 621, 'AGCGGC': 622, 'AGCGGG': 623, 'AGCGGT': 624, 'AGCGTA': 625, 'AGCGTC': 626, 'AGCGTG': 627, 'AGCGTT': 628, 'AGCTAA': 629, 'AGCTAC': 630, 'AGCTAG': 631, 'AGCTAT': 632, 'AGCTCA': 633, 'AGCTCC': 634, 'AGCTCG': 635, 'AGCTCT': 636, 'AGCTGA': 637, 'AGCTGC': 638, 'AGCTGG': 639, 'AGCTGT': 640, 'AGCTTA': 641, 'AGCTTC': 642, 'AGCTTG': 643, 'AGCTTT': 644, 'AGGAAA': 645, 'AGGAAC': 646, 'AGGAAG': 647, 'AGGAAT': 648, 'AGGACA': 649, 'AGGACC': 650, 'AGGACG': 651, 'AGGACT': 652, 'AGGAGA': 653, 'AGGAGC': 654, 'AGGAGG': 655, 'AGGAGT': 656, 'AGGATA': 657, 'AGGATC': 658, 'AGGATG': 659, 'AGGATT': 660, 'AGGCAA': 661, 'AGGCAC': 662, 'AGGCAG': 663, 'AGGCAT': 664, 'AGGCCA': 665, 'AGGCCC': 666, 'AGGCCG': 667, 'AGGCCT': 668, 'AGGCGA': 669, 'AGGCGC': 670, 'AGGCGG': 671, 'AGGCGT': 672, 'AGGCTA': 673, 'AGGCTC': 674, 'AGGCTG': 675, 'AGGCTT': 676, 'AGGGAA': 677, 'AGGGAC': 678, 'AGGGAG': 679, 'AGGGAT': 680, 'AGGGCA': 681, 'AGGGCC': 682, 'AGGGCG': 683, 'AGGGCT': 684, 'AGGGGA': 685, 'AGGGGC': 686, 'AGGGGG': 687, 'AGGGGT': 688, 'AGGGTA': 689, 'AGGGTC': 690, 'AGGGTG': 691, 'AGGGTT': 692, 'AGGTAA': 693, 'AGGTAC': 694, 'AGGTAG': 695, 'AGGTAT': 696, 'AGGTCA': 697, 'AGGTCC': 698, 'AGGTCG': 699, 'AGGTCT': 700, 'AGGTGA': 701, 'AGGTGC': 702, 'AGGTGG': 703, 'AGGTGT': 704, 'AGGTTA': 705, 'AGGTTC': 706, 'AGGTTG': 707, 'AGGTTT': 708, 'AGTAAA': 709, 'AGTAAC': 710, 'AGTAAG': 711, 'AGTAAT': 712, 'AGTACA': 713, 'AGTACC': 714, 'AGTACG': 715, 'AGTACT': 716, 'AGTAGA': 717, 'AGTAGC': 718, 'AGTAGG': 719, 'AGTAGT': 720, 'AGTATA': 721, 'AGTATC': 722, 'AGTATG': 723, 'AGTATT': 724, 'AGTCAA': 725, 'AGTCAC': 726, 'AGTCAG': 727, 'AGTCAT': 728, 'AGTCCA': 729, 'AGTCCC': 730, 'AGTCCG': 731, 'AGTCCT': 732, 'AGTCGA': 733, 'AGTCGC': 734, 'AGTCGG': 735, 'AGTCGT': 736, 'AGTCTA': 737, 'AGTCTC': 738, 'AGTCTG': 739, 'AGTCTT': 740, 'AGTGAA': 741, 'AGTGAC': 742, 'AGTGAG': 743, 'AGTGAT': 744, 'AGTGCA': 745, 'AGTGCC': 746, 'AGTGCG': 747, 'AGTGCT': 748, 'AGTGGA': 749, 'AGTGGC': 750, 'AGTGGG': 751, 'AGTGGT': 752, 'AGTGTA': 753, 'AGTGTC': 754, 'AGTGTG': 755, 'AGTGTT': 756, 'AGTTAA': 757, 'AGTTAC': 758, 'AGTTAG': 759, 'AGTTAT': 760, 'AGTTCA': 761, 'AGTTCC': 762, 'AGTTCG': 763, 'AGTTCT': 764, 'AGTTGA': 765, 'AGTTGC': 766, 'AGTTGG': 767, 'AGTTGT': 768, 'AGTTTA': 769, 'AGTTTC': 770, 'AGTTTG': 771, 'AGTTTT': 772, 'ATAAAA': 773, 'ATAAAC': 774, 'ATAAAG': 775, 'ATAAAT': 776, 'ATAACA': 777, 'ATAACC': 778, 'ATAACG': 779, 'ATAACT': 780, 'ATAAGA': 781, 'ATAAGC': 782, 'ATAAGG': 783, 'ATAAGT': 784, 'ATAATA': 785, 'ATAATC': 786, 'ATAATG': 787, 'ATAATT': 788, 'ATACAA': 789, 'ATACAC': 790, 'ATACAG': 791, 'ATACAT': 792, 'ATACCA': 793, 'ATACCC': 794, 'ATACCG': 795, 'ATACCT': 796, 'ATACGA': 797, 'ATACGC': 798, 'ATACGG': 799, 'ATACGT': 800, 'ATACTA': 801, 'ATACTC': 802, 'ATACTG': 803, 'ATACTT': 804, 'ATAGAA': 805, 'ATAGAC': 806, 'ATAGAG': 807, 'ATAGAT': 808, 'ATAGCA': 809, 'ATAGCC': 810, 'ATAGCG': 811, 'ATAGCT': 812, 'ATAGGA': 813, 'ATAGGC': 814, 'ATAGGG': 815, 'ATAGGT': 816, 'ATAGTA': 817, 'ATAGTC': 818, 'ATAGTG': 819, 'ATAGTT': 820, 'ATATAA': 821, 'ATATAC': 822, 'ATATAG': 823, 'ATATAT': 824, 'ATATCA': 825, 'ATATCC': 826, 'ATATCG': 827, 'ATATCT': 828, 'ATATGA': 829, 'ATATGC': 830, 'ATATGG': 831, 'ATATGT': 832, 'ATATTA': 833, 'ATATTC': 834, 'ATATTG': 835, 'ATATTT': 836, 'ATCAAA': 837, 'ATCAAC': 838, 'ATCAAG': 839, 'ATCAAT': 840, 'ATCACA': 841, 'ATCACC': 842, 'ATCACG': 843, 'ATCACT': 844, 'ATCAGA': 845, 'ATCAGC': 846, 'ATCAGG': 847, 'ATCAGT': 848, 'ATCATA': 849, 'ATCATC': 850, 'ATCATG': 851, 'ATCATT': 852, 'ATCCAA': 853, 'ATCCAC': 854, 'ATCCAG': 855, 'ATCCAT': 856, 'ATCCCA': 857, 'ATCCCC': 858, 'ATCCCG': 859, 'ATCCCT': 860, 'ATCCGA': 861, 'ATCCGC': 862, 'ATCCGG': 863, 'ATCCGT': 864, 'ATCCTA': 865, 'ATCCTC': 866, 'ATCCTG': 867, 'ATCCTT': 868, 'ATCGAA': 869, 'ATCGAC': 870, 'ATCGAG': 871, 'ATCGAT': 872, 'ATCGCA': 873, 'ATCGCC': 874, 'ATCGCG': 875, 'ATCGCT': 876, 'ATCGGA': 877, 'ATCGGC': 878, 'ATCGGG': 879, 'ATCGGT': 880, 'ATCGTA': 881, 'ATCGTC': 882, 'ATCGTG': 883, 'ATCGTT': 884, 'ATCTAA': 885, 'ATCTAC': 886, 'ATCTAG': 887, 'ATCTAT': 888, 'ATCTCA': 889, 'ATCTCC': 890, 'ATCTCG': 891, 'ATCTCT': 892, 'ATCTGA': 893, 'ATCTGC': 894, 'ATCTGG': 895, 'ATCTGT': 896, 'ATCTTA': 897, 'ATCTTC': 898, 'ATCTTG': 899, 'ATCTTT': 900, 'ATGAAA': 901, 'ATGAAC': 902, 'ATGAAG': 903, 'ATGAAT': 904, 'ATGACA': 905, 'ATGACC': 906, 'ATGACG': 907, 'ATGACT': 908, 'ATGAGA': 909, 'ATGAGC': 910, 'ATGAGG': 911, 'ATGAGT': 912, 'ATGATA': 913, 'ATGATC': 914, 'ATGATG': 915, 'ATGATT': 916, 'ATGCAA': 917, 'ATGCAC': 918, 'ATGCAG': 919, 'ATGCAT': 920, 'ATGCCA': 921, 'ATGCCC': 922, 'ATGCCG': 923, 'ATGCCT': 924, 'ATGCGA': 925, 'ATGCGC': 926, 'ATGCGG': 927, 'ATGCGT': 928, 'ATGCTA': 929, 'ATGCTC': 930, 'ATGCTG': 931, 'ATGCTT': 932, 'ATGGAA': 933, 'ATGGAC': 934, 'ATGGAG': 935, 'ATGGAT': 936, 'ATGGCA': 937, 'ATGGCC': 938, 'ATGGCG': 939, 'ATGGCT': 940, 'ATGGGA': 941, 'ATGGGC': 942, 'ATGGGG': 943, 'ATGGGT': 944, 'ATGGTA': 945, 'ATGGTC': 946, 'ATGGTG': 947, 'ATGGTT': 948, 'ATGTAA': 949, 'ATGTAC': 950, 'ATGTAG': 951, 'ATGTAT': 952, 'ATGTCA': 953, 'ATGTCC': 954, 'ATGTCG': 955, 'ATGTCT': 956, 'ATGTGA': 957, 'ATGTGC': 958, 'ATGTGG': 959, 'ATGTGT': 960, 'ATGTTA': 961, 'ATGTTC': 962, 'ATGTTG': 963, 'ATGTTT': 964, 'ATTAAA': 965, 'ATTAAC': 966, 'ATTAAG': 967, 'ATTAAT': 968, 'ATTACA': 969, 'ATTACC': 970, 'ATTACG': 971, 'ATTACT': 972, 'ATTAGA': 973, 'ATTAGC': 974, 'ATTAGG': 975, 'ATTAGT': 976, 'ATTATA': 977, 'ATTATC': 978, 'ATTATG': 979, 'ATTATT': 980, 'ATTCAA': 981, 'ATTCAC': 982, 'ATTCAG': 983, 'ATTCAT': 984, 'ATTCCA': 985, 'ATTCCC': 986, 'ATTCCG': 987, 'ATTCCT': 988, 'ATTCGA': 989, 'ATTCGC': 990, 'ATTCGG': 991, 'ATTCGT': 992, 'ATTCTA': 993, 'ATTCTC': 994, 'ATTCTG': 995, 'ATTCTT': 996, 'ATTGAA': 997, 'ATTGAC': 998, 'ATTGAG': 999, 'ATTGAT': 1000, 'ATTGCA': 1001, 'ATTGCC': 1002, 'ATTGCG': 1003, 'ATTGCT': 1004, 'ATTGGA': 1005, 'ATTGGC': 1006, 'ATTGGG': 1007, 'ATTGGT': 1008, 'ATTGTA': 1009, 'ATTGTC': 1010, 'ATTGTG': 1011, 'ATTGTT': 1012, 'ATTTAA': 1013, 'ATTTAC': 1014, 'ATTTAG': 1015, 'ATTTAT': 1016, 'ATTTCA': 1017, 'ATTTCC': 1018, 'ATTTCG': 1019, 'ATTTCT': 1020, 'ATTTGA': 1021, 'ATTTGC': 1022, 'ATTTGG': 1023, 'ATTTGT': 1024, 'ATTTTA': 1025, 'ATTTTC': 1026, 'ATTTTG': 1027, 'ATTTTT': 1028, 'CAAAAA': 1029, 'CAAAAC': 1030, 'CAAAAG': 1031, 'CAAAAT': 1032, 'CAAACA': 1033, 'CAAACC': 1034, 'CAAACG': 1035, 'CAAACT': 1036, 'CAAAGA': 1037, 'CAAAGC': 1038, 'CAAAGG': 1039, 'CAAAGT': 1040, 'CAAATA': 1041, 'CAAATC': 1042, 'CAAATG': 1043, 'CAAATT': 1044, 'CAACAA': 1045, 'CAACAC': 1046, 'CAACAG': 1047, 'CAACAT': 1048, 'CAACCA': 1049, 'CAACCC': 1050, 'CAACCG': 1051, 'CAACCT': 1052, 'CAACGA': 1053, 'CAACGC': 1054, 'CAACGG': 1055, 'CAACGT': 1056, 'CAACTA': 1057, 'CAACTC': 1058, 'CAACTG': 1059, 'CAACTT': 1060, 'CAAGAA': 1061, 'CAAGAC': 1062, 'CAAGAG': 1063, 'CAAGAT': 1064, 'CAAGCA': 1065, 'CAAGCC': 1066, 'CAAGCG': 1067, 'CAAGCT': 1068, 'CAAGGA': 1069, 'CAAGGC': 1070, 'CAAGGG': 1071, 'CAAGGT': 1072, 'CAAGTA': 1073, 'CAAGTC': 1074, 'CAAGTG': 1075, 'CAAGTT': 1076, 'CAATAA': 1077, 'CAATAC': 1078, 'CAATAG': 1079, 'CAATAT': 1080, 'CAATCA': 1081, 'CAATCC': 1082, 'CAATCG': 1083, 'CAATCT': 1084, 'CAATGA': 1085, 'CAATGC': 1086, 'CAATGG': 1087, 'CAATGT': 1088, 'CAATTA': 1089, 'CAATTC': 1090, 'CAATTG': 1091, 'CAATTT': 1092, 'CACAAA': 1093, 'CACAAC': 1094, 'CACAAG': 1095, 'CACAAT': 1096, 'CACACA': 1097, 'CACACC': 1098, 'CACACG': 1099, 'CACACT': 1100, 'CACAGA': 1101, 'CACAGC': 1102, 'CACAGG': 1103, 'CACAGT': 1104, 'CACATA': 1105, 'CACATC': 1106, 'CACATG': 1107, 'CACATT': 1108, 'CACCAA': 1109, 'CACCAC': 1110, 'CACCAG': 1111, 'CACCAT': 1112, 'CACCCA': 1113, 'CACCCC': 1114, 'CACCCG': 1115, 'CACCCT': 1116, 'CACCGA': 1117, 'CACCGC': 1118, 'CACCGG': 1119, 'CACCGT': 1120, 'CACCTA': 1121, 'CACCTC': 1122, 'CACCTG': 1123, 'CACCTT': 1124, 'CACGAA': 1125, 'CACGAC': 1126, 'CACGAG': 1127, 'CACGAT': 1128, 'CACGCA': 1129, 'CACGCC': 1130, 'CACGCG': 1131, 'CACGCT': 1132, 'CACGGA': 1133, 'CACGGC': 1134, 'CACGGG': 1135, 'CACGGT': 1136, 'CACGTA': 1137, 'CACGTC': 1138, 'CACGTG': 1139, 'CACGTT': 1140, 'CACTAA': 1141, 'CACTAC': 1142, 'CACTAG': 1143, 'CACTAT': 1144, 'CACTCA': 1145, 'CACTCC': 1146, 'CACTCG': 1147, 'CACTCT': 1148, 'CACTGA': 1149, 'CACTGC': 1150, 'CACTGG': 1151, 'CACTGT': 1152, 'CACTTA': 1153, 'CACTTC': 1154, 'CACTTG': 1155, 'CACTTT': 1156, 'CAGAAA': 1157, 'CAGAAC': 1158, 'CAGAAG': 1159, 'CAGAAT': 1160, 'CAGACA': 1161, 'CAGACC': 1162, 'CAGACG': 1163, 'CAGACT': 1164, 'CAGAGA': 1165, 'CAGAGC': 1166, 'CAGAGG': 1167, 'CAGAGT': 1168, 'CAGATA': 1169, 'CAGATC': 1170, 'CAGATG': 1171, 'CAGATT': 1172, 'CAGCAA': 1173, 'CAGCAC': 1174, 'CAGCAG': 1175, 'CAGCAT': 1176, 'CAGCCA': 1177, 'CAGCCC': 1178, 'CAGCCG': 1179, 'CAGCCT': 1180, 'CAGCGA': 1181, 'CAGCGC': 1182, 'CAGCGG': 1183, 'CAGCGT': 1184, 'CAGCTA': 1185, 'CAGCTC': 1186, 'CAGCTG': 1187, 'CAGCTT': 1188, 'CAGGAA': 1189, 'CAGGAC': 1190, 'CAGGAG': 1191, 'CAGGAT': 1192, 'CAGGCA': 1193, 'CAGGCC': 1194, 'CAGGCG': 1195, 'CAGGCT': 1196, 'CAGGGA': 1197, 'CAGGGC': 1198, 'CAGGGG': 1199, 'CAGGGT': 1200, 'CAGGTA': 1201, 'CAGGTC': 1202, 'CAGGTG': 1203, 'CAGGTT': 1204, 'CAGTAA': 1205, 'CAGTAC': 1206, 'CAGTAG': 1207, 'CAGTAT': 1208, 'CAGTCA': 1209, 'CAGTCC': 1210, 'CAGTCG': 1211, 'CAGTCT': 1212, 'CAGTGA': 1213, 'CAGTGC': 1214, 'CAGTGG': 1215, 'CAGTGT': 1216, 'CAGTTA': 1217, 'CAGTTC': 1218, 'CAGTTG': 1219, 'CAGTTT': 1220, 'CATAAA': 1221, 'CATAAC': 1222, 'CATAAG': 1223, 'CATAAT': 1224, 'CATACA': 1225, 'CATACC': 1226, 'CATACG': 1227, 'CATACT': 1228, 'CATAGA': 1229, 'CATAGC': 1230, 'CATAGG': 1231, 'CATAGT': 1232, 'CATATA': 1233, 'CATATC': 1234, 'CATATG': 1235, 'CATATT': 1236, 'CATCAA': 1237, 'CATCAC': 1238, 'CATCAG': 1239, 'CATCAT': 1240, 'CATCCA': 1241, 'CATCCC': 1242, 'CATCCG': 1243, 'CATCCT': 1244, 'CATCGA': 1245, 'CATCGC': 1246, 'CATCGG': 1247, 'CATCGT': 1248, 'CATCTA': 1249, 'CATCTC': 1250, 'CATCTG': 1251, 'CATCTT': 1252, 'CATGAA': 1253, 'CATGAC': 1254, 'CATGAG': 1255, 'CATGAT': 1256, 'CATGCA': 1257, 'CATGCC': 1258, 'CATGCG': 1259, 'CATGCT': 1260, 'CATGGA': 1261, 'CATGGC': 1262, 'CATGGG': 1263, 'CATGGT': 1264, 'CATGTA': 1265, 'CATGTC': 1266, 'CATGTG': 1267, 'CATGTT': 1268, 'CATTAA': 1269, 'CATTAC': 1270, 'CATTAG': 1271, 'CATTAT': 1272, 'CATTCA': 1273, 'CATTCC': 1274, 'CATTCG': 1275, 'CATTCT': 1276, 'CATTGA': 1277, 'CATTGC': 1278, 'CATTGG': 1279, 'CATTGT': 1280, 'CATTTA': 1281, 'CATTTC': 1282, 'CATTTG': 1283, 'CATTTT': 1284, 'CCAAAA': 1285, 'CCAAAC': 1286, 'CCAAAG': 1287, 'CCAAAT': 1288, 'CCAACA': 1289, 'CCAACC': 1290, 'CCAACG': 1291, 'CCAACT': 1292, 'CCAAGA': 1293, 'CCAAGC': 1294, 'CCAAGG': 1295, 'CCAAGT': 1296, 'CCAATA': 1297, 'CCAATC': 1298, 'CCAATG': 1299, 'CCAATT': 1300, 'CCACAA': 1301, 'CCACAC': 1302, 'CCACAG': 1303, 'CCACAT': 1304, 'CCACCA': 1305, 'CCACCC': 1306, 'CCACCG': 1307, 'CCACCT': 1308, 'CCACGA': 1309, 'CCACGC': 1310, 'CCACGG': 1311, 'CCACGT': 1312, 'CCACTA': 1313, 'CCACTC': 1314, 'CCACTG': 1315, 'CCACTT': 1316, 'CCAGAA': 1317, 'CCAGAC': 1318, 'CCAGAG': 1319, 'CCAGAT': 1320, 'CCAGCA': 1321, 'CCAGCC': 1322, 'CCAGCG': 1323, 'CCAGCT': 1324, 'CCAGGA': 1325, 'CCAGGC': 1326, 'CCAGGG': 1327, 'CCAGGT': 1328, 'CCAGTA': 1329, 'CCAGTC': 1330, 'CCAGTG': 1331, 'CCAGTT': 1332, 'CCATAA': 1333, 'CCATAC': 1334, 'CCATAG': 1335, 'CCATAT': 1336, 'CCATCA': 1337, 'CCATCC': 1338, 'CCATCG': 1339, 'CCATCT': 1340, 'CCATGA': 1341, 'CCATGC': 1342, 'CCATGG': 1343, 'CCATGT': 1344, 'CCATTA': 1345, 'CCATTC': 1346, 'CCATTG': 1347, 'CCATTT': 1348, 'CCCAAA': 1349, 'CCCAAC': 1350, 'CCCAAG': 1351, 'CCCAAT': 1352, 'CCCACA': 1353, 'CCCACC': 1354, 'CCCACG': 1355, 'CCCACT': 1356, 'CCCAGA': 1357, 'CCCAGC': 1358, 'CCCAGG': 1359, 'CCCAGT': 1360, 'CCCATA': 1361, 'CCCATC': 1362, 'CCCATG': 1363, 'CCCATT': 1364, 'CCCCAA': 1365, 'CCCCAC': 1366, 'CCCCAG': 1367, 'CCCCAT': 1368, 'CCCCCA': 1369, 'CCCCCC': 1370, 'CCCCCG': 1371, 'CCCCCT': 1372, 'CCCCGA': 1373, 'CCCCGC': 1374, 'CCCCGG': 1375, 'CCCCGT': 1376, 'CCCCTA': 1377, 'CCCCTC': 1378, 'CCCCTG': 1379, 'CCCCTT': 1380, 'CCCGAA': 1381, 'CCCGAC': 1382, 'CCCGAG': 1383, 'CCCGAT': 1384, 'CCCGCA': 1385, 'CCCGCC': 1386, 'CCCGCG': 1387, 'CCCGCT': 1388, 'CCCGGA': 1389, 'CCCGGC': 1390, 'CCCGGG': 1391, 'CCCGGT': 1392, 'CCCGTA': 1393, 'CCCGTC': 1394, 'CCCGTG': 1395, 'CCCGTT': 1396, 'CCCTAA': 1397, 'CCCTAC': 1398, 'CCCTAG': 1399, 'CCCTAT': 1400, 'CCCTCA': 1401, 'CCCTCC': 1402, 'CCCTCG': 1403, 'CCCTCT': 1404, 'CCCTGA': 1405, 'CCCTGC': 1406, 'CCCTGG': 1407, 'CCCTGT': 1408, 'CCCTTA': 1409, 'CCCTTC': 1410, 'CCCTTG': 1411, 'CCCTTT': 1412, 'CCGAAA': 1413, 'CCGAAC': 1414, 'CCGAAG': 1415, 'CCGAAT': 1416, 'CCGACA': 1417, 'CCGACC': 1418, 'CCGACG': 1419, 'CCGACT': 1420, 'CCGAGA': 1421, 'CCGAGC': 1422, 'CCGAGG': 1423, 'CCGAGT': 1424, 'CCGATA': 1425, 'CCGATC': 1426, 'CCGATG': 1427, 'CCGATT': 1428, 'CCGCAA': 1429, 'CCGCAC': 1430, 'CCGCAG': 1431, 'CCGCAT': 1432, 'CCGCCA': 1433, 'CCGCCC': 1434, 'CCGCCG': 1435, 'CCGCCT': 1436, 'CCGCGA': 1437, 'CCGCGC': 1438, 'CCGCGG': 1439, 'CCGCGT': 1440, 'CCGCTA': 1441, 'CCGCTC': 1442, 'CCGCTG': 1443, 'CCGCTT': 1444, 'CCGGAA': 1445, 'CCGGAC': 1446, 'CCGGAG': 1447, 'CCGGAT': 1448, 'CCGGCA': 1449, 'CCGGCC': 1450, 'CCGGCG': 1451, 'CCGGCT': 1452, 'CCGGGA': 1453, 'CCGGGC': 1454, 'CCGGGG': 1455, 'CCGGGT': 1456, 'CCGGTA': 1457, 'CCGGTC': 1458, 'CCGGTG': 1459, 'CCGGTT': 1460, 'CCGTAA': 1461, 'CCGTAC': 1462, 'CCGTAG': 1463, 'CCGTAT': 1464, 'CCGTCA': 1465, 'CCGTCC': 1466, 'CCGTCG': 1467, 'CCGTCT': 1468, 'CCGTGA': 1469, 'CCGTGC': 1470, 'CCGTGG': 1471, 'CCGTGT': 1472, 'CCGTTA': 1473, 'CCGTTC': 1474, 'CCGTTG': 1475, 'CCGTTT': 1476, 'CCTAAA': 1477, 'CCTAAC': 1478, 'CCTAAG': 1479, 'CCTAAT': 1480, 'CCTACA': 1481, 'CCTACC': 1482, 'CCTACG': 1483, 'CCTACT': 1484, 'CCTAGA': 1485, 'CCTAGC': 1486, 'CCTAGG': 1487, 'CCTAGT': 1488, 'CCTATA': 1489, 'CCTATC': 1490, 'CCTATG': 1491, 'CCTATT': 1492, 'CCTCAA': 1493, 'CCTCAC': 1494, 'CCTCAG': 1495, 'CCTCAT': 1496, 'CCTCCA': 1497, 'CCTCCC': 1498, 'CCTCCG': 1499, 'CCTCCT': 1500, 'CCTCGA': 1501, 'CCTCGC': 1502, 'CCTCGG': 1503, 'CCTCGT': 1504, 'CCTCTA': 1505, 'CCTCTC': 1506, 'CCTCTG': 1507, 'CCTCTT': 1508, 'CCTGAA': 1509, 'CCTGAC': 1510, 'CCTGAG': 1511, 'CCTGAT': 1512, 'CCTGCA': 1513, 'CCTGCC': 1514, 'CCTGCG': 1515, 'CCTGCT': 1516, 'CCTGGA': 1517, 'CCTGGC': 1518, 'CCTGGG': 1519, 'CCTGGT': 1520, 'CCTGTA': 1521, 'CCTGTC': 1522, 'CCTGTG': 1523, 'CCTGTT': 1524, 'CCTTAA': 1525, 'CCTTAC': 1526, 'CCTTAG': 1527, 'CCTTAT': 1528, 'CCTTCA': 1529, 'CCTTCC': 1530, 'CCTTCG': 1531, 'CCTTCT': 1532, 'CCTTGA': 1533, 'CCTTGC': 1534, 'CCTTGG': 1535, 'CCTTGT': 1536, 'CCTTTA': 1537, 'CCTTTC': 1538, 'CCTTTG': 1539, 'CCTTTT': 1540, 'CGAAAA': 1541, 'CGAAAC': 1542, 'CGAAAG': 1543, 'CGAAAT': 1544, 'CGAACA': 1545, 'CGAACC': 1546, 'CGAACG': 1547, 'CGAACT': 1548, 'CGAAGA': 1549, 'CGAAGC': 1550, 'CGAAGG': 1551, 'CGAAGT': 1552, 'CGAATA': 1553, 'CGAATC': 1554, 'CGAATG': 1555, 'CGAATT': 1556, 'CGACAA': 1557, 'CGACAC': 1558, 'CGACAG': 1559, 'CGACAT': 1560, 'CGACCA': 1561, 'CGACCC': 1562, 'CGACCG': 1563, 'CGACCT': 1564, 'CGACGA': 1565, 'CGACGC': 1566, 'CGACGG': 1567, 'CGACGT': 1568, 'CGACTA': 1569, 'CGACTC': 1570, 'CGACTG': 1571, 'CGACTT': 1572, 'CGAGAA': 1573, 'CGAGAC': 1574, 'CGAGAG': 1575, 'CGAGAT': 1576, 'CGAGCA': 1577, 'CGAGCC': 1578, 'CGAGCG': 1579, 'CGAGCT': 1580, 'CGAGGA': 1581, 'CGAGGC': 1582, 'CGAGGG': 1583, 'CGAGGT': 1584, 'CGAGTA': 1585, 'CGAGTC': 1586, 'CGAGTG': 1587, 'CGAGTT': 1588, 'CGATAA': 1589, 'CGATAC': 1590, 'CGATAG': 1591, 'CGATAT': 1592, 'CGATCA': 1593, 'CGATCC': 1594, 'CGATCG': 1595, 'CGATCT': 1596, 'CGATGA': 1597, 'CGATGC': 1598, 'CGATGG': 1599, 'CGATGT': 1600, 'CGATTA': 1601, 'CGATTC': 1602, 'CGATTG': 1603, 'CGATTT': 1604, 'CGCAAA': 1605, 'CGCAAC': 1606, 'CGCAAG': 1607, 'CGCAAT': 1608, 'CGCACA': 1609, 'CGCACC': 1610, 'CGCACG': 1611, 'CGCACT': 1612, 'CGCAGA': 1613, 'CGCAGC': 1614, 'CGCAGG': 1615, 'CGCAGT': 1616, 'CGCATA': 1617, 'CGCATC': 1618, 'CGCATG': 1619, 'CGCATT': 1620, 'CGCCAA': 1621, 'CGCCAC': 1622, 'CGCCAG': 1623, 'CGCCAT': 1624, 'CGCCCA': 1625, 'CGCCCC': 1626, 'CGCCCG': 1627, 'CGCCCT': 1628, 'CGCCGA': 1629, 'CGCCGC': 1630, 'CGCCGG': 1631, 'CGCCGT': 1632, 'CGCCTA': 1633, 'CGCCTC': 1634, 'CGCCTG': 1635, 'CGCCTT': 1636, 'CGCGAA': 1637, 'CGCGAC': 1638, 'CGCGAG': 1639, 'CGCGAT': 1640, 'CGCGCA': 1641, 'CGCGCC': 1642, 'CGCGCG': 1643, 'CGCGCT': 1644, 'CGCGGA': 1645, 'CGCGGC': 1646, 'CGCGGG': 1647, 'CGCGGT': 1648, 'CGCGTA': 1649, 'CGCGTC': 1650, 'CGCGTG': 1651, 'CGCGTT': 1652, 'CGCTAA': 1653, 'CGCTAC': 1654, 'CGCTAG': 1655, 'CGCTAT': 1656, 'CGCTCA': 1657, 'CGCTCC': 1658, 'CGCTCG': 1659, 'CGCTCT': 1660, 'CGCTGA': 1661, 'CGCTGC': 1662, 'CGCTGG': 1663, 'CGCTGT': 1664, 'CGCTTA': 1665, 'CGCTTC': 1666, 'CGCTTG': 1667, 'CGCTTT': 1668, 'CGGAAA': 1669, 'CGGAAC': 1670, 'CGGAAG': 1671, 'CGGAAT': 1672, 'CGGACA': 1673, 'CGGACC': 1674, 'CGGACG': 1675, 'CGGACT': 1676, 'CGGAGA': 1677, 'CGGAGC': 1678, 'CGGAGG': 1679, 'CGGAGT': 1680, 'CGGATA': 1681, 'CGGATC': 1682, 'CGGATG': 1683, 'CGGATT': 1684, 'CGGCAA': 1685, 'CGGCAC': 1686, 'CGGCAG': 1687, 'CGGCAT': 1688, 'CGGCCA': 1689, 'CGGCCC': 1690, 'CGGCCG': 1691, 'CGGCCT': 1692, 'CGGCGA': 1693, 'CGGCGC': 1694, 'CGGCGG': 1695, 'CGGCGT': 1696, 'CGGCTA': 1697, 'CGGCTC': 1698, 'CGGCTG': 1699, 'CGGCTT': 1700, 'CGGGAA': 1701, 'CGGGAC': 1702, 'CGGGAG': 1703, 'CGGGAT': 1704, 'CGGGCA': 1705, 'CGGGCC': 1706, 'CGGGCG': 1707, 'CGGGCT': 1708, 'CGGGGA': 1709, 'CGGGGC': 1710, 'CGGGGG': 1711, 'CGGGGT': 1712, 'CGGGTA': 1713, 'CGGGTC': 1714, 'CGGGTG': 1715, 'CGGGTT': 1716, 'CGGTAA': 1717, 'CGGTAC': 1718, 'CGGTAG': 1719, 'CGGTAT': 1720, 'CGGTCA': 1721, 'CGGTCC': 1722, 'CGGTCG': 1723, 'CGGTCT': 1724, 'CGGTGA': 1725, 'CGGTGC': 1726, 'CGGTGG': 1727, 'CGGTGT': 1728, 'CGGTTA': 1729, 'CGGTTC': 1730, 'CGGTTG': 1731, 'CGGTTT': 1732, 'CGTAAA': 1733, 'CGTAAC': 1734, 'CGTAAG': 1735, 'CGTAAT': 1736, 'CGTACA': 1737, 'CGTACC': 1738, 'CGTACG': 1739, 'CGTACT': 1740, 'CGTAGA': 1741, 'CGTAGC': 1742, 'CGTAGG': 1743, 'CGTAGT': 1744, 'CGTATA': 1745, 'CGTATC': 1746, 'CGTATG': 1747, 'CGTATT': 1748, 'CGTCAA': 1749, 'CGTCAC': 1750, 'CGTCAG': 1751, 'CGTCAT': 1752, 'CGTCCA': 1753, 'CGTCCC': 1754, 'CGTCCG': 1755, 'CGTCCT': 1756, 'CGTCGA': 1757, 'CGTCGC': 1758, 'CGTCGG': 1759, 'CGTCGT': 1760, 'CGTCTA': 1761, 'CGTCTC': 1762, 'CGTCTG': 1763, 'CGTCTT': 1764, 'CGTGAA': 1765, 'CGTGAC': 1766, 'CGTGAG': 1767, 'CGTGAT': 1768, 'CGTGCA': 1769, 'CGTGCC': 1770, 'CGTGCG': 1771, 'CGTGCT': 1772, 'CGTGGA': 1773, 'CGTGGC': 1774, 'CGTGGG': 1775, 'CGTGGT': 1776, 'CGTGTA': 1777, 'CGTGTC': 1778, 'CGTGTG': 1779, 'CGTGTT': 1780, 'CGTTAA': 1781, 'CGTTAC': 1782, 'CGTTAG': 1783, 'CGTTAT': 1784, 'CGTTCA': 1785, 'CGTTCC': 1786, 'CGTTCG': 1787, 'CGTTCT': 1788, 'CGTTGA': 1789, 'CGTTGC': 1790, 'CGTTGG': 1791, 'CGTTGT': 1792, 'CGTTTA': 1793, 'CGTTTC': 1794, 'CGTTTG': 1795, 'CGTTTT': 1796, 'CTAAAA': 1797, 'CTAAAC': 1798, 'CTAAAG': 1799, 'CTAAAT': 1800, 'CTAACA': 1801, 'CTAACC': 1802, 'CTAACG': 1803, 'CTAACT': 1804, 'CTAAGA': 1805, 'CTAAGC': 1806, 'CTAAGG': 1807, 'CTAAGT': 1808, 'CTAATA': 1809, 'CTAATC': 1810, 'CTAATG': 1811, 'CTAATT': 1812, 'CTACAA': 1813, 'CTACAC': 1814, 'CTACAG': 1815, 'CTACAT': 1816, 'CTACCA': 1817, 'CTACCC': 1818, 'CTACCG': 1819, 'CTACCT': 1820, 'CTACGA': 1821, 'CTACGC': 1822, 'CTACGG': 1823, 'CTACGT': 1824, 'CTACTA': 1825, 'CTACTC': 1826, 'CTACTG': 1827, 'CTACTT': 1828, 'CTAGAA': 1829, 'CTAGAC': 1830, 'CTAGAG': 1831, 'CTAGAT': 1832, 'CTAGCA': 1833, 'CTAGCC': 1834, 'CTAGCG': 1835, 'CTAGCT': 1836, 'CTAGGA': 1837, 'CTAGGC': 1838, 'CTAGGG': 1839, 'CTAGGT': 1840, 'CTAGTA': 1841, 'CTAGTC': 1842, 'CTAGTG': 1843, 'CTAGTT': 1844, 'CTATAA': 1845, 'CTATAC': 1846, 'CTATAG': 1847, 'CTATAT': 1848, 'CTATCA': 1849, 'CTATCC': 1850, 'CTATCG': 1851, 'CTATCT': 1852, 'CTATGA': 1853, 'CTATGC': 1854, 'CTATGG': 1855, 'CTATGT': 1856, 'CTATTA': 1857, 'CTATTC': 1858, 'CTATTG': 1859, 'CTATTT': 1860, 'CTCAAA': 1861, 'CTCAAC': 1862, 'CTCAAG': 1863, 'CTCAAT': 1864, 'CTCACA': 1865, 'CTCACC': 1866, 'CTCACG': 1867, 'CTCACT': 1868, 'CTCAGA': 1869, 'CTCAGC': 1870, 'CTCAGG': 1871, 'CTCAGT': 1872, 'CTCATA': 1873, 'CTCATC': 1874, 'CTCATG': 1875, 'CTCATT': 1876, 'CTCCAA': 1877, 'CTCCAC': 1878, 'CTCCAG': 1879, 'CTCCAT': 1880, 'CTCCCA': 1881, 'CTCCCC': 1882, 'CTCCCG': 1883, 'CTCCCT': 1884, 'CTCCGA': 1885, 'CTCCGC': 1886, 'CTCCGG': 1887, 'CTCCGT': 1888, 'CTCCTA': 1889, 'CTCCTC': 1890, 'CTCCTG': 1891, 'CTCCTT': 1892, 'CTCGAA': 1893, 'CTCGAC': 1894, 'CTCGAG': 1895, 'CTCGAT': 1896, 'CTCGCA': 1897, 'CTCGCC': 1898, 'CTCGCG': 1899, 'CTCGCT': 1900, 'CTCGGA': 1901, 'CTCGGC': 1902, 'CTCGGG': 1903, 'CTCGGT': 1904, 'CTCGTA': 1905, 'CTCGTC': 1906, 'CTCGTG': 1907, 'CTCGTT': 1908, 'CTCTAA': 1909, 'CTCTAC': 1910, 'CTCTAG': 1911, 'CTCTAT': 1912, 'CTCTCA': 1913, 'CTCTCC': 1914, 'CTCTCG': 1915, 'CTCTCT': 1916, 'CTCTGA': 1917, 'CTCTGC': 1918, 'CTCTGG': 1919, 'CTCTGT': 1920, 'CTCTTA': 1921, 'CTCTTC': 1922, 'CTCTTG': 1923, 'CTCTTT': 1924, 'CTGAAA': 1925, 'CTGAAC': 1926, 'CTGAAG': 1927, 'CTGAAT': 1928, 'CTGACA': 1929, 'CTGACC': 1930, 'CTGACG': 1931, 'CTGACT': 1932, 'CTGAGA': 1933, 'CTGAGC': 1934, 'CTGAGG': 1935, 'CTGAGT': 1936, 'CTGATA': 1937, 'CTGATC': 1938, 'CTGATG': 1939, 'CTGATT': 1940, 'CTGCAA': 1941, 'CTGCAC': 1942, 'CTGCAG': 1943, 'CTGCAT': 1944, 'CTGCCA': 1945, 'CTGCCC': 1946, 'CTGCCG': 1947, 'CTGCCT': 1948, 'CTGCGA': 1949, 'CTGCGC': 1950, 'CTGCGG': 1951, 'CTGCGT': 1952, 'CTGCTA': 1953, 'CTGCTC': 1954, 'CTGCTG': 1955, 'CTGCTT': 1956, 'CTGGAA': 1957, 'CTGGAC': 1958, 'CTGGAG': 1959, 'CTGGAT': 1960, 'CTGGCA': 1961, 'CTGGCC': 1962, 'CTGGCG': 1963, 'CTGGCT': 1964, 'CTGGGA': 1965, 'CTGGGC': 1966, 'CTGGGG': 1967, 'CTGGGT': 1968, 'CTGGTA': 1969, 'CTGGTC': 1970, 'CTGGTG': 1971, 'CTGGTT': 1972, 'CTGTAA': 1973, 'CTGTAC': 1974, 'CTGTAG': 1975, 'CTGTAT': 1976, 'CTGTCA': 1977, 'CTGTCC': 1978, 'CTGTCG': 1979, 'CTGTCT': 1980, 'CTGTGA': 1981, 'CTGTGC': 1982, 'CTGTGG': 1983, 'CTGTGT': 1984, 'CTGTTA': 1985, 'CTGTTC': 1986, 'CTGTTG': 1987, 'CTGTTT': 1988, 'CTTAAA': 1989, 'CTTAAC': 1990, 'CTTAAG': 1991, 'CTTAAT': 1992, 'CTTACA': 1993, 'CTTACC': 1994, 'CTTACG': 1995, 'CTTACT': 1996, 'CTTAGA': 1997, 'CTTAGC': 1998, 'CTTAGG': 1999, 'CTTAGT': 2000, 'CTTATA': 2001, 'CTTATC': 2002, 'CTTATG': 2003, 'CTTATT': 2004, 'CTTCAA': 2005, 'CTTCAC': 2006, 'CTTCAG': 2007, 'CTTCAT': 2008, 'CTTCCA': 2009, 'CTTCCC': 2010, 'CTTCCG': 2011, 'CTTCCT': 2012, 'CTTCGA': 2013, 'CTTCGC': 2014, 'CTTCGG': 2015, 'CTTCGT': 2016, 'CTTCTA': 2017, 'CTTCTC': 2018, 'CTTCTG': 2019, 'CTTCTT': 2020, 'CTTGAA': 2021, 'CTTGAC': 2022, 'CTTGAG': 2023, 'CTTGAT': 2024, 'CTTGCA': 2025, 'CTTGCC': 2026, 'CTTGCG': 2027, 'CTTGCT': 2028, 'CTTGGA': 2029, 'CTTGGC': 2030, 'CTTGGG': 2031, 'CTTGGT': 2032, 'CTTGTA': 2033, 'CTTGTC': 2034, 'CTTGTG': 2035, 'CTTGTT': 2036, 'CTTTAA': 2037, 'CTTTAC': 2038, 'CTTTAG': 2039, 'CTTTAT': 2040, 'CTTTCA': 2041, 'CTTTCC': 2042, 'CTTTCG': 2043, 'CTTTCT': 2044, 'CTTTGA': 2045, 'CTTTGC': 2046, 'CTTTGG': 2047, 'CTTTGT': 2048, 'CTTTTA': 2049, 'CTTTTC': 2050, 'CTTTTG': 2051, 'CTTTTT': 2052, 'GAAAAA': 2053, 'GAAAAC': 2054, 'GAAAAG': 2055, 'GAAAAT': 2056, 'GAAACA': 2057, 'GAAACC': 2058, 'GAAACG': 2059, 'GAAACT': 2060, 'GAAAGA': 2061, 'GAAAGC': 2062, 'GAAAGG': 2063, 'GAAAGT': 2064, 'GAAATA': 2065, 'GAAATC': 2066, 'GAAATG': 2067, 'GAAATT': 2068, 'GAACAA': 2069, 'GAACAC': 2070, 'GAACAG': 2071, 'GAACAT': 2072, 'GAACCA': 2073, 'GAACCC': 2074, 'GAACCG': 2075, 'GAACCT': 2076, 'GAACGA': 2077, 'GAACGC': 2078, 'GAACGG': 2079, 'GAACGT': 2080, 'GAACTA': 2081, 'GAACTC': 2082, 'GAACTG': 2083, 'GAACTT': 2084, 'GAAGAA': 2085, 'GAAGAC': 2086, 'GAAGAG': 2087, 'GAAGAT': 2088, 'GAAGCA': 2089, 'GAAGCC': 2090, 'GAAGCG': 2091, 'GAAGCT': 2092, 'GAAGGA': 2093, 'GAAGGC': 2094, 'GAAGGG': 2095, 'GAAGGT': 2096, 'GAAGTA': 2097, 'GAAGTC': 2098, 'GAAGTG': 2099, 'GAAGTT': 2100, 'GAATAA': 2101, 'GAATAC': 2102, 'GAATAG': 2103, 'GAATAT': 2104, 'GAATCA': 2105, 'GAATCC': 2106, 'GAATCG': 2107, 'GAATCT': 2108, 'GAATGA': 2109, 'GAATGC': 2110, 'GAATGG': 2111, 'GAATGT': 2112, 'GAATTA': 2113, 'GAATTC': 2114, 'GAATTG': 2115, 'GAATTT': 2116, 'GACAAA': 2117, 'GACAAC': 2118, 'GACAAG': 2119, 'GACAAT': 2120, 'GACACA': 2121, 'GACACC': 2122, 'GACACG': 2123, 'GACACT': 2124, 'GACAGA': 2125, 'GACAGC': 2126, 'GACAGG': 2127, 'GACAGT': 2128, 'GACATA': 2129, 'GACATC': 2130, 'GACATG': 2131, 'GACATT': 2132, 'GACCAA': 2133, 'GACCAC': 2134, 'GACCAG': 2135, 'GACCAT': 2136, 'GACCCA': 2137, 'GACCCC': 2138, 'GACCCG': 2139, 'GACCCT': 2140, 'GACCGA': 2141, 'GACCGC': 2142, 'GACCGG': 2143, 'GACCGT': 2144, 'GACCTA': 2145, 'GACCTC': 2146, 'GACCTG': 2147, 'GACCTT': 2148, 'GACGAA': 2149, 'GACGAC': 2150, 'GACGAG': 2151, 'GACGAT': 2152, 'GACGCA': 2153, 'GACGCC': 2154, 'GACGCG': 2155, 'GACGCT': 2156, 'GACGGA': 2157, 'GACGGC': 2158, 'GACGGG': 2159, 'GACGGT': 2160, 'GACGTA': 2161, 'GACGTC': 2162, 'GACGTG': 2163, 'GACGTT': 2164, 'GACTAA': 2165, 'GACTAC': 2166, 'GACTAG': 2167, 'GACTAT': 2168, 'GACTCA': 2169, 'GACTCC': 2170, 'GACTCG': 2171, 'GACTCT': 2172, 'GACTGA': 2173, 'GACTGC': 2174, 'GACTGG': 2175, 'GACTGT': 2176, 'GACTTA': 2177, 'GACTTC': 2178, 'GACTTG': 2179, 'GACTTT': 2180, 'GAGAAA': 2181, 'GAGAAC': 2182, 'GAGAAG': 2183, 'GAGAAT': 2184, 'GAGACA': 2185, 'GAGACC': 2186, 'GAGACG': 2187, 'GAGACT': 2188, 'GAGAGA': 2189, 'GAGAGC': 2190, 'GAGAGG': 2191, 'GAGAGT': 2192, 'GAGATA': 2193, 'GAGATC': 2194, 'GAGATG': 2195, 'GAGATT': 2196, 'GAGCAA': 2197, 'GAGCAC': 2198, 'GAGCAG': 2199, 'GAGCAT': 2200, 'GAGCCA': 2201, 'GAGCCC': 2202, 'GAGCCG': 2203, 'GAGCCT': 2204, 'GAGCGA': 2205, 'GAGCGC': 2206, 'GAGCGG': 2207, 'GAGCGT': 2208, 'GAGCTA': 2209, 'GAGCTC': 2210, 'GAGCTG': 2211, 'GAGCTT': 2212, 'GAGGAA': 2213, 'GAGGAC': 2214, 'GAGGAG': 2215, 'GAGGAT': 2216, 'GAGGCA': 2217, 'GAGGCC': 2218, 'GAGGCG': 2219, 'GAGGCT': 2220, 'GAGGGA': 2221, 'GAGGGC': 2222, 'GAGGGG': 2223, 'GAGGGT': 2224, 'GAGGTA': 2225, 'GAGGTC': 2226, 'GAGGTG': 2227, 'GAGGTT': 2228, 'GAGTAA': 2229, 'GAGTAC': 2230, 'GAGTAG': 2231, 'GAGTAT': 2232, 'GAGTCA': 2233, 'GAGTCC': 2234, 'GAGTCG': 2235, 'GAGTCT': 2236, 'GAGTGA': 2237, 'GAGTGC': 2238, 'GAGTGG': 2239, 'GAGTGT': 2240, 'GAGTTA': 2241, 'GAGTTC': 2242, 'GAGTTG': 2243, 'GAGTTT': 2244, 'GATAAA': 2245, 'GATAAC': 2246, 'GATAAG': 2247, 'GATAAT': 2248, 'GATACA': 2249, 'GATACC': 2250, 'GATACG': 2251, 'GATACT': 2252, 'GATAGA': 2253, 'GATAGC': 2254, 'GATAGG': 2255, 'GATAGT': 2256, 'GATATA': 2257, 'GATATC': 2258, 'GATATG': 2259, 'GATATT': 2260, 'GATCAA': 2261, 'GATCAC': 2262, 'GATCAG': 2263, 'GATCAT': 2264, 'GATCCA': 2265, 'GATCCC': 2266, 'GATCCG': 2267, 'GATCCT': 2268, 'GATCGA': 2269, 'GATCGC': 2270, 'GATCGG': 2271, 'GATCGT': 2272, 'GATCTA': 2273, 'GATCTC': 2274, 'GATCTG': 2275, 'GATCTT': 2276, 'GATGAA': 2277, 'GATGAC': 2278, 'GATGAG': 2279, 'GATGAT': 2280, 'GATGCA': 2281, 'GATGCC': 2282, 'GATGCG': 2283, 'GATGCT': 2284, 'GATGGA': 2285, 'GATGGC': 2286, 'GATGGG': 2287, 'GATGGT': 2288, 'GATGTA': 2289, 'GATGTC': 2290, 'GATGTG': 2291, 'GATGTT': 2292, 'GATTAA': 2293, 'GATTAC': 2294, 'GATTAG': 2295, 'GATTAT': 2296, 'GATTCA': 2297, 'GATTCC': 2298, 'GATTCG': 2299, 'GATTCT': 2300, 'GATTGA': 2301, 'GATTGC': 2302, 'GATTGG': 2303, 'GATTGT': 2304, 'GATTTA': 2305, 'GATTTC': 2306, 'GATTTG': 2307, 'GATTTT': 2308, 'GCAAAA': 2309, 'GCAAAC': 2310, 'GCAAAG': 2311, 'GCAAAT': 2312, 'GCAACA': 2313, 'GCAACC': 2314, 'GCAACG': 2315, 'GCAACT': 2316, 'GCAAGA': 2317, 'GCAAGC': 2318, 'GCAAGG': 2319, 'GCAAGT': 2320, 'GCAATA': 2321, 'GCAATC': 2322, 'GCAATG': 2323, 'GCAATT': 2324, 'GCACAA': 2325, 'GCACAC': 2326, 'GCACAG': 2327, 'GCACAT': 2328, 'GCACCA': 2329, 'GCACCC': 2330, 'GCACCG': 2331, 'GCACCT': 2332, 'GCACGA': 2333, 'GCACGC': 2334, 'GCACGG': 2335, 'GCACGT': 2336, 'GCACTA': 2337, 'GCACTC': 2338, 'GCACTG': 2339, 'GCACTT': 2340, 'GCAGAA': 2341, 'GCAGAC': 2342, 'GCAGAG': 2343, 'GCAGAT': 2344, 'GCAGCA': 2345, 'GCAGCC': 2346, 'GCAGCG': 2347, 'GCAGCT': 2348, 'GCAGGA': 2349, 'GCAGGC': 2350, 'GCAGGG': 2351, 'GCAGGT': 2352, 'GCAGTA': 2353, 'GCAGTC': 2354, 'GCAGTG': 2355, 'GCAGTT': 2356, 'GCATAA': 2357, 'GCATAC': 2358, 'GCATAG': 2359, 'GCATAT': 2360, 'GCATCA': 2361, 'GCATCC': 2362, 'GCATCG': 2363, 'GCATCT': 2364, 'GCATGA': 2365, 'GCATGC': 2366, 'GCATGG': 2367, 'GCATGT': 2368, 'GCATTA': 2369, 'GCATTC': 2370, 'GCATTG': 2371, 'GCATTT': 2372, 'GCCAAA': 2373, 'GCCAAC': 2374, 'GCCAAG': 2375, 'GCCAAT': 2376, 'GCCACA': 2377, 'GCCACC': 2378, 'GCCACG': 2379, 'GCCACT': 2380, 'GCCAGA': 2381, 'GCCAGC': 2382, 'GCCAGG': 2383, 'GCCAGT': 2384, 'GCCATA': 2385, 'GCCATC': 2386, 'GCCATG': 2387, 'GCCATT': 2388, 'GCCCAA': 2389, 'GCCCAC': 2390, 'GCCCAG': 2391, 'GCCCAT': 2392, 'GCCCCA': 2393, 'GCCCCC': 2394, 'GCCCCG': 2395, 'GCCCCT': 2396, 'GCCCGA': 2397, 'GCCCGC': 2398, 'GCCCGG': 2399, 'GCCCGT': 2400, 'GCCCTA': 2401, 'GCCCTC': 2402, 'GCCCTG': 2403, 'GCCCTT': 2404, 'GCCGAA': 2405, 'GCCGAC': 2406, 'GCCGAG': 2407, 'GCCGAT': 2408, 'GCCGCA': 2409, 'GCCGCC': 2410, 'GCCGCG': 2411, 'GCCGCT': 2412, 'GCCGGA': 2413, 'GCCGGC': 2414, 'GCCGGG': 2415, 'GCCGGT': 2416, 'GCCGTA': 2417, 'GCCGTC': 2418, 'GCCGTG': 2419, 'GCCGTT': 2420, 'GCCTAA': 2421, 'GCCTAC': 2422, 'GCCTAG': 2423, 'GCCTAT': 2424, 'GCCTCA': 2425, 'GCCTCC': 2426, 'GCCTCG': 2427, 'GCCTCT': 2428, 'GCCTGA': 2429, 'GCCTGC': 2430, 'GCCTGG': 2431, 'GCCTGT': 2432, 'GCCTTA': 2433, 'GCCTTC': 2434, 'GCCTTG': 2435, 'GCCTTT': 2436, 'GCGAAA': 2437, 'GCGAAC': 2438, 'GCGAAG': 2439, 'GCGAAT': 2440, 'GCGACA': 2441, 'GCGACC': 2442, 'GCGACG': 2443, 'GCGACT': 2444, 'GCGAGA': 2445, 'GCGAGC': 2446, 'GCGAGG': 2447, 'GCGAGT': 2448, 'GCGATA': 2449, 'GCGATC': 2450, 'GCGATG': 2451, 'GCGATT': 2452, 'GCGCAA': 2453, 'GCGCAC': 2454, 'GCGCAG': 2455, 'GCGCAT': 2456, 'GCGCCA': 2457, 'GCGCCC': 2458, 'GCGCCG': 2459, 'GCGCCT': 2460, 'GCGCGA': 2461, 'GCGCGC': 2462, 'GCGCGG': 2463, 'GCGCGT': 2464, 'GCGCTA': 2465, 'GCGCTC': 2466, 'GCGCTG': 2467, 'GCGCTT': 2468, 'GCGGAA': 2469, 'GCGGAC': 2470, 'GCGGAG': 2471, 'GCGGAT': 2472, 'GCGGCA': 2473, 'GCGGCC': 2474, 'GCGGCG': 2475, 'GCGGCT': 2476, 'GCGGGA': 2477, 'GCGGGC': 2478, 'GCGGGG': 2479, 'GCGGGT': 2480, 'GCGGTA': 2481, 'GCGGTC': 2482, 'GCGGTG': 2483, 'GCGGTT': 2484, 'GCGTAA': 2485, 'GCGTAC': 2486, 'GCGTAG': 2487, 'GCGTAT': 2488, 'GCGTCA': 2489, 'GCGTCC': 2490, 'GCGTCG': 2491, 'GCGTCT': 2492, 'GCGTGA': 2493, 'GCGTGC': 2494, 'GCGTGG': 2495, 'GCGTGT': 2496, 'GCGTTA': 2497, 'GCGTTC': 2498, 'GCGTTG': 2499, 'GCGTTT': 2500, 'GCTAAA': 2501, 'GCTAAC': 2502, 'GCTAAG': 2503, 'GCTAAT': 2504, 'GCTACA': 2505, 'GCTACC': 2506, 'GCTACG': 2507, 'GCTACT': 2508, 'GCTAGA': 2509, 'GCTAGC': 2510, 'GCTAGG': 2511, 'GCTAGT': 2512, 'GCTATA': 2513, 'GCTATC': 2514, 'GCTATG': 2515, 'GCTATT': 2516, 'GCTCAA': 2517, 'GCTCAC': 2518, 'GCTCAG': 2519, 'GCTCAT': 2520, 'GCTCCA': 2521, 'GCTCCC': 2522, 'GCTCCG': 2523, 'GCTCCT': 2524, 'GCTCGA': 2525, 'GCTCGC': 2526, 'GCTCGG': 2527, 'GCTCGT': 2528, 'GCTCTA': 2529, 'GCTCTC': 2530, 'GCTCTG': 2531, 'GCTCTT': 2532, 'GCTGAA': 2533, 'GCTGAC': 2534, 'GCTGAG': 2535, 'GCTGAT': 2536, 'GCTGCA': 2537, 'GCTGCC': 2538, 'GCTGCG': 2539, 'GCTGCT': 2540, 'GCTGGA': 2541, 'GCTGGC': 2542, 'GCTGGG': 2543, 'GCTGGT': 2544, 'GCTGTA': 2545, 'GCTGTC': 2546, 'GCTGTG': 2547, 'GCTGTT': 2548, 'GCTTAA': 2549, 'GCTTAC': 2550, 'GCTTAG': 2551, 'GCTTAT': 2552, 'GCTTCA': 2553, 'GCTTCC': 2554, 'GCTTCG': 2555, 'GCTTCT': 2556, 'GCTTGA': 2557, 'GCTTGC': 2558, 'GCTTGG': 2559, 'GCTTGT': 2560, 'GCTTTA': 2561, 'GCTTTC': 2562, 'GCTTTG': 2563, 'GCTTTT': 2564, 'GGAAAA': 2565, 'GGAAAC': 2566, 'GGAAAG': 2567, 'GGAAAT': 2568, 'GGAACA': 2569, 'GGAACC': 2570, 'GGAACG': 2571, 'GGAACT': 2572, 'GGAAGA': 2573, 'GGAAGC': 2574, 'GGAAGG': 2575, 'GGAAGT': 2576, 'GGAATA': 2577, 'GGAATC': 2578, 'GGAATG': 2579, 'GGAATT': 2580, 'GGACAA': 2581, 'GGACAC': 2582, 'GGACAG': 2583, 'GGACAT': 2584, 'GGACCA': 2585, 'GGACCC': 2586, 'GGACCG': 2587, 'GGACCT': 2588, 'GGACGA': 2589, 'GGACGC': 2590, 'GGACGG': 2591, 'GGACGT': 2592, 'GGACTA': 2593, 'GGACTC': 2594, 'GGACTG': 2595, 'GGACTT': 2596, 'GGAGAA': 2597, 'GGAGAC': 2598, 'GGAGAG': 2599, 'GGAGAT': 2600, 'GGAGCA': 2601, 'GGAGCC': 2602, 'GGAGCG': 2603, 'GGAGCT': 2604, 'GGAGGA': 2605, 'GGAGGC': 2606, 'GGAGGG': 2607, 'GGAGGT': 2608, 'GGAGTA': 2609, 'GGAGTC': 2610, 'GGAGTG': 2611, 'GGAGTT': 2612, 'GGATAA': 2613, 'GGATAC': 2614, 'GGATAG': 2615, 'GGATAT': 2616, 'GGATCA': 2617, 'GGATCC': 2618, 'GGATCG': 2619, 'GGATCT': 2620, 'GGATGA': 2621, 'GGATGC': 2622, 'GGATGG': 2623, 'GGATGT': 2624, 'GGATTA': 2625, 'GGATTC': 2626, 'GGATTG': 2627, 'GGATTT': 2628, 'GGCAAA': 2629, 'GGCAAC': 2630, 'GGCAAG': 2631, 'GGCAAT': 2632, 'GGCACA': 2633, 'GGCACC': 2634, 'GGCACG': 2635, 'GGCACT': 2636, 'GGCAGA': 2637, 'GGCAGC': 2638, 'GGCAGG': 2639, 'GGCAGT': 2640, 'GGCATA': 2641, 'GGCATC': 2642, 'GGCATG': 2643, 'GGCATT': 2644, 'GGCCAA': 2645, 'GGCCAC': 2646, 'GGCCAG': 2647, 'GGCCAT': 2648, 'GGCCCA': 2649, 'GGCCCC': 2650, 'GGCCCG': 2651, 'GGCCCT': 2652, 'GGCCGA': 2653, 'GGCCGC': 2654, 'GGCCGG': 2655, 'GGCCGT': 2656, 'GGCCTA': 2657, 'GGCCTC': 2658, 'GGCCTG': 2659, 'GGCCTT': 2660, 'GGCGAA': 2661, 'GGCGAC': 2662, 'GGCGAG': 2663, 'GGCGAT': 2664, 'GGCGCA': 2665, 'GGCGCC': 2666, 'GGCGCG': 2667, 'GGCGCT': 2668, 'GGCGGA': 2669, 'GGCGGC': 2670, 'GGCGGG': 2671, 'GGCGGT': 2672, 'GGCGTA': 2673, 'GGCGTC': 2674, 'GGCGTG': 2675, 'GGCGTT': 2676, 'GGCTAA': 2677, 'GGCTAC': 2678, 'GGCTAG': 2679, 'GGCTAT': 2680, 'GGCTCA': 2681, 'GGCTCC': 2682, 'GGCTCG': 2683, 'GGCTCT': 2684, 'GGCTGA': 2685, 'GGCTGC': 2686, 'GGCTGG': 2687, 'GGCTGT': 2688, 'GGCTTA': 2689, 'GGCTTC': 2690, 'GGCTTG': 2691, 'GGCTTT': 2692, 'GGGAAA': 2693, 'GGGAAC': 2694, 'GGGAAG': 2695, 'GGGAAT': 2696, 'GGGACA': 2697, 'GGGACC': 2698, 'GGGACG': 2699, 'GGGACT': 2700, 'GGGAGA': 2701, 'GGGAGC': 2702, 'GGGAGG': 2703, 'GGGAGT': 2704, 'GGGATA': 2705, 'GGGATC': 2706, 'GGGATG': 2707, 'GGGATT': 2708, 'GGGCAA': 2709, 'GGGCAC': 2710, 'GGGCAG': 2711, 'GGGCAT': 2712, 'GGGCCA': 2713, 'GGGCCC': 2714, 'GGGCCG': 2715, 'GGGCCT': 2716, 'GGGCGA': 2717, 'GGGCGC': 2718, 'GGGCGG': 2719, 'GGGCGT': 2720, 'GGGCTA': 2721, 'GGGCTC': 2722, 'GGGCTG': 2723, 'GGGCTT': 2724, 'GGGGAA': 2725, 'GGGGAC': 2726, 'GGGGAG': 2727, 'GGGGAT': 2728, 'GGGGCA': 2729, 'GGGGCC': 2730, 'GGGGCG': 2731, 'GGGGCT': 2732, 'GGGGGA': 2733, 'GGGGGC': 2734, 'GGGGGG': 2735, 'GGGGGT': 2736, 'GGGGTA': 2737, 'GGGGTC': 2738, 'GGGGTG': 2739, 'GGGGTT': 2740, 'GGGTAA': 2741, 'GGGTAC': 2742, 'GGGTAG': 2743, 'GGGTAT': 2744, 'GGGTCA': 2745, 'GGGTCC': 2746, 'GGGTCG': 2747, 'GGGTCT': 2748, 'GGGTGA': 2749, 'GGGTGC': 2750, 'GGGTGG': 2751, 'GGGTGT': 2752, 'GGGTTA': 2753, 'GGGTTC': 2754, 'GGGTTG': 2755, 'GGGTTT': 2756, 'GGTAAA': 2757, 'GGTAAC': 2758, 'GGTAAG': 2759, 'GGTAAT': 2760, 'GGTACA': 2761, 'GGTACC': 2762, 'GGTACG': 2763, 'GGTACT': 2764, 'GGTAGA': 2765, 'GGTAGC': 2766, 'GGTAGG': 2767, 'GGTAGT': 2768, 'GGTATA': 2769, 'GGTATC': 2770, 'GGTATG': 2771, 'GGTATT': 2772, 'GGTCAA': 2773, 'GGTCAC': 2774, 'GGTCAG': 2775, 'GGTCAT': 2776, 'GGTCCA': 2777, 'GGTCCC': 2778, 'GGTCCG': 2779, 'GGTCCT': 2780, 'GGTCGA': 2781, 'GGTCGC': 2782, 'GGTCGG': 2783, 'GGTCGT': 2784, 'GGTCTA': 2785, 'GGTCTC': 2786, 'GGTCTG': 2787, 'GGTCTT': 2788, 'GGTGAA': 2789, 'GGTGAC': 2790, 'GGTGAG': 2791, 'GGTGAT': 2792, 'GGTGCA': 2793, 'GGTGCC': 2794, 'GGTGCG': 2795, 'GGTGCT': 2796, 'GGTGGA': 2797, 'GGTGGC': 2798, 'GGTGGG': 2799, 'GGTGGT': 2800, 'GGTGTA': 2801, 'GGTGTC': 2802, 'GGTGTG': 2803, 'GGTGTT': 2804, 'GGTTAA': 2805, 'GGTTAC': 2806, 'GGTTAG': 2807, 'GGTTAT': 2808, 'GGTTCA': 2809, 'GGTTCC': 2810, 'GGTTCG': 2811, 'GGTTCT': 2812, 'GGTTGA': 2813, 'GGTTGC': 2814, 'GGTTGG': 2815, 'GGTTGT': 2816, 'GGTTTA': 2817, 'GGTTTC': 2818, 'GGTTTG': 2819, 'GGTTTT': 2820, 'GTAAAA': 2821, 'GTAAAC': 2822, 'GTAAAG': 2823, 'GTAAAT': 2824, 'GTAACA': 2825, 'GTAACC': 2826, 'GTAACG': 2827, 'GTAACT': 2828, 'GTAAGA': 2829, 'GTAAGC': 2830, 'GTAAGG': 2831, 'GTAAGT': 2832, 'GTAATA': 2833, 'GTAATC': 2834, 'GTAATG': 2835, 'GTAATT': 2836, 'GTACAA': 2837, 'GTACAC': 2838, 'GTACAG': 2839, 'GTACAT': 2840, 'GTACCA': 2841, 'GTACCC': 2842, 'GTACCG': 2843, 'GTACCT': 2844, 'GTACGA': 2845, 'GTACGC': 2846, 'GTACGG': 2847, 'GTACGT': 2848, 'GTACTA': 2849, 'GTACTC': 2850, 'GTACTG': 2851, 'GTACTT': 2852, 'GTAGAA': 2853, 'GTAGAC': 2854, 'GTAGAG': 2855, 'GTAGAT': 2856, 'GTAGCA': 2857, 'GTAGCC': 2858, 'GTAGCG': 2859, 'GTAGCT': 2860, 'GTAGGA': 2861, 'GTAGGC': 2862, 'GTAGGG': 2863, 'GTAGGT': 2864, 'GTAGTA': 2865, 'GTAGTC': 2866, 'GTAGTG': 2867, 'GTAGTT': 2868, 'GTATAA': 2869, 'GTATAC': 2870, 'GTATAG': 2871, 'GTATAT': 2872, 'GTATCA': 2873, 'GTATCC': 2874, 'GTATCG': 2875, 'GTATCT': 2876, 'GTATGA': 2877, 'GTATGC': 2878, 'GTATGG': 2879, 'GTATGT': 2880, 'GTATTA': 2881, 'GTATTC': 2882, 'GTATTG': 2883, 'GTATTT': 2884, 'GTCAAA': 2885, 'GTCAAC': 2886, 'GTCAAG': 2887, 'GTCAAT': 2888, 'GTCACA': 2889, 'GTCACC': 2890, 'GTCACG': 2891, 'GTCACT': 2892, 'GTCAGA': 2893, 'GTCAGC': 2894, 'GTCAGG': 2895, 'GTCAGT': 2896, 'GTCATA': 2897, 'GTCATC': 2898, 'GTCATG': 2899, 'GTCATT': 2900, 'GTCCAA': 2901, 'GTCCAC': 2902, 'GTCCAG': 2903, 'GTCCAT': 2904, 'GTCCCA': 2905, 'GTCCCC': 2906, 'GTCCCG': 2907, 'GTCCCT': 2908, 'GTCCGA': 2909, 'GTCCGC': 2910, 'GTCCGG': 2911, 'GTCCGT': 2912, 'GTCCTA': 2913, 'GTCCTC': 2914, 'GTCCTG': 2915, 'GTCCTT': 2916, 'GTCGAA': 2917, 'GTCGAC': 2918, 'GTCGAG': 2919, 'GTCGAT': 2920, 'GTCGCA': 2921, 'GTCGCC': 2922, 'GTCGCG': 2923, 'GTCGCT': 2924, 'GTCGGA': 2925, 'GTCGGC': 2926, 'GTCGGG': 2927, 'GTCGGT': 2928, 'GTCGTA': 2929, 'GTCGTC': 2930, 'GTCGTG': 2931, 'GTCGTT': 2932, 'GTCTAA': 2933, 'GTCTAC': 2934, 'GTCTAG': 2935, 'GTCTAT': 2936, 'GTCTCA': 2937, 'GTCTCC': 2938, 'GTCTCG': 2939, 'GTCTCT': 2940, 'GTCTGA': 2941, 'GTCTGC': 2942, 'GTCTGG': 2943, 'GTCTGT': 2944, 'GTCTTA': 2945, 'GTCTTC': 2946, 'GTCTTG': 2947, 'GTCTTT': 2948, 'GTGAAA': 2949, 'GTGAAC': 2950, 'GTGAAG': 2951, 'GTGAAT': 2952, 'GTGACA': 2953, 'GTGACC': 2954, 'GTGACG': 2955, 'GTGACT': 2956, 'GTGAGA': 2957, 'GTGAGC': 2958, 'GTGAGG': 2959, 'GTGAGT': 2960, 'GTGATA': 2961, 'GTGATC': 2962, 'GTGATG': 2963, 'GTGATT': 2964, 'GTGCAA': 2965, 'GTGCAC': 2966, 'GTGCAG': 2967, 'GTGCAT': 2968, 'GTGCCA': 2969, 'GTGCCC': 2970, 'GTGCCG': 2971, 'GTGCCT': 2972, 'GTGCGA': 2973, 'GTGCGC': 2974, 'GTGCGG': 2975, 'GTGCGT': 2976, 'GTGCTA': 2977, 'GTGCTC': 2978, 'GTGCTG': 2979, 'GTGCTT': 2980, 'GTGGAA': 2981, 'GTGGAC': 2982, 'GTGGAG': 2983, 'GTGGAT': 2984, 'GTGGCA': 2985, 'GTGGCC': 2986, 'GTGGCG': 2987, 'GTGGCT': 2988, 'GTGGGA': 2989, 'GTGGGC': 2990, 'GTGGGG': 2991, 'GTGGGT': 2992, 'GTGGTA': 2993, 'GTGGTC': 2994, 'GTGGTG': 2995, 'GTGGTT': 2996, 'GTGTAA': 2997, 'GTGTAC': 2998, 'GTGTAG': 2999, 'GTGTAT': 3000, 'GTGTCA': 3001, 'GTGTCC': 3002, 'GTGTCG': 3003, 'GTGTCT': 3004, 'GTGTGA': 3005, 'GTGTGC': 3006, 'GTGTGG': 3007, 'GTGTGT': 3008, 'GTGTTA': 3009, 'GTGTTC': 3010, 'GTGTTG': 3011, 'GTGTTT': 3012, 'GTTAAA': 3013, 'GTTAAC': 3014, 'GTTAAG': 3015, 'GTTAAT': 3016, 'GTTACA': 3017, 'GTTACC': 3018, 'GTTACG': 3019, 'GTTACT': 3020, 'GTTAGA': 3021, 'GTTAGC': 3022, 'GTTAGG': 3023, 'GTTAGT': 3024, 'GTTATA': 3025, 'GTTATC': 3026, 'GTTATG': 3027, 'GTTATT': 3028, 'GTTCAA': 3029, 'GTTCAC': 3030, 'GTTCAG': 3031, 'GTTCAT': 3032, 'GTTCCA': 3033, 'GTTCCC': 3034, 'GTTCCG': 3035, 'GTTCCT': 3036, 'GTTCGA': 3037, 'GTTCGC': 3038, 'GTTCGG': 3039, 'GTTCGT': 3040, 'GTTCTA': 3041, 'GTTCTC': 3042, 'GTTCTG': 3043, 'GTTCTT': 3044, 'GTTGAA': 3045, 'GTTGAC': 3046, 'GTTGAG': 3047, 'GTTGAT': 3048, 'GTTGCA': 3049, 'GTTGCC': 3050, 'GTTGCG': 3051, 'GTTGCT': 3052, 'GTTGGA': 3053, 'GTTGGC': 3054, 'GTTGGG': 3055, 'GTTGGT': 3056, 'GTTGTA': 3057, 'GTTGTC': 3058, 'GTTGTG': 3059, 'GTTGTT': 3060, 'GTTTAA': 3061, 'GTTTAC': 3062, 'GTTTAG': 3063, 'GTTTAT': 3064, 'GTTTCA': 3065, 'GTTTCC': 3066, 'GTTTCG': 3067, 'GTTTCT': 3068, 'GTTTGA': 3069, 'GTTTGC': 3070, 'GTTTGG': 3071, 'GTTTGT': 3072, 'GTTTTA': 3073, 'GTTTTC': 3074, 'GTTTTG': 3075, 'GTTTTT': 3076, 'TAAAAA': 3077, 'TAAAAC': 3078, 'TAAAAG': 3079, 'TAAAAT': 3080, 'TAAACA': 3081, 'TAAACC': 3082, 'TAAACG': 3083, 'TAAACT': 3084, 'TAAAGA': 3085, 'TAAAGC': 3086, 'TAAAGG': 3087, 'TAAAGT': 3088, 'TAAATA': 3089, 'TAAATC': 3090, 'TAAATG': 3091, 'TAAATT': 3092, 'TAACAA': 3093, 'TAACAC': 3094, 'TAACAG': 3095, 'TAACAT': 3096, 'TAACCA': 3097, 'TAACCC': 3098, 'TAACCG': 3099, 'TAACCT': 3100, 'TAACGA': 3101, 'TAACGC': 3102, 'TAACGG': 3103, 'TAACGT': 3104, 'TAACTA': 3105, 'TAACTC': 3106, 'TAACTG': 3107, 'TAACTT': 3108, 'TAAGAA': 3109, 'TAAGAC': 3110, 'TAAGAG': 3111, 'TAAGAT': 3112, 'TAAGCA': 3113, 'TAAGCC': 3114, 'TAAGCG': 3115, 'TAAGCT': 3116, 'TAAGGA': 3117, 'TAAGGC': 3118, 'TAAGGG': 3119, 'TAAGGT': 3120, 'TAAGTA': 3121, 'TAAGTC': 3122, 'TAAGTG': 3123, 'TAAGTT': 3124, 'TAATAA': 3125, 'TAATAC': 3126, 'TAATAG': 3127, 'TAATAT': 3128, 'TAATCA': 3129, 'TAATCC': 3130, 'TAATCG': 3131, 'TAATCT': 3132, 'TAATGA': 3133, 'TAATGC': 3134, 'TAATGG': 3135, 'TAATGT': 3136, 'TAATTA': 3137, 'TAATTC': 3138, 'TAATTG': 3139, 'TAATTT': 3140, 'TACAAA': 3141, 'TACAAC': 3142, 'TACAAG': 3143, 'TACAAT': 3144, 'TACACA': 3145, 'TACACC': 3146, 'TACACG': 3147, 'TACACT': 3148, 'TACAGA': 3149, 'TACAGC': 3150, 'TACAGG': 3151, 'TACAGT': 3152, 'TACATA': 3153, 'TACATC': 3154, 'TACATG': 3155, 'TACATT': 3156, 'TACCAA': 3157, 'TACCAC': 3158, 'TACCAG': 3159, 'TACCAT': 3160, 'TACCCA': 3161, 'TACCCC': 3162, 'TACCCG': 3163, 'TACCCT': 3164, 'TACCGA': 3165, 'TACCGC': 3166, 'TACCGG': 3167, 'TACCGT': 3168, 'TACCTA': 3169, 'TACCTC': 3170, 'TACCTG': 3171, 'TACCTT': 3172, 'TACGAA': 3173, 'TACGAC': 3174, 'TACGAG': 3175, 'TACGAT': 3176, 'TACGCA': 3177, 'TACGCC': 3178, 'TACGCG': 3179, 'TACGCT': 3180, 'TACGGA': 3181, 'TACGGC': 3182, 'TACGGG': 3183, 'TACGGT': 3184, 'TACGTA': 3185, 'TACGTC': 3186, 'TACGTG': 3187, 'TACGTT': 3188, 'TACTAA': 3189, 'TACTAC': 3190, 'TACTAG': 3191, 'TACTAT': 3192, 'TACTCA': 3193, 'TACTCC': 3194, 'TACTCG': 3195, 'TACTCT': 3196, 'TACTGA': 3197, 'TACTGC': 3198, 'TACTGG': 3199, 'TACTGT': 3200, 'TACTTA': 3201, 'TACTTC': 3202, 'TACTTG': 3203, 'TACTTT': 3204, 'TAGAAA': 3205, 'TAGAAC': 3206, 'TAGAAG': 3207, 'TAGAAT': 3208, 'TAGACA': 3209, 'TAGACC': 3210, 'TAGACG': 3211, 'TAGACT': 3212, 'TAGAGA': 3213, 'TAGAGC': 3214, 'TAGAGG': 3215, 'TAGAGT': 3216, 'TAGATA': 3217, 'TAGATC': 3218, 'TAGATG': 3219, 'TAGATT': 3220, 'TAGCAA': 3221, 'TAGCAC': 3222, 'TAGCAG': 3223, 'TAGCAT': 3224, 'TAGCCA': 3225, 'TAGCCC': 3226, 'TAGCCG': 3227, 'TAGCCT': 3228, 'TAGCGA': 3229, 'TAGCGC': 3230, 'TAGCGG': 3231, 'TAGCGT': 3232, 'TAGCTA': 3233, 'TAGCTC': 3234, 'TAGCTG': 3235, 'TAGCTT': 3236, 'TAGGAA': 3237, 'TAGGAC': 3238, 'TAGGAG': 3239, 'TAGGAT': 3240, 'TAGGCA': 3241, 'TAGGCC': 3242, 'TAGGCG': 3243, 'TAGGCT': 3244, 'TAGGGA': 3245, 'TAGGGC': 3246, 'TAGGGG': 3247, 'TAGGGT': 3248, 'TAGGTA': 3249, 'TAGGTC': 3250, 'TAGGTG': 3251, 'TAGGTT': 3252, 'TAGTAA': 3253, 'TAGTAC': 3254, 'TAGTAG': 3255, 'TAGTAT': 3256, 'TAGTCA': 3257, 'TAGTCC': 3258, 'TAGTCG': 3259, 'TAGTCT': 3260, 'TAGTGA': 3261, 'TAGTGC': 3262, 'TAGTGG': 3263, 'TAGTGT': 3264, 'TAGTTA': 3265, 'TAGTTC': 3266, 'TAGTTG': 3267, 'TAGTTT': 3268, 'TATAAA': 3269, 'TATAAC': 3270, 'TATAAG': 3271, 'TATAAT': 3272, 'TATACA': 3273, 'TATACC': 3274, 'TATACG': 3275, 'TATACT': 3276, 'TATAGA': 3277, 'TATAGC': 3278, 'TATAGG': 3279, 'TATAGT': 3280, 'TATATA': 3281, 'TATATC': 3282, 'TATATG': 3283, 'TATATT': 3284, 'TATCAA': 3285, 'TATCAC': 3286, 'TATCAG': 3287, 'TATCAT': 3288, 'TATCCA': 3289, 'TATCCC': 3290, 'TATCCG': 3291, 'TATCCT': 3292, 'TATCGA': 3293, 'TATCGC': 3294, 'TATCGG': 3295, 'TATCGT': 3296, 'TATCTA': 3297, 'TATCTC': 3298, 'TATCTG': 3299, 'TATCTT': 3300, 'TATGAA': 3301, 'TATGAC': 3302, 'TATGAG': 3303, 'TATGAT': 3304, 'TATGCA': 3305, 'TATGCC': 3306, 'TATGCG': 3307, 'TATGCT': 3308, 'TATGGA': 3309, 'TATGGC': 3310, 'TATGGG': 3311, 'TATGGT': 3312, 'TATGTA': 3313, 'TATGTC': 3314, 'TATGTG': 3315, 'TATGTT': 3316, 'TATTAA': 3317, 'TATTAC': 3318, 'TATTAG': 3319, 'TATTAT': 3320, 'TATTCA': 3321, 'TATTCC': 3322, 'TATTCG': 3323, 'TATTCT': 3324, 'TATTGA': 3325, 'TATTGC': 3326, 'TATTGG': 3327, 'TATTGT': 3328, 'TATTTA': 3329, 'TATTTC': 3330, 'TATTTG': 3331, 'TATTTT': 3332, 'TCAAAA': 3333, 'TCAAAC': 3334, 'TCAAAG': 3335, 'TCAAAT': 3336, 'TCAACA': 3337, 'TCAACC': 3338, 'TCAACG': 3339, 'TCAACT': 3340, 'TCAAGA': 3341, 'TCAAGC': 3342, 'TCAAGG': 3343, 'TCAAGT': 3344, 'TCAATA': 3345, 'TCAATC': 3346, 'TCAATG': 3347, 'TCAATT': 3348, 'TCACAA': 3349, 'TCACAC': 3350, 'TCACAG': 3351, 'TCACAT': 3352, 'TCACCA': 3353, 'TCACCC': 3354, 'TCACCG': 3355, 'TCACCT': 3356, 'TCACGA': 3357, 'TCACGC': 3358, 'TCACGG': 3359, 'TCACGT': 3360, 'TCACTA': 3361, 'TCACTC': 3362, 'TCACTG': 3363, 'TCACTT': 3364, 'TCAGAA': 3365, 'TCAGAC': 3366, 'TCAGAG': 3367, 'TCAGAT': 3368, 'TCAGCA': 3369, 'TCAGCC': 3370, 'TCAGCG': 3371, 'TCAGCT': 3372, 'TCAGGA': 3373, 'TCAGGC': 3374, 'TCAGGG': 3375, 'TCAGGT': 3376, 'TCAGTA': 3377, 'TCAGTC': 3378, 'TCAGTG': 3379, 'TCAGTT': 3380, 'TCATAA': 3381, 'TCATAC': 3382, 'TCATAG': 3383, 'TCATAT': 3384, 'TCATCA': 3385, 'TCATCC': 3386, 'TCATCG': 3387, 'TCATCT': 3388, 'TCATGA': 3389, 'TCATGC': 3390, 'TCATGG': 3391, 'TCATGT': 3392, 'TCATTA': 3393, 'TCATTC': 3394, 'TCATTG': 3395, 'TCATTT': 3396, 'TCCAAA': 3397, 'TCCAAC': 3398, 'TCCAAG': 3399, 'TCCAAT': 3400, 'TCCACA': 3401, 'TCCACC': 3402, 'TCCACG': 3403, 'TCCACT': 3404, 'TCCAGA': 3405, 'TCCAGC': 3406, 'TCCAGG': 3407, 'TCCAGT': 3408, 'TCCATA': 3409, 'TCCATC': 3410, 'TCCATG': 3411, 'TCCATT': 3412, 'TCCCAA': 3413, 'TCCCAC': 3414, 'TCCCAG': 3415, 'TCCCAT': 3416, 'TCCCCA': 3417, 'TCCCCC': 3418, 'TCCCCG': 3419, 'TCCCCT': 3420, 'TCCCGA': 3421, 'TCCCGC': 3422, 'TCCCGG': 3423, 'TCCCGT': 3424, 'TCCCTA': 3425, 'TCCCTC': 3426, 'TCCCTG': 3427, 'TCCCTT': 3428, 'TCCGAA': 3429, 'TCCGAC': 3430, 'TCCGAG': 3431, 'TCCGAT': 3432, 'TCCGCA': 3433, 'TCCGCC': 3434, 'TCCGCG': 3435, 'TCCGCT': 3436, 'TCCGGA': 3437, 'TCCGGC': 3438, 'TCCGGG': 3439, 'TCCGGT': 3440, 'TCCGTA': 3441, 'TCCGTC': 3442, 'TCCGTG': 3443, 'TCCGTT': 3444, 'TCCTAA': 3445, 'TCCTAC': 3446, 'TCCTAG': 3447, 'TCCTAT': 3448, 'TCCTCA': 3449, 'TCCTCC': 3450, 'TCCTCG': 3451, 'TCCTCT': 3452, 'TCCTGA': 3453, 'TCCTGC': 3454, 'TCCTGG': 3455, 'TCCTGT': 3456, 'TCCTTA': 3457, 'TCCTTC': 3458, 'TCCTTG': 3459, 'TCCTTT': 3460, 'TCGAAA': 3461, 'TCGAAC': 3462, 'TCGAAG': 3463, 'TCGAAT': 3464, 'TCGACA': 3465, 'TCGACC': 3466, 'TCGACG': 3467, 'TCGACT': 3468, 'TCGAGA': 3469, 'TCGAGC': 3470, 'TCGAGG': 3471, 'TCGAGT': 3472, 'TCGATA': 3473, 'TCGATC': 3474, 'TCGATG': 3475, 'TCGATT': 3476, 'TCGCAA': 3477, 'TCGCAC': 3478, 'TCGCAG': 3479, 'TCGCAT': 3480, 'TCGCCA': 3481, 'TCGCCC': 3482, 'TCGCCG': 3483, 'TCGCCT': 3484, 'TCGCGA': 3485, 'TCGCGC': 3486, 'TCGCGG': 3487, 'TCGCGT': 3488, 'TCGCTA': 3489, 'TCGCTC': 3490, 'TCGCTG': 3491, 'TCGCTT': 3492, 'TCGGAA': 3493, 'TCGGAC': 3494, 'TCGGAG': 3495, 'TCGGAT': 3496, 'TCGGCA': 3497, 'TCGGCC': 3498, 'TCGGCG': 3499, 'TCGGCT': 3500, 'TCGGGA': 3501, 'TCGGGC': 3502, 'TCGGGG': 3503, 'TCGGGT': 3504, 'TCGGTA': 3505, 'TCGGTC': 3506, 'TCGGTG': 3507, 'TCGGTT': 3508, 'TCGTAA': 3509, 'TCGTAC': 3510, 'TCGTAG': 3511, 'TCGTAT': 3512, 'TCGTCA': 3513, 'TCGTCC': 3514, 'TCGTCG': 3515, 'TCGTCT': 3516, 'TCGTGA': 3517, 'TCGTGC': 3518, 'TCGTGG': 3519, 'TCGTGT': 3520, 'TCGTTA': 3521, 'TCGTTC': 3522, 'TCGTTG': 3523, 'TCGTTT': 3524, 'TCTAAA': 3525, 'TCTAAC': 3526, 'TCTAAG': 3527, 'TCTAAT': 3528, 'TCTACA': 3529, 'TCTACC': 3530, 'TCTACG': 3531, 'TCTACT': 3532, 'TCTAGA': 3533, 'TCTAGC': 3534, 'TCTAGG': 3535, 'TCTAGT': 3536, 'TCTATA': 3537, 'TCTATC': 3538, 'TCTATG': 3539, 'TCTATT': 3540, 'TCTCAA': 3541, 'TCTCAC': 3542, 'TCTCAG': 3543, 'TCTCAT': 3544, 'TCTCCA': 3545, 'TCTCCC': 3546, 'TCTCCG': 3547, 'TCTCCT': 3548, 'TCTCGA': 3549, 'TCTCGC': 3550, 'TCTCGG': 3551, 'TCTCGT': 3552, 'TCTCTA': 3553, 'TCTCTC': 3554, 'TCTCTG': 3555, 'TCTCTT': 3556, 'TCTGAA': 3557, 'TCTGAC': 3558, 'TCTGAG': 3559, 'TCTGAT': 3560, 'TCTGCA': 3561, 'TCTGCC': 3562, 'TCTGCG': 3563, 'TCTGCT': 3564, 'TCTGGA': 3565, 'TCTGGC': 3566, 'TCTGGG': 3567, 'TCTGGT': 3568, 'TCTGTA': 3569, 'TCTGTC': 3570, 'TCTGTG': 3571, 'TCTGTT': 3572, 'TCTTAA': 3573, 'TCTTAC': 3574, 'TCTTAG': 3575, 'TCTTAT': 3576, 'TCTTCA': 3577, 'TCTTCC': 3578, 'TCTTCG': 3579, 'TCTTCT': 3580, 'TCTTGA': 3581, 'TCTTGC': 3582, 'TCTTGG': 3583, 'TCTTGT': 3584, 'TCTTTA': 3585, 'TCTTTC': 3586, 'TCTTTG': 3587, 'TCTTTT': 3588, 'TGAAAA': 3589, 'TGAAAC': 3590, 'TGAAAG': 3591, 'TGAAAT': 3592, 'TGAACA': 3593, 'TGAACC': 3594, 'TGAACG': 3595, 'TGAACT': 3596, 'TGAAGA': 3597, 'TGAAGC': 3598, 'TGAAGG': 3599, 'TGAAGT': 3600, 'TGAATA': 3601, 'TGAATC': 3602, 'TGAATG': 3603, 'TGAATT': 3604, 'TGACAA': 3605, 'TGACAC': 3606, 'TGACAG': 3607, 'TGACAT': 3608, 'TGACCA': 3609, 'TGACCC': 3610, 'TGACCG': 3611, 'TGACCT': 3612, 'TGACGA': 3613, 'TGACGC': 3614, 'TGACGG': 3615, 'TGACGT': 3616, 'TGACTA': 3617, 'TGACTC': 3618, 'TGACTG': 3619, 'TGACTT': 3620, 'TGAGAA': 3621, 'TGAGAC': 3622, 'TGAGAG': 3623, 'TGAGAT': 3624, 'TGAGCA': 3625, 'TGAGCC': 3626, 'TGAGCG': 3627, 'TGAGCT': 3628, 'TGAGGA': 3629, 'TGAGGC': 3630, 'TGAGGG': 3631, 'TGAGGT': 3632, 'TGAGTA': 3633, 'TGAGTC': 3634, 'TGAGTG': 3635, 'TGAGTT': 3636, 'TGATAA': 3637, 'TGATAC': 3638, 'TGATAG': 3639, 'TGATAT': 3640, 'TGATCA': 3641, 'TGATCC': 3642, 'TGATCG': 3643, 'TGATCT': 3644, 'TGATGA': 3645, 'TGATGC': 3646, 'TGATGG': 3647, 'TGATGT': 3648, 'TGATTA': 3649, 'TGATTC': 3650, 'TGATTG': 3651, 'TGATTT': 3652, 'TGCAAA': 3653, 'TGCAAC': 3654, 'TGCAAG': 3655, 'TGCAAT': 3656, 'TGCACA': 3657, 'TGCACC': 3658, 'TGCACG': 3659, 'TGCACT': 3660, 'TGCAGA': 3661, 'TGCAGC': 3662, 'TGCAGG': 3663, 'TGCAGT': 3664, 'TGCATA': 3665, 'TGCATC': 3666, 'TGCATG': 3667, 'TGCATT': 3668, 'TGCCAA': 3669, 'TGCCAC': 3670, 'TGCCAG': 3671, 'TGCCAT': 3672, 'TGCCCA': 3673, 'TGCCCC': 3674, 'TGCCCG': 3675, 'TGCCCT': 3676, 'TGCCGA': 3677, 'TGCCGC': 3678, 'TGCCGG': 3679, 'TGCCGT': 3680, 'TGCCTA': 3681, 'TGCCTC': 3682, 'TGCCTG': 3683, 'TGCCTT': 3684, 'TGCGAA': 3685, 'TGCGAC': 3686, 'TGCGAG': 3687, 'TGCGAT': 3688, 'TGCGCA': 3689, 'TGCGCC': 3690, 'TGCGCG': 3691, 'TGCGCT': 3692, 'TGCGGA': 3693, 'TGCGGC': 3694, 'TGCGGG': 3695, 'TGCGGT': 3696, 'TGCGTA': 3697, 'TGCGTC': 3698, 'TGCGTG': 3699, 'TGCGTT': 3700, 'TGCTAA': 3701, 'TGCTAC': 3702, 'TGCTAG': 3703, 'TGCTAT': 3704, 'TGCTCA': 3705, 'TGCTCC': 3706, 'TGCTCG': 3707, 'TGCTCT': 3708, 'TGCTGA': 3709, 'TGCTGC': 3710, 'TGCTGG': 3711, 'TGCTGT': 3712, 'TGCTTA': 3713, 'TGCTTC': 3714, 'TGCTTG': 3715, 'TGCTTT': 3716, 'TGGAAA': 3717, 'TGGAAC': 3718, 'TGGAAG': 3719, 'TGGAAT': 3720, 'TGGACA': 3721, 'TGGACC': 3722, 'TGGACG': 3723, 'TGGACT': 3724, 'TGGAGA': 3725, 'TGGAGC': 3726, 'TGGAGG': 3727, 'TGGAGT': 3728, 'TGGATA': 3729, 'TGGATC': 3730, 'TGGATG': 3731, 'TGGATT': 3732, 'TGGCAA': 3733, 'TGGCAC': 3734, 'TGGCAG': 3735, 'TGGCAT': 3736, 'TGGCCA': 3737, 'TGGCCC': 3738, 'TGGCCG': 3739, 'TGGCCT': 3740, 'TGGCGA': 3741, 'TGGCGC': 3742, 'TGGCGG': 3743, 'TGGCGT': 3744, 'TGGCTA': 3745, 'TGGCTC': 3746, 'TGGCTG': 3747, 'TGGCTT': 3748, 'TGGGAA': 3749, 'TGGGAC': 3750, 'TGGGAG': 3751, 'TGGGAT': 3752, 'TGGGCA': 3753, 'TGGGCC': 3754, 'TGGGCG': 3755, 'TGGGCT': 3756, 'TGGGGA': 3757, 'TGGGGC': 3758, 'TGGGGG': 3759, 'TGGGGT': 3760, 'TGGGTA': 3761, 'TGGGTC': 3762, 'TGGGTG': 3763, 'TGGGTT': 3764, 'TGGTAA': 3765, 'TGGTAC': 3766, 'TGGTAG': 3767, 'TGGTAT': 3768, 'TGGTCA': 3769, 'TGGTCC': 3770, 'TGGTCG': 3771, 'TGGTCT': 3772, 'TGGTGA': 3773, 'TGGTGC': 3774, 'TGGTGG': 3775, 'TGGTGT': 3776, 'TGGTTA': 3777, 'TGGTTC': 3778, 'TGGTTG': 3779, 'TGGTTT': 3780, 'TGTAAA': 3781, 'TGTAAC': 3782, 'TGTAAG': 3783, 'TGTAAT': 3784, 'TGTACA': 3785, 'TGTACC': 3786, 'TGTACG': 3787, 'TGTACT': 3788, 'TGTAGA': 3789, 'TGTAGC': 3790, 'TGTAGG': 3791, 'TGTAGT': 3792, 'TGTATA': 3793, 'TGTATC': 3794, 'TGTATG': 3795, 'TGTATT': 3796, 'TGTCAA': 3797, 'TGTCAC': 3798, 'TGTCAG': 3799, 'TGTCAT': 3800, 'TGTCCA': 3801, 'TGTCCC': 3802, 'TGTCCG': 3803, 'TGTCCT': 3804, 'TGTCGA': 3805, 'TGTCGC': 3806, 'TGTCGG': 3807, 'TGTCGT': 3808, 'TGTCTA': 3809, 'TGTCTC': 3810, 'TGTCTG': 3811, 'TGTCTT': 3812, 'TGTGAA': 3813, 'TGTGAC': 3814, 'TGTGAG': 3815, 'TGTGAT': 3816, 'TGTGCA': 3817, 'TGTGCC': 3818, 'TGTGCG': 3819, 'TGTGCT': 3820, 'TGTGGA': 3821, 'TGTGGC': 3822, 'TGTGGG': 3823, 'TGTGGT': 3824, 'TGTGTA': 3825, 'TGTGTC': 3826, 'TGTGTG': 3827, 'TGTGTT': 3828, 'TGTTAA': 3829, 'TGTTAC': 3830, 'TGTTAG': 3831, 'TGTTAT': 3832, 'TGTTCA': 3833, 'TGTTCC': 3834, 'TGTTCG': 3835, 'TGTTCT': 3836, 'TGTTGA': 3837, 'TGTTGC': 3838, 'TGTTGG': 3839, 'TGTTGT': 3840, 'TGTTTA': 3841, 'TGTTTC': 3842, 'TGTTTG': 3843, 'TGTTTT': 3844, 'TTAAAA': 3845, 'TTAAAC': 3846, 'TTAAAG': 3847, 'TTAAAT': 3848, 'TTAACA': 3849, 'TTAACC': 3850, 'TTAACG': 3851, 'TTAACT': 3852, 'TTAAGA': 3853, 'TTAAGC': 3854, 'TTAAGG': 3855, 'TTAAGT': 3856, 'TTAATA': 3857, 'TTAATC': 3858, 'TTAATG': 3859, 'TTAATT': 3860, 'TTACAA': 3861, 'TTACAC': 3862, 'TTACAG': 3863, 'TTACAT': 3864, 'TTACCA': 3865, 'TTACCC': 3866, 'TTACCG': 3867, 'TTACCT': 3868, 'TTACGA': 3869, 'TTACGC': 3870, 'TTACGG': 3871, 'TTACGT': 3872, 'TTACTA': 3873, 'TTACTC': 3874, 'TTACTG': 3875, 'TTACTT': 3876, 'TTAGAA': 3877, 'TTAGAC': 3878, 'TTAGAG': 3879, 'TTAGAT': 3880, 'TTAGCA': 3881, 'TTAGCC': 3882, 'TTAGCG': 3883, 'TTAGCT': 3884, 'TTAGGA': 3885, 'TTAGGC': 3886, 'TTAGGG': 3887, 'TTAGGT': 3888, 'TTAGTA': 3889, 'TTAGTC': 3890, 'TTAGTG': 3891, 'TTAGTT': 3892, 'TTATAA': 3893, 'TTATAC': 3894, 'TTATAG': 3895, 'TTATAT': 3896, 'TTATCA': 3897, 'TTATCC': 3898, 'TTATCG': 3899, 'TTATCT': 3900, 'TTATGA': 3901, 'TTATGC': 3902, 'TTATGG': 3903, 'TTATGT': 3904, 'TTATTA': 3905, 'TTATTC': 3906, 'TTATTG': 3907, 'TTATTT': 3908, 'TTCAAA': 3909, 'TTCAAC': 3910, 'TTCAAG': 3911, 'TTCAAT': 3912, 'TTCACA': 3913, 'TTCACC': 3914, 'TTCACG': 3915, 'TTCACT': 3916, 'TTCAGA': 3917, 'TTCAGC': 3918, 'TTCAGG': 3919, 'TTCAGT': 3920, 'TTCATA': 3921, 'TTCATC': 3922, 'TTCATG': 3923, 'TTCATT': 3924, 'TTCCAA': 3925, 'TTCCAC': 3926, 'TTCCAG': 3927, 'TTCCAT': 3928, 'TTCCCA': 3929, 'TTCCCC': 3930, 'TTCCCG': 3931, 'TTCCCT': 3932, 'TTCCGA': 3933, 'TTCCGC': 3934, 'TTCCGG': 3935, 'TTCCGT': 3936, 'TTCCTA': 3937, 'TTCCTC': 3938, 'TTCCTG': 3939, 'TTCCTT': 3940, 'TTCGAA': 3941, 'TTCGAC': 3942, 'TTCGAG': 3943, 'TTCGAT': 3944, 'TTCGCA': 3945, 'TTCGCC': 3946, 'TTCGCG': 3947, 'TTCGCT': 3948, 'TTCGGA': 3949, 'TTCGGC': 3950, 'TTCGGG': 3951, 'TTCGGT': 3952, 'TTCGTA': 3953, 'TTCGTC': 3954, 'TTCGTG': 3955, 'TTCGTT': 3956, 'TTCTAA': 3957, 'TTCTAC': 3958, 'TTCTAG': 3959, 'TTCTAT': 3960, 'TTCTCA': 3961, 'TTCTCC': 3962, 'TTCTCG': 3963, 'TTCTCT': 3964, 'TTCTGA': 3965, 'TTCTGC': 3966, 'TTCTGG': 3967, 'TTCTGT': 3968, 'TTCTTA': 3969, 'TTCTTC': 3970, 'TTCTTG': 3971, 'TTCTTT': 3972, 'TTGAAA': 3973, 'TTGAAC': 3974, 'TTGAAG': 3975, 'TTGAAT': 3976, 'TTGACA': 3977, 'TTGACC': 3978, 'TTGACG': 3979, 'TTGACT': 3980, 'TTGAGA': 3981, 'TTGAGC': 3982, 'TTGAGG': 3983, 'TTGAGT': 3984, 'TTGATA': 3985, 'TTGATC': 3986, 'TTGATG': 3987, 'TTGATT': 3988, 'TTGCAA': 3989, 'TTGCAC': 3990, 'TTGCAG': 3991, 'TTGCAT': 3992, 'TTGCCA': 3993, 'TTGCCC': 3994, 'TTGCCG': 3995, 'TTGCCT': 3996, 'TTGCGA': 3997, 'TTGCGC': 3998, 'TTGCGG': 3999, 'TTGCGT': 4000, 'TTGCTA': 4001, 'TTGCTC': 4002, 'TTGCTG': 4003, 'TTGCTT': 4004, 'TTGGAA': 4005, 'TTGGAC': 4006, 'TTGGAG': 4007, 'TTGGAT': 4008, 'TTGGCA': 4009, 'TTGGCC': 4010, 'TTGGCG': 4011, 'TTGGCT': 4012, 'TTGGGA': 4013, 'TTGGGC': 4014, 'TTGGGG': 4015, 'TTGGGT': 4016, 'TTGGTA': 4017, 'TTGGTC': 4018, 'TTGGTG': 4019, 'TTGGTT': 4020, 'TTGTAA': 4021, 'TTGTAC': 4022, 'TTGTAG': 4023, 'TTGTAT': 4024, 'TTGTCA': 4025, 'TTGTCC': 4026, 'TTGTCG': 4027, 'TTGTCT': 4028, 'TTGTGA': 4029, 'TTGTGC': 4030, 'TTGTGG': 4031, 'TTGTGT': 4032, 'TTGTTA': 4033, 'TTGTTC': 4034, 'TTGTTG': 4035, 'TTGTTT': 4036, 'TTTAAA': 4037, 'TTTAAC': 4038, 'TTTAAG': 4039, 'TTTAAT': 4040, 'TTTACA': 4041, 'TTTACC': 4042, 'TTTACG': 4043, 'TTTACT': 4044, 'TTTAGA': 4045, 'TTTAGC': 4046, 'TTTAGG': 4047, 'TTTAGT': 4048, 'TTTATA': 4049, 'TTTATC': 4050, 'TTTATG': 4051, 'TTTATT': 4052, 'TTTCAA': 4053, 'TTTCAC': 4054, 'TTTCAG': 4055, 'TTTCAT': 4056, 'TTTCCA': 4057, 'TTTCCC': 4058, 'TTTCCG': 4059, 'TTTCCT': 4060, 'TTTCGA': 4061, 'TTTCGC': 4062, 'TTTCGG': 4063, 'TTTCGT': 4064, 'TTTCTA': 4065, 'TTTCTC': 4066, 'TTTCTG': 4067, 'TTTCTT': 4068, 'TTTGAA': 4069, 'TTTGAC': 4070, 'TTTGAG': 4071, 'TTTGAT': 4072, 'TTTGCA': 4073, 'TTTGCC': 4074, 'TTTGCG': 4075, 'TTTGCT': 4076, 'TTTGGA': 4077, 'TTTGGC': 4078, 'TTTGGG': 4079, 'TTTGGT': 4080, 'TTTGTA': 4081, 'TTTGTC': 4082, 'TTTGTG': 4083, 'TTTGTT': 4084, 'TTTTAA': 4085, 'TTTTAC': 4086, 'TTTTAG': 4087, 'TTTTAT': 4088, 'TTTTCA': 4089, 'TTTTCC': 4090, 'TTTTCG': 4091, 'TTTTCT': 4092, 'TTTTGA': 4093, 'TTTTGC': 4094, 'TTTTGG': 4095, 'TTTTGT': 4096, 'TTTTTA': 4097, 'TTTTTC': 4098, 'TTTTTG': 4099, 'TTTTTT': 4100}}\n",
-      "/home/ligeti/github/prokbert/src/prokbert\n",
-      "{'type': 'lca', 'kmer': 6, 'shift': 2, 'max_segment_length': 81, 'token_limit': 1024, 'max_unknown_token_proportion': 0, 'vocabfile': '/home/ligeti/github/prokbert/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt', 'isPaddingToMaxLength': False, 'vocabmap': {'[PAD]': 0, '[UNK]': 1, '[CLS]': 2, '[SEP]': 3, '[MASK]': 4, 'AAAAAA': 5, 'AAAAAC': 6, 'AAAAAG': 7, 'AAAAAT': 8, 'AAAACA': 9, 'AAAACC': 10, 'AAAACG': 11, 'AAAACT': 12, 'AAAAGA': 13, 'AAAAGC': 14, 'AAAAGG': 15, 'AAAAGT': 16, 'AAAATA': 17, 'AAAATC': 18, 'AAAATG': 19, 'AAAATT': 20, 'AAACAA': 21, 'AAACAC': 22, 'AAACAG': 23, 'AAACAT': 24, 'AAACCA': 25, 'AAACCC': 26, 'AAACCG': 27, 'AAACCT': 28, 'AAACGA': 29, 'AAACGC': 30, 'AAACGG': 31, 'AAACGT': 32, 'AAACTA': 33, 'AAACTC': 34, 'AAACTG': 35, 'AAACTT': 36, 'AAAGAA': 37, 'AAAGAC': 38, 'AAAGAG': 39, 'AAAGAT': 40, 'AAAGCA': 41, 'AAAGCC': 42, 'AAAGCG': 43, 'AAAGCT': 44, 'AAAGGA': 45, 'AAAGGC': 46, 'AAAGGG': 47, 'AAAGGT': 48, 'AAAGTA': 49, 'AAAGTC': 50, 'AAAGTG': 51, 'AAAGTT': 52, 'AAATAA': 53, 'AAATAC': 54, 'AAATAG': 55, 'AAATAT': 56, 'AAATCA': 57, 'AAATCC': 58, 'AAATCG': 59, 'AAATCT': 60, 'AAATGA': 61, 'AAATGC': 62, 'AAATGG': 63, 'AAATGT': 64, 'AAATTA': 65, 'AAATTC': 66, 'AAATTG': 67, 'AAATTT': 68, 'AACAAA': 69, 'AACAAC': 70, 'AACAAG': 71, 'AACAAT': 72, 'AACACA': 73, 'AACACC': 74, 'AACACG': 75, 'AACACT': 76, 'AACAGA': 77, 'AACAGC': 78, 'AACAGG': 79, 'AACAGT': 80, 'AACATA': 81, 'AACATC': 82, 'AACATG': 83, 'AACATT': 84, 'AACCAA': 85, 'AACCAC': 86, 'AACCAG': 87, 'AACCAT': 88, 'AACCCA': 89, 'AACCCC': 90, 'AACCCG': 91, 'AACCCT': 92, 'AACCGA': 93, 'AACCGC': 94, 'AACCGG': 95, 'AACCGT': 96, 'AACCTA': 97, 'AACCTC': 98, 'AACCTG': 99, 'AACCTT': 100, 'AACGAA': 101, 'AACGAC': 102, 'AACGAG': 103, 'AACGAT': 104, 'AACGCA': 105, 'AACGCC': 106, 'AACGCG': 107, 'AACGCT': 108, 'AACGGA': 109, 'AACGGC': 110, 'AACGGG': 111, 'AACGGT': 112, 'AACGTA': 113, 'AACGTC': 114, 'AACGTG': 115, 'AACGTT': 116, 'AACTAA': 117, 'AACTAC': 118, 'AACTAG': 119, 'AACTAT': 120, 'AACTCA': 121, 'AACTCC': 122, 'AACTCG': 123, 'AACTCT': 124, 'AACTGA': 125, 'AACTGC': 126, 'AACTGG': 127, 'AACTGT': 128, 'AACTTA': 129, 'AACTTC': 130, 'AACTTG': 131, 'AACTTT': 132, 'AAGAAA': 133, 'AAGAAC': 134, 'AAGAAG': 135, 'AAGAAT': 136, 'AAGACA': 137, 'AAGACC': 138, 'AAGACG': 139, 'AAGACT': 140, 'AAGAGA': 141, 'AAGAGC': 142, 'AAGAGG': 143, 'AAGAGT': 144, 'AAGATA': 145, 'AAGATC': 146, 'AAGATG': 147, 'AAGATT': 148, 'AAGCAA': 149, 'AAGCAC': 150, 'AAGCAG': 151, 'AAGCAT': 152, 'AAGCCA': 153, 'AAGCCC': 154, 'AAGCCG': 155, 'AAGCCT': 156, 'AAGCGA': 157, 'AAGCGC': 158, 'AAGCGG': 159, 'AAGCGT': 160, 'AAGCTA': 161, 'AAGCTC': 162, 'AAGCTG': 163, 'AAGCTT': 164, 'AAGGAA': 165, 'AAGGAC': 166, 'AAGGAG': 167, 'AAGGAT': 168, 'AAGGCA': 169, 'AAGGCC': 170, 'AAGGCG': 171, 'AAGGCT': 172, 'AAGGGA': 173, 'AAGGGC': 174, 'AAGGGG': 175, 'AAGGGT': 176, 'AAGGTA': 177, 'AAGGTC': 178, 'AAGGTG': 179, 'AAGGTT': 180, 'AAGTAA': 181, 'AAGTAC': 182, 'AAGTAG': 183, 'AAGTAT': 184, 'AAGTCA': 185, 'AAGTCC': 186, 'AAGTCG': 187, 'AAGTCT': 188, 'AAGTGA': 189, 'AAGTGC': 190, 'AAGTGG': 191, 'AAGTGT': 192, 'AAGTTA': 193, 'AAGTTC': 194, 'AAGTTG': 195, 'AAGTTT': 196, 'AATAAA': 197, 'AATAAC': 198, 'AATAAG': 199, 'AATAAT': 200, 'AATACA': 201, 'AATACC': 202, 'AATACG': 203, 'AATACT': 204, 'AATAGA': 205, 'AATAGC': 206, 'AATAGG': 207, 'AATAGT': 208, 'AATATA': 209, 'AATATC': 210, 'AATATG': 211, 'AATATT': 212, 'AATCAA': 213, 'AATCAC': 214, 'AATCAG': 215, 'AATCAT': 216, 'AATCCA': 217, 'AATCCC': 218, 'AATCCG': 219, 'AATCCT': 220, 'AATCGA': 221, 'AATCGC': 222, 'AATCGG': 223, 'AATCGT': 224, 'AATCTA': 225, 'AATCTC': 226, 'AATCTG': 227, 'AATCTT': 228, 'AATGAA': 229, 'AATGAC': 230, 'AATGAG': 231, 'AATGAT': 232, 'AATGCA': 233, 'AATGCC': 234, 'AATGCG': 235, 'AATGCT': 236, 'AATGGA': 237, 'AATGGC': 238, 'AATGGG': 239, 'AATGGT': 240, 'AATGTA': 241, 'AATGTC': 242, 'AATGTG': 243, 'AATGTT': 244, 'AATTAA': 245, 'AATTAC': 246, 'AATTAG': 247, 'AATTAT': 248, 'AATTCA': 249, 'AATTCC': 250, 'AATTCG': 251, 'AATTCT': 252, 'AATTGA': 253, 'AATTGC': 254, 'AATTGG': 255, 'AATTGT': 256, 'AATTTA': 257, 'AATTTC': 258, 'AATTTG': 259, 'AATTTT': 260, 'ACAAAA': 261, 'ACAAAC': 262, 'ACAAAG': 263, 'ACAAAT': 264, 'ACAACA': 265, 'ACAACC': 266, 'ACAACG': 267, 'ACAACT': 268, 'ACAAGA': 269, 'ACAAGC': 270, 'ACAAGG': 271, 'ACAAGT': 272, 'ACAATA': 273, 'ACAATC': 274, 'ACAATG': 275, 'ACAATT': 276, 'ACACAA': 277, 'ACACAC': 278, 'ACACAG': 279, 'ACACAT': 280, 'ACACCA': 281, 'ACACCC': 282, 'ACACCG': 283, 'ACACCT': 284, 'ACACGA': 285, 'ACACGC': 286, 'ACACGG': 287, 'ACACGT': 288, 'ACACTA': 289, 'ACACTC': 290, 'ACACTG': 291, 'ACACTT': 292, 'ACAGAA': 293, 'ACAGAC': 294, 'ACAGAG': 295, 'ACAGAT': 296, 'ACAGCA': 297, 'ACAGCC': 298, 'ACAGCG': 299, 'ACAGCT': 300, 'ACAGGA': 301, 'ACAGGC': 302, 'ACAGGG': 303, 'ACAGGT': 304, 'ACAGTA': 305, 'ACAGTC': 306, 'ACAGTG': 307, 'ACAGTT': 308, 'ACATAA': 309, 'ACATAC': 310, 'ACATAG': 311, 'ACATAT': 312, 'ACATCA': 313, 'ACATCC': 314, 'ACATCG': 315, 'ACATCT': 316, 'ACATGA': 317, 'ACATGC': 318, 'ACATGG': 319, 'ACATGT': 320, 'ACATTA': 321, 'ACATTC': 322, 'ACATTG': 323, 'ACATTT': 324, 'ACCAAA': 325, 'ACCAAC': 326, 'ACCAAG': 327, 'ACCAAT': 328, 'ACCACA': 329, 'ACCACC': 330, 'ACCACG': 331, 'ACCACT': 332, 'ACCAGA': 333, 'ACCAGC': 334, 'ACCAGG': 335, 'ACCAGT': 336, 'ACCATA': 337, 'ACCATC': 338, 'ACCATG': 339, 'ACCATT': 340, 'ACCCAA': 341, 'ACCCAC': 342, 'ACCCAG': 343, 'ACCCAT': 344, 'ACCCCA': 345, 'ACCCCC': 346, 'ACCCCG': 347, 'ACCCCT': 348, 'ACCCGA': 349, 'ACCCGC': 350, 'ACCCGG': 351, 'ACCCGT': 352, 'ACCCTA': 353, 'ACCCTC': 354, 'ACCCTG': 355, 'ACCCTT': 356, 'ACCGAA': 357, 'ACCGAC': 358, 'ACCGAG': 359, 'ACCGAT': 360, 'ACCGCA': 361, 'ACCGCC': 362, 'ACCGCG': 363, 'ACCGCT': 364, 'ACCGGA': 365, 'ACCGGC': 366, 'ACCGGG': 367, 'ACCGGT': 368, 'ACCGTA': 369, 'ACCGTC': 370, 'ACCGTG': 371, 'ACCGTT': 372, 'ACCTAA': 373, 'ACCTAC': 374, 'ACCTAG': 375, 'ACCTAT': 376, 'ACCTCA': 377, 'ACCTCC': 378, 'ACCTCG': 379, 'ACCTCT': 380, 'ACCTGA': 381, 'ACCTGC': 382, 'ACCTGG': 383, 'ACCTGT': 384, 'ACCTTA': 385, 'ACCTTC': 386, 'ACCTTG': 387, 'ACCTTT': 388, 'ACGAAA': 389, 'ACGAAC': 390, 'ACGAAG': 391, 'ACGAAT': 392, 'ACGACA': 393, 'ACGACC': 394, 'ACGACG': 395, 'ACGACT': 396, 'ACGAGA': 397, 'ACGAGC': 398, 'ACGAGG': 399, 'ACGAGT': 400, 'ACGATA': 401, 'ACGATC': 402, 'ACGATG': 403, 'ACGATT': 404, 'ACGCAA': 405, 'ACGCAC': 406, 'ACGCAG': 407, 'ACGCAT': 408, 'ACGCCA': 409, 'ACGCCC': 410, 'ACGCCG': 411, 'ACGCCT': 412, 'ACGCGA': 413, 'ACGCGC': 414, 'ACGCGG': 415, 'ACGCGT': 416, 'ACGCTA': 417, 'ACGCTC': 418, 'ACGCTG': 419, 'ACGCTT': 420, 'ACGGAA': 421, 'ACGGAC': 422, 'ACGGAG': 423, 'ACGGAT': 424, 'ACGGCA': 425, 'ACGGCC': 426, 'ACGGCG': 427, 'ACGGCT': 428, 'ACGGGA': 429, 'ACGGGC': 430, 'ACGGGG': 431, 'ACGGGT': 432, 'ACGGTA': 433, 'ACGGTC': 434, 'ACGGTG': 435, 'ACGGTT': 436, 'ACGTAA': 437, 'ACGTAC': 438, 'ACGTAG': 439, 'ACGTAT': 440, 'ACGTCA': 441, 'ACGTCC': 442, 'ACGTCG': 443, 'ACGTCT': 444, 'ACGTGA': 445, 'ACGTGC': 446, 'ACGTGG': 447, 'ACGTGT': 448, 'ACGTTA': 449, 'ACGTTC': 450, 'ACGTTG': 451, 'ACGTTT': 452, 'ACTAAA': 453, 'ACTAAC': 454, 'ACTAAG': 455, 'ACTAAT': 456, 'ACTACA': 457, 'ACTACC': 458, 'ACTACG': 459, 'ACTACT': 460, 'ACTAGA': 461, 'ACTAGC': 462, 'ACTAGG': 463, 'ACTAGT': 464, 'ACTATA': 465, 'ACTATC': 466, 'ACTATG': 467, 'ACTATT': 468, 'ACTCAA': 469, 'ACTCAC': 470, 'ACTCAG': 471, 'ACTCAT': 472, 'ACTCCA': 473, 'ACTCCC': 474, 'ACTCCG': 475, 'ACTCCT': 476, 'ACTCGA': 477, 'ACTCGC': 478, 'ACTCGG': 479, 'ACTCGT': 480, 'ACTCTA': 481, 'ACTCTC': 482, 'ACTCTG': 483, 'ACTCTT': 484, 'ACTGAA': 485, 'ACTGAC': 486, 'ACTGAG': 487, 'ACTGAT': 488, 'ACTGCA': 489, 'ACTGCC': 490, 'ACTGCG': 491, 'ACTGCT': 492, 'ACTGGA': 493, 'ACTGGC': 494, 'ACTGGG': 495, 'ACTGGT': 496, 'ACTGTA': 497, 'ACTGTC': 498, 'ACTGTG': 499, 'ACTGTT': 500, 'ACTTAA': 501, 'ACTTAC': 502, 'ACTTAG': 503, 'ACTTAT': 504, 'ACTTCA': 505, 'ACTTCC': 506, 'ACTTCG': 507, 'ACTTCT': 508, 'ACTTGA': 509, 'ACTTGC': 510, 'ACTTGG': 511, 'ACTTGT': 512, 'ACTTTA': 513, 'ACTTTC': 514, 'ACTTTG': 515, 'ACTTTT': 516, 'AGAAAA': 517, 'AGAAAC': 518, 'AGAAAG': 519, 'AGAAAT': 520, 'AGAACA': 521, 'AGAACC': 522, 'AGAACG': 523, 'AGAACT': 524, 'AGAAGA': 525, 'AGAAGC': 526, 'AGAAGG': 527, 'AGAAGT': 528, 'AGAATA': 529, 'AGAATC': 530, 'AGAATG': 531, 'AGAATT': 532, 'AGACAA': 533, 'AGACAC': 534, 'AGACAG': 535, 'AGACAT': 536, 'AGACCA': 537, 'AGACCC': 538, 'AGACCG': 539, 'AGACCT': 540, 'AGACGA': 541, 'AGACGC': 542, 'AGACGG': 543, 'AGACGT': 544, 'AGACTA': 545, 'AGACTC': 546, 'AGACTG': 547, 'AGACTT': 548, 'AGAGAA': 549, 'AGAGAC': 550, 'AGAGAG': 551, 'AGAGAT': 552, 'AGAGCA': 553, 'AGAGCC': 554, 'AGAGCG': 555, 'AGAGCT': 556, 'AGAGGA': 557, 'AGAGGC': 558, 'AGAGGG': 559, 'AGAGGT': 560, 'AGAGTA': 561, 'AGAGTC': 562, 'AGAGTG': 563, 'AGAGTT': 564, 'AGATAA': 565, 'AGATAC': 566, 'AGATAG': 567, 'AGATAT': 568, 'AGATCA': 569, 'AGATCC': 570, 'AGATCG': 571, 'AGATCT': 572, 'AGATGA': 573, 'AGATGC': 574, 'AGATGG': 575, 'AGATGT': 576, 'AGATTA': 577, 'AGATTC': 578, 'AGATTG': 579, 'AGATTT': 580, 'AGCAAA': 581, 'AGCAAC': 582, 'AGCAAG': 583, 'AGCAAT': 584, 'AGCACA': 585, 'AGCACC': 586, 'AGCACG': 587, 'AGCACT': 588, 'AGCAGA': 589, 'AGCAGC': 590, 'AGCAGG': 591, 'AGCAGT': 592, 'AGCATA': 593, 'AGCATC': 594, 'AGCATG': 595, 'AGCATT': 596, 'AGCCAA': 597, 'AGCCAC': 598, 'AGCCAG': 599, 'AGCCAT': 600, 'AGCCCA': 601, 'AGCCCC': 602, 'AGCCCG': 603, 'AGCCCT': 604, 'AGCCGA': 605, 'AGCCGC': 606, 'AGCCGG': 607, 'AGCCGT': 608, 'AGCCTA': 609, 'AGCCTC': 610, 'AGCCTG': 611, 'AGCCTT': 612, 'AGCGAA': 613, 'AGCGAC': 614, 'AGCGAG': 615, 'AGCGAT': 616, 'AGCGCA': 617, 'AGCGCC': 618, 'AGCGCG': 619, 'AGCGCT': 620, 'AGCGGA': 621, 'AGCGGC': 622, 'AGCGGG': 623, 'AGCGGT': 624, 'AGCGTA': 625, 'AGCGTC': 626, 'AGCGTG': 627, 'AGCGTT': 628, 'AGCTAA': 629, 'AGCTAC': 630, 'AGCTAG': 631, 'AGCTAT': 632, 'AGCTCA': 633, 'AGCTCC': 634, 'AGCTCG': 635, 'AGCTCT': 636, 'AGCTGA': 637, 'AGCTGC': 638, 'AGCTGG': 639, 'AGCTGT': 640, 'AGCTTA': 641, 'AGCTTC': 642, 'AGCTTG': 643, 'AGCTTT': 644, 'AGGAAA': 645, 'AGGAAC': 646, 'AGGAAG': 647, 'AGGAAT': 648, 'AGGACA': 649, 'AGGACC': 650, 'AGGACG': 651, 'AGGACT': 652, 'AGGAGA': 653, 'AGGAGC': 654, 'AGGAGG': 655, 'AGGAGT': 656, 'AGGATA': 657, 'AGGATC': 658, 'AGGATG': 659, 'AGGATT': 660, 'AGGCAA': 661, 'AGGCAC': 662, 'AGGCAG': 663, 'AGGCAT': 664, 'AGGCCA': 665, 'AGGCCC': 666, 'AGGCCG': 667, 'AGGCCT': 668, 'AGGCGA': 669, 'AGGCGC': 670, 'AGGCGG': 671, 'AGGCGT': 672, 'AGGCTA': 673, 'AGGCTC': 674, 'AGGCTG': 675, 'AGGCTT': 676, 'AGGGAA': 677, 'AGGGAC': 678, 'AGGGAG': 679, 'AGGGAT': 680, 'AGGGCA': 681, 'AGGGCC': 682, 'AGGGCG': 683, 'AGGGCT': 684, 'AGGGGA': 685, 'AGGGGC': 686, 'AGGGGG': 687, 'AGGGGT': 688, 'AGGGTA': 689, 'AGGGTC': 690, 'AGGGTG': 691, 'AGGGTT': 692, 'AGGTAA': 693, 'AGGTAC': 694, 'AGGTAG': 695, 'AGGTAT': 696, 'AGGTCA': 697, 'AGGTCC': 698, 'AGGTCG': 699, 'AGGTCT': 700, 'AGGTGA': 701, 'AGGTGC': 702, 'AGGTGG': 703, 'AGGTGT': 704, 'AGGTTA': 705, 'AGGTTC': 706, 'AGGTTG': 707, 'AGGTTT': 708, 'AGTAAA': 709, 'AGTAAC': 710, 'AGTAAG': 711, 'AGTAAT': 712, 'AGTACA': 713, 'AGTACC': 714, 'AGTACG': 715, 'AGTACT': 716, 'AGTAGA': 717, 'AGTAGC': 718, 'AGTAGG': 719, 'AGTAGT': 720, 'AGTATA': 721, 'AGTATC': 722, 'AGTATG': 723, 'AGTATT': 724, 'AGTCAA': 725, 'AGTCAC': 726, 'AGTCAG': 727, 'AGTCAT': 728, 'AGTCCA': 729, 'AGTCCC': 730, 'AGTCCG': 731, 'AGTCCT': 732, 'AGTCGA': 733, 'AGTCGC': 734, 'AGTCGG': 735, 'AGTCGT': 736, 'AGTCTA': 737, 'AGTCTC': 738, 'AGTCTG': 739, 'AGTCTT': 740, 'AGTGAA': 741, 'AGTGAC': 742, 'AGTGAG': 743, 'AGTGAT': 744, 'AGTGCA': 745, 'AGTGCC': 746, 'AGTGCG': 747, 'AGTGCT': 748, 'AGTGGA': 749, 'AGTGGC': 750, 'AGTGGG': 751, 'AGTGGT': 752, 'AGTGTA': 753, 'AGTGTC': 754, 'AGTGTG': 755, 'AGTGTT': 756, 'AGTTAA': 757, 'AGTTAC': 758, 'AGTTAG': 759, 'AGTTAT': 760, 'AGTTCA': 761, 'AGTTCC': 762, 'AGTTCG': 763, 'AGTTCT': 764, 'AGTTGA': 765, 'AGTTGC': 766, 'AGTTGG': 767, 'AGTTGT': 768, 'AGTTTA': 769, 'AGTTTC': 770, 'AGTTTG': 771, 'AGTTTT': 772, 'ATAAAA': 773, 'ATAAAC': 774, 'ATAAAG': 775, 'ATAAAT': 776, 'ATAACA': 777, 'ATAACC': 778, 'ATAACG': 779, 'ATAACT': 780, 'ATAAGA': 781, 'ATAAGC': 782, 'ATAAGG': 783, 'ATAAGT': 784, 'ATAATA': 785, 'ATAATC': 786, 'ATAATG': 787, 'ATAATT': 788, 'ATACAA': 789, 'ATACAC': 790, 'ATACAG': 791, 'ATACAT': 792, 'ATACCA': 793, 'ATACCC': 794, 'ATACCG': 795, 'ATACCT': 796, 'ATACGA': 797, 'ATACGC': 798, 'ATACGG': 799, 'ATACGT': 800, 'ATACTA': 801, 'ATACTC': 802, 'ATACTG': 803, 'ATACTT': 804, 'ATAGAA': 805, 'ATAGAC': 806, 'ATAGAG': 807, 'ATAGAT': 808, 'ATAGCA': 809, 'ATAGCC': 810, 'ATAGCG': 811, 'ATAGCT': 812, 'ATAGGA': 813, 'ATAGGC': 814, 'ATAGGG': 815, 'ATAGGT': 816, 'ATAGTA': 817, 'ATAGTC': 818, 'ATAGTG': 819, 'ATAGTT': 820, 'ATATAA': 821, 'ATATAC': 822, 'ATATAG': 823, 'ATATAT': 824, 'ATATCA': 825, 'ATATCC': 826, 'ATATCG': 827, 'ATATCT': 828, 'ATATGA': 829, 'ATATGC': 830, 'ATATGG': 831, 'ATATGT': 832, 'ATATTA': 833, 'ATATTC': 834, 'ATATTG': 835, 'ATATTT': 836, 'ATCAAA': 837, 'ATCAAC': 838, 'ATCAAG': 839, 'ATCAAT': 840, 'ATCACA': 841, 'ATCACC': 842, 'ATCACG': 843, 'ATCACT': 844, 'ATCAGA': 845, 'ATCAGC': 846, 'ATCAGG': 847, 'ATCAGT': 848, 'ATCATA': 849, 'ATCATC': 850, 'ATCATG': 851, 'ATCATT': 852, 'ATCCAA': 853, 'ATCCAC': 854, 'ATCCAG': 855, 'ATCCAT': 856, 'ATCCCA': 857, 'ATCCCC': 858, 'ATCCCG': 859, 'ATCCCT': 860, 'ATCCGA': 861, 'ATCCGC': 862, 'ATCCGG': 863, 'ATCCGT': 864, 'ATCCTA': 865, 'ATCCTC': 866, 'ATCCTG': 867, 'ATCCTT': 868, 'ATCGAA': 869, 'ATCGAC': 870, 'ATCGAG': 871, 'ATCGAT': 872, 'ATCGCA': 873, 'ATCGCC': 874, 'ATCGCG': 875, 'ATCGCT': 876, 'ATCGGA': 877, 'ATCGGC': 878, 'ATCGGG': 879, 'ATCGGT': 880, 'ATCGTA': 881, 'ATCGTC': 882, 'ATCGTG': 883, 'ATCGTT': 884, 'ATCTAA': 885, 'ATCTAC': 886, 'ATCTAG': 887, 'ATCTAT': 888, 'ATCTCA': 889, 'ATCTCC': 890, 'ATCTCG': 891, 'ATCTCT': 892, 'ATCTGA': 893, 'ATCTGC': 894, 'ATCTGG': 895, 'ATCTGT': 896, 'ATCTTA': 897, 'ATCTTC': 898, 'ATCTTG': 899, 'ATCTTT': 900, 'ATGAAA': 901, 'ATGAAC': 902, 'ATGAAG': 903, 'ATGAAT': 904, 'ATGACA': 905, 'ATGACC': 906, 'ATGACG': 907, 'ATGACT': 908, 'ATGAGA': 909, 'ATGAGC': 910, 'ATGAGG': 911, 'ATGAGT': 912, 'ATGATA': 913, 'ATGATC': 914, 'ATGATG': 915, 'ATGATT': 916, 'ATGCAA': 917, 'ATGCAC': 918, 'ATGCAG': 919, 'ATGCAT': 920, 'ATGCCA': 921, 'ATGCCC': 922, 'ATGCCG': 923, 'ATGCCT': 924, 'ATGCGA': 925, 'ATGCGC': 926, 'ATGCGG': 927, 'ATGCGT': 928, 'ATGCTA': 929, 'ATGCTC': 930, 'ATGCTG': 931, 'ATGCTT': 932, 'ATGGAA': 933, 'ATGGAC': 934, 'ATGGAG': 935, 'ATGGAT': 936, 'ATGGCA': 937, 'ATGGCC': 938, 'ATGGCG': 939, 'ATGGCT': 940, 'ATGGGA': 941, 'ATGGGC': 942, 'ATGGGG': 943, 'ATGGGT': 944, 'ATGGTA': 945, 'ATGGTC': 946, 'ATGGTG': 947, 'ATGGTT': 948, 'ATGTAA': 949, 'ATGTAC': 950, 'ATGTAG': 951, 'ATGTAT': 952, 'ATGTCA': 953, 'ATGTCC': 954, 'ATGTCG': 955, 'ATGTCT': 956, 'ATGTGA': 957, 'ATGTGC': 958, 'ATGTGG': 959, 'ATGTGT': 960, 'ATGTTA': 961, 'ATGTTC': 962, 'ATGTTG': 963, 'ATGTTT': 964, 'ATTAAA': 965, 'ATTAAC': 966, 'ATTAAG': 967, 'ATTAAT': 968, 'ATTACA': 969, 'ATTACC': 970, 'ATTACG': 971, 'ATTACT': 972, 'ATTAGA': 973, 'ATTAGC': 974, 'ATTAGG': 975, 'ATTAGT': 976, 'ATTATA': 977, 'ATTATC': 978, 'ATTATG': 979, 'ATTATT': 980, 'ATTCAA': 981, 'ATTCAC': 982, 'ATTCAG': 983, 'ATTCAT': 984, 'ATTCCA': 985, 'ATTCCC': 986, 'ATTCCG': 987, 'ATTCCT': 988, 'ATTCGA': 989, 'ATTCGC': 990, 'ATTCGG': 991, 'ATTCGT': 992, 'ATTCTA': 993, 'ATTCTC': 994, 'ATTCTG': 995, 'ATTCTT': 996, 'ATTGAA': 997, 'ATTGAC': 998, 'ATTGAG': 999, 'ATTGAT': 1000, 'ATTGCA': 1001, 'ATTGCC': 1002, 'ATTGCG': 1003, 'ATTGCT': 1004, 'ATTGGA': 1005, 'ATTGGC': 1006, 'ATTGGG': 1007, 'ATTGGT': 1008, 'ATTGTA': 1009, 'ATTGTC': 1010, 'ATTGTG': 1011, 'ATTGTT': 1012, 'ATTTAA': 1013, 'ATTTAC': 1014, 'ATTTAG': 1015, 'ATTTAT': 1016, 'ATTTCA': 1017, 'ATTTCC': 1018, 'ATTTCG': 1019, 'ATTTCT': 1020, 'ATTTGA': 1021, 'ATTTGC': 1022, 'ATTTGG': 1023, 'ATTTGT': 1024, 'ATTTTA': 1025, 'ATTTTC': 1026, 'ATTTTG': 1027, 'ATTTTT': 1028, 'CAAAAA': 1029, 'CAAAAC': 1030, 'CAAAAG': 1031, 'CAAAAT': 1032, 'CAAACA': 1033, 'CAAACC': 1034, 'CAAACG': 1035, 'CAAACT': 1036, 'CAAAGA': 1037, 'CAAAGC': 1038, 'CAAAGG': 1039, 'CAAAGT': 1040, 'CAAATA': 1041, 'CAAATC': 1042, 'CAAATG': 1043, 'CAAATT': 1044, 'CAACAA': 1045, 'CAACAC': 1046, 'CAACAG': 1047, 'CAACAT': 1048, 'CAACCA': 1049, 'CAACCC': 1050, 'CAACCG': 1051, 'CAACCT': 1052, 'CAACGA': 1053, 'CAACGC': 1054, 'CAACGG': 1055, 'CAACGT': 1056, 'CAACTA': 1057, 'CAACTC': 1058, 'CAACTG': 1059, 'CAACTT': 1060, 'CAAGAA': 1061, 'CAAGAC': 1062, 'CAAGAG': 1063, 'CAAGAT': 1064, 'CAAGCA': 1065, 'CAAGCC': 1066, 'CAAGCG': 1067, 'CAAGCT': 1068, 'CAAGGA': 1069, 'CAAGGC': 1070, 'CAAGGG': 1071, 'CAAGGT': 1072, 'CAAGTA': 1073, 'CAAGTC': 1074, 'CAAGTG': 1075, 'CAAGTT': 1076, 'CAATAA': 1077, 'CAATAC': 1078, 'CAATAG': 1079, 'CAATAT': 1080, 'CAATCA': 1081, 'CAATCC': 1082, 'CAATCG': 1083, 'CAATCT': 1084, 'CAATGA': 1085, 'CAATGC': 1086, 'CAATGG': 1087, 'CAATGT': 1088, 'CAATTA': 1089, 'CAATTC': 1090, 'CAATTG': 1091, 'CAATTT': 1092, 'CACAAA': 1093, 'CACAAC': 1094, 'CACAAG': 1095, 'CACAAT': 1096, 'CACACA': 1097, 'CACACC': 1098, 'CACACG': 1099, 'CACACT': 1100, 'CACAGA': 1101, 'CACAGC': 1102, 'CACAGG': 1103, 'CACAGT': 1104, 'CACATA': 1105, 'CACATC': 1106, 'CACATG': 1107, 'CACATT': 1108, 'CACCAA': 1109, 'CACCAC': 1110, 'CACCAG': 1111, 'CACCAT': 1112, 'CACCCA': 1113, 'CACCCC': 1114, 'CACCCG': 1115, 'CACCCT': 1116, 'CACCGA': 1117, 'CACCGC': 1118, 'CACCGG': 1119, 'CACCGT': 1120, 'CACCTA': 1121, 'CACCTC': 1122, 'CACCTG': 1123, 'CACCTT': 1124, 'CACGAA': 1125, 'CACGAC': 1126, 'CACGAG': 1127, 'CACGAT': 1128, 'CACGCA': 1129, 'CACGCC': 1130, 'CACGCG': 1131, 'CACGCT': 1132, 'CACGGA': 1133, 'CACGGC': 1134, 'CACGGG': 1135, 'CACGGT': 1136, 'CACGTA': 1137, 'CACGTC': 1138, 'CACGTG': 1139, 'CACGTT': 1140, 'CACTAA': 1141, 'CACTAC': 1142, 'CACTAG': 1143, 'CACTAT': 1144, 'CACTCA': 1145, 'CACTCC': 1146, 'CACTCG': 1147, 'CACTCT': 1148, 'CACTGA': 1149, 'CACTGC': 1150, 'CACTGG': 1151, 'CACTGT': 1152, 'CACTTA': 1153, 'CACTTC': 1154, 'CACTTG': 1155, 'CACTTT': 1156, 'CAGAAA': 1157, 'CAGAAC': 1158, 'CAGAAG': 1159, 'CAGAAT': 1160, 'CAGACA': 1161, 'CAGACC': 1162, 'CAGACG': 1163, 'CAGACT': 1164, 'CAGAGA': 1165, 'CAGAGC': 1166, 'CAGAGG': 1167, 'CAGAGT': 1168, 'CAGATA': 1169, 'CAGATC': 1170, 'CAGATG': 1171, 'CAGATT': 1172, 'CAGCAA': 1173, 'CAGCAC': 1174, 'CAGCAG': 1175, 'CAGCAT': 1176, 'CAGCCA': 1177, 'CAGCCC': 1178, 'CAGCCG': 1179, 'CAGCCT': 1180, 'CAGCGA': 1181, 'CAGCGC': 1182, 'CAGCGG': 1183, 'CAGCGT': 1184, 'CAGCTA': 1185, 'CAGCTC': 1186, 'CAGCTG': 1187, 'CAGCTT': 1188, 'CAGGAA': 1189, 'CAGGAC': 1190, 'CAGGAG': 1191, 'CAGGAT': 1192, 'CAGGCA': 1193, 'CAGGCC': 1194, 'CAGGCG': 1195, 'CAGGCT': 1196, 'CAGGGA': 1197, 'CAGGGC': 1198, 'CAGGGG': 1199, 'CAGGGT': 1200, 'CAGGTA': 1201, 'CAGGTC': 1202, 'CAGGTG': 1203, 'CAGGTT': 1204, 'CAGTAA': 1205, 'CAGTAC': 1206, 'CAGTAG': 1207, 'CAGTAT': 1208, 'CAGTCA': 1209, 'CAGTCC': 1210, 'CAGTCG': 1211, 'CAGTCT': 1212, 'CAGTGA': 1213, 'CAGTGC': 1214, 'CAGTGG': 1215, 'CAGTGT': 1216, 'CAGTTA': 1217, 'CAGTTC': 1218, 'CAGTTG': 1219, 'CAGTTT': 1220, 'CATAAA': 1221, 'CATAAC': 1222, 'CATAAG': 1223, 'CATAAT': 1224, 'CATACA': 1225, 'CATACC': 1226, 'CATACG': 1227, 'CATACT': 1228, 'CATAGA': 1229, 'CATAGC': 1230, 'CATAGG': 1231, 'CATAGT': 1232, 'CATATA': 1233, 'CATATC': 1234, 'CATATG': 1235, 'CATATT': 1236, 'CATCAA': 1237, 'CATCAC': 1238, 'CATCAG': 1239, 'CATCAT': 1240, 'CATCCA': 1241, 'CATCCC': 1242, 'CATCCG': 1243, 'CATCCT': 1244, 'CATCGA': 1245, 'CATCGC': 1246, 'CATCGG': 1247, 'CATCGT': 1248, 'CATCTA': 1249, 'CATCTC': 1250, 'CATCTG': 1251, 'CATCTT': 1252, 'CATGAA': 1253, 'CATGAC': 1254, 'CATGAG': 1255, 'CATGAT': 1256, 'CATGCA': 1257, 'CATGCC': 1258, 'CATGCG': 1259, 'CATGCT': 1260, 'CATGGA': 1261, 'CATGGC': 1262, 'CATGGG': 1263, 'CATGGT': 1264, 'CATGTA': 1265, 'CATGTC': 1266, 'CATGTG': 1267, 'CATGTT': 1268, 'CATTAA': 1269, 'CATTAC': 1270, 'CATTAG': 1271, 'CATTAT': 1272, 'CATTCA': 1273, 'CATTCC': 1274, 'CATTCG': 1275, 'CATTCT': 1276, 'CATTGA': 1277, 'CATTGC': 1278, 'CATTGG': 1279, 'CATTGT': 1280, 'CATTTA': 1281, 'CATTTC': 1282, 'CATTTG': 1283, 'CATTTT': 1284, 'CCAAAA': 1285, 'CCAAAC': 1286, 'CCAAAG': 1287, 'CCAAAT': 1288, 'CCAACA': 1289, 'CCAACC': 1290, 'CCAACG': 1291, 'CCAACT': 1292, 'CCAAGA': 1293, 'CCAAGC': 1294, 'CCAAGG': 1295, 'CCAAGT': 1296, 'CCAATA': 1297, 'CCAATC': 1298, 'CCAATG': 1299, 'CCAATT': 1300, 'CCACAA': 1301, 'CCACAC': 1302, 'CCACAG': 1303, 'CCACAT': 1304, 'CCACCA': 1305, 'CCACCC': 1306, 'CCACCG': 1307, 'CCACCT': 1308, 'CCACGA': 1309, 'CCACGC': 1310, 'CCACGG': 1311, 'CCACGT': 1312, 'CCACTA': 1313, 'CCACTC': 1314, 'CCACTG': 1315, 'CCACTT': 1316, 'CCAGAA': 1317, 'CCAGAC': 1318, 'CCAGAG': 1319, 'CCAGAT': 1320, 'CCAGCA': 1321, 'CCAGCC': 1322, 'CCAGCG': 1323, 'CCAGCT': 1324, 'CCAGGA': 1325, 'CCAGGC': 1326, 'CCAGGG': 1327, 'CCAGGT': 1328, 'CCAGTA': 1329, 'CCAGTC': 1330, 'CCAGTG': 1331, 'CCAGTT': 1332, 'CCATAA': 1333, 'CCATAC': 1334, 'CCATAG': 1335, 'CCATAT': 1336, 'CCATCA': 1337, 'CCATCC': 1338, 'CCATCG': 1339, 'CCATCT': 1340, 'CCATGA': 1341, 'CCATGC': 1342, 'CCATGG': 1343, 'CCATGT': 1344, 'CCATTA': 1345, 'CCATTC': 1346, 'CCATTG': 1347, 'CCATTT': 1348, 'CCCAAA': 1349, 'CCCAAC': 1350, 'CCCAAG': 1351, 'CCCAAT': 1352, 'CCCACA': 1353, 'CCCACC': 1354, 'CCCACG': 1355, 'CCCACT': 1356, 'CCCAGA': 1357, 'CCCAGC': 1358, 'CCCAGG': 1359, 'CCCAGT': 1360, 'CCCATA': 1361, 'CCCATC': 1362, 'CCCATG': 1363, 'CCCATT': 1364, 'CCCCAA': 1365, 'CCCCAC': 1366, 'CCCCAG': 1367, 'CCCCAT': 1368, 'CCCCCA': 1369, 'CCCCCC': 1370, 'CCCCCG': 1371, 'CCCCCT': 1372, 'CCCCGA': 1373, 'CCCCGC': 1374, 'CCCCGG': 1375, 'CCCCGT': 1376, 'CCCCTA': 1377, 'CCCCTC': 1378, 'CCCCTG': 1379, 'CCCCTT': 1380, 'CCCGAA': 1381, 'CCCGAC': 1382, 'CCCGAG': 1383, 'CCCGAT': 1384, 'CCCGCA': 1385, 'CCCGCC': 1386, 'CCCGCG': 1387, 'CCCGCT': 1388, 'CCCGGA': 1389, 'CCCGGC': 1390, 'CCCGGG': 1391, 'CCCGGT': 1392, 'CCCGTA': 1393, 'CCCGTC': 1394, 'CCCGTG': 1395, 'CCCGTT': 1396, 'CCCTAA': 1397, 'CCCTAC': 1398, 'CCCTAG': 1399, 'CCCTAT': 1400, 'CCCTCA': 1401, 'CCCTCC': 1402, 'CCCTCG': 1403, 'CCCTCT': 1404, 'CCCTGA': 1405, 'CCCTGC': 1406, 'CCCTGG': 1407, 'CCCTGT': 1408, 'CCCTTA': 1409, 'CCCTTC': 1410, 'CCCTTG': 1411, 'CCCTTT': 1412, 'CCGAAA': 1413, 'CCGAAC': 1414, 'CCGAAG': 1415, 'CCGAAT': 1416, 'CCGACA': 1417, 'CCGACC': 1418, 'CCGACG': 1419, 'CCGACT': 1420, 'CCGAGA': 1421, 'CCGAGC': 1422, 'CCGAGG': 1423, 'CCGAGT': 1424, 'CCGATA': 1425, 'CCGATC': 1426, 'CCGATG': 1427, 'CCGATT': 1428, 'CCGCAA': 1429, 'CCGCAC': 1430, 'CCGCAG': 1431, 'CCGCAT': 1432, 'CCGCCA': 1433, 'CCGCCC': 1434, 'CCGCCG': 1435, 'CCGCCT': 1436, 'CCGCGA': 1437, 'CCGCGC': 1438, 'CCGCGG': 1439, 'CCGCGT': 1440, 'CCGCTA': 1441, 'CCGCTC': 1442, 'CCGCTG': 1443, 'CCGCTT': 1444, 'CCGGAA': 1445, 'CCGGAC': 1446, 'CCGGAG': 1447, 'CCGGAT': 1448, 'CCGGCA': 1449, 'CCGGCC': 1450, 'CCGGCG': 1451, 'CCGGCT': 1452, 'CCGGGA': 1453, 'CCGGGC': 1454, 'CCGGGG': 1455, 'CCGGGT': 1456, 'CCGGTA': 1457, 'CCGGTC': 1458, 'CCGGTG': 1459, 'CCGGTT': 1460, 'CCGTAA': 1461, 'CCGTAC': 1462, 'CCGTAG': 1463, 'CCGTAT': 1464, 'CCGTCA': 1465, 'CCGTCC': 1466, 'CCGTCG': 1467, 'CCGTCT': 1468, 'CCGTGA': 1469, 'CCGTGC': 1470, 'CCGTGG': 1471, 'CCGTGT': 1472, 'CCGTTA': 1473, 'CCGTTC': 1474, 'CCGTTG': 1475, 'CCGTTT': 1476, 'CCTAAA': 1477, 'CCTAAC': 1478, 'CCTAAG': 1479, 'CCTAAT': 1480, 'CCTACA': 1481, 'CCTACC': 1482, 'CCTACG': 1483, 'CCTACT': 1484, 'CCTAGA': 1485, 'CCTAGC': 1486, 'CCTAGG': 1487, 'CCTAGT': 1488, 'CCTATA': 1489, 'CCTATC': 1490, 'CCTATG': 1491, 'CCTATT': 1492, 'CCTCAA': 1493, 'CCTCAC': 1494, 'CCTCAG': 1495, 'CCTCAT': 1496, 'CCTCCA': 1497, 'CCTCCC': 1498, 'CCTCCG': 1499, 'CCTCCT': 1500, 'CCTCGA': 1501, 'CCTCGC': 1502, 'CCTCGG': 1503, 'CCTCGT': 1504, 'CCTCTA': 1505, 'CCTCTC': 1506, 'CCTCTG': 1507, 'CCTCTT': 1508, 'CCTGAA': 1509, 'CCTGAC': 1510, 'CCTGAG': 1511, 'CCTGAT': 1512, 'CCTGCA': 1513, 'CCTGCC': 1514, 'CCTGCG': 1515, 'CCTGCT': 1516, 'CCTGGA': 1517, 'CCTGGC': 1518, 'CCTGGG': 1519, 'CCTGGT': 1520, 'CCTGTA': 1521, 'CCTGTC': 1522, 'CCTGTG': 1523, 'CCTGTT': 1524, 'CCTTAA': 1525, 'CCTTAC': 1526, 'CCTTAG': 1527, 'CCTTAT': 1528, 'CCTTCA': 1529, 'CCTTCC': 1530, 'CCTTCG': 1531, 'CCTTCT': 1532, 'CCTTGA': 1533, 'CCTTGC': 1534, 'CCTTGG': 1535, 'CCTTGT': 1536, 'CCTTTA': 1537, 'CCTTTC': 1538, 'CCTTTG': 1539, 'CCTTTT': 1540, 'CGAAAA': 1541, 'CGAAAC': 1542, 'CGAAAG': 1543, 'CGAAAT': 1544, 'CGAACA': 1545, 'CGAACC': 1546, 'CGAACG': 1547, 'CGAACT': 1548, 'CGAAGA': 1549, 'CGAAGC': 1550, 'CGAAGG': 1551, 'CGAAGT': 1552, 'CGAATA': 1553, 'CGAATC': 1554, 'CGAATG': 1555, 'CGAATT': 1556, 'CGACAA': 1557, 'CGACAC': 1558, 'CGACAG': 1559, 'CGACAT': 1560, 'CGACCA': 1561, 'CGACCC': 1562, 'CGACCG': 1563, 'CGACCT': 1564, 'CGACGA': 1565, 'CGACGC': 1566, 'CGACGG': 1567, 'CGACGT': 1568, 'CGACTA': 1569, 'CGACTC': 1570, 'CGACTG': 1571, 'CGACTT': 1572, 'CGAGAA': 1573, 'CGAGAC': 1574, 'CGAGAG': 1575, 'CGAGAT': 1576, 'CGAGCA': 1577, 'CGAGCC': 1578, 'CGAGCG': 1579, 'CGAGCT': 1580, 'CGAGGA': 1581, 'CGAGGC': 1582, 'CGAGGG': 1583, 'CGAGGT': 1584, 'CGAGTA': 1585, 'CGAGTC': 1586, 'CGAGTG': 1587, 'CGAGTT': 1588, 'CGATAA': 1589, 'CGATAC': 1590, 'CGATAG': 1591, 'CGATAT': 1592, 'CGATCA': 1593, 'CGATCC': 1594, 'CGATCG': 1595, 'CGATCT': 1596, 'CGATGA': 1597, 'CGATGC': 1598, 'CGATGG': 1599, 'CGATGT': 1600, 'CGATTA': 1601, 'CGATTC': 1602, 'CGATTG': 1603, 'CGATTT': 1604, 'CGCAAA': 1605, 'CGCAAC': 1606, 'CGCAAG': 1607, 'CGCAAT': 1608, 'CGCACA': 1609, 'CGCACC': 1610, 'CGCACG': 1611, 'CGCACT': 1612, 'CGCAGA': 1613, 'CGCAGC': 1614, 'CGCAGG': 1615, 'CGCAGT': 1616, 'CGCATA': 1617, 'CGCATC': 1618, 'CGCATG': 1619, 'CGCATT': 1620, 'CGCCAA': 1621, 'CGCCAC': 1622, 'CGCCAG': 1623, 'CGCCAT': 1624, 'CGCCCA': 1625, 'CGCCCC': 1626, 'CGCCCG': 1627, 'CGCCCT': 1628, 'CGCCGA': 1629, 'CGCCGC': 1630, 'CGCCGG': 1631, 'CGCCGT': 1632, 'CGCCTA': 1633, 'CGCCTC': 1634, 'CGCCTG': 1635, 'CGCCTT': 1636, 'CGCGAA': 1637, 'CGCGAC': 1638, 'CGCGAG': 1639, 'CGCGAT': 1640, 'CGCGCA': 1641, 'CGCGCC': 1642, 'CGCGCG': 1643, 'CGCGCT': 1644, 'CGCGGA': 1645, 'CGCGGC': 1646, 'CGCGGG': 1647, 'CGCGGT': 1648, 'CGCGTA': 1649, 'CGCGTC': 1650, 'CGCGTG': 1651, 'CGCGTT': 1652, 'CGCTAA': 1653, 'CGCTAC': 1654, 'CGCTAG': 1655, 'CGCTAT': 1656, 'CGCTCA': 1657, 'CGCTCC': 1658, 'CGCTCG': 1659, 'CGCTCT': 1660, 'CGCTGA': 1661, 'CGCTGC': 1662, 'CGCTGG': 1663, 'CGCTGT': 1664, 'CGCTTA': 1665, 'CGCTTC': 1666, 'CGCTTG': 1667, 'CGCTTT': 1668, 'CGGAAA': 1669, 'CGGAAC': 1670, 'CGGAAG': 1671, 'CGGAAT': 1672, 'CGGACA': 1673, 'CGGACC': 1674, 'CGGACG': 1675, 'CGGACT': 1676, 'CGGAGA': 1677, 'CGGAGC': 1678, 'CGGAGG': 1679, 'CGGAGT': 1680, 'CGGATA': 1681, 'CGGATC': 1682, 'CGGATG': 1683, 'CGGATT': 1684, 'CGGCAA': 1685, 'CGGCAC': 1686, 'CGGCAG': 1687, 'CGGCAT': 1688, 'CGGCCA': 1689, 'CGGCCC': 1690, 'CGGCCG': 1691, 'CGGCCT': 1692, 'CGGCGA': 1693, 'CGGCGC': 1694, 'CGGCGG': 1695, 'CGGCGT': 1696, 'CGGCTA': 1697, 'CGGCTC': 1698, 'CGGCTG': 1699, 'CGGCTT': 1700, 'CGGGAA': 1701, 'CGGGAC': 1702, 'CGGGAG': 1703, 'CGGGAT': 1704, 'CGGGCA': 1705, 'CGGGCC': 1706, 'CGGGCG': 1707, 'CGGGCT': 1708, 'CGGGGA': 1709, 'CGGGGC': 1710, 'CGGGGG': 1711, 'CGGGGT': 1712, 'CGGGTA': 1713, 'CGGGTC': 1714, 'CGGGTG': 1715, 'CGGGTT': 1716, 'CGGTAA': 1717, 'CGGTAC': 1718, 'CGGTAG': 1719, 'CGGTAT': 1720, 'CGGTCA': 1721, 'CGGTCC': 1722, 'CGGTCG': 1723, 'CGGTCT': 1724, 'CGGTGA': 1725, 'CGGTGC': 1726, 'CGGTGG': 1727, 'CGGTGT': 1728, 'CGGTTA': 1729, 'CGGTTC': 1730, 'CGGTTG': 1731, 'CGGTTT': 1732, 'CGTAAA': 1733, 'CGTAAC': 1734, 'CGTAAG': 1735, 'CGTAAT': 1736, 'CGTACA': 1737, 'CGTACC': 1738, 'CGTACG': 1739, 'CGTACT': 1740, 'CGTAGA': 1741, 'CGTAGC': 1742, 'CGTAGG': 1743, 'CGTAGT': 1744, 'CGTATA': 1745, 'CGTATC': 1746, 'CGTATG': 1747, 'CGTATT': 1748, 'CGTCAA': 1749, 'CGTCAC': 1750, 'CGTCAG': 1751, 'CGTCAT': 1752, 'CGTCCA': 1753, 'CGTCCC': 1754, 'CGTCCG': 1755, 'CGTCCT': 1756, 'CGTCGA': 1757, 'CGTCGC': 1758, 'CGTCGG': 1759, 'CGTCGT': 1760, 'CGTCTA': 1761, 'CGTCTC': 1762, 'CGTCTG': 1763, 'CGTCTT': 1764, 'CGTGAA': 1765, 'CGTGAC': 1766, 'CGTGAG': 1767, 'CGTGAT': 1768, 'CGTGCA': 1769, 'CGTGCC': 1770, 'CGTGCG': 1771, 'CGTGCT': 1772, 'CGTGGA': 1773, 'CGTGGC': 1774, 'CGTGGG': 1775, 'CGTGGT': 1776, 'CGTGTA': 1777, 'CGTGTC': 1778, 'CGTGTG': 1779, 'CGTGTT': 1780, 'CGTTAA': 1781, 'CGTTAC': 1782, 'CGTTAG': 1783, 'CGTTAT': 1784, 'CGTTCA': 1785, 'CGTTCC': 1786, 'CGTTCG': 1787, 'CGTTCT': 1788, 'CGTTGA': 1789, 'CGTTGC': 1790, 'CGTTGG': 1791, 'CGTTGT': 1792, 'CGTTTA': 1793, 'CGTTTC': 1794, 'CGTTTG': 1795, 'CGTTTT': 1796, 'CTAAAA': 1797, 'CTAAAC': 1798, 'CTAAAG': 1799, 'CTAAAT': 1800, 'CTAACA': 1801, 'CTAACC': 1802, 'CTAACG': 1803, 'CTAACT': 1804, 'CTAAGA': 1805, 'CTAAGC': 1806, 'CTAAGG': 1807, 'CTAAGT': 1808, 'CTAATA': 1809, 'CTAATC': 1810, 'CTAATG': 1811, 'CTAATT': 1812, 'CTACAA': 1813, 'CTACAC': 1814, 'CTACAG': 1815, 'CTACAT': 1816, 'CTACCA': 1817, 'CTACCC': 1818, 'CTACCG': 1819, 'CTACCT': 1820, 'CTACGA': 1821, 'CTACGC': 1822, 'CTACGG': 1823, 'CTACGT': 1824, 'CTACTA': 1825, 'CTACTC': 1826, 'CTACTG': 1827, 'CTACTT': 1828, 'CTAGAA': 1829, 'CTAGAC': 1830, 'CTAGAG': 1831, 'CTAGAT': 1832, 'CTAGCA': 1833, 'CTAGCC': 1834, 'CTAGCG': 1835, 'CTAGCT': 1836, 'CTAGGA': 1837, 'CTAGGC': 1838, 'CTAGGG': 1839, 'CTAGGT': 1840, 'CTAGTA': 1841, 'CTAGTC': 1842, 'CTAGTG': 1843, 'CTAGTT': 1844, 'CTATAA': 1845, 'CTATAC': 1846, 'CTATAG': 1847, 'CTATAT': 1848, 'CTATCA': 1849, 'CTATCC': 1850, 'CTATCG': 1851, 'CTATCT': 1852, 'CTATGA': 1853, 'CTATGC': 1854, 'CTATGG': 1855, 'CTATGT': 1856, 'CTATTA': 1857, 'CTATTC': 1858, 'CTATTG': 1859, 'CTATTT': 1860, 'CTCAAA': 1861, 'CTCAAC': 1862, 'CTCAAG': 1863, 'CTCAAT': 1864, 'CTCACA': 1865, 'CTCACC': 1866, 'CTCACG': 1867, 'CTCACT': 1868, 'CTCAGA': 1869, 'CTCAGC': 1870, 'CTCAGG': 1871, 'CTCAGT': 1872, 'CTCATA': 1873, 'CTCATC': 1874, 'CTCATG': 1875, 'CTCATT': 1876, 'CTCCAA': 1877, 'CTCCAC': 1878, 'CTCCAG': 1879, 'CTCCAT': 1880, 'CTCCCA': 1881, 'CTCCCC': 1882, 'CTCCCG': 1883, 'CTCCCT': 1884, 'CTCCGA': 1885, 'CTCCGC': 1886, 'CTCCGG': 1887, 'CTCCGT': 1888, 'CTCCTA': 1889, 'CTCCTC': 1890, 'CTCCTG': 1891, 'CTCCTT': 1892, 'CTCGAA': 1893, 'CTCGAC': 1894, 'CTCGAG': 1895, 'CTCGAT': 1896, 'CTCGCA': 1897, 'CTCGCC': 1898, 'CTCGCG': 1899, 'CTCGCT': 1900, 'CTCGGA': 1901, 'CTCGGC': 1902, 'CTCGGG': 1903, 'CTCGGT': 1904, 'CTCGTA': 1905, 'CTCGTC': 1906, 'CTCGTG': 1907, 'CTCGTT': 1908, 'CTCTAA': 1909, 'CTCTAC': 1910, 'CTCTAG': 1911, 'CTCTAT': 1912, 'CTCTCA': 1913, 'CTCTCC': 1914, 'CTCTCG': 1915, 'CTCTCT': 1916, 'CTCTGA': 1917, 'CTCTGC': 1918, 'CTCTGG': 1919, 'CTCTGT': 1920, 'CTCTTA': 1921, 'CTCTTC': 1922, 'CTCTTG': 1923, 'CTCTTT': 1924, 'CTGAAA': 1925, 'CTGAAC': 1926, 'CTGAAG': 1927, 'CTGAAT': 1928, 'CTGACA': 1929, 'CTGACC': 1930, 'CTGACG': 1931, 'CTGACT': 1932, 'CTGAGA': 1933, 'CTGAGC': 1934, 'CTGAGG': 1935, 'CTGAGT': 1936, 'CTGATA': 1937, 'CTGATC': 1938, 'CTGATG': 1939, 'CTGATT': 1940, 'CTGCAA': 1941, 'CTGCAC': 1942, 'CTGCAG': 1943, 'CTGCAT': 1944, 'CTGCCA': 1945, 'CTGCCC': 1946, 'CTGCCG': 1947, 'CTGCCT': 1948, 'CTGCGA': 1949, 'CTGCGC': 1950, 'CTGCGG': 1951, 'CTGCGT': 1952, 'CTGCTA': 1953, 'CTGCTC': 1954, 'CTGCTG': 1955, 'CTGCTT': 1956, 'CTGGAA': 1957, 'CTGGAC': 1958, 'CTGGAG': 1959, 'CTGGAT': 1960, 'CTGGCA': 1961, 'CTGGCC': 1962, 'CTGGCG': 1963, 'CTGGCT': 1964, 'CTGGGA': 1965, 'CTGGGC': 1966, 'CTGGGG': 1967, 'CTGGGT': 1968, 'CTGGTA': 1969, 'CTGGTC': 1970, 'CTGGTG': 1971, 'CTGGTT': 1972, 'CTGTAA': 1973, 'CTGTAC': 1974, 'CTGTAG': 1975, 'CTGTAT': 1976, 'CTGTCA': 1977, 'CTGTCC': 1978, 'CTGTCG': 1979, 'CTGTCT': 1980, 'CTGTGA': 1981, 'CTGTGC': 1982, 'CTGTGG': 1983, 'CTGTGT': 1984, 'CTGTTA': 1985, 'CTGTTC': 1986, 'CTGTTG': 1987, 'CTGTTT': 1988, 'CTTAAA': 1989, 'CTTAAC': 1990, 'CTTAAG': 1991, 'CTTAAT': 1992, 'CTTACA': 1993, 'CTTACC': 1994, 'CTTACG': 1995, 'CTTACT': 1996, 'CTTAGA': 1997, 'CTTAGC': 1998, 'CTTAGG': 1999, 'CTTAGT': 2000, 'CTTATA': 2001, 'CTTATC': 2002, 'CTTATG': 2003, 'CTTATT': 2004, 'CTTCAA': 2005, 'CTTCAC': 2006, 'CTTCAG': 2007, 'CTTCAT': 2008, 'CTTCCA': 2009, 'CTTCCC': 2010, 'CTTCCG': 2011, 'CTTCCT': 2012, 'CTTCGA': 2013, 'CTTCGC': 2014, 'CTTCGG': 2015, 'CTTCGT': 2016, 'CTTCTA': 2017, 'CTTCTC': 2018, 'CTTCTG': 2019, 'CTTCTT': 2020, 'CTTGAA': 2021, 'CTTGAC': 2022, 'CTTGAG': 2023, 'CTTGAT': 2024, 'CTTGCA': 2025, 'CTTGCC': 2026, 'CTTGCG': 2027, 'CTTGCT': 2028, 'CTTGGA': 2029, 'CTTGGC': 2030, 'CTTGGG': 2031, 'CTTGGT': 2032, 'CTTGTA': 2033, 'CTTGTC': 2034, 'CTTGTG': 2035, 'CTTGTT': 2036, 'CTTTAA': 2037, 'CTTTAC': 2038, 'CTTTAG': 2039, 'CTTTAT': 2040, 'CTTTCA': 2041, 'CTTTCC': 2042, 'CTTTCG': 2043, 'CTTTCT': 2044, 'CTTTGA': 2045, 'CTTTGC': 2046, 'CTTTGG': 2047, 'CTTTGT': 2048, 'CTTTTA': 2049, 'CTTTTC': 2050, 'CTTTTG': 2051, 'CTTTTT': 2052, 'GAAAAA': 2053, 'GAAAAC': 2054, 'GAAAAG': 2055, 'GAAAAT': 2056, 'GAAACA': 2057, 'GAAACC': 2058, 'GAAACG': 2059, 'GAAACT': 2060, 'GAAAGA': 2061, 'GAAAGC': 2062, 'GAAAGG': 2063, 'GAAAGT': 2064, 'GAAATA': 2065, 'GAAATC': 2066, 'GAAATG': 2067, 'GAAATT': 2068, 'GAACAA': 2069, 'GAACAC': 2070, 'GAACAG': 2071, 'GAACAT': 2072, 'GAACCA': 2073, 'GAACCC': 2074, 'GAACCG': 2075, 'GAACCT': 2076, 'GAACGA': 2077, 'GAACGC': 2078, 'GAACGG': 2079, 'GAACGT': 2080, 'GAACTA': 2081, 'GAACTC': 2082, 'GAACTG': 2083, 'GAACTT': 2084, 'GAAGAA': 2085, 'GAAGAC': 2086, 'GAAGAG': 2087, 'GAAGAT': 2088, 'GAAGCA': 2089, 'GAAGCC': 2090, 'GAAGCG': 2091, 'GAAGCT': 2092, 'GAAGGA': 2093, 'GAAGGC': 2094, 'GAAGGG': 2095, 'GAAGGT': 2096, 'GAAGTA': 2097, 'GAAGTC': 2098, 'GAAGTG': 2099, 'GAAGTT': 2100, 'GAATAA': 2101, 'GAATAC': 2102, 'GAATAG': 2103, 'GAATAT': 2104, 'GAATCA': 2105, 'GAATCC': 2106, 'GAATCG': 2107, 'GAATCT': 2108, 'GAATGA': 2109, 'GAATGC': 2110, 'GAATGG': 2111, 'GAATGT': 2112, 'GAATTA': 2113, 'GAATTC': 2114, 'GAATTG': 2115, 'GAATTT': 2116, 'GACAAA': 2117, 'GACAAC': 2118, 'GACAAG': 2119, 'GACAAT': 2120, 'GACACA': 2121, 'GACACC': 2122, 'GACACG': 2123, 'GACACT': 2124, 'GACAGA': 2125, 'GACAGC': 2126, 'GACAGG': 2127, 'GACAGT': 2128, 'GACATA': 2129, 'GACATC': 2130, 'GACATG': 2131, 'GACATT': 2132, 'GACCAA': 2133, 'GACCAC': 2134, 'GACCAG': 2135, 'GACCAT': 2136, 'GACCCA': 2137, 'GACCCC': 2138, 'GACCCG': 2139, 'GACCCT': 2140, 'GACCGA': 2141, 'GACCGC': 2142, 'GACCGG': 2143, 'GACCGT': 2144, 'GACCTA': 2145, 'GACCTC': 2146, 'GACCTG': 2147, 'GACCTT': 2148, 'GACGAA': 2149, 'GACGAC': 2150, 'GACGAG': 2151, 'GACGAT': 2152, 'GACGCA': 2153, 'GACGCC': 2154, 'GACGCG': 2155, 'GACGCT': 2156, 'GACGGA': 2157, 'GACGGC': 2158, 'GACGGG': 2159, 'GACGGT': 2160, 'GACGTA': 2161, 'GACGTC': 2162, 'GACGTG': 2163, 'GACGTT': 2164, 'GACTAA': 2165, 'GACTAC': 2166, 'GACTAG': 2167, 'GACTAT': 2168, 'GACTCA': 2169, 'GACTCC': 2170, 'GACTCG': 2171, 'GACTCT': 2172, 'GACTGA': 2173, 'GACTGC': 2174, 'GACTGG': 2175, 'GACTGT': 2176, 'GACTTA': 2177, 'GACTTC': 2178, 'GACTTG': 2179, 'GACTTT': 2180, 'GAGAAA': 2181, 'GAGAAC': 2182, 'GAGAAG': 2183, 'GAGAAT': 2184, 'GAGACA': 2185, 'GAGACC': 2186, 'GAGACG': 2187, 'GAGACT': 2188, 'GAGAGA': 2189, 'GAGAGC': 2190, 'GAGAGG': 2191, 'GAGAGT': 2192, 'GAGATA': 2193, 'GAGATC': 2194, 'GAGATG': 2195, 'GAGATT': 2196, 'GAGCAA': 2197, 'GAGCAC': 2198, 'GAGCAG': 2199, 'GAGCAT': 2200, 'GAGCCA': 2201, 'GAGCCC': 2202, 'GAGCCG': 2203, 'GAGCCT': 2204, 'GAGCGA': 2205, 'GAGCGC': 2206, 'GAGCGG': 2207, 'GAGCGT': 2208, 'GAGCTA': 2209, 'GAGCTC': 2210, 'GAGCTG': 2211, 'GAGCTT': 2212, 'GAGGAA': 2213, 'GAGGAC': 2214, 'GAGGAG': 2215, 'GAGGAT': 2216, 'GAGGCA': 2217, 'GAGGCC': 2218, 'GAGGCG': 2219, 'GAGGCT': 2220, 'GAGGGA': 2221, 'GAGGGC': 2222, 'GAGGGG': 2223, 'GAGGGT': 2224, 'GAGGTA': 2225, 'GAGGTC': 2226, 'GAGGTG': 2227, 'GAGGTT': 2228, 'GAGTAA': 2229, 'GAGTAC': 2230, 'GAGTAG': 2231, 'GAGTAT': 2232, 'GAGTCA': 2233, 'GAGTCC': 2234, 'GAGTCG': 2235, 'GAGTCT': 2236, 'GAGTGA': 2237, 'GAGTGC': 2238, 'GAGTGG': 2239, 'GAGTGT': 2240, 'GAGTTA': 2241, 'GAGTTC': 2242, 'GAGTTG': 2243, 'GAGTTT': 2244, 'GATAAA': 2245, 'GATAAC': 2246, 'GATAAG': 2247, 'GATAAT': 2248, 'GATACA': 2249, 'GATACC': 2250, 'GATACG': 2251, 'GATACT': 2252, 'GATAGA': 2253, 'GATAGC': 2254, 'GATAGG': 2255, 'GATAGT': 2256, 'GATATA': 2257, 'GATATC': 2258, 'GATATG': 2259, 'GATATT': 2260, 'GATCAA': 2261, 'GATCAC': 2262, 'GATCAG': 2263, 'GATCAT': 2264, 'GATCCA': 2265, 'GATCCC': 2266, 'GATCCG': 2267, 'GATCCT': 2268, 'GATCGA': 2269, 'GATCGC': 2270, 'GATCGG': 2271, 'GATCGT': 2272, 'GATCTA': 2273, 'GATCTC': 2274, 'GATCTG': 2275, 'GATCTT': 2276, 'GATGAA': 2277, 'GATGAC': 2278, 'GATGAG': 2279, 'GATGAT': 2280, 'GATGCA': 2281, 'GATGCC': 2282, 'GATGCG': 2283, 'GATGCT': 2284, 'GATGGA': 2285, 'GATGGC': 2286, 'GATGGG': 2287, 'GATGGT': 2288, 'GATGTA': 2289, 'GATGTC': 2290, 'GATGTG': 2291, 'GATGTT': 2292, 'GATTAA': 2293, 'GATTAC': 2294, 'GATTAG': 2295, 'GATTAT': 2296, 'GATTCA': 2297, 'GATTCC': 2298, 'GATTCG': 2299, 'GATTCT': 2300, 'GATTGA': 2301, 'GATTGC': 2302, 'GATTGG': 2303, 'GATTGT': 2304, 'GATTTA': 2305, 'GATTTC': 2306, 'GATTTG': 2307, 'GATTTT': 2308, 'GCAAAA': 2309, 'GCAAAC': 2310, 'GCAAAG': 2311, 'GCAAAT': 2312, 'GCAACA': 2313, 'GCAACC': 2314, 'GCAACG': 2315, 'GCAACT': 2316, 'GCAAGA': 2317, 'GCAAGC': 2318, 'GCAAGG': 2319, 'GCAAGT': 2320, 'GCAATA': 2321, 'GCAATC': 2322, 'GCAATG': 2323, 'GCAATT': 2324, 'GCACAA': 2325, 'GCACAC': 2326, 'GCACAG': 2327, 'GCACAT': 2328, 'GCACCA': 2329, 'GCACCC': 2330, 'GCACCG': 2331, 'GCACCT': 2332, 'GCACGA': 2333, 'GCACGC': 2334, 'GCACGG': 2335, 'GCACGT': 2336, 'GCACTA': 2337, 'GCACTC': 2338, 'GCACTG': 2339, 'GCACTT': 2340, 'GCAGAA': 2341, 'GCAGAC': 2342, 'GCAGAG': 2343, 'GCAGAT': 2344, 'GCAGCA': 2345, 'GCAGCC': 2346, 'GCAGCG': 2347, 'GCAGCT': 2348, 'GCAGGA': 2349, 'GCAGGC': 2350, 'GCAGGG': 2351, 'GCAGGT': 2352, 'GCAGTA': 2353, 'GCAGTC': 2354, 'GCAGTG': 2355, 'GCAGTT': 2356, 'GCATAA': 2357, 'GCATAC': 2358, 'GCATAG': 2359, 'GCATAT': 2360, 'GCATCA': 2361, 'GCATCC': 2362, 'GCATCG': 2363, 'GCATCT': 2364, 'GCATGA': 2365, 'GCATGC': 2366, 'GCATGG': 2367, 'GCATGT': 2368, 'GCATTA': 2369, 'GCATTC': 2370, 'GCATTG': 2371, 'GCATTT': 2372, 'GCCAAA': 2373, 'GCCAAC': 2374, 'GCCAAG': 2375, 'GCCAAT': 2376, 'GCCACA': 2377, 'GCCACC': 2378, 'GCCACG': 2379, 'GCCACT': 2380, 'GCCAGA': 2381, 'GCCAGC': 2382, 'GCCAGG': 2383, 'GCCAGT': 2384, 'GCCATA': 2385, 'GCCATC': 2386, 'GCCATG': 2387, 'GCCATT': 2388, 'GCCCAA': 2389, 'GCCCAC': 2390, 'GCCCAG': 2391, 'GCCCAT': 2392, 'GCCCCA': 2393, 'GCCCCC': 2394, 'GCCCCG': 2395, 'GCCCCT': 2396, 'GCCCGA': 2397, 'GCCCGC': 2398, 'GCCCGG': 2399, 'GCCCGT': 2400, 'GCCCTA': 2401, 'GCCCTC': 2402, 'GCCCTG': 2403, 'GCCCTT': 2404, 'GCCGAA': 2405, 'GCCGAC': 2406, 'GCCGAG': 2407, 'GCCGAT': 2408, 'GCCGCA': 2409, 'GCCGCC': 2410, 'GCCGCG': 2411, 'GCCGCT': 2412, 'GCCGGA': 2413, 'GCCGGC': 2414, 'GCCGGG': 2415, 'GCCGGT': 2416, 'GCCGTA': 2417, 'GCCGTC': 2418, 'GCCGTG': 2419, 'GCCGTT': 2420, 'GCCTAA': 2421, 'GCCTAC': 2422, 'GCCTAG': 2423, 'GCCTAT': 2424, 'GCCTCA': 2425, 'GCCTCC': 2426, 'GCCTCG': 2427, 'GCCTCT': 2428, 'GCCTGA': 2429, 'GCCTGC': 2430, 'GCCTGG': 2431, 'GCCTGT': 2432, 'GCCTTA': 2433, 'GCCTTC': 2434, 'GCCTTG': 2435, 'GCCTTT': 2436, 'GCGAAA': 2437, 'GCGAAC': 2438, 'GCGAAG': 2439, 'GCGAAT': 2440, 'GCGACA': 2441, 'GCGACC': 2442, 'GCGACG': 2443, 'GCGACT': 2444, 'GCGAGA': 2445, 'GCGAGC': 2446, 'GCGAGG': 2447, 'GCGAGT': 2448, 'GCGATA': 2449, 'GCGATC': 2450, 'GCGATG': 2451, 'GCGATT': 2452, 'GCGCAA': 2453, 'GCGCAC': 2454, 'GCGCAG': 2455, 'GCGCAT': 2456, 'GCGCCA': 2457, 'GCGCCC': 2458, 'GCGCCG': 2459, 'GCGCCT': 2460, 'GCGCGA': 2461, 'GCGCGC': 2462, 'GCGCGG': 2463, 'GCGCGT': 2464, 'GCGCTA': 2465, 'GCGCTC': 2466, 'GCGCTG': 2467, 'GCGCTT': 2468, 'GCGGAA': 2469, 'GCGGAC': 2470, 'GCGGAG': 2471, 'GCGGAT': 2472, 'GCGGCA': 2473, 'GCGGCC': 2474, 'GCGGCG': 2475, 'GCGGCT': 2476, 'GCGGGA': 2477, 'GCGGGC': 2478, 'GCGGGG': 2479, 'GCGGGT': 2480, 'GCGGTA': 2481, 'GCGGTC': 2482, 'GCGGTG': 2483, 'GCGGTT': 2484, 'GCGTAA': 2485, 'GCGTAC': 2486, 'GCGTAG': 2487, 'GCGTAT': 2488, 'GCGTCA': 2489, 'GCGTCC': 2490, 'GCGTCG': 2491, 'GCGTCT': 2492, 'GCGTGA': 2493, 'GCGTGC': 2494, 'GCGTGG': 2495, 'GCGTGT': 2496, 'GCGTTA': 2497, 'GCGTTC': 2498, 'GCGTTG': 2499, 'GCGTTT': 2500, 'GCTAAA': 2501, 'GCTAAC': 2502, 'GCTAAG': 2503, 'GCTAAT': 2504, 'GCTACA': 2505, 'GCTACC': 2506, 'GCTACG': 2507, 'GCTACT': 2508, 'GCTAGA': 2509, 'GCTAGC': 2510, 'GCTAGG': 2511, 'GCTAGT': 2512, 'GCTATA': 2513, 'GCTATC': 2514, 'GCTATG': 2515, 'GCTATT': 2516, 'GCTCAA': 2517, 'GCTCAC': 2518, 'GCTCAG': 2519, 'GCTCAT': 2520, 'GCTCCA': 2521, 'GCTCCC': 2522, 'GCTCCG': 2523, 'GCTCCT': 2524, 'GCTCGA': 2525, 'GCTCGC': 2526, 'GCTCGG': 2527, 'GCTCGT': 2528, 'GCTCTA': 2529, 'GCTCTC': 2530, 'GCTCTG': 2531, 'GCTCTT': 2532, 'GCTGAA': 2533, 'GCTGAC': 2534, 'GCTGAG': 2535, 'GCTGAT': 2536, 'GCTGCA': 2537, 'GCTGCC': 2538, 'GCTGCG': 2539, 'GCTGCT': 2540, 'GCTGGA': 2541, 'GCTGGC': 2542, 'GCTGGG': 2543, 'GCTGGT': 2544, 'GCTGTA': 2545, 'GCTGTC': 2546, 'GCTGTG': 2547, 'GCTGTT': 2548, 'GCTTAA': 2549, 'GCTTAC': 2550, 'GCTTAG': 2551, 'GCTTAT': 2552, 'GCTTCA': 2553, 'GCTTCC': 2554, 'GCTTCG': 2555, 'GCTTCT': 2556, 'GCTTGA': 2557, 'GCTTGC': 2558, 'GCTTGG': 2559, 'GCTTGT': 2560, 'GCTTTA': 2561, 'GCTTTC': 2562, 'GCTTTG': 2563, 'GCTTTT': 2564, 'GGAAAA': 2565, 'GGAAAC': 2566, 'GGAAAG': 2567, 'GGAAAT': 2568, 'GGAACA': 2569, 'GGAACC': 2570, 'GGAACG': 2571, 'GGAACT': 2572, 'GGAAGA': 2573, 'GGAAGC': 2574, 'GGAAGG': 2575, 'GGAAGT': 2576, 'GGAATA': 2577, 'GGAATC': 2578, 'GGAATG': 2579, 'GGAATT': 2580, 'GGACAA': 2581, 'GGACAC': 2582, 'GGACAG': 2583, 'GGACAT': 2584, 'GGACCA': 2585, 'GGACCC': 2586, 'GGACCG': 2587, 'GGACCT': 2588, 'GGACGA': 2589, 'GGACGC': 2590, 'GGACGG': 2591, 'GGACGT': 2592, 'GGACTA': 2593, 'GGACTC': 2594, 'GGACTG': 2595, 'GGACTT': 2596, 'GGAGAA': 2597, 'GGAGAC': 2598, 'GGAGAG': 2599, 'GGAGAT': 2600, 'GGAGCA': 2601, 'GGAGCC': 2602, 'GGAGCG': 2603, 'GGAGCT': 2604, 'GGAGGA': 2605, 'GGAGGC': 2606, 'GGAGGG': 2607, 'GGAGGT': 2608, 'GGAGTA': 2609, 'GGAGTC': 2610, 'GGAGTG': 2611, 'GGAGTT': 2612, 'GGATAA': 2613, 'GGATAC': 2614, 'GGATAG': 2615, 'GGATAT': 2616, 'GGATCA': 2617, 'GGATCC': 2618, 'GGATCG': 2619, 'GGATCT': 2620, 'GGATGA': 2621, 'GGATGC': 2622, 'GGATGG': 2623, 'GGATGT': 2624, 'GGATTA': 2625, 'GGATTC': 2626, 'GGATTG': 2627, 'GGATTT': 2628, 'GGCAAA': 2629, 'GGCAAC': 2630, 'GGCAAG': 2631, 'GGCAAT': 2632, 'GGCACA': 2633, 'GGCACC': 2634, 'GGCACG': 2635, 'GGCACT': 2636, 'GGCAGA': 2637, 'GGCAGC': 2638, 'GGCAGG': 2639, 'GGCAGT': 2640, 'GGCATA': 2641, 'GGCATC': 2642, 'GGCATG': 2643, 'GGCATT': 2644, 'GGCCAA': 2645, 'GGCCAC': 2646, 'GGCCAG': 2647, 'GGCCAT': 2648, 'GGCCCA': 2649, 'GGCCCC': 2650, 'GGCCCG': 2651, 'GGCCCT': 2652, 'GGCCGA': 2653, 'GGCCGC': 2654, 'GGCCGG': 2655, 'GGCCGT': 2656, 'GGCCTA': 2657, 'GGCCTC': 2658, 'GGCCTG': 2659, 'GGCCTT': 2660, 'GGCGAA': 2661, 'GGCGAC': 2662, 'GGCGAG': 2663, 'GGCGAT': 2664, 'GGCGCA': 2665, 'GGCGCC': 2666, 'GGCGCG': 2667, 'GGCGCT': 2668, 'GGCGGA': 2669, 'GGCGGC': 2670, 'GGCGGG': 2671, 'GGCGGT': 2672, 'GGCGTA': 2673, 'GGCGTC': 2674, 'GGCGTG': 2675, 'GGCGTT': 2676, 'GGCTAA': 2677, 'GGCTAC': 2678, 'GGCTAG': 2679, 'GGCTAT': 2680, 'GGCTCA': 2681, 'GGCTCC': 2682, 'GGCTCG': 2683, 'GGCTCT': 2684, 'GGCTGA': 2685, 'GGCTGC': 2686, 'GGCTGG': 2687, 'GGCTGT': 2688, 'GGCTTA': 2689, 'GGCTTC': 2690, 'GGCTTG': 2691, 'GGCTTT': 2692, 'GGGAAA': 2693, 'GGGAAC': 2694, 'GGGAAG': 2695, 'GGGAAT': 2696, 'GGGACA': 2697, 'GGGACC': 2698, 'GGGACG': 2699, 'GGGACT': 2700, 'GGGAGA': 2701, 'GGGAGC': 2702, 'GGGAGG': 2703, 'GGGAGT': 2704, 'GGGATA': 2705, 'GGGATC': 2706, 'GGGATG': 2707, 'GGGATT': 2708, 'GGGCAA': 2709, 'GGGCAC': 2710, 'GGGCAG': 2711, 'GGGCAT': 2712, 'GGGCCA': 2713, 'GGGCCC': 2714, 'GGGCCG': 2715, 'GGGCCT': 2716, 'GGGCGA': 2717, 'GGGCGC': 2718, 'GGGCGG': 2719, 'GGGCGT': 2720, 'GGGCTA': 2721, 'GGGCTC': 2722, 'GGGCTG': 2723, 'GGGCTT': 2724, 'GGGGAA': 2725, 'GGGGAC': 2726, 'GGGGAG': 2727, 'GGGGAT': 2728, 'GGGGCA': 2729, 'GGGGCC': 2730, 'GGGGCG': 2731, 'GGGGCT': 2732, 'GGGGGA': 2733, 'GGGGGC': 2734, 'GGGGGG': 2735, 'GGGGGT': 2736, 'GGGGTA': 2737, 'GGGGTC': 2738, 'GGGGTG': 2739, 'GGGGTT': 2740, 'GGGTAA': 2741, 'GGGTAC': 2742, 'GGGTAG': 2743, 'GGGTAT': 2744, 'GGGTCA': 2745, 'GGGTCC': 2746, 'GGGTCG': 2747, 'GGGTCT': 2748, 'GGGTGA': 2749, 'GGGTGC': 2750, 'GGGTGG': 2751, 'GGGTGT': 2752, 'GGGTTA': 2753, 'GGGTTC': 2754, 'GGGTTG': 2755, 'GGGTTT': 2756, 'GGTAAA': 2757, 'GGTAAC': 2758, 'GGTAAG': 2759, 'GGTAAT': 2760, 'GGTACA': 2761, 'GGTACC': 2762, 'GGTACG': 2763, 'GGTACT': 2764, 'GGTAGA': 2765, 'GGTAGC': 2766, 'GGTAGG': 2767, 'GGTAGT': 2768, 'GGTATA': 2769, 'GGTATC': 2770, 'GGTATG': 2771, 'GGTATT': 2772, 'GGTCAA': 2773, 'GGTCAC': 2774, 'GGTCAG': 2775, 'GGTCAT': 2776, 'GGTCCA': 2777, 'GGTCCC': 2778, 'GGTCCG': 2779, 'GGTCCT': 2780, 'GGTCGA': 2781, 'GGTCGC': 2782, 'GGTCGG': 2783, 'GGTCGT': 2784, 'GGTCTA': 2785, 'GGTCTC': 2786, 'GGTCTG': 2787, 'GGTCTT': 2788, 'GGTGAA': 2789, 'GGTGAC': 2790, 'GGTGAG': 2791, 'GGTGAT': 2792, 'GGTGCA': 2793, 'GGTGCC': 2794, 'GGTGCG': 2795, 'GGTGCT': 2796, 'GGTGGA': 2797, 'GGTGGC': 2798, 'GGTGGG': 2799, 'GGTGGT': 2800, 'GGTGTA': 2801, 'GGTGTC': 2802, 'GGTGTG': 2803, 'GGTGTT': 2804, 'GGTTAA': 2805, 'GGTTAC': 2806, 'GGTTAG': 2807, 'GGTTAT': 2808, 'GGTTCA': 2809, 'GGTTCC': 2810, 'GGTTCG': 2811, 'GGTTCT': 2812, 'GGTTGA': 2813, 'GGTTGC': 2814, 'GGTTGG': 2815, 'GGTTGT': 2816, 'GGTTTA': 2817, 'GGTTTC': 2818, 'GGTTTG': 2819, 'GGTTTT': 2820, 'GTAAAA': 2821, 'GTAAAC': 2822, 'GTAAAG': 2823, 'GTAAAT': 2824, 'GTAACA': 2825, 'GTAACC': 2826, 'GTAACG': 2827, 'GTAACT': 2828, 'GTAAGA': 2829, 'GTAAGC': 2830, 'GTAAGG': 2831, 'GTAAGT': 2832, 'GTAATA': 2833, 'GTAATC': 2834, 'GTAATG': 2835, 'GTAATT': 2836, 'GTACAA': 2837, 'GTACAC': 2838, 'GTACAG': 2839, 'GTACAT': 2840, 'GTACCA': 2841, 'GTACCC': 2842, 'GTACCG': 2843, 'GTACCT': 2844, 'GTACGA': 2845, 'GTACGC': 2846, 'GTACGG': 2847, 'GTACGT': 2848, 'GTACTA': 2849, 'GTACTC': 2850, 'GTACTG': 2851, 'GTACTT': 2852, 'GTAGAA': 2853, 'GTAGAC': 2854, 'GTAGAG': 2855, 'GTAGAT': 2856, 'GTAGCA': 2857, 'GTAGCC': 2858, 'GTAGCG': 2859, 'GTAGCT': 2860, 'GTAGGA': 2861, 'GTAGGC': 2862, 'GTAGGG': 2863, 'GTAGGT': 2864, 'GTAGTA': 2865, 'GTAGTC': 2866, 'GTAGTG': 2867, 'GTAGTT': 2868, 'GTATAA': 2869, 'GTATAC': 2870, 'GTATAG': 2871, 'GTATAT': 2872, 'GTATCA': 2873, 'GTATCC': 2874, 'GTATCG': 2875, 'GTATCT': 2876, 'GTATGA': 2877, 'GTATGC': 2878, 'GTATGG': 2879, 'GTATGT': 2880, 'GTATTA': 2881, 'GTATTC': 2882, 'GTATTG': 2883, 'GTATTT': 2884, 'GTCAAA': 2885, 'GTCAAC': 2886, 'GTCAAG': 2887, 'GTCAAT': 2888, 'GTCACA': 2889, 'GTCACC': 2890, 'GTCACG': 2891, 'GTCACT': 2892, 'GTCAGA': 2893, 'GTCAGC': 2894, 'GTCAGG': 2895, 'GTCAGT': 2896, 'GTCATA': 2897, 'GTCATC': 2898, 'GTCATG': 2899, 'GTCATT': 2900, 'GTCCAA': 2901, 'GTCCAC': 2902, 'GTCCAG': 2903, 'GTCCAT': 2904, 'GTCCCA': 2905, 'GTCCCC': 2906, 'GTCCCG': 2907, 'GTCCCT': 2908, 'GTCCGA': 2909, 'GTCCGC': 2910, 'GTCCGG': 2911, 'GTCCGT': 2912, 'GTCCTA': 2913, 'GTCCTC': 2914, 'GTCCTG': 2915, 'GTCCTT': 2916, 'GTCGAA': 2917, 'GTCGAC': 2918, 'GTCGAG': 2919, 'GTCGAT': 2920, 'GTCGCA': 2921, 'GTCGCC': 2922, 'GTCGCG': 2923, 'GTCGCT': 2924, 'GTCGGA': 2925, 'GTCGGC': 2926, 'GTCGGG': 2927, 'GTCGGT': 2928, 'GTCGTA': 2929, 'GTCGTC': 2930, 'GTCGTG': 2931, 'GTCGTT': 2932, 'GTCTAA': 2933, 'GTCTAC': 2934, 'GTCTAG': 2935, 'GTCTAT': 2936, 'GTCTCA': 2937, 'GTCTCC': 2938, 'GTCTCG': 2939, 'GTCTCT': 2940, 'GTCTGA': 2941, 'GTCTGC': 2942, 'GTCTGG': 2943, 'GTCTGT': 2944, 'GTCTTA': 2945, 'GTCTTC': 2946, 'GTCTTG': 2947, 'GTCTTT': 2948, 'GTGAAA': 2949, 'GTGAAC': 2950, 'GTGAAG': 2951, 'GTGAAT': 2952, 'GTGACA': 2953, 'GTGACC': 2954, 'GTGACG': 2955, 'GTGACT': 2956, 'GTGAGA': 2957, 'GTGAGC': 2958, 'GTGAGG': 2959, 'GTGAGT': 2960, 'GTGATA': 2961, 'GTGATC': 2962, 'GTGATG': 2963, 'GTGATT': 2964, 'GTGCAA': 2965, 'GTGCAC': 2966, 'GTGCAG': 2967, 'GTGCAT': 2968, 'GTGCCA': 2969, 'GTGCCC': 2970, 'GTGCCG': 2971, 'GTGCCT': 2972, 'GTGCGA': 2973, 'GTGCGC': 2974, 'GTGCGG': 2975, 'GTGCGT': 2976, 'GTGCTA': 2977, 'GTGCTC': 2978, 'GTGCTG': 2979, 'GTGCTT': 2980, 'GTGGAA': 2981, 'GTGGAC': 2982, 'GTGGAG': 2983, 'GTGGAT': 2984, 'GTGGCA': 2985, 'GTGGCC': 2986, 'GTGGCG': 2987, 'GTGGCT': 2988, 'GTGGGA': 2989, 'GTGGGC': 2990, 'GTGGGG': 2991, 'GTGGGT': 2992, 'GTGGTA': 2993, 'GTGGTC': 2994, 'GTGGTG': 2995, 'GTGGTT': 2996, 'GTGTAA': 2997, 'GTGTAC': 2998, 'GTGTAG': 2999, 'GTGTAT': 3000, 'GTGTCA': 3001, 'GTGTCC': 3002, 'GTGTCG': 3003, 'GTGTCT': 3004, 'GTGTGA': 3005, 'GTGTGC': 3006, 'GTGTGG': 3007, 'GTGTGT': 3008, 'GTGTTA': 3009, 'GTGTTC': 3010, 'GTGTTG': 3011, 'GTGTTT': 3012, 'GTTAAA': 3013, 'GTTAAC': 3014, 'GTTAAG': 3015, 'GTTAAT': 3016, 'GTTACA': 3017, 'GTTACC': 3018, 'GTTACG': 3019, 'GTTACT': 3020, 'GTTAGA': 3021, 'GTTAGC': 3022, 'GTTAGG': 3023, 'GTTAGT': 3024, 'GTTATA': 3025, 'GTTATC': 3026, 'GTTATG': 3027, 'GTTATT': 3028, 'GTTCAA': 3029, 'GTTCAC': 3030, 'GTTCAG': 3031, 'GTTCAT': 3032, 'GTTCCA': 3033, 'GTTCCC': 3034, 'GTTCCG': 3035, 'GTTCCT': 3036, 'GTTCGA': 3037, 'GTTCGC': 3038, 'GTTCGG': 3039, 'GTTCGT': 3040, 'GTTCTA': 3041, 'GTTCTC': 3042, 'GTTCTG': 3043, 'GTTCTT': 3044, 'GTTGAA': 3045, 'GTTGAC': 3046, 'GTTGAG': 3047, 'GTTGAT': 3048, 'GTTGCA': 3049, 'GTTGCC': 3050, 'GTTGCG': 3051, 'GTTGCT': 3052, 'GTTGGA': 3053, 'GTTGGC': 3054, 'GTTGGG': 3055, 'GTTGGT': 3056, 'GTTGTA': 3057, 'GTTGTC': 3058, 'GTTGTG': 3059, 'GTTGTT': 3060, 'GTTTAA': 3061, 'GTTTAC': 3062, 'GTTTAG': 3063, 'GTTTAT': 3064, 'GTTTCA': 3065, 'GTTTCC': 3066, 'GTTTCG': 3067, 'GTTTCT': 3068, 'GTTTGA': 3069, 'GTTTGC': 3070, 'GTTTGG': 3071, 'GTTTGT': 3072, 'GTTTTA': 3073, 'GTTTTC': 3074, 'GTTTTG': 3075, 'GTTTTT': 3076, 'TAAAAA': 3077, 'TAAAAC': 3078, 'TAAAAG': 3079, 'TAAAAT': 3080, 'TAAACA': 3081, 'TAAACC': 3082, 'TAAACG': 3083, 'TAAACT': 3084, 'TAAAGA': 3085, 'TAAAGC': 3086, 'TAAAGG': 3087, 'TAAAGT': 3088, 'TAAATA': 3089, 'TAAATC': 3090, 'TAAATG': 3091, 'TAAATT': 3092, 'TAACAA': 3093, 'TAACAC': 3094, 'TAACAG': 3095, 'TAACAT': 3096, 'TAACCA': 3097, 'TAACCC': 3098, 'TAACCG': 3099, 'TAACCT': 3100, 'TAACGA': 3101, 'TAACGC': 3102, 'TAACGG': 3103, 'TAACGT': 3104, 'TAACTA': 3105, 'TAACTC': 3106, 'TAACTG': 3107, 'TAACTT': 3108, 'TAAGAA': 3109, 'TAAGAC': 3110, 'TAAGAG': 3111, 'TAAGAT': 3112, 'TAAGCA': 3113, 'TAAGCC': 3114, 'TAAGCG': 3115, 'TAAGCT': 3116, 'TAAGGA': 3117, 'TAAGGC': 3118, 'TAAGGG': 3119, 'TAAGGT': 3120, 'TAAGTA': 3121, 'TAAGTC': 3122, 'TAAGTG': 3123, 'TAAGTT': 3124, 'TAATAA': 3125, 'TAATAC': 3126, 'TAATAG': 3127, 'TAATAT': 3128, 'TAATCA': 3129, 'TAATCC': 3130, 'TAATCG': 3131, 'TAATCT': 3132, 'TAATGA': 3133, 'TAATGC': 3134, 'TAATGG': 3135, 'TAATGT': 3136, 'TAATTA': 3137, 'TAATTC': 3138, 'TAATTG': 3139, 'TAATTT': 3140, 'TACAAA': 3141, 'TACAAC': 3142, 'TACAAG': 3143, 'TACAAT': 3144, 'TACACA': 3145, 'TACACC': 3146, 'TACACG': 3147, 'TACACT': 3148, 'TACAGA': 3149, 'TACAGC': 3150, 'TACAGG': 3151, 'TACAGT': 3152, 'TACATA': 3153, 'TACATC': 3154, 'TACATG': 3155, 'TACATT': 3156, 'TACCAA': 3157, 'TACCAC': 3158, 'TACCAG': 3159, 'TACCAT': 3160, 'TACCCA': 3161, 'TACCCC': 3162, 'TACCCG': 3163, 'TACCCT': 3164, 'TACCGA': 3165, 'TACCGC': 3166, 'TACCGG': 3167, 'TACCGT': 3168, 'TACCTA': 3169, 'TACCTC': 3170, 'TACCTG': 3171, 'TACCTT': 3172, 'TACGAA': 3173, 'TACGAC': 3174, 'TACGAG': 3175, 'TACGAT': 3176, 'TACGCA': 3177, 'TACGCC': 3178, 'TACGCG': 3179, 'TACGCT': 3180, 'TACGGA': 3181, 'TACGGC': 3182, 'TACGGG': 3183, 'TACGGT': 3184, 'TACGTA': 3185, 'TACGTC': 3186, 'TACGTG': 3187, 'TACGTT': 3188, 'TACTAA': 3189, 'TACTAC': 3190, 'TACTAG': 3191, 'TACTAT': 3192, 'TACTCA': 3193, 'TACTCC': 3194, 'TACTCG': 3195, 'TACTCT': 3196, 'TACTGA': 3197, 'TACTGC': 3198, 'TACTGG': 3199, 'TACTGT': 3200, 'TACTTA': 3201, 'TACTTC': 3202, 'TACTTG': 3203, 'TACTTT': 3204, 'TAGAAA': 3205, 'TAGAAC': 3206, 'TAGAAG': 3207, 'TAGAAT': 3208, 'TAGACA': 3209, 'TAGACC': 3210, 'TAGACG': 3211, 'TAGACT': 3212, 'TAGAGA': 3213, 'TAGAGC': 3214, 'TAGAGG': 3215, 'TAGAGT': 3216, 'TAGATA': 3217, 'TAGATC': 3218, 'TAGATG': 3219, 'TAGATT': 3220, 'TAGCAA': 3221, 'TAGCAC': 3222, 'TAGCAG': 3223, 'TAGCAT': 3224, 'TAGCCA': 3225, 'TAGCCC': 3226, 'TAGCCG': 3227, 'TAGCCT': 3228, 'TAGCGA': 3229, 'TAGCGC': 3230, 'TAGCGG': 3231, 'TAGCGT': 3232, 'TAGCTA': 3233, 'TAGCTC': 3234, 'TAGCTG': 3235, 'TAGCTT': 3236, 'TAGGAA': 3237, 'TAGGAC': 3238, 'TAGGAG': 3239, 'TAGGAT': 3240, 'TAGGCA': 3241, 'TAGGCC': 3242, 'TAGGCG': 3243, 'TAGGCT': 3244, 'TAGGGA': 3245, 'TAGGGC': 3246, 'TAGGGG': 3247, 'TAGGGT': 3248, 'TAGGTA': 3249, 'TAGGTC': 3250, 'TAGGTG': 3251, 'TAGGTT': 3252, 'TAGTAA': 3253, 'TAGTAC': 3254, 'TAGTAG': 3255, 'TAGTAT': 3256, 'TAGTCA': 3257, 'TAGTCC': 3258, 'TAGTCG': 3259, 'TAGTCT': 3260, 'TAGTGA': 3261, 'TAGTGC': 3262, 'TAGTGG': 3263, 'TAGTGT': 3264, 'TAGTTA': 3265, 'TAGTTC': 3266, 'TAGTTG': 3267, 'TAGTTT': 3268, 'TATAAA': 3269, 'TATAAC': 3270, 'TATAAG': 3271, 'TATAAT': 3272, 'TATACA': 3273, 'TATACC': 3274, 'TATACG': 3275, 'TATACT': 3276, 'TATAGA': 3277, 'TATAGC': 3278, 'TATAGG': 3279, 'TATAGT': 3280, 'TATATA': 3281, 'TATATC': 3282, 'TATATG': 3283, 'TATATT': 3284, 'TATCAA': 3285, 'TATCAC': 3286, 'TATCAG': 3287, 'TATCAT': 3288, 'TATCCA': 3289, 'TATCCC': 3290, 'TATCCG': 3291, 'TATCCT': 3292, 'TATCGA': 3293, 'TATCGC': 3294, 'TATCGG': 3295, 'TATCGT': 3296, 'TATCTA': 3297, 'TATCTC': 3298, 'TATCTG': 3299, 'TATCTT': 3300, 'TATGAA': 3301, 'TATGAC': 3302, 'TATGAG': 3303, 'TATGAT': 3304, 'TATGCA': 3305, 'TATGCC': 3306, 'TATGCG': 3307, 'TATGCT': 3308, 'TATGGA': 3309, 'TATGGC': 3310, 'TATGGG': 3311, 'TATGGT': 3312, 'TATGTA': 3313, 'TATGTC': 3314, 'TATGTG': 3315, 'TATGTT': 3316, 'TATTAA': 3317, 'TATTAC': 3318, 'TATTAG': 3319, 'TATTAT': 3320, 'TATTCA': 3321, 'TATTCC': 3322, 'TATTCG': 3323, 'TATTCT': 3324, 'TATTGA': 3325, 'TATTGC': 3326, 'TATTGG': 3327, 'TATTGT': 3328, 'TATTTA': 3329, 'TATTTC': 3330, 'TATTTG': 3331, 'TATTTT': 3332, 'TCAAAA': 3333, 'TCAAAC': 3334, 'TCAAAG': 3335, 'TCAAAT': 3336, 'TCAACA': 3337, 'TCAACC': 3338, 'TCAACG': 3339, 'TCAACT': 3340, 'TCAAGA': 3341, 'TCAAGC': 3342, 'TCAAGG': 3343, 'TCAAGT': 3344, 'TCAATA': 3345, 'TCAATC': 3346, 'TCAATG': 3347, 'TCAATT': 3348, 'TCACAA': 3349, 'TCACAC': 3350, 'TCACAG': 3351, 'TCACAT': 3352, 'TCACCA': 3353, 'TCACCC': 3354, 'TCACCG': 3355, 'TCACCT': 3356, 'TCACGA': 3357, 'TCACGC': 3358, 'TCACGG': 3359, 'TCACGT': 3360, 'TCACTA': 3361, 'TCACTC': 3362, 'TCACTG': 3363, 'TCACTT': 3364, 'TCAGAA': 3365, 'TCAGAC': 3366, 'TCAGAG': 3367, 'TCAGAT': 3368, 'TCAGCA': 3369, 'TCAGCC': 3370, 'TCAGCG': 3371, 'TCAGCT': 3372, 'TCAGGA': 3373, 'TCAGGC': 3374, 'TCAGGG': 3375, 'TCAGGT': 3376, 'TCAGTA': 3377, 'TCAGTC': 3378, 'TCAGTG': 3379, 'TCAGTT': 3380, 'TCATAA': 3381, 'TCATAC': 3382, 'TCATAG': 3383, 'TCATAT': 3384, 'TCATCA': 3385, 'TCATCC': 3386, 'TCATCG': 3387, 'TCATCT': 3388, 'TCATGA': 3389, 'TCATGC': 3390, 'TCATGG': 3391, 'TCATGT': 3392, 'TCATTA': 3393, 'TCATTC': 3394, 'TCATTG': 3395, 'TCATTT': 3396, 'TCCAAA': 3397, 'TCCAAC': 3398, 'TCCAAG': 3399, 'TCCAAT': 3400, 'TCCACA': 3401, 'TCCACC': 3402, 'TCCACG': 3403, 'TCCACT': 3404, 'TCCAGA': 3405, 'TCCAGC': 3406, 'TCCAGG': 3407, 'TCCAGT': 3408, 'TCCATA': 3409, 'TCCATC': 3410, 'TCCATG': 3411, 'TCCATT': 3412, 'TCCCAA': 3413, 'TCCCAC': 3414, 'TCCCAG': 3415, 'TCCCAT': 3416, 'TCCCCA': 3417, 'TCCCCC': 3418, 'TCCCCG': 3419, 'TCCCCT': 3420, 'TCCCGA': 3421, 'TCCCGC': 3422, 'TCCCGG': 3423, 'TCCCGT': 3424, 'TCCCTA': 3425, 'TCCCTC': 3426, 'TCCCTG': 3427, 'TCCCTT': 3428, 'TCCGAA': 3429, 'TCCGAC': 3430, 'TCCGAG': 3431, 'TCCGAT': 3432, 'TCCGCA': 3433, 'TCCGCC': 3434, 'TCCGCG': 3435, 'TCCGCT': 3436, 'TCCGGA': 3437, 'TCCGGC': 3438, 'TCCGGG': 3439, 'TCCGGT': 3440, 'TCCGTA': 3441, 'TCCGTC': 3442, 'TCCGTG': 3443, 'TCCGTT': 3444, 'TCCTAA': 3445, 'TCCTAC': 3446, 'TCCTAG': 3447, 'TCCTAT': 3448, 'TCCTCA': 3449, 'TCCTCC': 3450, 'TCCTCG': 3451, 'TCCTCT': 3452, 'TCCTGA': 3453, 'TCCTGC': 3454, 'TCCTGG': 3455, 'TCCTGT': 3456, 'TCCTTA': 3457, 'TCCTTC': 3458, 'TCCTTG': 3459, 'TCCTTT': 3460, 'TCGAAA': 3461, 'TCGAAC': 3462, 'TCGAAG': 3463, 'TCGAAT': 3464, 'TCGACA': 3465, 'TCGACC': 3466, 'TCGACG': 3467, 'TCGACT': 3468, 'TCGAGA': 3469, 'TCGAGC': 3470, 'TCGAGG': 3471, 'TCGAGT': 3472, 'TCGATA': 3473, 'TCGATC': 3474, 'TCGATG': 3475, 'TCGATT': 3476, 'TCGCAA': 3477, 'TCGCAC': 3478, 'TCGCAG': 3479, 'TCGCAT': 3480, 'TCGCCA': 3481, 'TCGCCC': 3482, 'TCGCCG': 3483, 'TCGCCT': 3484, 'TCGCGA': 3485, 'TCGCGC': 3486, 'TCGCGG': 3487, 'TCGCGT': 3488, 'TCGCTA': 3489, 'TCGCTC': 3490, 'TCGCTG': 3491, 'TCGCTT': 3492, 'TCGGAA': 3493, 'TCGGAC': 3494, 'TCGGAG': 3495, 'TCGGAT': 3496, 'TCGGCA': 3497, 'TCGGCC': 3498, 'TCGGCG': 3499, 'TCGGCT': 3500, 'TCGGGA': 3501, 'TCGGGC': 3502, 'TCGGGG': 3503, 'TCGGGT': 3504, 'TCGGTA': 3505, 'TCGGTC': 3506, 'TCGGTG': 3507, 'TCGGTT': 3508, 'TCGTAA': 3509, 'TCGTAC': 3510, 'TCGTAG': 3511, 'TCGTAT': 3512, 'TCGTCA': 3513, 'TCGTCC': 3514, 'TCGTCG': 3515, 'TCGTCT': 3516, 'TCGTGA': 3517, 'TCGTGC': 3518, 'TCGTGG': 3519, 'TCGTGT': 3520, 'TCGTTA': 3521, 'TCGTTC': 3522, 'TCGTTG': 3523, 'TCGTTT': 3524, 'TCTAAA': 3525, 'TCTAAC': 3526, 'TCTAAG': 3527, 'TCTAAT': 3528, 'TCTACA': 3529, 'TCTACC': 3530, 'TCTACG': 3531, 'TCTACT': 3532, 'TCTAGA': 3533, 'TCTAGC': 3534, 'TCTAGG': 3535, 'TCTAGT': 3536, 'TCTATA': 3537, 'TCTATC': 3538, 'TCTATG': 3539, 'TCTATT': 3540, 'TCTCAA': 3541, 'TCTCAC': 3542, 'TCTCAG': 3543, 'TCTCAT': 3544, 'TCTCCA': 3545, 'TCTCCC': 3546, 'TCTCCG': 3547, 'TCTCCT': 3548, 'TCTCGA': 3549, 'TCTCGC': 3550, 'TCTCGG': 3551, 'TCTCGT': 3552, 'TCTCTA': 3553, 'TCTCTC': 3554, 'TCTCTG': 3555, 'TCTCTT': 3556, 'TCTGAA': 3557, 'TCTGAC': 3558, 'TCTGAG': 3559, 'TCTGAT': 3560, 'TCTGCA': 3561, 'TCTGCC': 3562, 'TCTGCG': 3563, 'TCTGCT': 3564, 'TCTGGA': 3565, 'TCTGGC': 3566, 'TCTGGG': 3567, 'TCTGGT': 3568, 'TCTGTA': 3569, 'TCTGTC': 3570, 'TCTGTG': 3571, 'TCTGTT': 3572, 'TCTTAA': 3573, 'TCTTAC': 3574, 'TCTTAG': 3575, 'TCTTAT': 3576, 'TCTTCA': 3577, 'TCTTCC': 3578, 'TCTTCG': 3579, 'TCTTCT': 3580, 'TCTTGA': 3581, 'TCTTGC': 3582, 'TCTTGG': 3583, 'TCTTGT': 3584, 'TCTTTA': 3585, 'TCTTTC': 3586, 'TCTTTG': 3587, 'TCTTTT': 3588, 'TGAAAA': 3589, 'TGAAAC': 3590, 'TGAAAG': 3591, 'TGAAAT': 3592, 'TGAACA': 3593, 'TGAACC': 3594, 'TGAACG': 3595, 'TGAACT': 3596, 'TGAAGA': 3597, 'TGAAGC': 3598, 'TGAAGG': 3599, 'TGAAGT': 3600, 'TGAATA': 3601, 'TGAATC': 3602, 'TGAATG': 3603, 'TGAATT': 3604, 'TGACAA': 3605, 'TGACAC': 3606, 'TGACAG': 3607, 'TGACAT': 3608, 'TGACCA': 3609, 'TGACCC': 3610, 'TGACCG': 3611, 'TGACCT': 3612, 'TGACGA': 3613, 'TGACGC': 3614, 'TGACGG': 3615, 'TGACGT': 3616, 'TGACTA': 3617, 'TGACTC': 3618, 'TGACTG': 3619, 'TGACTT': 3620, 'TGAGAA': 3621, 'TGAGAC': 3622, 'TGAGAG': 3623, 'TGAGAT': 3624, 'TGAGCA': 3625, 'TGAGCC': 3626, 'TGAGCG': 3627, 'TGAGCT': 3628, 'TGAGGA': 3629, 'TGAGGC': 3630, 'TGAGGG': 3631, 'TGAGGT': 3632, 'TGAGTA': 3633, 'TGAGTC': 3634, 'TGAGTG': 3635, 'TGAGTT': 3636, 'TGATAA': 3637, 'TGATAC': 3638, 'TGATAG': 3639, 'TGATAT': 3640, 'TGATCA': 3641, 'TGATCC': 3642, 'TGATCG': 3643, 'TGATCT': 3644, 'TGATGA': 3645, 'TGATGC': 3646, 'TGATGG': 3647, 'TGATGT': 3648, 'TGATTA': 3649, 'TGATTC': 3650, 'TGATTG': 3651, 'TGATTT': 3652, 'TGCAAA': 3653, 'TGCAAC': 3654, 'TGCAAG': 3655, 'TGCAAT': 3656, 'TGCACA': 3657, 'TGCACC': 3658, 'TGCACG': 3659, 'TGCACT': 3660, 'TGCAGA': 3661, 'TGCAGC': 3662, 'TGCAGG': 3663, 'TGCAGT': 3664, 'TGCATA': 3665, 'TGCATC': 3666, 'TGCATG': 3667, 'TGCATT': 3668, 'TGCCAA': 3669, 'TGCCAC': 3670, 'TGCCAG': 3671, 'TGCCAT': 3672, 'TGCCCA': 3673, 'TGCCCC': 3674, 'TGCCCG': 3675, 'TGCCCT': 3676, 'TGCCGA': 3677, 'TGCCGC': 3678, 'TGCCGG': 3679, 'TGCCGT': 3680, 'TGCCTA': 3681, 'TGCCTC': 3682, 'TGCCTG': 3683, 'TGCCTT': 3684, 'TGCGAA': 3685, 'TGCGAC': 3686, 'TGCGAG': 3687, 'TGCGAT': 3688, 'TGCGCA': 3689, 'TGCGCC': 3690, 'TGCGCG': 3691, 'TGCGCT': 3692, 'TGCGGA': 3693, 'TGCGGC': 3694, 'TGCGGG': 3695, 'TGCGGT': 3696, 'TGCGTA': 3697, 'TGCGTC': 3698, 'TGCGTG': 3699, 'TGCGTT': 3700, 'TGCTAA': 3701, 'TGCTAC': 3702, 'TGCTAG': 3703, 'TGCTAT': 3704, 'TGCTCA': 3705, 'TGCTCC': 3706, 'TGCTCG': 3707, 'TGCTCT': 3708, 'TGCTGA': 3709, 'TGCTGC': 3710, 'TGCTGG': 3711, 'TGCTGT': 3712, 'TGCTTA': 3713, 'TGCTTC': 3714, 'TGCTTG': 3715, 'TGCTTT': 3716, 'TGGAAA': 3717, 'TGGAAC': 3718, 'TGGAAG': 3719, 'TGGAAT': 3720, 'TGGACA': 3721, 'TGGACC': 3722, 'TGGACG': 3723, 'TGGACT': 3724, 'TGGAGA': 3725, 'TGGAGC': 3726, 'TGGAGG': 3727, 'TGGAGT': 3728, 'TGGATA': 3729, 'TGGATC': 3730, 'TGGATG': 3731, 'TGGATT': 3732, 'TGGCAA': 3733, 'TGGCAC': 3734, 'TGGCAG': 3735, 'TGGCAT': 3736, 'TGGCCA': 3737, 'TGGCCC': 3738, 'TGGCCG': 3739, 'TGGCCT': 3740, 'TGGCGA': 3741, 'TGGCGC': 3742, 'TGGCGG': 3743, 'TGGCGT': 3744, 'TGGCTA': 3745, 'TGGCTC': 3746, 'TGGCTG': 3747, 'TGGCTT': 3748, 'TGGGAA': 3749, 'TGGGAC': 3750, 'TGGGAG': 3751, 'TGGGAT': 3752, 'TGGGCA': 3753, 'TGGGCC': 3754, 'TGGGCG': 3755, 'TGGGCT': 3756, 'TGGGGA': 3757, 'TGGGGC': 3758, 'TGGGGG': 3759, 'TGGGGT': 3760, 'TGGGTA': 3761, 'TGGGTC': 3762, 'TGGGTG': 3763, 'TGGGTT': 3764, 'TGGTAA': 3765, 'TGGTAC': 3766, 'TGGTAG': 3767, 'TGGTAT': 3768, 'TGGTCA': 3769, 'TGGTCC': 3770, 'TGGTCG': 3771, 'TGGTCT': 3772, 'TGGTGA': 3773, 'TGGTGC': 3774, 'TGGTGG': 3775, 'TGGTGT': 3776, 'TGGTTA': 3777, 'TGGTTC': 3778, 'TGGTTG': 3779, 'TGGTTT': 3780, 'TGTAAA': 3781, 'TGTAAC': 3782, 'TGTAAG': 3783, 'TGTAAT': 3784, 'TGTACA': 3785, 'TGTACC': 3786, 'TGTACG': 3787, 'TGTACT': 3788, 'TGTAGA': 3789, 'TGTAGC': 3790, 'TGTAGG': 3791, 'TGTAGT': 3792, 'TGTATA': 3793, 'TGTATC': 3794, 'TGTATG': 3795, 'TGTATT': 3796, 'TGTCAA': 3797, 'TGTCAC': 3798, 'TGTCAG': 3799, 'TGTCAT': 3800, 'TGTCCA': 3801, 'TGTCCC': 3802, 'TGTCCG': 3803, 'TGTCCT': 3804, 'TGTCGA': 3805, 'TGTCGC': 3806, 'TGTCGG': 3807, 'TGTCGT': 3808, 'TGTCTA': 3809, 'TGTCTC': 3810, 'TGTCTG': 3811, 'TGTCTT': 3812, 'TGTGAA': 3813, 'TGTGAC': 3814, 'TGTGAG': 3815, 'TGTGAT': 3816, 'TGTGCA': 3817, 'TGTGCC': 3818, 'TGTGCG': 3819, 'TGTGCT': 3820, 'TGTGGA': 3821, 'TGTGGC': 3822, 'TGTGGG': 3823, 'TGTGGT': 3824, 'TGTGTA': 3825, 'TGTGTC': 3826, 'TGTGTG': 3827, 'TGTGTT': 3828, 'TGTTAA': 3829, 'TGTTAC': 3830, 'TGTTAG': 3831, 'TGTTAT': 3832, 'TGTTCA': 3833, 'TGTTCC': 3834, 'TGTTCG': 3835, 'TGTTCT': 3836, 'TGTTGA': 3837, 'TGTTGC': 3838, 'TGTTGG': 3839, 'TGTTGT': 3840, 'TGTTTA': 3841, 'TGTTTC': 3842, 'TGTTTG': 3843, 'TGTTTT': 3844, 'TTAAAA': 3845, 'TTAAAC': 3846, 'TTAAAG': 3847, 'TTAAAT': 3848, 'TTAACA': 3849, 'TTAACC': 3850, 'TTAACG': 3851, 'TTAACT': 3852, 'TTAAGA': 3853, 'TTAAGC': 3854, 'TTAAGG': 3855, 'TTAAGT': 3856, 'TTAATA': 3857, 'TTAATC': 3858, 'TTAATG': 3859, 'TTAATT': 3860, 'TTACAA': 3861, 'TTACAC': 3862, 'TTACAG': 3863, 'TTACAT': 3864, 'TTACCA': 3865, 'TTACCC': 3866, 'TTACCG': 3867, 'TTACCT': 3868, 'TTACGA': 3869, 'TTACGC': 3870, 'TTACGG': 3871, 'TTACGT': 3872, 'TTACTA': 3873, 'TTACTC': 3874, 'TTACTG': 3875, 'TTACTT': 3876, 'TTAGAA': 3877, 'TTAGAC': 3878, 'TTAGAG': 3879, 'TTAGAT': 3880, 'TTAGCA': 3881, 'TTAGCC': 3882, 'TTAGCG': 3883, 'TTAGCT': 3884, 'TTAGGA': 3885, 'TTAGGC': 3886, 'TTAGGG': 3887, 'TTAGGT': 3888, 'TTAGTA': 3889, 'TTAGTC': 3890, 'TTAGTG': 3891, 'TTAGTT': 3892, 'TTATAA': 3893, 'TTATAC': 3894, 'TTATAG': 3895, 'TTATAT': 3896, 'TTATCA': 3897, 'TTATCC': 3898, 'TTATCG': 3899, 'TTATCT': 3900, 'TTATGA': 3901, 'TTATGC': 3902, 'TTATGG': 3903, 'TTATGT': 3904, 'TTATTA': 3905, 'TTATTC': 3906, 'TTATTG': 3907, 'TTATTT': 3908, 'TTCAAA': 3909, 'TTCAAC': 3910, 'TTCAAG': 3911, 'TTCAAT': 3912, 'TTCACA': 3913, 'TTCACC': 3914, 'TTCACG': 3915, 'TTCACT': 3916, 'TTCAGA': 3917, 'TTCAGC': 3918, 'TTCAGG': 3919, 'TTCAGT': 3920, 'TTCATA': 3921, 'TTCATC': 3922, 'TTCATG': 3923, 'TTCATT': 3924, 'TTCCAA': 3925, 'TTCCAC': 3926, 'TTCCAG': 3927, 'TTCCAT': 3928, 'TTCCCA': 3929, 'TTCCCC': 3930, 'TTCCCG': 3931, 'TTCCCT': 3932, 'TTCCGA': 3933, 'TTCCGC': 3934, 'TTCCGG': 3935, 'TTCCGT': 3936, 'TTCCTA': 3937, 'TTCCTC': 3938, 'TTCCTG': 3939, 'TTCCTT': 3940, 'TTCGAA': 3941, 'TTCGAC': 3942, 'TTCGAG': 3943, 'TTCGAT': 3944, 'TTCGCA': 3945, 'TTCGCC': 3946, 'TTCGCG': 3947, 'TTCGCT': 3948, 'TTCGGA': 3949, 'TTCGGC': 3950, 'TTCGGG': 3951, 'TTCGGT': 3952, 'TTCGTA': 3953, 'TTCGTC': 3954, 'TTCGTG': 3955, 'TTCGTT': 3956, 'TTCTAA': 3957, 'TTCTAC': 3958, 'TTCTAG': 3959, 'TTCTAT': 3960, 'TTCTCA': 3961, 'TTCTCC': 3962, 'TTCTCG': 3963, 'TTCTCT': 3964, 'TTCTGA': 3965, 'TTCTGC': 3966, 'TTCTGG': 3967, 'TTCTGT': 3968, 'TTCTTA': 3969, 'TTCTTC': 3970, 'TTCTTG': 3971, 'TTCTTT': 3972, 'TTGAAA': 3973, 'TTGAAC': 3974, 'TTGAAG': 3975, 'TTGAAT': 3976, 'TTGACA': 3977, 'TTGACC': 3978, 'TTGACG': 3979, 'TTGACT': 3980, 'TTGAGA': 3981, 'TTGAGC': 3982, 'TTGAGG': 3983, 'TTGAGT': 3984, 'TTGATA': 3985, 'TTGATC': 3986, 'TTGATG': 3987, 'TTGATT': 3988, 'TTGCAA': 3989, 'TTGCAC': 3990, 'TTGCAG': 3991, 'TTGCAT': 3992, 'TTGCCA': 3993, 'TTGCCC': 3994, 'TTGCCG': 3995, 'TTGCCT': 3996, 'TTGCGA': 3997, 'TTGCGC': 3998, 'TTGCGG': 3999, 'TTGCGT': 4000, 'TTGCTA': 4001, 'TTGCTC': 4002, 'TTGCTG': 4003, 'TTGCTT': 4004, 'TTGGAA': 4005, 'TTGGAC': 4006, 'TTGGAG': 4007, 'TTGGAT': 4008, 'TTGGCA': 4009, 'TTGGCC': 4010, 'TTGGCG': 4011, 'TTGGCT': 4012, 'TTGGGA': 4013, 'TTGGGC': 4014, 'TTGGGG': 4015, 'TTGGGT': 4016, 'TTGGTA': 4017, 'TTGGTC': 4018, 'TTGGTG': 4019, 'TTGGTT': 4020, 'TTGTAA': 4021, 'TTGTAC': 4022, 'TTGTAG': 4023, 'TTGTAT': 4024, 'TTGTCA': 4025, 'TTGTCC': 4026, 'TTGTCG': 4027, 'TTGTCT': 4028, 'TTGTGA': 4029, 'TTGTGC': 4030, 'TTGTGG': 4031, 'TTGTGT': 4032, 'TTGTTA': 4033, 'TTGTTC': 4034, 'TTGTTG': 4035, 'TTGTTT': 4036, 'TTTAAA': 4037, 'TTTAAC': 4038, 'TTTAAG': 4039, 'TTTAAT': 4040, 'TTTACA': 4041, 'TTTACC': 4042, 'TTTACG': 4043, 'TTTACT': 4044, 'TTTAGA': 4045, 'TTTAGC': 4046, 'TTTAGG': 4047, 'TTTAGT': 4048, 'TTTATA': 4049, 'TTTATC': 4050, 'TTTATG': 4051, 'TTTATT': 4052, 'TTTCAA': 4053, 'TTTCAC': 4054, 'TTTCAG': 4055, 'TTTCAT': 4056, 'TTTCCA': 4057, 'TTTCCC': 4058, 'TTTCCG': 4059, 'TTTCCT': 4060, 'TTTCGA': 4061, 'TTTCGC': 4062, 'TTTCGG': 4063, 'TTTCGT': 4064, 'TTTCTA': 4065, 'TTTCTC': 4066, 'TTTCTG': 4067, 'TTTCTT': 4068, 'TTTGAA': 4069, 'TTTGAC': 4070, 'TTTGAG': 4071, 'TTTGAT': 4072, 'TTTGCA': 4073, 'TTTGCC': 4074, 'TTTGCG': 4075, 'TTTGCT': 4076, 'TTTGGA': 4077, 'TTTGGC': 4078, 'TTTGGG': 4079, 'TTTGGT': 4080, 'TTTGTA': 4081, 'TTTGTC': 4082, 'TTTGTG': 4083, 'TTTGTT': 4084, 'TTTTAA': 4085, 'TTTTAC': 4086, 'TTTTAG': 4087, 'TTTTAT': 4088, 'TTTTCA': 4089, 'TTTTCC': 4090, 'TTTTCG': 4091, 'TTTTCT': 4092, 'TTTTGA': 4093, 'TTTTGC': 4094, 'TTTTGG': 4095, 'TTTTGT': 4096, 'TTTTTA': 4097, 'TTTTTC': 4098, 'TTTTTG': 4099, 'TTTTTT': 4100}}\n",
-      "/home/ligeti/github/prokbert/src/prokbert\n",
-      "{'type': 'lca', 'kmer': 6, 'shift': 3, 'max_segment_length': 1027, 'token_limit': 41, 'max_unknown_token_proportion': 0, 'vocabfile': '/home/ligeti/github/prokbert/src/prokbert/data/prokbert_vocabs/prokbert-base-dna6/vocab.txt', 'isPaddingToMaxLength': False, 'vocabmap': {'[PAD]': 0, '[UNK]': 1, '[CLS]': 2, '[SEP]': 3, '[MASK]': 4, 'AAAAAA': 5, 'AAAAAC': 6, 'AAAAAG': 7, 'AAAAAT': 8, 'AAAACA': 9, 'AAAACC': 10, 'AAAACG': 11, 'AAAACT': 12, 'AAAAGA': 13, 'AAAAGC': 14, 'AAAAGG': 15, 'AAAAGT': 16, 'AAAATA': 17, 'AAAATC': 18, 'AAAATG': 19, 'AAAATT': 20, 'AAACAA': 21, 'AAACAC': 22, 'AAACAG': 23, 'AAACAT': 24, 'AAACCA': 25, 'AAACCC': 26, 'AAACCG': 27, 'AAACCT': 28, 'AAACGA': 29, 'AAACGC': 30, 'AAACGG': 31, 'AAACGT': 32, 'AAACTA': 33, 'AAACTC': 34, 'AAACTG': 35, 'AAACTT': 36, 'AAAGAA': 37, 'AAAGAC': 38, 'AAAGAG': 39, 'AAAGAT': 40, 'AAAGCA': 41, 'AAAGCC': 42, 'AAAGCG': 43, 'AAAGCT': 44, 'AAAGGA': 45, 'AAAGGC': 46, 'AAAGGG': 47, 'AAAGGT': 48, 'AAAGTA': 49, 'AAAGTC': 50, 'AAAGTG': 51, 'AAAGTT': 52, 'AAATAA': 53, 'AAATAC': 54, 'AAATAG': 55, 'AAATAT': 56, 'AAATCA': 57, 'AAATCC': 58, 'AAATCG': 59, 'AAATCT': 60, 'AAATGA': 61, 'AAATGC': 62, 'AAATGG': 63, 'AAATGT': 64, 'AAATTA': 65, 'AAATTC': 66, 'AAATTG': 67, 'AAATTT': 68, 'AACAAA': 69, 'AACAAC': 70, 'AACAAG': 71, 'AACAAT': 72, 'AACACA': 73, 'AACACC': 74, 'AACACG': 75, 'AACACT': 76, 'AACAGA': 77, 'AACAGC': 78, 'AACAGG': 79, 'AACAGT': 80, 'AACATA': 81, 'AACATC': 82, 'AACATG': 83, 'AACATT': 84, 'AACCAA': 85, 'AACCAC': 86, 'AACCAG': 87, 'AACCAT': 88, 'AACCCA': 89, 'AACCCC': 90, 'AACCCG': 91, 'AACCCT': 92, 'AACCGA': 93, 'AACCGC': 94, 'AACCGG': 95, 'AACCGT': 96, 'AACCTA': 97, 'AACCTC': 98, 'AACCTG': 99, 'AACCTT': 100, 'AACGAA': 101, 'AACGAC': 102, 'AACGAG': 103, 'AACGAT': 104, 'AACGCA': 105, 'AACGCC': 106, 'AACGCG': 107, 'AACGCT': 108, 'AACGGA': 109, 'AACGGC': 110, 'AACGGG': 111, 'AACGGT': 112, 'AACGTA': 113, 'AACGTC': 114, 'AACGTG': 115, 'AACGTT': 116, 'AACTAA': 117, 'AACTAC': 118, 'AACTAG': 119, 'AACTAT': 120, 'AACTCA': 121, 'AACTCC': 122, 'AACTCG': 123, 'AACTCT': 124, 'AACTGA': 125, 'AACTGC': 126, 'AACTGG': 127, 'AACTGT': 128, 'AACTTA': 129, 'AACTTC': 130, 'AACTTG': 131, 'AACTTT': 132, 'AAGAAA': 133, 'AAGAAC': 134, 'AAGAAG': 135, 'AAGAAT': 136, 'AAGACA': 137, 'AAGACC': 138, 'AAGACG': 139, 'AAGACT': 140, 'AAGAGA': 141, 'AAGAGC': 142, 'AAGAGG': 143, 'AAGAGT': 144, 'AAGATA': 145, 'AAGATC': 146, 'AAGATG': 147, 'AAGATT': 148, 'AAGCAA': 149, 'AAGCAC': 150, 'AAGCAG': 151, 'AAGCAT': 152, 'AAGCCA': 153, 'AAGCCC': 154, 'AAGCCG': 155, 'AAGCCT': 156, 'AAGCGA': 157, 'AAGCGC': 158, 'AAGCGG': 159, 'AAGCGT': 160, 'AAGCTA': 161, 'AAGCTC': 162, 'AAGCTG': 163, 'AAGCTT': 164, 'AAGGAA': 165, 'AAGGAC': 166, 'AAGGAG': 167, 'AAGGAT': 168, 'AAGGCA': 169, 'AAGGCC': 170, 'AAGGCG': 171, 'AAGGCT': 172, 'AAGGGA': 173, 'AAGGGC': 174, 'AAGGGG': 175, 'AAGGGT': 176, 'AAGGTA': 177, 'AAGGTC': 178, 'AAGGTG': 179, 'AAGGTT': 180, 'AAGTAA': 181, 'AAGTAC': 182, 'AAGTAG': 183, 'AAGTAT': 184, 'AAGTCA': 185, 'AAGTCC': 186, 'AAGTCG': 187, 'AAGTCT': 188, 'AAGTGA': 189, 'AAGTGC': 190, 'AAGTGG': 191, 'AAGTGT': 192, 'AAGTTA': 193, 'AAGTTC': 194, 'AAGTTG': 195, 'AAGTTT': 196, 'AATAAA': 197, 'AATAAC': 198, 'AATAAG': 199, 'AATAAT': 200, 'AATACA': 201, 'AATACC': 202, 'AATACG': 203, 'AATACT': 204, 'AATAGA': 205, 'AATAGC': 206, 'AATAGG': 207, 'AATAGT': 208, 'AATATA': 209, 'AATATC': 210, 'AATATG': 211, 'AATATT': 212, 'AATCAA': 213, 'AATCAC': 214, 'AATCAG': 215, 'AATCAT': 216, 'AATCCA': 217, 'AATCCC': 218, 'AATCCG': 219, 'AATCCT': 220, 'AATCGA': 221, 'AATCGC': 222, 'AATCGG': 223, 'AATCGT': 224, 'AATCTA': 225, 'AATCTC': 226, 'AATCTG': 227, 'AATCTT': 228, 'AATGAA': 229, 'AATGAC': 230, 'AATGAG': 231, 'AATGAT': 232, 'AATGCA': 233, 'AATGCC': 234, 'AATGCG': 235, 'AATGCT': 236, 'AATGGA': 237, 'AATGGC': 238, 'AATGGG': 239, 'AATGGT': 240, 'AATGTA': 241, 'AATGTC': 242, 'AATGTG': 243, 'AATGTT': 244, 'AATTAA': 245, 'AATTAC': 246, 'AATTAG': 247, 'AATTAT': 248, 'AATTCA': 249, 'AATTCC': 250, 'AATTCG': 251, 'AATTCT': 252, 'AATTGA': 253, 'AATTGC': 254, 'AATTGG': 255, 'AATTGT': 256, 'AATTTA': 257, 'AATTTC': 258, 'AATTTG': 259, 'AATTTT': 260, 'ACAAAA': 261, 'ACAAAC': 262, 'ACAAAG': 263, 'ACAAAT': 264, 'ACAACA': 265, 'ACAACC': 266, 'ACAACG': 267, 'ACAACT': 268, 'ACAAGA': 269, 'ACAAGC': 270, 'ACAAGG': 271, 'ACAAGT': 272, 'ACAATA': 273, 'ACAATC': 274, 'ACAATG': 275, 'ACAATT': 276, 'ACACAA': 277, 'ACACAC': 278, 'ACACAG': 279, 'ACACAT': 280, 'ACACCA': 281, 'ACACCC': 282, 'ACACCG': 283, 'ACACCT': 284, 'ACACGA': 285, 'ACACGC': 286, 'ACACGG': 287, 'ACACGT': 288, 'ACACTA': 289, 'ACACTC': 290, 'ACACTG': 291, 'ACACTT': 292, 'ACAGAA': 293, 'ACAGAC': 294, 'ACAGAG': 295, 'ACAGAT': 296, 'ACAGCA': 297, 'ACAGCC': 298, 'ACAGCG': 299, 'ACAGCT': 300, 'ACAGGA': 301, 'ACAGGC': 302, 'ACAGGG': 303, 'ACAGGT': 304, 'ACAGTA': 305, 'ACAGTC': 306, 'ACAGTG': 307, 'ACAGTT': 308, 'ACATAA': 309, 'ACATAC': 310, 'ACATAG': 311, 'ACATAT': 312, 'ACATCA': 313, 'ACATCC': 314, 'ACATCG': 315, 'ACATCT': 316, 'ACATGA': 317, 'ACATGC': 318, 'ACATGG': 319, 'ACATGT': 320, 'ACATTA': 321, 'ACATTC': 322, 'ACATTG': 323, 'ACATTT': 324, 'ACCAAA': 325, 'ACCAAC': 326, 'ACCAAG': 327, 'ACCAAT': 328, 'ACCACA': 329, 'ACCACC': 330, 'ACCACG': 331, 'ACCACT': 332, 'ACCAGA': 333, 'ACCAGC': 334, 'ACCAGG': 335, 'ACCAGT': 336, 'ACCATA': 337, 'ACCATC': 338, 'ACCATG': 339, 'ACCATT': 340, 'ACCCAA': 341, 'ACCCAC': 342, 'ACCCAG': 343, 'ACCCAT': 344, 'ACCCCA': 345, 'ACCCCC': 346, 'ACCCCG': 347, 'ACCCCT': 348, 'ACCCGA': 349, 'ACCCGC': 350, 'ACCCGG': 351, 'ACCCGT': 352, 'ACCCTA': 353, 'ACCCTC': 354, 'ACCCTG': 355, 'ACCCTT': 356, 'ACCGAA': 357, 'ACCGAC': 358, 'ACCGAG': 359, 'ACCGAT': 360, 'ACCGCA': 361, 'ACCGCC': 362, 'ACCGCG': 363, 'ACCGCT': 364, 'ACCGGA': 365, 'ACCGGC': 366, 'ACCGGG': 367, 'ACCGGT': 368, 'ACCGTA': 369, 'ACCGTC': 370, 'ACCGTG': 371, 'ACCGTT': 372, 'ACCTAA': 373, 'ACCTAC': 374, 'ACCTAG': 375, 'ACCTAT': 376, 'ACCTCA': 377, 'ACCTCC': 378, 'ACCTCG': 379, 'ACCTCT': 380, 'ACCTGA': 381, 'ACCTGC': 382, 'ACCTGG': 383, 'ACCTGT': 384, 'ACCTTA': 385, 'ACCTTC': 386, 'ACCTTG': 387, 'ACCTTT': 388, 'ACGAAA': 389, 'ACGAAC': 390, 'ACGAAG': 391, 'ACGAAT': 392, 'ACGACA': 393, 'ACGACC': 394, 'ACGACG': 395, 'ACGACT': 396, 'ACGAGA': 397, 'ACGAGC': 398, 'ACGAGG': 399, 'ACGAGT': 400, 'ACGATA': 401, 'ACGATC': 402, 'ACGATG': 403, 'ACGATT': 404, 'ACGCAA': 405, 'ACGCAC': 406, 'ACGCAG': 407, 'ACGCAT': 408, 'ACGCCA': 409, 'ACGCCC': 410, 'ACGCCG': 411, 'ACGCCT': 412, 'ACGCGA': 413, 'ACGCGC': 414, 'ACGCGG': 415, 'ACGCGT': 416, 'ACGCTA': 417, 'ACGCTC': 418, 'ACGCTG': 419, 'ACGCTT': 420, 'ACGGAA': 421, 'ACGGAC': 422, 'ACGGAG': 423, 'ACGGAT': 424, 'ACGGCA': 425, 'ACGGCC': 426, 'ACGGCG': 427, 'ACGGCT': 428, 'ACGGGA': 429, 'ACGGGC': 430, 'ACGGGG': 431, 'ACGGGT': 432, 'ACGGTA': 433, 'ACGGTC': 434, 'ACGGTG': 435, 'ACGGTT': 436, 'ACGTAA': 437, 'ACGTAC': 438, 'ACGTAG': 439, 'ACGTAT': 440, 'ACGTCA': 441, 'ACGTCC': 442, 'ACGTCG': 443, 'ACGTCT': 444, 'ACGTGA': 445, 'ACGTGC': 446, 'ACGTGG': 447, 'ACGTGT': 448, 'ACGTTA': 449, 'ACGTTC': 450, 'ACGTTG': 451, 'ACGTTT': 452, 'ACTAAA': 453, 'ACTAAC': 454, 'ACTAAG': 455, 'ACTAAT': 456, 'ACTACA': 457, 'ACTACC': 458, 'ACTACG': 459, 'ACTACT': 460, 'ACTAGA': 461, 'ACTAGC': 462, 'ACTAGG': 463, 'ACTAGT': 464, 'ACTATA': 465, 'ACTATC': 466, 'ACTATG': 467, 'ACTATT': 468, 'ACTCAA': 469, 'ACTCAC': 470, 'ACTCAG': 471, 'ACTCAT': 472, 'ACTCCA': 473, 'ACTCCC': 474, 'ACTCCG': 475, 'ACTCCT': 476, 'ACTCGA': 477, 'ACTCGC': 478, 'ACTCGG': 479, 'ACTCGT': 480, 'ACTCTA': 481, 'ACTCTC': 482, 'ACTCTG': 483, 'ACTCTT': 484, 'ACTGAA': 485, 'ACTGAC': 486, 'ACTGAG': 487, 'ACTGAT': 488, 'ACTGCA': 489, 'ACTGCC': 490, 'ACTGCG': 491, 'ACTGCT': 492, 'ACTGGA': 493, 'ACTGGC': 494, 'ACTGGG': 495, 'ACTGGT': 496, 'ACTGTA': 497, 'ACTGTC': 498, 'ACTGTG': 499, 'ACTGTT': 500, 'ACTTAA': 501, 'ACTTAC': 502, 'ACTTAG': 503, 'ACTTAT': 504, 'ACTTCA': 505, 'ACTTCC': 506, 'ACTTCG': 507, 'ACTTCT': 508, 'ACTTGA': 509, 'ACTTGC': 510, 'ACTTGG': 511, 'ACTTGT': 512, 'ACTTTA': 513, 'ACTTTC': 514, 'ACTTTG': 515, 'ACTTTT': 516, 'AGAAAA': 517, 'AGAAAC': 518, 'AGAAAG': 519, 'AGAAAT': 520, 'AGAACA': 521, 'AGAACC': 522, 'AGAACG': 523, 'AGAACT': 524, 'AGAAGA': 525, 'AGAAGC': 526, 'AGAAGG': 527, 'AGAAGT': 528, 'AGAATA': 529, 'AGAATC': 530, 'AGAATG': 531, 'AGAATT': 532, 'AGACAA': 533, 'AGACAC': 534, 'AGACAG': 535, 'AGACAT': 536, 'AGACCA': 537, 'AGACCC': 538, 'AGACCG': 539, 'AGACCT': 540, 'AGACGA': 541, 'AGACGC': 542, 'AGACGG': 543, 'AGACGT': 544, 'AGACTA': 545, 'AGACTC': 546, 'AGACTG': 547, 'AGACTT': 548, 'AGAGAA': 549, 'AGAGAC': 550, 'AGAGAG': 551, 'AGAGAT': 552, 'AGAGCA': 553, 'AGAGCC': 554, 'AGAGCG': 555, 'AGAGCT': 556, 'AGAGGA': 557, 'AGAGGC': 558, 'AGAGGG': 559, 'AGAGGT': 560, 'AGAGTA': 561, 'AGAGTC': 562, 'AGAGTG': 563, 'AGAGTT': 564, 'AGATAA': 565, 'AGATAC': 566, 'AGATAG': 567, 'AGATAT': 568, 'AGATCA': 569, 'AGATCC': 570, 'AGATCG': 571, 'AGATCT': 572, 'AGATGA': 573, 'AGATGC': 574, 'AGATGG': 575, 'AGATGT': 576, 'AGATTA': 577, 'AGATTC': 578, 'AGATTG': 579, 'AGATTT': 580, 'AGCAAA': 581, 'AGCAAC': 582, 'AGCAAG': 583, 'AGCAAT': 584, 'AGCACA': 585, 'AGCACC': 586, 'AGCACG': 587, 'AGCACT': 588, 'AGCAGA': 589, 'AGCAGC': 590, 'AGCAGG': 591, 'AGCAGT': 592, 'AGCATA': 593, 'AGCATC': 594, 'AGCATG': 595, 'AGCATT': 596, 'AGCCAA': 597, 'AGCCAC': 598, 'AGCCAG': 599, 'AGCCAT': 600, 'AGCCCA': 601, 'AGCCCC': 602, 'AGCCCG': 603, 'AGCCCT': 604, 'AGCCGA': 605, 'AGCCGC': 606, 'AGCCGG': 607, 'AGCCGT': 608, 'AGCCTA': 609, 'AGCCTC': 610, 'AGCCTG': 611, 'AGCCTT': 612, 'AGCGAA': 613, 'AGCGAC': 614, 'AGCGAG': 615, 'AGCGAT': 616, 'AGCGCA': 617, 'AGCGCC': 618, 'AGCGCG': 619, 'AGCGCT': 620, 'AGCGGA': 621, 'AGCGGC': 622, 'AGCGGG': 623, 'AGCGGT': 624, 'AGCGTA': 625, 'AGCGTC': 626, 'AGCGTG': 627, 'AGCGTT': 628, 'AGCTAA': 629, 'AGCTAC': 630, 'AGCTAG': 631, 'AGCTAT': 632, 'AGCTCA': 633, 'AGCTCC': 634, 'AGCTCG': 635, 'AGCTCT': 636, 'AGCTGA': 637, 'AGCTGC': 638, 'AGCTGG': 639, 'AGCTGT': 640, 'AGCTTA': 641, 'AGCTTC': 642, 'AGCTTG': 643, 'AGCTTT': 644, 'AGGAAA': 645, 'AGGAAC': 646, 'AGGAAG': 647, 'AGGAAT': 648, 'AGGACA': 649, 'AGGACC': 650, 'AGGACG': 651, 'AGGACT': 652, 'AGGAGA': 653, 'AGGAGC': 654, 'AGGAGG': 655, 'AGGAGT': 656, 'AGGATA': 657, 'AGGATC': 658, 'AGGATG': 659, 'AGGATT': 660, 'AGGCAA': 661, 'AGGCAC': 662, 'AGGCAG': 663, 'AGGCAT': 664, 'AGGCCA': 665, 'AGGCCC': 666, 'AGGCCG': 667, 'AGGCCT': 668, 'AGGCGA': 669, 'AGGCGC': 670, 'AGGCGG': 671, 'AGGCGT': 672, 'AGGCTA': 673, 'AGGCTC': 674, 'AGGCTG': 675, 'AGGCTT': 676, 'AGGGAA': 677, 'AGGGAC': 678, 'AGGGAG': 679, 'AGGGAT': 680, 'AGGGCA': 681, 'AGGGCC': 682, 'AGGGCG': 683, 'AGGGCT': 684, 'AGGGGA': 685, 'AGGGGC': 686, 'AGGGGG': 687, 'AGGGGT': 688, 'AGGGTA': 689, 'AGGGTC': 690, 'AGGGTG': 691, 'AGGGTT': 692, 'AGGTAA': 693, 'AGGTAC': 694, 'AGGTAG': 695, 'AGGTAT': 696, 'AGGTCA': 697, 'AGGTCC': 698, 'AGGTCG': 699, 'AGGTCT': 700, 'AGGTGA': 701, 'AGGTGC': 702, 'AGGTGG': 703, 'AGGTGT': 704, 'AGGTTA': 705, 'AGGTTC': 706, 'AGGTTG': 707, 'AGGTTT': 708, 'AGTAAA': 709, 'AGTAAC': 710, 'AGTAAG': 711, 'AGTAAT': 712, 'AGTACA': 713, 'AGTACC': 714, 'AGTACG': 715, 'AGTACT': 716, 'AGTAGA': 717, 'AGTAGC': 718, 'AGTAGG': 719, 'AGTAGT': 720, 'AGTATA': 721, 'AGTATC': 722, 'AGTATG': 723, 'AGTATT': 724, 'AGTCAA': 725, 'AGTCAC': 726, 'AGTCAG': 727, 'AGTCAT': 728, 'AGTCCA': 729, 'AGTCCC': 730, 'AGTCCG': 731, 'AGTCCT': 732, 'AGTCGA': 733, 'AGTCGC': 734, 'AGTCGG': 735, 'AGTCGT': 736, 'AGTCTA': 737, 'AGTCTC': 738, 'AGTCTG': 739, 'AGTCTT': 740, 'AGTGAA': 741, 'AGTGAC': 742, 'AGTGAG': 743, 'AGTGAT': 744, 'AGTGCA': 745, 'AGTGCC': 746, 'AGTGCG': 747, 'AGTGCT': 748, 'AGTGGA': 749, 'AGTGGC': 750, 'AGTGGG': 751, 'AGTGGT': 752, 'AGTGTA': 753, 'AGTGTC': 754, 'AGTGTG': 755, 'AGTGTT': 756, 'AGTTAA': 757, 'AGTTAC': 758, 'AGTTAG': 759, 'AGTTAT': 760, 'AGTTCA': 761, 'AGTTCC': 762, 'AGTTCG': 763, 'AGTTCT': 764, 'AGTTGA': 765, 'AGTTGC': 766, 'AGTTGG': 767, 'AGTTGT': 768, 'AGTTTA': 769, 'AGTTTC': 770, 'AGTTTG': 771, 'AGTTTT': 772, 'ATAAAA': 773, 'ATAAAC': 774, 'ATAAAG': 775, 'ATAAAT': 776, 'ATAACA': 777, 'ATAACC': 778, 'ATAACG': 779, 'ATAACT': 780, 'ATAAGA': 781, 'ATAAGC': 782, 'ATAAGG': 783, 'ATAAGT': 784, 'ATAATA': 785, 'ATAATC': 786, 'ATAATG': 787, 'ATAATT': 788, 'ATACAA': 789, 'ATACAC': 790, 'ATACAG': 791, 'ATACAT': 792, 'ATACCA': 793, 'ATACCC': 794, 'ATACCG': 795, 'ATACCT': 796, 'ATACGA': 797, 'ATACGC': 798, 'ATACGG': 799, 'ATACGT': 800, 'ATACTA': 801, 'ATACTC': 802, 'ATACTG': 803, 'ATACTT': 804, 'ATAGAA': 805, 'ATAGAC': 806, 'ATAGAG': 807, 'ATAGAT': 808, 'ATAGCA': 809, 'ATAGCC': 810, 'ATAGCG': 811, 'ATAGCT': 812, 'ATAGGA': 813, 'ATAGGC': 814, 'ATAGGG': 815, 'ATAGGT': 816, 'ATAGTA': 817, 'ATAGTC': 818, 'ATAGTG': 819, 'ATAGTT': 820, 'ATATAA': 821, 'ATATAC': 822, 'ATATAG': 823, 'ATATAT': 824, 'ATATCA': 825, 'ATATCC': 826, 'ATATCG': 827, 'ATATCT': 828, 'ATATGA': 829, 'ATATGC': 830, 'ATATGG': 831, 'ATATGT': 832, 'ATATTA': 833, 'ATATTC': 834, 'ATATTG': 835, 'ATATTT': 836, 'ATCAAA': 837, 'ATCAAC': 838, 'ATCAAG': 839, 'ATCAAT': 840, 'ATCACA': 841, 'ATCACC': 842, 'ATCACG': 843, 'ATCACT': 844, 'ATCAGA': 845, 'ATCAGC': 846, 'ATCAGG': 847, 'ATCAGT': 848, 'ATCATA': 849, 'ATCATC': 850, 'ATCATG': 851, 'ATCATT': 852, 'ATCCAA': 853, 'ATCCAC': 854, 'ATCCAG': 855, 'ATCCAT': 856, 'ATCCCA': 857, 'ATCCCC': 858, 'ATCCCG': 859, 'ATCCCT': 860, 'ATCCGA': 861, 'ATCCGC': 862, 'ATCCGG': 863, 'ATCCGT': 864, 'ATCCTA': 865, 'ATCCTC': 866, 'ATCCTG': 867, 'ATCCTT': 868, 'ATCGAA': 869, 'ATCGAC': 870, 'ATCGAG': 871, 'ATCGAT': 872, 'ATCGCA': 873, 'ATCGCC': 874, 'ATCGCG': 875, 'ATCGCT': 876, 'ATCGGA': 877, 'ATCGGC': 878, 'ATCGGG': 879, 'ATCGGT': 880, 'ATCGTA': 881, 'ATCGTC': 882, 'ATCGTG': 883, 'ATCGTT': 884, 'ATCTAA': 885, 'ATCTAC': 886, 'ATCTAG': 887, 'ATCTAT': 888, 'ATCTCA': 889, 'ATCTCC': 890, 'ATCTCG': 891, 'ATCTCT': 892, 'ATCTGA': 893, 'ATCTGC': 894, 'ATCTGG': 895, 'ATCTGT': 896, 'ATCTTA': 897, 'ATCTTC': 898, 'ATCTTG': 899, 'ATCTTT': 900, 'ATGAAA': 901, 'ATGAAC': 902, 'ATGAAG': 903, 'ATGAAT': 904, 'ATGACA': 905, 'ATGACC': 906, 'ATGACG': 907, 'ATGACT': 908, 'ATGAGA': 909, 'ATGAGC': 910, 'ATGAGG': 911, 'ATGAGT': 912, 'ATGATA': 913, 'ATGATC': 914, 'ATGATG': 915, 'ATGATT': 916, 'ATGCAA': 917, 'ATGCAC': 918, 'ATGCAG': 919, 'ATGCAT': 920, 'ATGCCA': 921, 'ATGCCC': 922, 'ATGCCG': 923, 'ATGCCT': 924, 'ATGCGA': 925, 'ATGCGC': 926, 'ATGCGG': 927, 'ATGCGT': 928, 'ATGCTA': 929, 'ATGCTC': 930, 'ATGCTG': 931, 'ATGCTT': 932, 'ATGGAA': 933, 'ATGGAC': 934, 'ATGGAG': 935, 'ATGGAT': 936, 'ATGGCA': 937, 'ATGGCC': 938, 'ATGGCG': 939, 'ATGGCT': 940, 'ATGGGA': 941, 'ATGGGC': 942, 'ATGGGG': 943, 'ATGGGT': 944, 'ATGGTA': 945, 'ATGGTC': 946, 'ATGGTG': 947, 'ATGGTT': 948, 'ATGTAA': 949, 'ATGTAC': 950, 'ATGTAG': 951, 'ATGTAT': 952, 'ATGTCA': 953, 'ATGTCC': 954, 'ATGTCG': 955, 'ATGTCT': 956, 'ATGTGA': 957, 'ATGTGC': 958, 'ATGTGG': 959, 'ATGTGT': 960, 'ATGTTA': 961, 'ATGTTC': 962, 'ATGTTG': 963, 'ATGTTT': 964, 'ATTAAA': 965, 'ATTAAC': 966, 'ATTAAG': 967, 'ATTAAT': 968, 'ATTACA': 969, 'ATTACC': 970, 'ATTACG': 971, 'ATTACT': 972, 'ATTAGA': 973, 'ATTAGC': 974, 'ATTAGG': 975, 'ATTAGT': 976, 'ATTATA': 977, 'ATTATC': 978, 'ATTATG': 979, 'ATTATT': 980, 'ATTCAA': 981, 'ATTCAC': 982, 'ATTCAG': 983, 'ATTCAT': 984, 'ATTCCA': 985, 'ATTCCC': 986, 'ATTCCG': 987, 'ATTCCT': 988, 'ATTCGA': 989, 'ATTCGC': 990, 'ATTCGG': 991, 'ATTCGT': 992, 'ATTCTA': 993, 'ATTCTC': 994, 'ATTCTG': 995, 'ATTCTT': 996, 'ATTGAA': 997, 'ATTGAC': 998, 'ATTGAG': 999, 'ATTGAT': 1000, 'ATTGCA': 1001, 'ATTGCC': 1002, 'ATTGCG': 1003, 'ATTGCT': 1004, 'ATTGGA': 1005, 'ATTGGC': 1006, 'ATTGGG': 1007, 'ATTGGT': 1008, 'ATTGTA': 1009, 'ATTGTC': 1010, 'ATTGTG': 1011, 'ATTGTT': 1012, 'ATTTAA': 1013, 'ATTTAC': 1014, 'ATTTAG': 1015, 'ATTTAT': 1016, 'ATTTCA': 1017, 'ATTTCC': 1018, 'ATTTCG': 1019, 'ATTTCT': 1020, 'ATTTGA': 1021, 'ATTTGC': 1022, 'ATTTGG': 1023, 'ATTTGT': 1024, 'ATTTTA': 1025, 'ATTTTC': 1026, 'ATTTTG': 1027, 'ATTTTT': 1028, 'CAAAAA': 1029, 'CAAAAC': 1030, 'CAAAAG': 1031, 'CAAAAT': 1032, 'CAAACA': 1033, 'CAAACC': 1034, 'CAAACG': 1035, 'CAAACT': 1036, 'CAAAGA': 1037, 'CAAAGC': 1038, 'CAAAGG': 1039, 'CAAAGT': 1040, 'CAAATA': 1041, 'CAAATC': 1042, 'CAAATG': 1043, 'CAAATT': 1044, 'CAACAA': 1045, 'CAACAC': 1046, 'CAACAG': 1047, 'CAACAT': 1048, 'CAACCA': 1049, 'CAACCC': 1050, 'CAACCG': 1051, 'CAACCT': 1052, 'CAACGA': 1053, 'CAACGC': 1054, 'CAACGG': 1055, 'CAACGT': 1056, 'CAACTA': 1057, 'CAACTC': 1058, 'CAACTG': 1059, 'CAACTT': 1060, 'CAAGAA': 1061, 'CAAGAC': 1062, 'CAAGAG': 1063, 'CAAGAT': 1064, 'CAAGCA': 1065, 'CAAGCC': 1066, 'CAAGCG': 1067, 'CAAGCT': 1068, 'CAAGGA': 1069, 'CAAGGC': 1070, 'CAAGGG': 1071, 'CAAGGT': 1072, 'CAAGTA': 1073, 'CAAGTC': 1074, 'CAAGTG': 1075, 'CAAGTT': 1076, 'CAATAA': 1077, 'CAATAC': 1078, 'CAATAG': 1079, 'CAATAT': 1080, 'CAATCA': 1081, 'CAATCC': 1082, 'CAATCG': 1083, 'CAATCT': 1084, 'CAATGA': 1085, 'CAATGC': 1086, 'CAATGG': 1087, 'CAATGT': 1088, 'CAATTA': 1089, 'CAATTC': 1090, 'CAATTG': 1091, 'CAATTT': 1092, 'CACAAA': 1093, 'CACAAC': 1094, 'CACAAG': 1095, 'CACAAT': 1096, 'CACACA': 1097, 'CACACC': 1098, 'CACACG': 1099, 'CACACT': 1100, 'CACAGA': 1101, 'CACAGC': 1102, 'CACAGG': 1103, 'CACAGT': 1104, 'CACATA': 1105, 'CACATC': 1106, 'CACATG': 1107, 'CACATT': 1108, 'CACCAA': 1109, 'CACCAC': 1110, 'CACCAG': 1111, 'CACCAT': 1112, 'CACCCA': 1113, 'CACCCC': 1114, 'CACCCG': 1115, 'CACCCT': 1116, 'CACCGA': 1117, 'CACCGC': 1118, 'CACCGG': 1119, 'CACCGT': 1120, 'CACCTA': 1121, 'CACCTC': 1122, 'CACCTG': 1123, 'CACCTT': 1124, 'CACGAA': 1125, 'CACGAC': 1126, 'CACGAG': 1127, 'CACGAT': 1128, 'CACGCA': 1129, 'CACGCC': 1130, 'CACGCG': 1131, 'CACGCT': 1132, 'CACGGA': 1133, 'CACGGC': 1134, 'CACGGG': 1135, 'CACGGT': 1136, 'CACGTA': 1137, 'CACGTC': 1138, 'CACGTG': 1139, 'CACGTT': 1140, 'CACTAA': 1141, 'CACTAC': 1142, 'CACTAG': 1143, 'CACTAT': 1144, 'CACTCA': 1145, 'CACTCC': 1146, 'CACTCG': 1147, 'CACTCT': 1148, 'CACTGA': 1149, 'CACTGC': 1150, 'CACTGG': 1151, 'CACTGT': 1152, 'CACTTA': 1153, 'CACTTC': 1154, 'CACTTG': 1155, 'CACTTT': 1156, 'CAGAAA': 1157, 'CAGAAC': 1158, 'CAGAAG': 1159, 'CAGAAT': 1160, 'CAGACA': 1161, 'CAGACC': 1162, 'CAGACG': 1163, 'CAGACT': 1164, 'CAGAGA': 1165, 'CAGAGC': 1166, 'CAGAGG': 1167, 'CAGAGT': 1168, 'CAGATA': 1169, 'CAGATC': 1170, 'CAGATG': 1171, 'CAGATT': 1172, 'CAGCAA': 1173, 'CAGCAC': 1174, 'CAGCAG': 1175, 'CAGCAT': 1176, 'CAGCCA': 1177, 'CAGCCC': 1178, 'CAGCCG': 1179, 'CAGCCT': 1180, 'CAGCGA': 1181, 'CAGCGC': 1182, 'CAGCGG': 1183, 'CAGCGT': 1184, 'CAGCTA': 1185, 'CAGCTC': 1186, 'CAGCTG': 1187, 'CAGCTT': 1188, 'CAGGAA': 1189, 'CAGGAC': 1190, 'CAGGAG': 1191, 'CAGGAT': 1192, 'CAGGCA': 1193, 'CAGGCC': 1194, 'CAGGCG': 1195, 'CAGGCT': 1196, 'CAGGGA': 1197, 'CAGGGC': 1198, 'CAGGGG': 1199, 'CAGGGT': 1200, 'CAGGTA': 1201, 'CAGGTC': 1202, 'CAGGTG': 1203, 'CAGGTT': 1204, 'CAGTAA': 1205, 'CAGTAC': 1206, 'CAGTAG': 1207, 'CAGTAT': 1208, 'CAGTCA': 1209, 'CAGTCC': 1210, 'CAGTCG': 1211, 'CAGTCT': 1212, 'CAGTGA': 1213, 'CAGTGC': 1214, 'CAGTGG': 1215, 'CAGTGT': 1216, 'CAGTTA': 1217, 'CAGTTC': 1218, 'CAGTTG': 1219, 'CAGTTT': 1220, 'CATAAA': 1221, 'CATAAC': 1222, 'CATAAG': 1223, 'CATAAT': 1224, 'CATACA': 1225, 'CATACC': 1226, 'CATACG': 1227, 'CATACT': 1228, 'CATAGA': 1229, 'CATAGC': 1230, 'CATAGG': 1231, 'CATAGT': 1232, 'CATATA': 1233, 'CATATC': 1234, 'CATATG': 1235, 'CATATT': 1236, 'CATCAA': 1237, 'CATCAC': 1238, 'CATCAG': 1239, 'CATCAT': 1240, 'CATCCA': 1241, 'CATCCC': 1242, 'CATCCG': 1243, 'CATCCT': 1244, 'CATCGA': 1245, 'CATCGC': 1246, 'CATCGG': 1247, 'CATCGT': 1248, 'CATCTA': 1249, 'CATCTC': 1250, 'CATCTG': 1251, 'CATCTT': 1252, 'CATGAA': 1253, 'CATGAC': 1254, 'CATGAG': 1255, 'CATGAT': 1256, 'CATGCA': 1257, 'CATGCC': 1258, 'CATGCG': 1259, 'CATGCT': 1260, 'CATGGA': 1261, 'CATGGC': 1262, 'CATGGG': 1263, 'CATGGT': 1264, 'CATGTA': 1265, 'CATGTC': 1266, 'CATGTG': 1267, 'CATGTT': 1268, 'CATTAA': 1269, 'CATTAC': 1270, 'CATTAG': 1271, 'CATTAT': 1272, 'CATTCA': 1273, 'CATTCC': 1274, 'CATTCG': 1275, 'CATTCT': 1276, 'CATTGA': 1277, 'CATTGC': 1278, 'CATTGG': 1279, 'CATTGT': 1280, 'CATTTA': 1281, 'CATTTC': 1282, 'CATTTG': 1283, 'CATTTT': 1284, 'CCAAAA': 1285, 'CCAAAC': 1286, 'CCAAAG': 1287, 'CCAAAT': 1288, 'CCAACA': 1289, 'CCAACC': 1290, 'CCAACG': 1291, 'CCAACT': 1292, 'CCAAGA': 1293, 'CCAAGC': 1294, 'CCAAGG': 1295, 'CCAAGT': 1296, 'CCAATA': 1297, 'CCAATC': 1298, 'CCAATG': 1299, 'CCAATT': 1300, 'CCACAA': 1301, 'CCACAC': 1302, 'CCACAG': 1303, 'CCACAT': 1304, 'CCACCA': 1305, 'CCACCC': 1306, 'CCACCG': 1307, 'CCACCT': 1308, 'CCACGA': 1309, 'CCACGC': 1310, 'CCACGG': 1311, 'CCACGT': 1312, 'CCACTA': 1313, 'CCACTC': 1314, 'CCACTG': 1315, 'CCACTT': 1316, 'CCAGAA': 1317, 'CCAGAC': 1318, 'CCAGAG': 1319, 'CCAGAT': 1320, 'CCAGCA': 1321, 'CCAGCC': 1322, 'CCAGCG': 1323, 'CCAGCT': 1324, 'CCAGGA': 1325, 'CCAGGC': 1326, 'CCAGGG': 1327, 'CCAGGT': 1328, 'CCAGTA': 1329, 'CCAGTC': 1330, 'CCAGTG': 1331, 'CCAGTT': 1332, 'CCATAA': 1333, 'CCATAC': 1334, 'CCATAG': 1335, 'CCATAT': 1336, 'CCATCA': 1337, 'CCATCC': 1338, 'CCATCG': 1339, 'CCATCT': 1340, 'CCATGA': 1341, 'CCATGC': 1342, 'CCATGG': 1343, 'CCATGT': 1344, 'CCATTA': 1345, 'CCATTC': 1346, 'CCATTG': 1347, 'CCATTT': 1348, 'CCCAAA': 1349, 'CCCAAC': 1350, 'CCCAAG': 1351, 'CCCAAT': 1352, 'CCCACA': 1353, 'CCCACC': 1354, 'CCCACG': 1355, 'CCCACT': 1356, 'CCCAGA': 1357, 'CCCAGC': 1358, 'CCCAGG': 1359, 'CCCAGT': 1360, 'CCCATA': 1361, 'CCCATC': 1362, 'CCCATG': 1363, 'CCCATT': 1364, 'CCCCAA': 1365, 'CCCCAC': 1366, 'CCCCAG': 1367, 'CCCCAT': 1368, 'CCCCCA': 1369, 'CCCCCC': 1370, 'CCCCCG': 1371, 'CCCCCT': 1372, 'CCCCGA': 1373, 'CCCCGC': 1374, 'CCCCGG': 1375, 'CCCCGT': 1376, 'CCCCTA': 1377, 'CCCCTC': 1378, 'CCCCTG': 1379, 'CCCCTT': 1380, 'CCCGAA': 1381, 'CCCGAC': 1382, 'CCCGAG': 1383, 'CCCGAT': 1384, 'CCCGCA': 1385, 'CCCGCC': 1386, 'CCCGCG': 1387, 'CCCGCT': 1388, 'CCCGGA': 1389, 'CCCGGC': 1390, 'CCCGGG': 1391, 'CCCGGT': 1392, 'CCCGTA': 1393, 'CCCGTC': 1394, 'CCCGTG': 1395, 'CCCGTT': 1396, 'CCCTAA': 1397, 'CCCTAC': 1398, 'CCCTAG': 1399, 'CCCTAT': 1400, 'CCCTCA': 1401, 'CCCTCC': 1402, 'CCCTCG': 1403, 'CCCTCT': 1404, 'CCCTGA': 1405, 'CCCTGC': 1406, 'CCCTGG': 1407, 'CCCTGT': 1408, 'CCCTTA': 1409, 'CCCTTC': 1410, 'CCCTTG': 1411, 'CCCTTT': 1412, 'CCGAAA': 1413, 'CCGAAC': 1414, 'CCGAAG': 1415, 'CCGAAT': 1416, 'CCGACA': 1417, 'CCGACC': 1418, 'CCGACG': 1419, 'CCGACT': 1420, 'CCGAGA': 1421, 'CCGAGC': 1422, 'CCGAGG': 1423, 'CCGAGT': 1424, 'CCGATA': 1425, 'CCGATC': 1426, 'CCGATG': 1427, 'CCGATT': 1428, 'CCGCAA': 1429, 'CCGCAC': 1430, 'CCGCAG': 1431, 'CCGCAT': 1432, 'CCGCCA': 1433, 'CCGCCC': 1434, 'CCGCCG': 1435, 'CCGCCT': 1436, 'CCGCGA': 1437, 'CCGCGC': 1438, 'CCGCGG': 1439, 'CCGCGT': 1440, 'CCGCTA': 1441, 'CCGCTC': 1442, 'CCGCTG': 1443, 'CCGCTT': 1444, 'CCGGAA': 1445, 'CCGGAC': 1446, 'CCGGAG': 1447, 'CCGGAT': 1448, 'CCGGCA': 1449, 'CCGGCC': 1450, 'CCGGCG': 1451, 'CCGGCT': 1452, 'CCGGGA': 1453, 'CCGGGC': 1454, 'CCGGGG': 1455, 'CCGGGT': 1456, 'CCGGTA': 1457, 'CCGGTC': 1458, 'CCGGTG': 1459, 'CCGGTT': 1460, 'CCGTAA': 1461, 'CCGTAC': 1462, 'CCGTAG': 1463, 'CCGTAT': 1464, 'CCGTCA': 1465, 'CCGTCC': 1466, 'CCGTCG': 1467, 'CCGTCT': 1468, 'CCGTGA': 1469, 'CCGTGC': 1470, 'CCGTGG': 1471, 'CCGTGT': 1472, 'CCGTTA': 1473, 'CCGTTC': 1474, 'CCGTTG': 1475, 'CCGTTT': 1476, 'CCTAAA': 1477, 'CCTAAC': 1478, 'CCTAAG': 1479, 'CCTAAT': 1480, 'CCTACA': 1481, 'CCTACC': 1482, 'CCTACG': 1483, 'CCTACT': 1484, 'CCTAGA': 1485, 'CCTAGC': 1486, 'CCTAGG': 1487, 'CCTAGT': 1488, 'CCTATA': 1489, 'CCTATC': 1490, 'CCTATG': 1491, 'CCTATT': 1492, 'CCTCAA': 1493, 'CCTCAC': 1494, 'CCTCAG': 1495, 'CCTCAT': 1496, 'CCTCCA': 1497, 'CCTCCC': 1498, 'CCTCCG': 1499, 'CCTCCT': 1500, 'CCTCGA': 1501, 'CCTCGC': 1502, 'CCTCGG': 1503, 'CCTCGT': 1504, 'CCTCTA': 1505, 'CCTCTC': 1506, 'CCTCTG': 1507, 'CCTCTT': 1508, 'CCTGAA': 1509, 'CCTGAC': 1510, 'CCTGAG': 1511, 'CCTGAT': 1512, 'CCTGCA': 1513, 'CCTGCC': 1514, 'CCTGCG': 1515, 'CCTGCT': 1516, 'CCTGGA': 1517, 'CCTGGC': 1518, 'CCTGGG': 1519, 'CCTGGT': 1520, 'CCTGTA': 1521, 'CCTGTC': 1522, 'CCTGTG': 1523, 'CCTGTT': 1524, 'CCTTAA': 1525, 'CCTTAC': 1526, 'CCTTAG': 1527, 'CCTTAT': 1528, 'CCTTCA': 1529, 'CCTTCC': 1530, 'CCTTCG': 1531, 'CCTTCT': 1532, 'CCTTGA': 1533, 'CCTTGC': 1534, 'CCTTGG': 1535, 'CCTTGT': 1536, 'CCTTTA': 1537, 'CCTTTC': 1538, 'CCTTTG': 1539, 'CCTTTT': 1540, 'CGAAAA': 1541, 'CGAAAC': 1542, 'CGAAAG': 1543, 'CGAAAT': 1544, 'CGAACA': 1545, 'CGAACC': 1546, 'CGAACG': 1547, 'CGAACT': 1548, 'CGAAGA': 1549, 'CGAAGC': 1550, 'CGAAGG': 1551, 'CGAAGT': 1552, 'CGAATA': 1553, 'CGAATC': 1554, 'CGAATG': 1555, 'CGAATT': 1556, 'CGACAA': 1557, 'CGACAC': 1558, 'CGACAG': 1559, 'CGACAT': 1560, 'CGACCA': 1561, 'CGACCC': 1562, 'CGACCG': 1563, 'CGACCT': 1564, 'CGACGA': 1565, 'CGACGC': 1566, 'CGACGG': 1567, 'CGACGT': 1568, 'CGACTA': 1569, 'CGACTC': 1570, 'CGACTG': 1571, 'CGACTT': 1572, 'CGAGAA': 1573, 'CGAGAC': 1574, 'CGAGAG': 1575, 'CGAGAT': 1576, 'CGAGCA': 1577, 'CGAGCC': 1578, 'CGAGCG': 1579, 'CGAGCT': 1580, 'CGAGGA': 1581, 'CGAGGC': 1582, 'CGAGGG': 1583, 'CGAGGT': 1584, 'CGAGTA': 1585, 'CGAGTC': 1586, 'CGAGTG': 1587, 'CGAGTT': 1588, 'CGATAA': 1589, 'CGATAC': 1590, 'CGATAG': 1591, 'CGATAT': 1592, 'CGATCA': 1593, 'CGATCC': 1594, 'CGATCG': 1595, 'CGATCT': 1596, 'CGATGA': 1597, 'CGATGC': 1598, 'CGATGG': 1599, 'CGATGT': 1600, 'CGATTA': 1601, 'CGATTC': 1602, 'CGATTG': 1603, 'CGATTT': 1604, 'CGCAAA': 1605, 'CGCAAC': 1606, 'CGCAAG': 1607, 'CGCAAT': 1608, 'CGCACA': 1609, 'CGCACC': 1610, 'CGCACG': 1611, 'CGCACT': 1612, 'CGCAGA': 1613, 'CGCAGC': 1614, 'CGCAGG': 1615, 'CGCAGT': 1616, 'CGCATA': 1617, 'CGCATC': 1618, 'CGCATG': 1619, 'CGCATT': 1620, 'CGCCAA': 1621, 'CGCCAC': 1622, 'CGCCAG': 1623, 'CGCCAT': 1624, 'CGCCCA': 1625, 'CGCCCC': 1626, 'CGCCCG': 1627, 'CGCCCT': 1628, 'CGCCGA': 1629, 'CGCCGC': 1630, 'CGCCGG': 1631, 'CGCCGT': 1632, 'CGCCTA': 1633, 'CGCCTC': 1634, 'CGCCTG': 1635, 'CGCCTT': 1636, 'CGCGAA': 1637, 'CGCGAC': 1638, 'CGCGAG': 1639, 'CGCGAT': 1640, 'CGCGCA': 1641, 'CGCGCC': 1642, 'CGCGCG': 1643, 'CGCGCT': 1644, 'CGCGGA': 1645, 'CGCGGC': 1646, 'CGCGGG': 1647, 'CGCGGT': 1648, 'CGCGTA': 1649, 'CGCGTC': 1650, 'CGCGTG': 1651, 'CGCGTT': 1652, 'CGCTAA': 1653, 'CGCTAC': 1654, 'CGCTAG': 1655, 'CGCTAT': 1656, 'CGCTCA': 1657, 'CGCTCC': 1658, 'CGCTCG': 1659, 'CGCTCT': 1660, 'CGCTGA': 1661, 'CGCTGC': 1662, 'CGCTGG': 1663, 'CGCTGT': 1664, 'CGCTTA': 1665, 'CGCTTC': 1666, 'CGCTTG': 1667, 'CGCTTT': 1668, 'CGGAAA': 1669, 'CGGAAC': 1670, 'CGGAAG': 1671, 'CGGAAT': 1672, 'CGGACA': 1673, 'CGGACC': 1674, 'CGGACG': 1675, 'CGGACT': 1676, 'CGGAGA': 1677, 'CGGAGC': 1678, 'CGGAGG': 1679, 'CGGAGT': 1680, 'CGGATA': 1681, 'CGGATC': 1682, 'CGGATG': 1683, 'CGGATT': 1684, 'CGGCAA': 1685, 'CGGCAC': 1686, 'CGGCAG': 1687, 'CGGCAT': 1688, 'CGGCCA': 1689, 'CGGCCC': 1690, 'CGGCCG': 1691, 'CGGCCT': 1692, 'CGGCGA': 1693, 'CGGCGC': 1694, 'CGGCGG': 1695, 'CGGCGT': 1696, 'CGGCTA': 1697, 'CGGCTC': 1698, 'CGGCTG': 1699, 'CGGCTT': 1700, 'CGGGAA': 1701, 'CGGGAC': 1702, 'CGGGAG': 1703, 'CGGGAT': 1704, 'CGGGCA': 1705, 'CGGGCC': 1706, 'CGGGCG': 1707, 'CGGGCT': 1708, 'CGGGGA': 1709, 'CGGGGC': 1710, 'CGGGGG': 1711, 'CGGGGT': 1712, 'CGGGTA': 1713, 'CGGGTC': 1714, 'CGGGTG': 1715, 'CGGGTT': 1716, 'CGGTAA': 1717, 'CGGTAC': 1718, 'CGGTAG': 1719, 'CGGTAT': 1720, 'CGGTCA': 1721, 'CGGTCC': 1722, 'CGGTCG': 1723, 'CGGTCT': 1724, 'CGGTGA': 1725, 'CGGTGC': 1726, 'CGGTGG': 1727, 'CGGTGT': 1728, 'CGGTTA': 1729, 'CGGTTC': 1730, 'CGGTTG': 1731, 'CGGTTT': 1732, 'CGTAAA': 1733, 'CGTAAC': 1734, 'CGTAAG': 1735, 'CGTAAT': 1736, 'CGTACA': 1737, 'CGTACC': 1738, 'CGTACG': 1739, 'CGTACT': 1740, 'CGTAGA': 1741, 'CGTAGC': 1742, 'CGTAGG': 1743, 'CGTAGT': 1744, 'CGTATA': 1745, 'CGTATC': 1746, 'CGTATG': 1747, 'CGTATT': 1748, 'CGTCAA': 1749, 'CGTCAC': 1750, 'CGTCAG': 1751, 'CGTCAT': 1752, 'CGTCCA': 1753, 'CGTCCC': 1754, 'CGTCCG': 1755, 'CGTCCT': 1756, 'CGTCGA': 1757, 'CGTCGC': 1758, 'CGTCGG': 1759, 'CGTCGT': 1760, 'CGTCTA': 1761, 'CGTCTC': 1762, 'CGTCTG': 1763, 'CGTCTT': 1764, 'CGTGAA': 1765, 'CGTGAC': 1766, 'CGTGAG': 1767, 'CGTGAT': 1768, 'CGTGCA': 1769, 'CGTGCC': 1770, 'CGTGCG': 1771, 'CGTGCT': 1772, 'CGTGGA': 1773, 'CGTGGC': 1774, 'CGTGGG': 1775, 'CGTGGT': 1776, 'CGTGTA': 1777, 'CGTGTC': 1778, 'CGTGTG': 1779, 'CGTGTT': 1780, 'CGTTAA': 1781, 'CGTTAC': 1782, 'CGTTAG': 1783, 'CGTTAT': 1784, 'CGTTCA': 1785, 'CGTTCC': 1786, 'CGTTCG': 1787, 'CGTTCT': 1788, 'CGTTGA': 1789, 'CGTTGC': 1790, 'CGTTGG': 1791, 'CGTTGT': 1792, 'CGTTTA': 1793, 'CGTTTC': 1794, 'CGTTTG': 1795, 'CGTTTT': 1796, 'CTAAAA': 1797, 'CTAAAC': 1798, 'CTAAAG': 1799, 'CTAAAT': 1800, 'CTAACA': 1801, 'CTAACC': 1802, 'CTAACG': 1803, 'CTAACT': 1804, 'CTAAGA': 1805, 'CTAAGC': 1806, 'CTAAGG': 1807, 'CTAAGT': 1808, 'CTAATA': 1809, 'CTAATC': 1810, 'CTAATG': 1811, 'CTAATT': 1812, 'CTACAA': 1813, 'CTACAC': 1814, 'CTACAG': 1815, 'CTACAT': 1816, 'CTACCA': 1817, 'CTACCC': 1818, 'CTACCG': 1819, 'CTACCT': 1820, 'CTACGA': 1821, 'CTACGC': 1822, 'CTACGG': 1823, 'CTACGT': 1824, 'CTACTA': 1825, 'CTACTC': 1826, 'CTACTG': 1827, 'CTACTT': 1828, 'CTAGAA': 1829, 'CTAGAC': 1830, 'CTAGAG': 1831, 'CTAGAT': 1832, 'CTAGCA': 1833, 'CTAGCC': 1834, 'CTAGCG': 1835, 'CTAGCT': 1836, 'CTAGGA': 1837, 'CTAGGC': 1838, 'CTAGGG': 1839, 'CTAGGT': 1840, 'CTAGTA': 1841, 'CTAGTC': 1842, 'CTAGTG': 1843, 'CTAGTT': 1844, 'CTATAA': 1845, 'CTATAC': 1846, 'CTATAG': 1847, 'CTATAT': 1848, 'CTATCA': 1849, 'CTATCC': 1850, 'CTATCG': 1851, 'CTATCT': 1852, 'CTATGA': 1853, 'CTATGC': 1854, 'CTATGG': 1855, 'CTATGT': 1856, 'CTATTA': 1857, 'CTATTC': 1858, 'CTATTG': 1859, 'CTATTT': 1860, 'CTCAAA': 1861, 'CTCAAC': 1862, 'CTCAAG': 1863, 'CTCAAT': 1864, 'CTCACA': 1865, 'CTCACC': 1866, 'CTCACG': 1867, 'CTCACT': 1868, 'CTCAGA': 1869, 'CTCAGC': 1870, 'CTCAGG': 1871, 'CTCAGT': 1872, 'CTCATA': 1873, 'CTCATC': 1874, 'CTCATG': 1875, 'CTCATT': 1876, 'CTCCAA': 1877, 'CTCCAC': 1878, 'CTCCAG': 1879, 'CTCCAT': 1880, 'CTCCCA': 1881, 'CTCCCC': 1882, 'CTCCCG': 1883, 'CTCCCT': 1884, 'CTCCGA': 1885, 'CTCCGC': 1886, 'CTCCGG': 1887, 'CTCCGT': 1888, 'CTCCTA': 1889, 'CTCCTC': 1890, 'CTCCTG': 1891, 'CTCCTT': 1892, 'CTCGAA': 1893, 'CTCGAC': 1894, 'CTCGAG': 1895, 'CTCGAT': 1896, 'CTCGCA': 1897, 'CTCGCC': 1898, 'CTCGCG': 1899, 'CTCGCT': 1900, 'CTCGGA': 1901, 'CTCGGC': 1902, 'CTCGGG': 1903, 'CTCGGT': 1904, 'CTCGTA': 1905, 'CTCGTC': 1906, 'CTCGTG': 1907, 'CTCGTT': 1908, 'CTCTAA': 1909, 'CTCTAC': 1910, 'CTCTAG': 1911, 'CTCTAT': 1912, 'CTCTCA': 1913, 'CTCTCC': 1914, 'CTCTCG': 1915, 'CTCTCT': 1916, 'CTCTGA': 1917, 'CTCTGC': 1918, 'CTCTGG': 1919, 'CTCTGT': 1920, 'CTCTTA': 1921, 'CTCTTC': 1922, 'CTCTTG': 1923, 'CTCTTT': 1924, 'CTGAAA': 1925, 'CTGAAC': 1926, 'CTGAAG': 1927, 'CTGAAT': 1928, 'CTGACA': 1929, 'CTGACC': 1930, 'CTGACG': 1931, 'CTGACT': 1932, 'CTGAGA': 1933, 'CTGAGC': 1934, 'CTGAGG': 1935, 'CTGAGT': 1936, 'CTGATA': 1937, 'CTGATC': 1938, 'CTGATG': 1939, 'CTGATT': 1940, 'CTGCAA': 1941, 'CTGCAC': 1942, 'CTGCAG': 1943, 'CTGCAT': 1944, 'CTGCCA': 1945, 'CTGCCC': 1946, 'CTGCCG': 1947, 'CTGCCT': 1948, 'CTGCGA': 1949, 'CTGCGC': 1950, 'CTGCGG': 1951, 'CTGCGT': 1952, 'CTGCTA': 1953, 'CTGCTC': 1954, 'CTGCTG': 1955, 'CTGCTT': 1956, 'CTGGAA': 1957, 'CTGGAC': 1958, 'CTGGAG': 1959, 'CTGGAT': 1960, 'CTGGCA': 1961, 'CTGGCC': 1962, 'CTGGCG': 1963, 'CTGGCT': 1964, 'CTGGGA': 1965, 'CTGGGC': 1966, 'CTGGGG': 1967, 'CTGGGT': 1968, 'CTGGTA': 1969, 'CTGGTC': 1970, 'CTGGTG': 1971, 'CTGGTT': 1972, 'CTGTAA': 1973, 'CTGTAC': 1974, 'CTGTAG': 1975, 'CTGTAT': 1976, 'CTGTCA': 1977, 'CTGTCC': 1978, 'CTGTCG': 1979, 'CTGTCT': 1980, 'CTGTGA': 1981, 'CTGTGC': 1982, 'CTGTGG': 1983, 'CTGTGT': 1984, 'CTGTTA': 1985, 'CTGTTC': 1986, 'CTGTTG': 1987, 'CTGTTT': 1988, 'CTTAAA': 1989, 'CTTAAC': 1990, 'CTTAAG': 1991, 'CTTAAT': 1992, 'CTTACA': 1993, 'CTTACC': 1994, 'CTTACG': 1995, 'CTTACT': 1996, 'CTTAGA': 1997, 'CTTAGC': 1998, 'CTTAGG': 1999, 'CTTAGT': 2000, 'CTTATA': 2001, 'CTTATC': 2002, 'CTTATG': 2003, 'CTTATT': 2004, 'CTTCAA': 2005, 'CTTCAC': 2006, 'CTTCAG': 2007, 'CTTCAT': 2008, 'CTTCCA': 2009, 'CTTCCC': 2010, 'CTTCCG': 2011, 'CTTCCT': 2012, 'CTTCGA': 2013, 'CTTCGC': 2014, 'CTTCGG': 2015, 'CTTCGT': 2016, 'CTTCTA': 2017, 'CTTCTC': 2018, 'CTTCTG': 2019, 'CTTCTT': 2020, 'CTTGAA': 2021, 'CTTGAC': 2022, 'CTTGAG': 2023, 'CTTGAT': 2024, 'CTTGCA': 2025, 'CTTGCC': 2026, 'CTTGCG': 2027, 'CTTGCT': 2028, 'CTTGGA': 2029, 'CTTGGC': 2030, 'CTTGGG': 2031, 'CTTGGT': 2032, 'CTTGTA': 2033, 'CTTGTC': 2034, 'CTTGTG': 2035, 'CTTGTT': 2036, 'CTTTAA': 2037, 'CTTTAC': 2038, 'CTTTAG': 2039, 'CTTTAT': 2040, 'CTTTCA': 2041, 'CTTTCC': 2042, 'CTTTCG': 2043, 'CTTTCT': 2044, 'CTTTGA': 2045, 'CTTTGC': 2046, 'CTTTGG': 2047, 'CTTTGT': 2048, 'CTTTTA': 2049, 'CTTTTC': 2050, 'CTTTTG': 2051, 'CTTTTT': 2052, 'GAAAAA': 2053, 'GAAAAC': 2054, 'GAAAAG': 2055, 'GAAAAT': 2056, 'GAAACA': 2057, 'GAAACC': 2058, 'GAAACG': 2059, 'GAAACT': 2060, 'GAAAGA': 2061, 'GAAAGC': 2062, 'GAAAGG': 2063, 'GAAAGT': 2064, 'GAAATA': 2065, 'GAAATC': 2066, 'GAAATG': 2067, 'GAAATT': 2068, 'GAACAA': 2069, 'GAACAC': 2070, 'GAACAG': 2071, 'GAACAT': 2072, 'GAACCA': 2073, 'GAACCC': 2074, 'GAACCG': 2075, 'GAACCT': 2076, 'GAACGA': 2077, 'GAACGC': 2078, 'GAACGG': 2079, 'GAACGT': 2080, 'GAACTA': 2081, 'GAACTC': 2082, 'GAACTG': 2083, 'GAACTT': 2084, 'GAAGAA': 2085, 'GAAGAC': 2086, 'GAAGAG': 2087, 'GAAGAT': 2088, 'GAAGCA': 2089, 'GAAGCC': 2090, 'GAAGCG': 2091, 'GAAGCT': 2092, 'GAAGGA': 2093, 'GAAGGC': 2094, 'GAAGGG': 2095, 'GAAGGT': 2096, 'GAAGTA': 2097, 'GAAGTC': 2098, 'GAAGTG': 2099, 'GAAGTT': 2100, 'GAATAA': 2101, 'GAATAC': 2102, 'GAATAG': 2103, 'GAATAT': 2104, 'GAATCA': 2105, 'GAATCC': 2106, 'GAATCG': 2107, 'GAATCT': 2108, 'GAATGA': 2109, 'GAATGC': 2110, 'GAATGG': 2111, 'GAATGT': 2112, 'GAATTA': 2113, 'GAATTC': 2114, 'GAATTG': 2115, 'GAATTT': 2116, 'GACAAA': 2117, 'GACAAC': 2118, 'GACAAG': 2119, 'GACAAT': 2120, 'GACACA': 2121, 'GACACC': 2122, 'GACACG': 2123, 'GACACT': 2124, 'GACAGA': 2125, 'GACAGC': 2126, 'GACAGG': 2127, 'GACAGT': 2128, 'GACATA': 2129, 'GACATC': 2130, 'GACATG': 2131, 'GACATT': 2132, 'GACCAA': 2133, 'GACCAC': 2134, 'GACCAG': 2135, 'GACCAT': 2136, 'GACCCA': 2137, 'GACCCC': 2138, 'GACCCG': 2139, 'GACCCT': 2140, 'GACCGA': 2141, 'GACCGC': 2142, 'GACCGG': 2143, 'GACCGT': 2144, 'GACCTA': 2145, 'GACCTC': 2146, 'GACCTG': 2147, 'GACCTT': 2148, 'GACGAA': 2149, 'GACGAC': 2150, 'GACGAG': 2151, 'GACGAT': 2152, 'GACGCA': 2153, 'GACGCC': 2154, 'GACGCG': 2155, 'GACGCT': 2156, 'GACGGA': 2157, 'GACGGC': 2158, 'GACGGG': 2159, 'GACGGT': 2160, 'GACGTA': 2161, 'GACGTC': 2162, 'GACGTG': 2163, 'GACGTT': 2164, 'GACTAA': 2165, 'GACTAC': 2166, 'GACTAG': 2167, 'GACTAT': 2168, 'GACTCA': 2169, 'GACTCC': 2170, 'GACTCG': 2171, 'GACTCT': 2172, 'GACTGA': 2173, 'GACTGC': 2174, 'GACTGG': 2175, 'GACTGT': 2176, 'GACTTA': 2177, 'GACTTC': 2178, 'GACTTG': 2179, 'GACTTT': 2180, 'GAGAAA': 2181, 'GAGAAC': 2182, 'GAGAAG': 2183, 'GAGAAT': 2184, 'GAGACA': 2185, 'GAGACC': 2186, 'GAGACG': 2187, 'GAGACT': 2188, 'GAGAGA': 2189, 'GAGAGC': 2190, 'GAGAGG': 2191, 'GAGAGT': 2192, 'GAGATA': 2193, 'GAGATC': 2194, 'GAGATG': 2195, 'GAGATT': 2196, 'GAGCAA': 2197, 'GAGCAC': 2198, 'GAGCAG': 2199, 'GAGCAT': 2200, 'GAGCCA': 2201, 'GAGCCC': 2202, 'GAGCCG': 2203, 'GAGCCT': 2204, 'GAGCGA': 2205, 'GAGCGC': 2206, 'GAGCGG': 2207, 'GAGCGT': 2208, 'GAGCTA': 2209, 'GAGCTC': 2210, 'GAGCTG': 2211, 'GAGCTT': 2212, 'GAGGAA': 2213, 'GAGGAC': 2214, 'GAGGAG': 2215, 'GAGGAT': 2216, 'GAGGCA': 2217, 'GAGGCC': 2218, 'GAGGCG': 2219, 'GAGGCT': 2220, 'GAGGGA': 2221, 'GAGGGC': 2222, 'GAGGGG': 2223, 'GAGGGT': 2224, 'GAGGTA': 2225, 'GAGGTC': 2226, 'GAGGTG': 2227, 'GAGGTT': 2228, 'GAGTAA': 2229, 'GAGTAC': 2230, 'GAGTAG': 2231, 'GAGTAT': 2232, 'GAGTCA': 2233, 'GAGTCC': 2234, 'GAGTCG': 2235, 'GAGTCT': 2236, 'GAGTGA': 2237, 'GAGTGC': 2238, 'GAGTGG': 2239, 'GAGTGT': 2240, 'GAGTTA': 2241, 'GAGTTC': 2242, 'GAGTTG': 2243, 'GAGTTT': 2244, 'GATAAA': 2245, 'GATAAC': 2246, 'GATAAG': 2247, 'GATAAT': 2248, 'GATACA': 2249, 'GATACC': 2250, 'GATACG': 2251, 'GATACT': 2252, 'GATAGA': 2253, 'GATAGC': 2254, 'GATAGG': 2255, 'GATAGT': 2256, 'GATATA': 2257, 'GATATC': 2258, 'GATATG': 2259, 'GATATT': 2260, 'GATCAA': 2261, 'GATCAC': 2262, 'GATCAG': 2263, 'GATCAT': 2264, 'GATCCA': 2265, 'GATCCC': 2266, 'GATCCG': 2267, 'GATCCT': 2268, 'GATCGA': 2269, 'GATCGC': 2270, 'GATCGG': 2271, 'GATCGT': 2272, 'GATCTA': 2273, 'GATCTC': 2274, 'GATCTG': 2275, 'GATCTT': 2276, 'GATGAA': 2277, 'GATGAC': 2278, 'GATGAG': 2279, 'GATGAT': 2280, 'GATGCA': 2281, 'GATGCC': 2282, 'GATGCG': 2283, 'GATGCT': 2284, 'GATGGA': 2285, 'GATGGC': 2286, 'GATGGG': 2287, 'GATGGT': 2288, 'GATGTA': 2289, 'GATGTC': 2290, 'GATGTG': 2291, 'GATGTT': 2292, 'GATTAA': 2293, 'GATTAC': 2294, 'GATTAG': 2295, 'GATTAT': 2296, 'GATTCA': 2297, 'GATTCC': 2298, 'GATTCG': 2299, 'GATTCT': 2300, 'GATTGA': 2301, 'GATTGC': 2302, 'GATTGG': 2303, 'GATTGT': 2304, 'GATTTA': 2305, 'GATTTC': 2306, 'GATTTG': 2307, 'GATTTT': 2308, 'GCAAAA': 2309, 'GCAAAC': 2310, 'GCAAAG': 2311, 'GCAAAT': 2312, 'GCAACA': 2313, 'GCAACC': 2314, 'GCAACG': 2315, 'GCAACT': 2316, 'GCAAGA': 2317, 'GCAAGC': 2318, 'GCAAGG': 2319, 'GCAAGT': 2320, 'GCAATA': 2321, 'GCAATC': 2322, 'GCAATG': 2323, 'GCAATT': 2324, 'GCACAA': 2325, 'GCACAC': 2326, 'GCACAG': 2327, 'GCACAT': 2328, 'GCACCA': 2329, 'GCACCC': 2330, 'GCACCG': 2331, 'GCACCT': 2332, 'GCACGA': 2333, 'GCACGC': 2334, 'GCACGG': 2335, 'GCACGT': 2336, 'GCACTA': 2337, 'GCACTC': 2338, 'GCACTG': 2339, 'GCACTT': 2340, 'GCAGAA': 2341, 'GCAGAC': 2342, 'GCAGAG': 2343, 'GCAGAT': 2344, 'GCAGCA': 2345, 'GCAGCC': 2346, 'GCAGCG': 2347, 'GCAGCT': 2348, 'GCAGGA': 2349, 'GCAGGC': 2350, 'GCAGGG': 2351, 'GCAGGT': 2352, 'GCAGTA': 2353, 'GCAGTC': 2354, 'GCAGTG': 2355, 'GCAGTT': 2356, 'GCATAA': 2357, 'GCATAC': 2358, 'GCATAG': 2359, 'GCATAT': 2360, 'GCATCA': 2361, 'GCATCC': 2362, 'GCATCG': 2363, 'GCATCT': 2364, 'GCATGA': 2365, 'GCATGC': 2366, 'GCATGG': 2367, 'GCATGT': 2368, 'GCATTA': 2369, 'GCATTC': 2370, 'GCATTG': 2371, 'GCATTT': 2372, 'GCCAAA': 2373, 'GCCAAC': 2374, 'GCCAAG': 2375, 'GCCAAT': 2376, 'GCCACA': 2377, 'GCCACC': 2378, 'GCCACG': 2379, 'GCCACT': 2380, 'GCCAGA': 2381, 'GCCAGC': 2382, 'GCCAGG': 2383, 'GCCAGT': 2384, 'GCCATA': 2385, 'GCCATC': 2386, 'GCCATG': 2387, 'GCCATT': 2388, 'GCCCAA': 2389, 'GCCCAC': 2390, 'GCCCAG': 2391, 'GCCCAT': 2392, 'GCCCCA': 2393, 'GCCCCC': 2394, 'GCCCCG': 2395, 'GCCCCT': 2396, 'GCCCGA': 2397, 'GCCCGC': 2398, 'GCCCGG': 2399, 'GCCCGT': 2400, 'GCCCTA': 2401, 'GCCCTC': 2402, 'GCCCTG': 2403, 'GCCCTT': 2404, 'GCCGAA': 2405, 'GCCGAC': 2406, 'GCCGAG': 2407, 'GCCGAT': 2408, 'GCCGCA': 2409, 'GCCGCC': 2410, 'GCCGCG': 2411, 'GCCGCT': 2412, 'GCCGGA': 2413, 'GCCGGC': 2414, 'GCCGGG': 2415, 'GCCGGT': 2416, 'GCCGTA': 2417, 'GCCGTC': 2418, 'GCCGTG': 2419, 'GCCGTT': 2420, 'GCCTAA': 2421, 'GCCTAC': 2422, 'GCCTAG': 2423, 'GCCTAT': 2424, 'GCCTCA': 2425, 'GCCTCC': 2426, 'GCCTCG': 2427, 'GCCTCT': 2428, 'GCCTGA': 2429, 'GCCTGC': 2430, 'GCCTGG': 2431, 'GCCTGT': 2432, 'GCCTTA': 2433, 'GCCTTC': 2434, 'GCCTTG': 2435, 'GCCTTT': 2436, 'GCGAAA': 2437, 'GCGAAC': 2438, 'GCGAAG': 2439, 'GCGAAT': 2440, 'GCGACA': 2441, 'GCGACC': 2442, 'GCGACG': 2443, 'GCGACT': 2444, 'GCGAGA': 2445, 'GCGAGC': 2446, 'GCGAGG': 2447, 'GCGAGT': 2448, 'GCGATA': 2449, 'GCGATC': 2450, 'GCGATG': 2451, 'GCGATT': 2452, 'GCGCAA': 2453, 'GCGCAC': 2454, 'GCGCAG': 2455, 'GCGCAT': 2456, 'GCGCCA': 2457, 'GCGCCC': 2458, 'GCGCCG': 2459, 'GCGCCT': 2460, 'GCGCGA': 2461, 'GCGCGC': 2462, 'GCGCGG': 2463, 'GCGCGT': 2464, 'GCGCTA': 2465, 'GCGCTC': 2466, 'GCGCTG': 2467, 'GCGCTT': 2468, 'GCGGAA': 2469, 'GCGGAC': 2470, 'GCGGAG': 2471, 'GCGGAT': 2472, 'GCGGCA': 2473, 'GCGGCC': 2474, 'GCGGCG': 2475, 'GCGGCT': 2476, 'GCGGGA': 2477, 'GCGGGC': 2478, 'GCGGGG': 2479, 'GCGGGT': 2480, 'GCGGTA': 2481, 'GCGGTC': 2482, 'GCGGTG': 2483, 'GCGGTT': 2484, 'GCGTAA': 2485, 'GCGTAC': 2486, 'GCGTAG': 2487, 'GCGTAT': 2488, 'GCGTCA': 2489, 'GCGTCC': 2490, 'GCGTCG': 2491, 'GCGTCT': 2492, 'GCGTGA': 2493, 'GCGTGC': 2494, 'GCGTGG': 2495, 'GCGTGT': 2496, 'GCGTTA': 2497, 'GCGTTC': 2498, 'GCGTTG': 2499, 'GCGTTT': 2500, 'GCTAAA': 2501, 'GCTAAC': 2502, 'GCTAAG': 2503, 'GCTAAT': 2504, 'GCTACA': 2505, 'GCTACC': 2506, 'GCTACG': 2507, 'GCTACT': 2508, 'GCTAGA': 2509, 'GCTAGC': 2510, 'GCTAGG': 2511, 'GCTAGT': 2512, 'GCTATA': 2513, 'GCTATC': 2514, 'GCTATG': 2515, 'GCTATT': 2516, 'GCTCAA': 2517, 'GCTCAC': 2518, 'GCTCAG': 2519, 'GCTCAT': 2520, 'GCTCCA': 2521, 'GCTCCC': 2522, 'GCTCCG': 2523, 'GCTCCT': 2524, 'GCTCGA': 2525, 'GCTCGC': 2526, 'GCTCGG': 2527, 'GCTCGT': 2528, 'GCTCTA': 2529, 'GCTCTC': 2530, 'GCTCTG': 2531, 'GCTCTT': 2532, 'GCTGAA': 2533, 'GCTGAC': 2534, 'GCTGAG': 2535, 'GCTGAT': 2536, 'GCTGCA': 2537, 'GCTGCC': 2538, 'GCTGCG': 2539, 'GCTGCT': 2540, 'GCTGGA': 2541, 'GCTGGC': 2542, 'GCTGGG': 2543, 'GCTGGT': 2544, 'GCTGTA': 2545, 'GCTGTC': 2546, 'GCTGTG': 2547, 'GCTGTT': 2548, 'GCTTAA': 2549, 'GCTTAC': 2550, 'GCTTAG': 2551, 'GCTTAT': 2552, 'GCTTCA': 2553, 'GCTTCC': 2554, 'GCTTCG': 2555, 'GCTTCT': 2556, 'GCTTGA': 2557, 'GCTTGC': 2558, 'GCTTGG': 2559, 'GCTTGT': 2560, 'GCTTTA': 2561, 'GCTTTC': 2562, 'GCTTTG': 2563, 'GCTTTT': 2564, 'GGAAAA': 2565, 'GGAAAC': 2566, 'GGAAAG': 2567, 'GGAAAT': 2568, 'GGAACA': 2569, 'GGAACC': 2570, 'GGAACG': 2571, 'GGAACT': 2572, 'GGAAGA': 2573, 'GGAAGC': 2574, 'GGAAGG': 2575, 'GGAAGT': 2576, 'GGAATA': 2577, 'GGAATC': 2578, 'GGAATG': 2579, 'GGAATT': 2580, 'GGACAA': 2581, 'GGACAC': 2582, 'GGACAG': 2583, 'GGACAT': 2584, 'GGACCA': 2585, 'GGACCC': 2586, 'GGACCG': 2587, 'GGACCT': 2588, 'GGACGA': 2589, 'GGACGC': 2590, 'GGACGG': 2591, 'GGACGT': 2592, 'GGACTA': 2593, 'GGACTC': 2594, 'GGACTG': 2595, 'GGACTT': 2596, 'GGAGAA': 2597, 'GGAGAC': 2598, 'GGAGAG': 2599, 'GGAGAT': 2600, 'GGAGCA': 2601, 'GGAGCC': 2602, 'GGAGCG': 2603, 'GGAGCT': 2604, 'GGAGGA': 2605, 'GGAGGC': 2606, 'GGAGGG': 2607, 'GGAGGT': 2608, 'GGAGTA': 2609, 'GGAGTC': 2610, 'GGAGTG': 2611, 'GGAGTT': 2612, 'GGATAA': 2613, 'GGATAC': 2614, 'GGATAG': 2615, 'GGATAT': 2616, 'GGATCA': 2617, 'GGATCC': 2618, 'GGATCG': 2619, 'GGATCT': 2620, 'GGATGA': 2621, 'GGATGC': 2622, 'GGATGG': 2623, 'GGATGT': 2624, 'GGATTA': 2625, 'GGATTC': 2626, 'GGATTG': 2627, 'GGATTT': 2628, 'GGCAAA': 2629, 'GGCAAC': 2630, 'GGCAAG': 2631, 'GGCAAT': 2632, 'GGCACA': 2633, 'GGCACC': 2634, 'GGCACG': 2635, 'GGCACT': 2636, 'GGCAGA': 2637, 'GGCAGC': 2638, 'GGCAGG': 2639, 'GGCAGT': 2640, 'GGCATA': 2641, 'GGCATC': 2642, 'GGCATG': 2643, 'GGCATT': 2644, 'GGCCAA': 2645, 'GGCCAC': 2646, 'GGCCAG': 2647, 'GGCCAT': 2648, 'GGCCCA': 2649, 'GGCCCC': 2650, 'GGCCCG': 2651, 'GGCCCT': 2652, 'GGCCGA': 2653, 'GGCCGC': 2654, 'GGCCGG': 2655, 'GGCCGT': 2656, 'GGCCTA': 2657, 'GGCCTC': 2658, 'GGCCTG': 2659, 'GGCCTT': 2660, 'GGCGAA': 2661, 'GGCGAC': 2662, 'GGCGAG': 2663, 'GGCGAT': 2664, 'GGCGCA': 2665, 'GGCGCC': 2666, 'GGCGCG': 2667, 'GGCGCT': 2668, 'GGCGGA': 2669, 'GGCGGC': 2670, 'GGCGGG': 2671, 'GGCGGT': 2672, 'GGCGTA': 2673, 'GGCGTC': 2674, 'GGCGTG': 2675, 'GGCGTT': 2676, 'GGCTAA': 2677, 'GGCTAC': 2678, 'GGCTAG': 2679, 'GGCTAT': 2680, 'GGCTCA': 2681, 'GGCTCC': 2682, 'GGCTCG': 2683, 'GGCTCT': 2684, 'GGCTGA': 2685, 'GGCTGC': 2686, 'GGCTGG': 2687, 'GGCTGT': 2688, 'GGCTTA': 2689, 'GGCTTC': 2690, 'GGCTTG': 2691, 'GGCTTT': 2692, 'GGGAAA': 2693, 'GGGAAC': 2694, 'GGGAAG': 2695, 'GGGAAT': 2696, 'GGGACA': 2697, 'GGGACC': 2698, 'GGGACG': 2699, 'GGGACT': 2700, 'GGGAGA': 2701, 'GGGAGC': 2702, 'GGGAGG': 2703, 'GGGAGT': 2704, 'GGGATA': 2705, 'GGGATC': 2706, 'GGGATG': 2707, 'GGGATT': 2708, 'GGGCAA': 2709, 'GGGCAC': 2710, 'GGGCAG': 2711, 'GGGCAT': 2712, 'GGGCCA': 2713, 'GGGCCC': 2714, 'GGGCCG': 2715, 'GGGCCT': 2716, 'GGGCGA': 2717, 'GGGCGC': 2718, 'GGGCGG': 2719, 'GGGCGT': 2720, 'GGGCTA': 2721, 'GGGCTC': 2722, 'GGGCTG': 2723, 'GGGCTT': 2724, 'GGGGAA': 2725, 'GGGGAC': 2726, 'GGGGAG': 2727, 'GGGGAT': 2728, 'GGGGCA': 2729, 'GGGGCC': 2730, 'GGGGCG': 2731, 'GGGGCT': 2732, 'GGGGGA': 2733, 'GGGGGC': 2734, 'GGGGGG': 2735, 'GGGGGT': 2736, 'GGGGTA': 2737, 'GGGGTC': 2738, 'GGGGTG': 2739, 'GGGGTT': 2740, 'GGGTAA': 2741, 'GGGTAC': 2742, 'GGGTAG': 2743, 'GGGTAT': 2744, 'GGGTCA': 2745, 'GGGTCC': 2746, 'GGGTCG': 2747, 'GGGTCT': 2748, 'GGGTGA': 2749, 'GGGTGC': 2750, 'GGGTGG': 2751, 'GGGTGT': 2752, 'GGGTTA': 2753, 'GGGTTC': 2754, 'GGGTTG': 2755, 'GGGTTT': 2756, 'GGTAAA': 2757, 'GGTAAC': 2758, 'GGTAAG': 2759, 'GGTAAT': 2760, 'GGTACA': 2761, 'GGTACC': 2762, 'GGTACG': 2763, 'GGTACT': 2764, 'GGTAGA': 2765, 'GGTAGC': 2766, 'GGTAGG': 2767, 'GGTAGT': 2768, 'GGTATA': 2769, 'GGTATC': 2770, 'GGTATG': 2771, 'GGTATT': 2772, 'GGTCAA': 2773, 'GGTCAC': 2774, 'GGTCAG': 2775, 'GGTCAT': 2776, 'GGTCCA': 2777, 'GGTCCC': 2778, 'GGTCCG': 2779, 'GGTCCT': 2780, 'GGTCGA': 2781, 'GGTCGC': 2782, 'GGTCGG': 2783, 'GGTCGT': 2784, 'GGTCTA': 2785, 'GGTCTC': 2786, 'GGTCTG': 2787, 'GGTCTT': 2788, 'GGTGAA': 2789, 'GGTGAC': 2790, 'GGTGAG': 2791, 'GGTGAT': 2792, 'GGTGCA': 2793, 'GGTGCC': 2794, 'GGTGCG': 2795, 'GGTGCT': 2796, 'GGTGGA': 2797, 'GGTGGC': 2798, 'GGTGGG': 2799, 'GGTGGT': 2800, 'GGTGTA': 2801, 'GGTGTC': 2802, 'GGTGTG': 2803, 'GGTGTT': 2804, 'GGTTAA': 2805, 'GGTTAC': 2806, 'GGTTAG': 2807, 'GGTTAT': 2808, 'GGTTCA': 2809, 'GGTTCC': 2810, 'GGTTCG': 2811, 'GGTTCT': 2812, 'GGTTGA': 2813, 'GGTTGC': 2814, 'GGTTGG': 2815, 'GGTTGT': 2816, 'GGTTTA': 2817, 'GGTTTC': 2818, 'GGTTTG': 2819, 'GGTTTT': 2820, 'GTAAAA': 2821, 'GTAAAC': 2822, 'GTAAAG': 2823, 'GTAAAT': 2824, 'GTAACA': 2825, 'GTAACC': 2826, 'GTAACG': 2827, 'GTAACT': 2828, 'GTAAGA': 2829, 'GTAAGC': 2830, 'GTAAGG': 2831, 'GTAAGT': 2832, 'GTAATA': 2833, 'GTAATC': 2834, 'GTAATG': 2835, 'GTAATT': 2836, 'GTACAA': 2837, 'GTACAC': 2838, 'GTACAG': 2839, 'GTACAT': 2840, 'GTACCA': 2841, 'GTACCC': 2842, 'GTACCG': 2843, 'GTACCT': 2844, 'GTACGA': 2845, 'GTACGC': 2846, 'GTACGG': 2847, 'GTACGT': 2848, 'GTACTA': 2849, 'GTACTC': 2850, 'GTACTG': 2851, 'GTACTT': 2852, 'GTAGAA': 2853, 'GTAGAC': 2854, 'GTAGAG': 2855, 'GTAGAT': 2856, 'GTAGCA': 2857, 'GTAGCC': 2858, 'GTAGCG': 2859, 'GTAGCT': 2860, 'GTAGGA': 2861, 'GTAGGC': 2862, 'GTAGGG': 2863, 'GTAGGT': 2864, 'GTAGTA': 2865, 'GTAGTC': 2866, 'GTAGTG': 2867, 'GTAGTT': 2868, 'GTATAA': 2869, 'GTATAC': 2870, 'GTATAG': 2871, 'GTATAT': 2872, 'GTATCA': 2873, 'GTATCC': 2874, 'GTATCG': 2875, 'GTATCT': 2876, 'GTATGA': 2877, 'GTATGC': 2878, 'GTATGG': 2879, 'GTATGT': 2880, 'GTATTA': 2881, 'GTATTC': 2882, 'GTATTG': 2883, 'GTATTT': 2884, 'GTCAAA': 2885, 'GTCAAC': 2886, 'GTCAAG': 2887, 'GTCAAT': 2888, 'GTCACA': 2889, 'GTCACC': 2890, 'GTCACG': 2891, 'GTCACT': 2892, 'GTCAGA': 2893, 'GTCAGC': 2894, 'GTCAGG': 2895, 'GTCAGT': 2896, 'GTCATA': 2897, 'GTCATC': 2898, 'GTCATG': 2899, 'GTCATT': 2900, 'GTCCAA': 2901, 'GTCCAC': 2902, 'GTCCAG': 2903, 'GTCCAT': 2904, 'GTCCCA': 2905, 'GTCCCC': 2906, 'GTCCCG': 2907, 'GTCCCT': 2908, 'GTCCGA': 2909, 'GTCCGC': 2910, 'GTCCGG': 2911, 'GTCCGT': 2912, 'GTCCTA': 2913, 'GTCCTC': 2914, 'GTCCTG': 2915, 'GTCCTT': 2916, 'GTCGAA': 2917, 'GTCGAC': 2918, 'GTCGAG': 2919, 'GTCGAT': 2920, 'GTCGCA': 2921, 'GTCGCC': 2922, 'GTCGCG': 2923, 'GTCGCT': 2924, 'GTCGGA': 2925, 'GTCGGC': 2926, 'GTCGGG': 2927, 'GTCGGT': 2928, 'GTCGTA': 2929, 'GTCGTC': 2930, 'GTCGTG': 2931, 'GTCGTT': 2932, 'GTCTAA': 2933, 'GTCTAC': 2934, 'GTCTAG': 2935, 'GTCTAT': 2936, 'GTCTCA': 2937, 'GTCTCC': 2938, 'GTCTCG': 2939, 'GTCTCT': 2940, 'GTCTGA': 2941, 'GTCTGC': 2942, 'GTCTGG': 2943, 'GTCTGT': 2944, 'GTCTTA': 2945, 'GTCTTC': 2946, 'GTCTTG': 2947, 'GTCTTT': 2948, 'GTGAAA': 2949, 'GTGAAC': 2950, 'GTGAAG': 2951, 'GTGAAT': 2952, 'GTGACA': 2953, 'GTGACC': 2954, 'GTGACG': 2955, 'GTGACT': 2956, 'GTGAGA': 2957, 'GTGAGC': 2958, 'GTGAGG': 2959, 'GTGAGT': 2960, 'GTGATA': 2961, 'GTGATC': 2962, 'GTGATG': 2963, 'GTGATT': 2964, 'GTGCAA': 2965, 'GTGCAC': 2966, 'GTGCAG': 2967, 'GTGCAT': 2968, 'GTGCCA': 2969, 'GTGCCC': 2970, 'GTGCCG': 2971, 'GTGCCT': 2972, 'GTGCGA': 2973, 'GTGCGC': 2974, 'GTGCGG': 2975, 'GTGCGT': 2976, 'GTGCTA': 2977, 'GTGCTC': 2978, 'GTGCTG': 2979, 'GTGCTT': 2980, 'GTGGAA': 2981, 'GTGGAC': 2982, 'GTGGAG': 2983, 'GTGGAT': 2984, 'GTGGCA': 2985, 'GTGGCC': 2986, 'GTGGCG': 2987, 'GTGGCT': 2988, 'GTGGGA': 2989, 'GTGGGC': 2990, 'GTGGGG': 2991, 'GTGGGT': 2992, 'GTGGTA': 2993, 'GTGGTC': 2994, 'GTGGTG': 2995, 'GTGGTT': 2996, 'GTGTAA': 2997, 'GTGTAC': 2998, 'GTGTAG': 2999, 'GTGTAT': 3000, 'GTGTCA': 3001, 'GTGTCC': 3002, 'GTGTCG': 3003, 'GTGTCT': 3004, 'GTGTGA': 3005, 'GTGTGC': 3006, 'GTGTGG': 3007, 'GTGTGT': 3008, 'GTGTTA': 3009, 'GTGTTC': 3010, 'GTGTTG': 3011, 'GTGTTT': 3012, 'GTTAAA': 3013, 'GTTAAC': 3014, 'GTTAAG': 3015, 'GTTAAT': 3016, 'GTTACA': 3017, 'GTTACC': 3018, 'GTTACG': 3019, 'GTTACT': 3020, 'GTTAGA': 3021, 'GTTAGC': 3022, 'GTTAGG': 3023, 'GTTAGT': 3024, 'GTTATA': 3025, 'GTTATC': 3026, 'GTTATG': 3027, 'GTTATT': 3028, 'GTTCAA': 3029, 'GTTCAC': 3030, 'GTTCAG': 3031, 'GTTCAT': 3032, 'GTTCCA': 3033, 'GTTCCC': 3034, 'GTTCCG': 3035, 'GTTCCT': 3036, 'GTTCGA': 3037, 'GTTCGC': 3038, 'GTTCGG': 3039, 'GTTCGT': 3040, 'GTTCTA': 3041, 'GTTCTC': 3042, 'GTTCTG': 3043, 'GTTCTT': 3044, 'GTTGAA': 3045, 'GTTGAC': 3046, 'GTTGAG': 3047, 'GTTGAT': 3048, 'GTTGCA': 3049, 'GTTGCC': 3050, 'GTTGCG': 3051, 'GTTGCT': 3052, 'GTTGGA': 3053, 'GTTGGC': 3054, 'GTTGGG': 3055, 'GTTGGT': 3056, 'GTTGTA': 3057, 'GTTGTC': 3058, 'GTTGTG': 3059, 'GTTGTT': 3060, 'GTTTAA': 3061, 'GTTTAC': 3062, 'GTTTAG': 3063, 'GTTTAT': 3064, 'GTTTCA': 3065, 'GTTTCC': 3066, 'GTTTCG': 3067, 'GTTTCT': 3068, 'GTTTGA': 3069, 'GTTTGC': 3070, 'GTTTGG': 3071, 'GTTTGT': 3072, 'GTTTTA': 3073, 'GTTTTC': 3074, 'GTTTTG': 3075, 'GTTTTT': 3076, 'TAAAAA': 3077, 'TAAAAC': 3078, 'TAAAAG': 3079, 'TAAAAT': 3080, 'TAAACA': 3081, 'TAAACC': 3082, 'TAAACG': 3083, 'TAAACT': 3084, 'TAAAGA': 3085, 'TAAAGC': 3086, 'TAAAGG': 3087, 'TAAAGT': 3088, 'TAAATA': 3089, 'TAAATC': 3090, 'TAAATG': 3091, 'TAAATT': 3092, 'TAACAA': 3093, 'TAACAC': 3094, 'TAACAG': 3095, 'TAACAT': 3096, 'TAACCA': 3097, 'TAACCC': 3098, 'TAACCG': 3099, 'TAACCT': 3100, 'TAACGA': 3101, 'TAACGC': 3102, 'TAACGG': 3103, 'TAACGT': 3104, 'TAACTA': 3105, 'TAACTC': 3106, 'TAACTG': 3107, 'TAACTT': 3108, 'TAAGAA': 3109, 'TAAGAC': 3110, 'TAAGAG': 3111, 'TAAGAT': 3112, 'TAAGCA': 3113, 'TAAGCC': 3114, 'TAAGCG': 3115, 'TAAGCT': 3116, 'TAAGGA': 3117, 'TAAGGC': 3118, 'TAAGGG': 3119, 'TAAGGT': 3120, 'TAAGTA': 3121, 'TAAGTC': 3122, 'TAAGTG': 3123, 'TAAGTT': 3124, 'TAATAA': 3125, 'TAATAC': 3126, 'TAATAG': 3127, 'TAATAT': 3128, 'TAATCA': 3129, 'TAATCC': 3130, 'TAATCG': 3131, 'TAATCT': 3132, 'TAATGA': 3133, 'TAATGC': 3134, 'TAATGG': 3135, 'TAATGT': 3136, 'TAATTA': 3137, 'TAATTC': 3138, 'TAATTG': 3139, 'TAATTT': 3140, 'TACAAA': 3141, 'TACAAC': 3142, 'TACAAG': 3143, 'TACAAT': 3144, 'TACACA': 3145, 'TACACC': 3146, 'TACACG': 3147, 'TACACT': 3148, 'TACAGA': 3149, 'TACAGC': 3150, 'TACAGG': 3151, 'TACAGT': 3152, 'TACATA': 3153, 'TACATC': 3154, 'TACATG': 3155, 'TACATT': 3156, 'TACCAA': 3157, 'TACCAC': 3158, 'TACCAG': 3159, 'TACCAT': 3160, 'TACCCA': 3161, 'TACCCC': 3162, 'TACCCG': 3163, 'TACCCT': 3164, 'TACCGA': 3165, 'TACCGC': 3166, 'TACCGG': 3167, 'TACCGT': 3168, 'TACCTA': 3169, 'TACCTC': 3170, 'TACCTG': 3171, 'TACCTT': 3172, 'TACGAA': 3173, 'TACGAC': 3174, 'TACGAG': 3175, 'TACGAT': 3176, 'TACGCA': 3177, 'TACGCC': 3178, 'TACGCG': 3179, 'TACGCT': 3180, 'TACGGA': 3181, 'TACGGC': 3182, 'TACGGG': 3183, 'TACGGT': 3184, 'TACGTA': 3185, 'TACGTC': 3186, 'TACGTG': 3187, 'TACGTT': 3188, 'TACTAA': 3189, 'TACTAC': 3190, 'TACTAG': 3191, 'TACTAT': 3192, 'TACTCA': 3193, 'TACTCC': 3194, 'TACTCG': 3195, 'TACTCT': 3196, 'TACTGA': 3197, 'TACTGC': 3198, 'TACTGG': 3199, 'TACTGT': 3200, 'TACTTA': 3201, 'TACTTC': 3202, 'TACTTG': 3203, 'TACTTT': 3204, 'TAGAAA': 3205, 'TAGAAC': 3206, 'TAGAAG': 3207, 'TAGAAT': 3208, 'TAGACA': 3209, 'TAGACC': 3210, 'TAGACG': 3211, 'TAGACT': 3212, 'TAGAGA': 3213, 'TAGAGC': 3214, 'TAGAGG': 3215, 'TAGAGT': 3216, 'TAGATA': 3217, 'TAGATC': 3218, 'TAGATG': 3219, 'TAGATT': 3220, 'TAGCAA': 3221, 'TAGCAC': 3222, 'TAGCAG': 3223, 'TAGCAT': 3224, 'TAGCCA': 3225, 'TAGCCC': 3226, 'TAGCCG': 3227, 'TAGCCT': 3228, 'TAGCGA': 3229, 'TAGCGC': 3230, 'TAGCGG': 3231, 'TAGCGT': 3232, 'TAGCTA': 3233, 'TAGCTC': 3234, 'TAGCTG': 3235, 'TAGCTT': 3236, 'TAGGAA': 3237, 'TAGGAC': 3238, 'TAGGAG': 3239, 'TAGGAT': 3240, 'TAGGCA': 3241, 'TAGGCC': 3242, 'TAGGCG': 3243, 'TAGGCT': 3244, 'TAGGGA': 3245, 'TAGGGC': 3246, 'TAGGGG': 3247, 'TAGGGT': 3248, 'TAGGTA': 3249, 'TAGGTC': 3250, 'TAGGTG': 3251, 'TAGGTT': 3252, 'TAGTAA': 3253, 'TAGTAC': 3254, 'TAGTAG': 3255, 'TAGTAT': 3256, 'TAGTCA': 3257, 'TAGTCC': 3258, 'TAGTCG': 3259, 'TAGTCT': 3260, 'TAGTGA': 3261, 'TAGTGC': 3262, 'TAGTGG': 3263, 'TAGTGT': 3264, 'TAGTTA': 3265, 'TAGTTC': 3266, 'TAGTTG': 3267, 'TAGTTT': 3268, 'TATAAA': 3269, 'TATAAC': 3270, 'TATAAG': 3271, 'TATAAT': 3272, 'TATACA': 3273, 'TATACC': 3274, 'TATACG': 3275, 'TATACT': 3276, 'TATAGA': 3277, 'TATAGC': 3278, 'TATAGG': 3279, 'TATAGT': 3280, 'TATATA': 3281, 'TATATC': 3282, 'TATATG': 3283, 'TATATT': 3284, 'TATCAA': 3285, 'TATCAC': 3286, 'TATCAG': 3287, 'TATCAT': 3288, 'TATCCA': 3289, 'TATCCC': 3290, 'TATCCG': 3291, 'TATCCT': 3292, 'TATCGA': 3293, 'TATCGC': 3294, 'TATCGG': 3295, 'TATCGT': 3296, 'TATCTA': 3297, 'TATCTC': 3298, 'TATCTG': 3299, 'TATCTT': 3300, 'TATGAA': 3301, 'TATGAC': 3302, 'TATGAG': 3303, 'TATGAT': 3304, 'TATGCA': 3305, 'TATGCC': 3306, 'TATGCG': 3307, 'TATGCT': 3308, 'TATGGA': 3309, 'TATGGC': 3310, 'TATGGG': 3311, 'TATGGT': 3312, 'TATGTA': 3313, 'TATGTC': 3314, 'TATGTG': 3315, 'TATGTT': 3316, 'TATTAA': 3317, 'TATTAC': 3318, 'TATTAG': 3319, 'TATTAT': 3320, 'TATTCA': 3321, 'TATTCC': 3322, 'TATTCG': 3323, 'TATTCT': 3324, 'TATTGA': 3325, 'TATTGC': 3326, 'TATTGG': 3327, 'TATTGT': 3328, 'TATTTA': 3329, 'TATTTC': 3330, 'TATTTG': 3331, 'TATTTT': 3332, 'TCAAAA': 3333, 'TCAAAC': 3334, 'TCAAAG': 3335, 'TCAAAT': 3336, 'TCAACA': 3337, 'TCAACC': 3338, 'TCAACG': 3339, 'TCAACT': 3340, 'TCAAGA': 3341, 'TCAAGC': 3342, 'TCAAGG': 3343, 'TCAAGT': 3344, 'TCAATA': 3345, 'TCAATC': 3346, 'TCAATG': 3347, 'TCAATT': 3348, 'TCACAA': 3349, 'TCACAC': 3350, 'TCACAG': 3351, 'TCACAT': 3352, 'TCACCA': 3353, 'TCACCC': 3354, 'TCACCG': 3355, 'TCACCT': 3356, 'TCACGA': 3357, 'TCACGC': 3358, 'TCACGG': 3359, 'TCACGT': 3360, 'TCACTA': 3361, 'TCACTC': 3362, 'TCACTG': 3363, 'TCACTT': 3364, 'TCAGAA': 3365, 'TCAGAC': 3366, 'TCAGAG': 3367, 'TCAGAT': 3368, 'TCAGCA': 3369, 'TCAGCC': 3370, 'TCAGCG': 3371, 'TCAGCT': 3372, 'TCAGGA': 3373, 'TCAGGC': 3374, 'TCAGGG': 3375, 'TCAGGT': 3376, 'TCAGTA': 3377, 'TCAGTC': 3378, 'TCAGTG': 3379, 'TCAGTT': 3380, 'TCATAA': 3381, 'TCATAC': 3382, 'TCATAG': 3383, 'TCATAT': 3384, 'TCATCA': 3385, 'TCATCC': 3386, 'TCATCG': 3387, 'TCATCT': 3388, 'TCATGA': 3389, 'TCATGC': 3390, 'TCATGG': 3391, 'TCATGT': 3392, 'TCATTA': 3393, 'TCATTC': 3394, 'TCATTG': 3395, 'TCATTT': 3396, 'TCCAAA': 3397, 'TCCAAC': 3398, 'TCCAAG': 3399, 'TCCAAT': 3400, 'TCCACA': 3401, 'TCCACC': 3402, 'TCCACG': 3403, 'TCCACT': 3404, 'TCCAGA': 3405, 'TCCAGC': 3406, 'TCCAGG': 3407, 'TCCAGT': 3408, 'TCCATA': 3409, 'TCCATC': 3410, 'TCCATG': 3411, 'TCCATT': 3412, 'TCCCAA': 3413, 'TCCCAC': 3414, 'TCCCAG': 3415, 'TCCCAT': 3416, 'TCCCCA': 3417, 'TCCCCC': 3418, 'TCCCCG': 3419, 'TCCCCT': 3420, 'TCCCGA': 3421, 'TCCCGC': 3422, 'TCCCGG': 3423, 'TCCCGT': 3424, 'TCCCTA': 3425, 'TCCCTC': 3426, 'TCCCTG': 3427, 'TCCCTT': 3428, 'TCCGAA': 3429, 'TCCGAC': 3430, 'TCCGAG': 3431, 'TCCGAT': 3432, 'TCCGCA': 3433, 'TCCGCC': 3434, 'TCCGCG': 3435, 'TCCGCT': 3436, 'TCCGGA': 3437, 'TCCGGC': 3438, 'TCCGGG': 3439, 'TCCGGT': 3440, 'TCCGTA': 3441, 'TCCGTC': 3442, 'TCCGTG': 3443, 'TCCGTT': 3444, 'TCCTAA': 3445, 'TCCTAC': 3446, 'TCCTAG': 3447, 'TCCTAT': 3448, 'TCCTCA': 3449, 'TCCTCC': 3450, 'TCCTCG': 3451, 'TCCTCT': 3452, 'TCCTGA': 3453, 'TCCTGC': 3454, 'TCCTGG': 3455, 'TCCTGT': 3456, 'TCCTTA': 3457, 'TCCTTC': 3458, 'TCCTTG': 3459, 'TCCTTT': 3460, 'TCGAAA': 3461, 'TCGAAC': 3462, 'TCGAAG': 3463, 'TCGAAT': 3464, 'TCGACA': 3465, 'TCGACC': 3466, 'TCGACG': 3467, 'TCGACT': 3468, 'TCGAGA': 3469, 'TCGAGC': 3470, 'TCGAGG': 3471, 'TCGAGT': 3472, 'TCGATA': 3473, 'TCGATC': 3474, 'TCGATG': 3475, 'TCGATT': 3476, 'TCGCAA': 3477, 'TCGCAC': 3478, 'TCGCAG': 3479, 'TCGCAT': 3480, 'TCGCCA': 3481, 'TCGCCC': 3482, 'TCGCCG': 3483, 'TCGCCT': 3484, 'TCGCGA': 3485, 'TCGCGC': 3486, 'TCGCGG': 3487, 'TCGCGT': 3488, 'TCGCTA': 3489, 'TCGCTC': 3490, 'TCGCTG': 3491, 'TCGCTT': 3492, 'TCGGAA': 3493, 'TCGGAC': 3494, 'TCGGAG': 3495, 'TCGGAT': 3496, 'TCGGCA': 3497, 'TCGGCC': 3498, 'TCGGCG': 3499, 'TCGGCT': 3500, 'TCGGGA': 3501, 'TCGGGC': 3502, 'TCGGGG': 3503, 'TCGGGT': 3504, 'TCGGTA': 3505, 'TCGGTC': 3506, 'TCGGTG': 3507, 'TCGGTT': 3508, 'TCGTAA': 3509, 'TCGTAC': 3510, 'TCGTAG': 3511, 'TCGTAT': 3512, 'TCGTCA': 3513, 'TCGTCC': 3514, 'TCGTCG': 3515, 'TCGTCT': 3516, 'TCGTGA': 3517, 'TCGTGC': 3518, 'TCGTGG': 3519, 'TCGTGT': 3520, 'TCGTTA': 3521, 'TCGTTC': 3522, 'TCGTTG': 3523, 'TCGTTT': 3524, 'TCTAAA': 3525, 'TCTAAC': 3526, 'TCTAAG': 3527, 'TCTAAT': 3528, 'TCTACA': 3529, 'TCTACC': 3530, 'TCTACG': 3531, 'TCTACT': 3532, 'TCTAGA': 3533, 'TCTAGC': 3534, 'TCTAGG': 3535, 'TCTAGT': 3536, 'TCTATA': 3537, 'TCTATC': 3538, 'TCTATG': 3539, 'TCTATT': 3540, 'TCTCAA': 3541, 'TCTCAC': 3542, 'TCTCAG': 3543, 'TCTCAT': 3544, 'TCTCCA': 3545, 'TCTCCC': 3546, 'TCTCCG': 3547, 'TCTCCT': 3548, 'TCTCGA': 3549, 'TCTCGC': 3550, 'TCTCGG': 3551, 'TCTCGT': 3552, 'TCTCTA': 3553, 'TCTCTC': 3554, 'TCTCTG': 3555, 'TCTCTT': 3556, 'TCTGAA': 3557, 'TCTGAC': 3558, 'TCTGAG': 3559, 'TCTGAT': 3560, 'TCTGCA': 3561, 'TCTGCC': 3562, 'TCTGCG': 3563, 'TCTGCT': 3564, 'TCTGGA': 3565, 'TCTGGC': 3566, 'TCTGGG': 3567, 'TCTGGT': 3568, 'TCTGTA': 3569, 'TCTGTC': 3570, 'TCTGTG': 3571, 'TCTGTT': 3572, 'TCTTAA': 3573, 'TCTTAC': 3574, 'TCTTAG': 3575, 'TCTTAT': 3576, 'TCTTCA': 3577, 'TCTTCC': 3578, 'TCTTCG': 3579, 'TCTTCT': 3580, 'TCTTGA': 3581, 'TCTTGC': 3582, 'TCTTGG': 3583, 'TCTTGT': 3584, 'TCTTTA': 3585, 'TCTTTC': 3586, 'TCTTTG': 3587, 'TCTTTT': 3588, 'TGAAAA': 3589, 'TGAAAC': 3590, 'TGAAAG': 3591, 'TGAAAT': 3592, 'TGAACA': 3593, 'TGAACC': 3594, 'TGAACG': 3595, 'TGAACT': 3596, 'TGAAGA': 3597, 'TGAAGC': 3598, 'TGAAGG': 3599, 'TGAAGT': 3600, 'TGAATA': 3601, 'TGAATC': 3602, 'TGAATG': 3603, 'TGAATT': 3604, 'TGACAA': 3605, 'TGACAC': 3606, 'TGACAG': 3607, 'TGACAT': 3608, 'TGACCA': 3609, 'TGACCC': 3610, 'TGACCG': 3611, 'TGACCT': 3612, 'TGACGA': 3613, 'TGACGC': 3614, 'TGACGG': 3615, 'TGACGT': 3616, 'TGACTA': 3617, 'TGACTC': 3618, 'TGACTG': 3619, 'TGACTT': 3620, 'TGAGAA': 3621, 'TGAGAC': 3622, 'TGAGAG': 3623, 'TGAGAT': 3624, 'TGAGCA': 3625, 'TGAGCC': 3626, 'TGAGCG': 3627, 'TGAGCT': 3628, 'TGAGGA': 3629, 'TGAGGC': 3630, 'TGAGGG': 3631, 'TGAGGT': 3632, 'TGAGTA': 3633, 'TGAGTC': 3634, 'TGAGTG': 3635, 'TGAGTT': 3636, 'TGATAA': 3637, 'TGATAC': 3638, 'TGATAG': 3639, 'TGATAT': 3640, 'TGATCA': 3641, 'TGATCC': 3642, 'TGATCG': 3643, 'TGATCT': 3644, 'TGATGA': 3645, 'TGATGC': 3646, 'TGATGG': 3647, 'TGATGT': 3648, 'TGATTA': 3649, 'TGATTC': 3650, 'TGATTG': 3651, 'TGATTT': 3652, 'TGCAAA': 3653, 'TGCAAC': 3654, 'TGCAAG': 3655, 'TGCAAT': 3656, 'TGCACA': 3657, 'TGCACC': 3658, 'TGCACG': 3659, 'TGCACT': 3660, 'TGCAGA': 3661, 'TGCAGC': 3662, 'TGCAGG': 3663, 'TGCAGT': 3664, 'TGCATA': 3665, 'TGCATC': 3666, 'TGCATG': 3667, 'TGCATT': 3668, 'TGCCAA': 3669, 'TGCCAC': 3670, 'TGCCAG': 3671, 'TGCCAT': 3672, 'TGCCCA': 3673, 'TGCCCC': 3674, 'TGCCCG': 3675, 'TGCCCT': 3676, 'TGCCGA': 3677, 'TGCCGC': 3678, 'TGCCGG': 3679, 'TGCCGT': 3680, 'TGCCTA': 3681, 'TGCCTC': 3682, 'TGCCTG': 3683, 'TGCCTT': 3684, 'TGCGAA': 3685, 'TGCGAC': 3686, 'TGCGAG': 3687, 'TGCGAT': 3688, 'TGCGCA': 3689, 'TGCGCC': 3690, 'TGCGCG': 3691, 'TGCGCT': 3692, 'TGCGGA': 3693, 'TGCGGC': 3694, 'TGCGGG': 3695, 'TGCGGT': 3696, 'TGCGTA': 3697, 'TGCGTC': 3698, 'TGCGTG': 3699, 'TGCGTT': 3700, 'TGCTAA': 3701, 'TGCTAC': 3702, 'TGCTAG': 3703, 'TGCTAT': 3704, 'TGCTCA': 3705, 'TGCTCC': 3706, 'TGCTCG': 3707, 'TGCTCT': 3708, 'TGCTGA': 3709, 'TGCTGC': 3710, 'TGCTGG': 3711, 'TGCTGT': 3712, 'TGCTTA': 3713, 'TGCTTC': 3714, 'TGCTTG': 3715, 'TGCTTT': 3716, 'TGGAAA': 3717, 'TGGAAC': 3718, 'TGGAAG': 3719, 'TGGAAT': 3720, 'TGGACA': 3721, 'TGGACC': 3722, 'TGGACG': 3723, 'TGGACT': 3724, 'TGGAGA': 3725, 'TGGAGC': 3726, 'TGGAGG': 3727, 'TGGAGT': 3728, 'TGGATA': 3729, 'TGGATC': 3730, 'TGGATG': 3731, 'TGGATT': 3732, 'TGGCAA': 3733, 'TGGCAC': 3734, 'TGGCAG': 3735, 'TGGCAT': 3736, 'TGGCCA': 3737, 'TGGCCC': 3738, 'TGGCCG': 3739, 'TGGCCT': 3740, 'TGGCGA': 3741, 'TGGCGC': 3742, 'TGGCGG': 3743, 'TGGCGT': 3744, 'TGGCTA': 3745, 'TGGCTC': 3746, 'TGGCTG': 3747, 'TGGCTT': 3748, 'TGGGAA': 3749, 'TGGGAC': 3750, 'TGGGAG': 3751, 'TGGGAT': 3752, 'TGGGCA': 3753, 'TGGGCC': 3754, 'TGGGCG': 3755, 'TGGGCT': 3756, 'TGGGGA': 3757, 'TGGGGC': 3758, 'TGGGGG': 3759, 'TGGGGT': 3760, 'TGGGTA': 3761, 'TGGGTC': 3762, 'TGGGTG': 3763, 'TGGGTT': 3764, 'TGGTAA': 3765, 'TGGTAC': 3766, 'TGGTAG': 3767, 'TGGTAT': 3768, 'TGGTCA': 3769, 'TGGTCC': 3770, 'TGGTCG': 3771, 'TGGTCT': 3772, 'TGGTGA': 3773, 'TGGTGC': 3774, 'TGGTGG': 3775, 'TGGTGT': 3776, 'TGGTTA': 3777, 'TGGTTC': 3778, 'TGGTTG': 3779, 'TGGTTT': 3780, 'TGTAAA': 3781, 'TGTAAC': 3782, 'TGTAAG': 3783, 'TGTAAT': 3784, 'TGTACA': 3785, 'TGTACC': 3786, 'TGTACG': 3787, 'TGTACT': 3788, 'TGTAGA': 3789, 'TGTAGC': 3790, 'TGTAGG': 3791, 'TGTAGT': 3792, 'TGTATA': 3793, 'TGTATC': 3794, 'TGTATG': 3795, 'TGTATT': 3796, 'TGTCAA': 3797, 'TGTCAC': 3798, 'TGTCAG': 3799, 'TGTCAT': 3800, 'TGTCCA': 3801, 'TGTCCC': 3802, 'TGTCCG': 3803, 'TGTCCT': 3804, 'TGTCGA': 3805, 'TGTCGC': 3806, 'TGTCGG': 3807, 'TGTCGT': 3808, 'TGTCTA': 3809, 'TGTCTC': 3810, 'TGTCTG': 3811, 'TGTCTT': 3812, 'TGTGAA': 3813, 'TGTGAC': 3814, 'TGTGAG': 3815, 'TGTGAT': 3816, 'TGTGCA': 3817, 'TGTGCC': 3818, 'TGTGCG': 3819, 'TGTGCT': 3820, 'TGTGGA': 3821, 'TGTGGC': 3822, 'TGTGGG': 3823, 'TGTGGT': 3824, 'TGTGTA': 3825, 'TGTGTC': 3826, 'TGTGTG': 3827, 'TGTGTT': 3828, 'TGTTAA': 3829, 'TGTTAC': 3830, 'TGTTAG': 3831, 'TGTTAT': 3832, 'TGTTCA': 3833, 'TGTTCC': 3834, 'TGTTCG': 3835, 'TGTTCT': 3836, 'TGTTGA': 3837, 'TGTTGC': 3838, 'TGTTGG': 3839, 'TGTTGT': 3840, 'TGTTTA': 3841, 'TGTTTC': 3842, 'TGTTTG': 3843, 'TGTTTT': 3844, 'TTAAAA': 3845, 'TTAAAC': 3846, 'TTAAAG': 3847, 'TTAAAT': 3848, 'TTAACA': 3849, 'TTAACC': 3850, 'TTAACG': 3851, 'TTAACT': 3852, 'TTAAGA': 3853, 'TTAAGC': 3854, 'TTAAGG': 3855, 'TTAAGT': 3856, 'TTAATA': 3857, 'TTAATC': 3858, 'TTAATG': 3859, 'TTAATT': 3860, 'TTACAA': 3861, 'TTACAC': 3862, 'TTACAG': 3863, 'TTACAT': 3864, 'TTACCA': 3865, 'TTACCC': 3866, 'TTACCG': 3867, 'TTACCT': 3868, 'TTACGA': 3869, 'TTACGC': 3870, 'TTACGG': 3871, 'TTACGT': 3872, 'TTACTA': 3873, 'TTACTC': 3874, 'TTACTG': 3875, 'TTACTT': 3876, 'TTAGAA': 3877, 'TTAGAC': 3878, 'TTAGAG': 3879, 'TTAGAT': 3880, 'TTAGCA': 3881, 'TTAGCC': 3882, 'TTAGCG': 3883, 'TTAGCT': 3884, 'TTAGGA': 3885, 'TTAGGC': 3886, 'TTAGGG': 3887, 'TTAGGT': 3888, 'TTAGTA': 3889, 'TTAGTC': 3890, 'TTAGTG': 3891, 'TTAGTT': 3892, 'TTATAA': 3893, 'TTATAC': 3894, 'TTATAG': 3895, 'TTATAT': 3896, 'TTATCA': 3897, 'TTATCC': 3898, 'TTATCG': 3899, 'TTATCT': 3900, 'TTATGA': 3901, 'TTATGC': 3902, 'TTATGG': 3903, 'TTATGT': 3904, 'TTATTA': 3905, 'TTATTC': 3906, 'TTATTG': 3907, 'TTATTT': 3908, 'TTCAAA': 3909, 'TTCAAC': 3910, 'TTCAAG': 3911, 'TTCAAT': 3912, 'TTCACA': 3913, 'TTCACC': 3914, 'TTCACG': 3915, 'TTCACT': 3916, 'TTCAGA': 3917, 'TTCAGC': 3918, 'TTCAGG': 3919, 'TTCAGT': 3920, 'TTCATA': 3921, 'TTCATC': 3922, 'TTCATG': 3923, 'TTCATT': 3924, 'TTCCAA': 3925, 'TTCCAC': 3926, 'TTCCAG': 3927, 'TTCCAT': 3928, 'TTCCCA': 3929, 'TTCCCC': 3930, 'TTCCCG': 3931, 'TTCCCT': 3932, 'TTCCGA': 3933, 'TTCCGC': 3934, 'TTCCGG': 3935, 'TTCCGT': 3936, 'TTCCTA': 3937, 'TTCCTC': 3938, 'TTCCTG': 3939, 'TTCCTT': 3940, 'TTCGAA': 3941, 'TTCGAC': 3942, 'TTCGAG': 3943, 'TTCGAT': 3944, 'TTCGCA': 3945, 'TTCGCC': 3946, 'TTCGCG': 3947, 'TTCGCT': 3948, 'TTCGGA': 3949, 'TTCGGC': 3950, 'TTCGGG': 3951, 'TTCGGT': 3952, 'TTCGTA': 3953, 'TTCGTC': 3954, 'TTCGTG': 3955, 'TTCGTT': 3956, 'TTCTAA': 3957, 'TTCTAC': 3958, 'TTCTAG': 3959, 'TTCTAT': 3960, 'TTCTCA': 3961, 'TTCTCC': 3962, 'TTCTCG': 3963, 'TTCTCT': 3964, 'TTCTGA': 3965, 'TTCTGC': 3966, 'TTCTGG': 3967, 'TTCTGT': 3968, 'TTCTTA': 3969, 'TTCTTC': 3970, 'TTCTTG': 3971, 'TTCTTT': 3972, 'TTGAAA': 3973, 'TTGAAC': 3974, 'TTGAAG': 3975, 'TTGAAT': 3976, 'TTGACA': 3977, 'TTGACC': 3978, 'TTGACG': 3979, 'TTGACT': 3980, 'TTGAGA': 3981, 'TTGAGC': 3982, 'TTGAGG': 3983, 'TTGAGT': 3984, 'TTGATA': 3985, 'TTGATC': 3986, 'TTGATG': 3987, 'TTGATT': 3988, 'TTGCAA': 3989, 'TTGCAC': 3990, 'TTGCAG': 3991, 'TTGCAT': 3992, 'TTGCCA': 3993, 'TTGCCC': 3994, 'TTGCCG': 3995, 'TTGCCT': 3996, 'TTGCGA': 3997, 'TTGCGC': 3998, 'TTGCGG': 3999, 'TTGCGT': 4000, 'TTGCTA': 4001, 'TTGCTC': 4002, 'TTGCTG': 4003, 'TTGCTT': 4004, 'TTGGAA': 4005, 'TTGGAC': 4006, 'TTGGAG': 4007, 'TTGGAT': 4008, 'TTGGCA': 4009, 'TTGGCC': 4010, 'TTGGCG': 4011, 'TTGGCT': 4012, 'TTGGGA': 4013, 'TTGGGC': 4014, 'TTGGGG': 4015, 'TTGGGT': 4016, 'TTGGTA': 4017, 'TTGGTC': 4018, 'TTGGTG': 4019, 'TTGGTT': 4020, 'TTGTAA': 4021, 'TTGTAC': 4022, 'TTGTAG': 4023, 'TTGTAT': 4024, 'TTGTCA': 4025, 'TTGTCC': 4026, 'TTGTCG': 4027, 'TTGTCT': 4028, 'TTGTGA': 4029, 'TTGTGC': 4030, 'TTGTGG': 4031, 'TTGTGT': 4032, 'TTGTTA': 4033, 'TTGTTC': 4034, 'TTGTTG': 4035, 'TTGTTT': 4036, 'TTTAAA': 4037, 'TTTAAC': 4038, 'TTTAAG': 4039, 'TTTAAT': 4040, 'TTTACA': 4041, 'TTTACC': 4042, 'TTTACG': 4043, 'TTTACT': 4044, 'TTTAGA': 4045, 'TTTAGC': 4046, 'TTTAGG': 4047, 'TTTAGT': 4048, 'TTTATA': 4049, 'TTTATC': 4050, 'TTTATG': 4051, 'TTTATT': 4052, 'TTTCAA': 4053, 'TTTCAC': 4054, 'TTTCAG': 4055, 'TTTCAT': 4056, 'TTTCCA': 4057, 'TTTCCC': 4058, 'TTTCCG': 4059, 'TTTCCT': 4060, 'TTTCGA': 4061, 'TTTCGC': 4062, 'TTTCGG': 4063, 'TTTCGT': 4064, 'TTTCTA': 4065, 'TTTCTC': 4066, 'TTTCTG': 4067, 'TTTCTT': 4068, 'TTTGAA': 4069, 'TTTGAC': 4070, 'TTTGAG': 4071, 'TTTGAT': 4072, 'TTTGCA': 4073, 'TTTGCC': 4074, 'TTTGCG': 4075, 'TTTGCT': 4076, 'TTTGGA': 4077, 'TTTGGC': 4078, 'TTTGGG': 4079, 'TTTGGT': 4080, 'TTTGTA': 4081, 'TTTGTC': 4082, 'TTTGTG': 4083, 'TTTGTT': 4084, 'TTTTAA': 4085, 'TTTTAC': 4086, 'TTTTAG': 4087, 'TTTTAT': 4088, 'TTTTCA': 4089, 'TTTTCC': 4090, 'TTTTCG': 4091, 'TTTTCT': 4092, 'TTTTGA': 4093, 'TTTTGC': 4094, 'TTTTGG': 4095, 'TTTTGT': 4096, 'TTTTTA': 4097, 'TTTTTC': 4098, 'TTTTTG': 4099, 'TTTTTT': 4100}}\n"
+      "/home/ligeti/github/prokbert/src/prokbert\n"
      ]
     },
     {
-     "data": {
-      "text/plain": [
-       "120"
-      ]
-     },
-     "execution_count": 49,
-     "metadata": {},
-     "output_type": "execute_result"
+     "ename": "TypeError",
+     "evalue": "get_maximum_token_count_from_max_length() missing 3 required positional arguments: 'max_segment_length', 'shift', and 'kmer'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[7], line 9\u001b[0m\n\u001b[1;32m      6\u001b[0m tokenization_params \u001b[38;5;241m=\u001b[39m defconfig\u001b[38;5;241m.\u001b[39mget_and_set_tokenization_params({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmax_segment_length\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m81\u001b[39m,\n\u001b[1;32m      7\u001b[0m                                                                 \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshift\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m2\u001b[39m})\n\u001b[1;32m      8\u001b[0m \u001b[38;5;66;03m#print(tokenization_params)\u001b[39;00m\n\u001b[0;32m----> 9\u001b[0m \u001b[43mdefconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_maximum_token_count_from_max_length\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     11\u001b[0m tokenization_params \u001b[38;5;241m=\u001b[39m defconfig\u001b[38;5;241m.\u001b[39mget_and_set_tokenization_params({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken_limit\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m41\u001b[39m,\n\u001b[1;32m     12\u001b[0m                                                                 \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshift\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m3\u001b[39m})\n\u001b[1;32m     13\u001b[0m \u001b[38;5;66;03m#print(tokenization_params)\u001b[39;00m\n",
+      "\u001b[0;31mTypeError\u001b[0m: get_maximum_token_count_from_max_length() missing 3 required positional arguments: 'max_segment_length', 'shift', and 'kmer'"
+     ]
     }
    ],
    "source": [
     "tokenization_params = defconfig.get_and_set_tokenization_params({'token_limit' : 78})\n",
-    "print(tokenization_params)\n",
-    "defconfig.get_maximum_segment_length_from_token_count()\n",
+    "#print(tokenization_params)\n",
+    "defconfig.get_maximum_segment_length_from_token_count_from_params()\n",
     "\n",
     "\n",
     "tokenization_params = defconfig.get_and_set_tokenization_params({'max_segment_length' : 81,\n",
     "                                                                'shift' : 2})\n",
-    "print(tokenization_params)\n",
+    "#print(tokenization_params)\n",
     "defconfig.get_maximum_token_count_from_max_length()\n",
     "\n",
     "tokenization_params = defconfig.get_and_set_tokenization_params({'token_limit' : 41,\n",
     "                                                                'shift': 3})\n",
-    "print(tokenization_params)\n",
-    "defconfig.get_maximum_segment_length_from_token_count()\n"
+    "#print(tokenization_params)\n",
+    "defconfig.get_maximum_token_count_from_max_length_from_params()\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": null,
    "id": "b8d4cd70-40c8-4319-8155-c0923601cf28",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'type': 'lca',\n",
-       " 'kmer': 6,\n",
-       " 'shift': 1,\n",
-       " 'max_segment_length': 1027,\n",
-       " 'token_limit': 1024,\n",
-       " 'max_unknown_token_proportion': None}"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
     "tokenization_params\n",
     "#tokenization_params['token_limit']\n"
@@ -165,26 +145,10 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": null,
    "id": "66b965fe-b69c-476a-94d6-18d2c1f96459",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'type': 'lca',\n",
-       " 'kmer': 6,\n",
-       " 'shift': 1,\n",
-       " 'max_segment_length': 1027,\n",
-       " 'token_limit': 1024,\n",
-       " 'max_unknown_token_proportion': None}"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
     "defconfig.tokenization_params"
    ]
@@ -205,7 +169,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 46,
+   "execution_count": null,
    "id": "a3800873-fd51-4635-ac5f-c963b43ea178",
    "metadata": {},
    "outputs": [],
@@ -217,21 +181,10 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 52,
+   "execution_count": null,
    "id": "84df7981-ae24-4756-97b1-24da507d0ee0",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "81"
-      ]
-     },
-     "execution_count": 52,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
     "#SeqConfig.get_maximum_segment_length_from_token_count(78, 1, 6)\n",
     "#SeqConfig.get_maximum_segment_length_from_token_count(78, 1, 6)\n"
diff --git a/src/prokbert/dev_notebooks/dev_tokenizer.ipynb b/src/prokbert/dev_notebooks/dev_tokenizer.ipynb
index 876b8d4..f2bc3a3 100644
--- a/src/prokbert/dev_notebooks/dev_tokenizer.ipynb
+++ b/src/prokbert/dev_notebooks/dev_tokenizer.ipynb
@@ -11,19 +11,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 3,
    "id": "41f2e15d-3056-412c-bbcc-0661c3af360b",
    "metadata": {
     "scrolled": true
    },
    "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2023-08-13 22:02:12,434 - INFO - Nr. line to cover the seq:  4\n"
-     ]
-    },
     {
      "name": "stdout",
      "output_type": "stream",
@@ -37,29 +30,19 @@
       "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
       "/home/ligeti/github/prokbert/src/prokbert\n",
       "/home/ligeti/github/prokbert/src/prokbert\n",
-      "Segment sequence AATCAAGGAATTATTATCGTT\n",
-      "Tokens:   \n",
-      "[2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3]\n",
-      "[2, 839, 1069, 648, 2113, 980, 3320, 3899, 884, 3]\n",
-      "___________________\n",
-      "Kmers:   \n",
-      "['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT']\n",
-      "['ATCAAG', 'CAAGGA', 'AGGAAT', 'GAATTA', 'ATTATT', 'TATTAT', 'TTATCG', 'ATCGTT']\n",
-      "___________________\n",
-      "Restore the original string:\n",
-      "[]\n",
-      "['AATCAA']\n",
-      "    AATCAAGGAATTATTATCGT\n",
-      "    AATCAAGGAATTATTATCGTT\n",
-      "0.  AATCAA  AATTAT\n",
-      "1.    TCAAGG  TTATTA\n",
-      "2.      AAGGAA  ATTATC\n",
-      "3.        GGAATT  TATCGT\n",
-      "Checking, windows = 0\n",
-      "['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT']\n",
-      "Checking, all == True\n",
-      "([[2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3], [2, 839, 1069, 648, 2113, 980, 3320, 3899, 884, 3]], [['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT'], ['ATCAAG', 'CAAGGA', 'AGGAAT', 'GAATTA', 'ATTATT', 'TATTAT', 'TTATCG', 'ATCGTT']])\n"
+      "_____\n",
+      "2\n"
      ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "2"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
@@ -97,12 +80,77 @@
     "defconfig = SeqConfig()\n",
     "         \n",
     "segmentation_params = {'type': 'random'}\n",
-    "tokenization_params = {'shift':2} \n",
+    "tokenization_params = {'shift':1} \n",
     "                   \n",
-    "comp_params = defconfig.get_set_computational_paramters()\n",
+    "comp_params = defconfig.get_and_set_computational_parameters()\n",
     "tokenizer = ProkBERTTokenizer(tokenization_params=tokenization_params, \n",
     "                              segmentation_params=segmentation_params,\n",
     "                              operation_space='sequence')\n",
+    "\n",
+    "\n",
+    "#print(tokenizer.cls_token)\n",
+    "#print(tokenizer.cls_token_id)\n",
+    "print('_____')\n",
+    "print(tokenizer.vocab[tokenizer.cls_token] )\n",
+    "tokenizer.cls_token_id\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7226e25e-cbd3-4ec8-ad08-00204e77eb68",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "AATCAAGGAATTATTATCGTT\n",
+    " ATCAAGGAATTATTATCGTT\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "479b39de-30e6-413f-9020-4721f7e92199",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-14 14:24:30,024 - INFO - Nr. line to cover the seq:  8\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Segment sequence AATCAAGGAATTATTATCGTT\n",
+      "Tokens:   \n",
+      "[2, 213, 839, 3343, 1069, 165, 648, 2580, 2113, 248, 980, 3905, 3320, 978, 3899, 3296, 884, 3]\n",
+      "___________________\n",
+      "Kmers:   \n",
+      "['AATCAA', 'ATCAAG', 'TCAAGG', 'CAAGGA', 'AAGGAA', 'AGGAAT', 'GGAATT', 'GAATTA', 'AATTAT', 'ATTATT', 'TTATTA', 'TATTAT', 'ATTATC', 'TTATCG', 'TATCGT', 'ATCGTT']\n",
+      "___________________\n",
+      "Restore the original string:\n",
+      "['AATCAA']\n",
+      "    AATCAAGGAATTATTATCGTT\n",
+      "    AATCAAGGAATTATTATCGTT\n",
+      "0.  AATCAA  AATTAT\n",
+      "1.   ATCAAG  ATTATT\n",
+      "2.    TCAAGG  TTATTA\n",
+      "3.     CAAGGA  TATTAT\n",
+      "4.      AAGGAA  ATTATC\n",
+      "5.       AGGAAT  TTATCG\n",
+      "6.        GGAATT  TATCGT\n",
+      "7.         GAATTA  ATCGTT\n",
+      "Checking, windows = 0\n",
+      "['AATCAA', 'ATCAAG', 'TCAAGG', 'CAAGGA', 'AAGGAA', 'AGGAAT', 'GGAATT', 'GAATTA', 'AATTAT', 'ATTATT', 'TTATTA', 'TATTAT', 'ATTATC', 'TTATCG', 'TATCGT', 'ATCGTT']\n",
+      "Checking, all == True\n",
+      "([[2, 213, 839, 3343, 1069, 165, 648, 2580, 2113, 248, 980, 3905, 3320, 978, 3899, 3296, 884, 3]], [['AATCAA', 'ATCAAG', 'TCAAGG', 'CAAGGA', 'AAGGAA', 'AGGAAT', 'GGAATT', 'GAATTA', 'AATTAT', 'ATTATT', 'TTATTA', 'TATTAT', 'ATTATC', 'TTATCG', 'TATCGT', 'ATCGTT']])\n"
+     ]
+    }
+   ],
+   "source": [
+    "      \n",
     "segment = 'AATCAAGGAATTATTATCGTT'\n",
     "print(f'Segment sequence {segment}')\n",
     "tokens, kmers = tokenizer.tokenize(segment, all=True)\n",
@@ -130,8 +178,7 @@
     "\n",
     "print('Checking, all == True')\n",
     "lca_kmers = tokenizer.tokenize(segment, all=True)\n",
-    "print(str(lca_kmers))\n",
-    "\n"
+    "print(str(lca_kmers))"
    ]
   },
   {
@@ -144,23 +191,25 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "id": "024e12bb-316d-4c13-9049-a7736adcf561",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['AATCAA', 'AA', 'GG', 'AA', 'TT', 'AT', 'TA', 'TC', 'GT']"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
-    "seq_toks\n"
+    "tokenizer_k6_s1 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 1}, operation_space='sequence')\n",
+    "tokenizer_k6_s2 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 2}, operation_space='sequence')\n",
+    "segment = 'AATCAAGGAATTATTATCGTT' \n",
+    "\n",
+    "kmer_list = tokenizer_k6_s1.tokenize(segment, lca_shift=0)\n",
+    "print(kmer_list)\n",
+    "\n",
+    "print(tokenizer_k6_s1.encode(segment))\n",
+    "\n",
+    "token_ids = tokenizer_k6_s2.encode(segment, all=True, add_special_tokens=False)\n",
+    "token_ids = tokenizer_k6_s2.encode(segment)\n",
+    "\n",
+    "print(token_ids)\n",
+    "\n"
    ]
   },
   {
@@ -169,7 +218,10 @@
    "id": "a915082f-85f0-4c5a-ae8e-9c03d1f5c553",
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "tokenizer_k6_s2.vocab[tokenizer_k6_s2.cls_token]\n",
+    "tokenizer_k6_s2.cls_token_id\n"
+   ]
   },
   {
    "cell_type": "code",
@@ -181,30 +233,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": null,
    "id": "277f3024-60e9-43d7-a588-1385d000ff9a",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[]\n",
-      "['AATCAA']\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "['AATCAA', 'CAA', 'AGG', 'GAA', 'ATT', 'TAT', 'TTA', 'ATC', 'CGT']"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
+    "\n",
+    "\n",
     "# Listát csinál belőle. De előbb nekünk ebből k-mer listák kellenének, ahogy az meg van írva\n",
     "segment = 'AATCAAGGAATTATTATCGTT'\n",
     "\n",
@@ -225,18 +260,10 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "id": "bd2f223f-2268-4d5d-ad43-ec247768db1d",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2023-08-13 21:39:07,557 - INFO - Nr. line to cover the seq:  4\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "#tokens[0]\n",
     "#kmers[0]\n",
@@ -260,39 +287,10 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": null,
    "id": "f383bbf0-dbac-4e8d-a10f-e2b0b13a212c",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'input_ids': [['AASTTA',\n",
-       "   'STTAAG',\n",
-       "   'TAAGGA',\n",
-       "   'AGGAAT',\n",
-       "   'GAATTA',\n",
-       "   'ATTATT',\n",
-       "   'TATTAT',\n",
-       "   'TTATCG'],\n",
-       "  ['TCCGTA',\n",
-       "   'CGTAAS',\n",
-       "   'TAASTT',\n",
-       "   'ASTTAA',\n",
-       "   'TTAAGG',\n",
-       "   'AAGGAA',\n",
-       "   'GGAATT',\n",
-       "   'AATTAT',\n",
-       "   'TTATTA',\n",
-       "   'ATTATC',\n",
-       "   'TATCGT']]}"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
     "seqs = ['AASTTAAGGAATTATTATCGT', 'TCCGTAASTTAAGGAATTATTATCGT']\n",
     "tokenizer.batch_encode_plus(seqs)\n"
diff --git a/src/prokbert/dev_notebooks/dev_tokenizer_src.ipynb b/src/prokbert/dev_notebooks/dev_tokenizer_src.ipynb
new file mode 100644
index 0000000..e32843c
--- /dev/null
+++ b/src/prokbert/dev_notebooks/dev_tokenizer_src.ipynb
@@ -0,0 +1,426 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "4ab9e784-8ddf-4b59-8379-3f879c0ae9b1",
+   "metadata": {},
+   "source": [
+    "# Tokenizer dev\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+<<<<<<< HEAD
+   "execution_count": 1,
+=======
+   "execution_count": 31,
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+   "id": "41f2e15d-3056-412c-bbcc-0661c3af360b",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-13 21:39:06,677 - INFO - Note: NumExpr detected 48 cores but \"NUMEXPR_MAX_THREADS\" not set, so enforcing safe limit of 8.\n",
+      "2023-08-13 21:39:06,678 - INFO - NumExpr defaulting to 8 threads.\n",
+      "2023-08-13 21:39:07,506 - INFO - Nr. line to cover the seq:  4\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n",
+      "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+      "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n",
+<<<<<<< HEAD
+      "Segment sequence AATCAAGGAATTATTATCGTT\n",
+      "Tokens:   \n",
+      "[2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3]\n",
+      "[2, 839, 1069, 648, 2113, 980, 3320, 3899, 884, 3]\n",
+      "___________________\n",
+      "Kmers:   \n",
+      "['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT']\n",
+      "['ATCAAG', 'CAAGGA', 'AGGAAT', 'GAATTA', 'ATTATT', 'TATTAT', 'TTATCG', 'ATCGTT']\n",
+      "___________________\n",
+      "Restore the original string:\n",
+      "[]\n",
+      "['AATCAA']\n",
+      "    AATCAACAAAGGGAAATTTATTTAATCCGT\n",
+      "    AATCAAGGAATTATTATCGTT\n",
+      "0.  AATCAA  AATTAT\n",
+      "1.    TCAAGG  TTATTA\n",
+      "2.      AAGGAA  ATTATC\n",
+      "3.        GGAATT  TATCGT\n",
+      "Checking, windows = 0\n",
+      "['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT']\n",
+      "Checking, all == True\n",
+      "([[2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3], [2, 839, 1069, 648, 2113, 980, 3320, 3899, 884, 3]], [['AATCAA', 'TCAAGG', 'AAGGAA', 'GGAATT', 'AATTAT', 'TTATTA', 'ATTATC', 'TATCGT'], ['ATCAAG', 'CAAGGA', 'AGGAAT', 'GAATTA', 'ATTATT', 'TATTAT', 'TTATCG', 'ATCGTT']])\n"
+=======
+      "11529\n"
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "import yaml\n",
+    "import pathlib\n",
+    "from os.path import join\n",
+    "import os\n",
+    "import sys\n",
+    "from Bio.Seq import Seq\n",
+    "from Bio.SeqRecord import SeqRecord\n",
+    "from Bio import SeqIO\n",
+    "\n",
+    "current_path = str(pathlib.Path(os.getcwd()).parent)\n",
+    "sys.path.append(current_path)\n",
+    "\n",
+    "#import sys\n",
+    "#sys.path.append('../)\n",
+    "\n",
+    "from config_utils import *\n",
+    "from sequtils import *\n",
+    "from prokbert_tokenizer import ProkBERTTokenizer\n",
+    "    \n",
+    "pd.set_option('display.max_rows', 10000)\n",
+    "pd.set_option('display.max_columns', 30)\n",
+    "#pd.set_option('display.width', 4000)\n",
+    "#pd.set_option('display.max_colwidth', None)\n",
+    "pd.set_option('display.expand_frame_repr', True)\n",
+    "from IPython.core.interactiveshell import InteractiveShell\n",
+    "\n",
+    "InteractiveShell.ast_node_interactivity = \"all\"\n",
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "defconfig = SeqConfig()\n",
+    "         \n",
+    "segmentation_params = {'type': 'random'}\n",
+<<<<<<< HEAD
+    "tokenization_params = {'shift':2} \n",
+=======
+    "tokenization_params = {'shift':1} \n",
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+    "                   \n",
+    "comp_params = defconfig.get_set_computational_paramters()\n",
+    "tokenizer = ProkBERTTokenizer(tokenization_params=tokenization_params, \n",
+    "                              segmentation_params=segmentation_params,\n",
+    "                              operation_space='sequence')\n",
+    "segment = 'AATCAAGGAATTATTATCGTT'\n",
+    "print(f'Segment sequence {segment}')\n",
+    "tokens, kmers = tokenizer.tokenize(segment, all=True)\n",
+    "print('Tokens:   ')\n",
+    "for tokenset in tokens:\n",
+    "       print(str(tokenset))\n",
+    "print('___________________')\n",
+    "         \n",
+    "print('Kmers:   ')\n",
+    "for tokenset in kmers:\n",
+    "       print(str(tokenset))\n",
+    "print('___________________')\n",
+    "         \n",
+    "         \n",
+    "print('Restore the original string:')\n",
+    "seq_toks = tokenizer.convert_ids_to_tokens(tokens[0])\n",
+    "print('    ' + ''.join(seq_toks))\n",
+    "\n",
+    "s = pretty_print_overlapping_sequence(segment, kmers[0], tokenizer.tokenization_params)\n",
+    "print(s)\n",
+    "\n",
+<<<<<<< HEAD
+    "print('Checking, windows = 0')\n",
+    "lca_kmers = tokenizer.tokenize(segment, lca_shift=0)\n",
+    "print(str(lca_kmers))\n",
+    "\n",
+    "print('Checking, all == True')\n",
+    "lca_kmers = tokenizer.tokenize(segment, all=True)\n",
+    "print(str(lca_kmers))\n",
+    " "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "97ca924a-8307-4459-b0bf-eb74e778035c",
+   "metadata": {},
+   "source": [
+    "## Checking for k-mer space\n"
+=======
+    "tokenizer = ProkBERTTokenizer(tokenizer_mode='sequence', \n",
+    "                              tokenization_params=tokenization_params, \n",
+    "                              segmentation_params=segmentation_params,\n",
+    "                             operation_space='sequence')\n",
+    "\n"
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+   ]
+  },
+  {
+   "cell_type": "code",
+<<<<<<< HEAD
+   "execution_count": 2,
+   "id": "024e12bb-316d-4c13-9049-a7736adcf561",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['AATCAA', 'CAA', 'AGG', 'GAA', 'ATT', 'TAT', 'TTA', 'ATC', 'CGT']"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "seq_toks\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a915082f-85f0-4c5a-ae8e-9c03d1f5c553",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a0dc3ff0-e854-4d0e-94d8-c5c497646ed9",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "277f3024-60e9-43d7-a588-1385d000ff9a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[]\n",
+      "['AATCAA']\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "['AATCAA', 'CAA', 'AGG', 'GAA', 'ATT', 'TAT', 'TTA', 'ATC', 'CGT']"
+      ]
+     },
+     "execution_count": 3,
+=======
+   "execution_count": null,
+   "id": "a0dc3ff0-e854-4d0e-94d8-c5c497646ed9",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "id": "277f3024-60e9-43d7-a588-1385d000ff9a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[]\n",
+      "['AATCAA']\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "['AATCAA',\n",
+       " 'G',\n",
+       " 'G',\n",
+       " 'A',\n",
+       " 'A',\n",
+       " 'T',\n",
+       " 'T',\n",
+       " 'A',\n",
+       " 'T',\n",
+       " 'T',\n",
+       " 'A',\n",
+       " 'T',\n",
+       " 'C',\n",
+       " 'G',\n",
+       " 'T',\n",
+       " 'T']"
+      ]
+     },
+     "execution_count": 25,
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Listát csinál belőle. De előbb nekünk ebből k-mer listák kellenének, ahogy az meg van írva\n",
+    "segment = 'AATCAAGGAATTATTATCGTT'\n",
+    "\n",
+    "tokens, kmers = tokenizer.tokenize(segment, all=True)\n",
+    "#tokenizer.id2token\n",
+    "#tokenizer = ProkBERTTokenizer(operation_space='sequence')\n",
+    "#tokenizer.id2token.get(10, 'NN')\n",
+    "#tokenizer.id2token.get(10, 'NN')[-2:]\n",
+    "#print(tokens[0])\n",
+    "#print(kmers[0])\n",
+    "#print(kmers[0])\n",
+    "seq_toks = tokenizer.convert_ids_to_tokens(tokens[0])\n",
+    "seq_toks\n",
+    "# Nem tudja lefedni, akkor az uccsó az hiányozhat, mivel nem teljesen egyértelmű, hogy pontosan mi is van. \n",
+    "#print(''.join(seq_toks))\n",
+    "#print(segment)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+<<<<<<< HEAD
+   "execution_count": 4,
+=======
+   "execution_count": 26,
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+   "id": "bd2f223f-2268-4d5d-ad43-ec247768db1d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+<<<<<<< HEAD
+      "2023-08-13 21:39:07,557 - INFO - Nr. line to cover the seq:  4\n"
+=======
+      "2023-08-13 17:22:52,893 - INFO - Nr. line to cover the seq:  8\n"
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+     ]
+    }
+   ],
+   "source": [
+    "#tokens[0]\n",
+    "#kmers[0]\n",
+    "#\n",
+    "s = pretty_print_overlapping_sequence(segment, kmers[0], tokenizer.tokenization_params)\n",
+    "#print(s)"
+   ]
+  },
+  {
+   "cell_type": "raw",
+   "id": "6e1b31cf-7a8f-4727-a378-ea802399e687",
+   "metadata": {},
+   "source": [
+    "    AATTAAGGAATTATTATCGT\n",
+    "    AATTAAGGAATTATTATCGT\n",
+    "0.  AATTAA  AATTAT\n",
+    "1.    TTAAGG  TTATTA\n",
+    "2.      AAGGAA  ATTATC\n",
+    "3.        GGAATT  TATCGT\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+<<<<<<< HEAD
+   "execution_count": 5,
+=======
+   "execution_count": 38,
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+   "id": "f383bbf0-dbac-4e8d-a10f-e2b0b13a212c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2023-08-13 18:16:21,669 - INFO - Tokenization of a list of segments\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+<<<<<<< HEAD
+       "{'input_ids': [['AASTTA',\n",
+       "   'STTAAG',\n",
+       "   'TAAGGA',\n",
+       "   'AGGAAT',\n",
+       "   'GAATTA',\n",
+       "   'ATTATT',\n",
+       "   'TATTAT',\n",
+       "   'TTATCG'],\n",
+       "  ['TCCGTA',\n",
+       "   'CGTAAS',\n",
+       "   'TAASTT',\n",
+       "   'ASTTAA',\n",
+       "   'TTAAGG',\n",
+       "   'AAGGAA',\n",
+       "   'GGAATT',\n",
+       "   'AATTAT',\n",
+       "   'TTATTA',\n",
+       "   'ATTATC',\n",
+       "   'TATCGT']]}"
+      ]
+     },
+     "execution_count": 5,
+=======
+       "{'input_ids': [array([   2,    1,    1,    1, 3855, 3117,  165,  648, 2580, 2113,  248,\n",
+       "          980, 3905, 3320,  978, 3899, 3296,    3], dtype=uint16),\n",
+       "  array([   2, 3441, 1461,    1,    1,    1,    1,    1,    1, 3855, 3117,\n",
+       "          165,  648, 2580, 2113,  248,  980, 3905, 3320,  978, 3899, 3296,\n",
+       "            3], dtype=uint16)]}"
+      ]
+     },
+     "execution_count": 38,
+>>>>>>> 26360f538221dad907f9b84ee6f1534685393b96
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "seqs = ['AASTTAAGGAATTATTATCGT', 'TCCGTAASTTAAGGAATTATTATCGT']\n",
+    "tokenizer.batch_encode_plus(seqs)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "32f11e46-1727-49e9-8803-9315476a0c7e",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.9"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/src/prokbert/dnadatasets.py b/src/prokbert/dnadatasets.py
deleted file mode 100644
index c764207..0000000
--- a/src/prokbert/dnadatasets.py
+++ /dev/null
@@ -1,464 +0,0 @@
-# coding=utf-8
-from torch.utils.data import DataLoader, Dataset, RandomSampler, SequentialSampler, IterableDataset
-import torch
-import h5py
-import logging
-import os
-import pickle
-import random
-import re
-import shutil
-import numpy as np
-import math
-
-from transformers import (
-    PreTrainedTokenizer
-)
-
-class ProkDataset(torch.utils.data.Dataset):
-    """
-    A custom PyTorch Dataset for processing tokenized sequences and labels.
-
-    """    
-    def __init__(self, tokenized_seqs, labels, token_type_ids=None, attention_mask=None, device=None):
-        """
-        Constructor
-
-        :param tokenized_seqs: Tokenized sequences represented as a tensor.
-        :type tokenized_seqs: torch.Tensor
-
-        :param labels: Labels corresponding to each tokenized sequence.
-        :type labels: torch.Tensor
-
-        :param token_type_ids: Token type IDs corresponding to each tokenized sequence. Defaults to None.
-        :type token_type_ids: torch.Tensor, optional
-
-        :param attention_mask: Attention mask corresponding to each tokenized sequence. Defaults to None.
-        :type attention_mask: torch.Tensor, optional
-
-        :param device: Device to move the tensors onto. If provided, the tensors are moved to the specified device.
-                    Defaults to None.
-        :type device: str, optional
-        """
-        self.tokenized_seqs = tokenized_seqs
-        self.labels = labels
-        if attention_mask is not None:
-            self.attention_mask = attention_mask
-        if token_type_ids is not None:
-            self.token_type_ids = token_type_ids
-        if device is not None:
-            self.tokenized_seqs.to(device)
-            self.labels.to(device)
-            self.attention_mask.to(device)
-            self.token_type_ids.to(device)
-
-    def __getitem__(self, idx):
-        """
-        Get the data item at the specified index.
-
-        :param idx: Index of the item to retrieve.
-        :type idx: int
-
-        :return: A dictionary containing 'input_ids', 'labels', 'token_type_ids', and 'attention_mask' tensors.
-        :rtype: dict
-        """
-        #item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
-        item={'input_ids' : self.tokenized_seqs[idx,:]}
-        item['labels'] = self.labels[idx]
-        item['token_type_ids'] = self.token_type_ids[idx,:]
-        item['attention_mask'] = self.attention_mask[idx,:]
-        
-        return item
-    
-    def __len__(self):
-        """
-        Get the total number of samples in the dataset.
-
-        :return: The total number of samples in the dataset.
-        :rtype: int
-        """
-        return len(self.labels)
-
-
-class DnaDatasetID(Dataset):
-    """
-    DNA Dataset Dataset
-
-    This class represents a custom PyTorch Dataset for DNA sequences.
-    """
-    def __init__(self, input_file, tokenizer, max_len, randomization=False):
-        """
-        Constructor
-
-        :param input_file: Path to the input file containing DNA sequences as token IDs.
-        :type input_file: str
-
-        :param tokenizer: Tokenizer object used to tokenize the DNA sequences.
-        :type tokenizer: Tokenizer
-
-        :param max_len: Maximum length of the tokenized sequences.
-        :type max_len: int
-
-        :param randomization: If True, the data will be randomized. Defaults to False.
-        :type randomization: bool, optional
-        """
-        self.tokenizer = tokenizer
-        self.input_file= input_file
-        self.max_len = max_len
-        self.randomization = randomization
-        self._load_data_from_file()
-
-    def _load_data_from_file(self):
-        """
-        Load DNA sequences from the input file and tokenize them.
-        """
-        print('Loading data from file: {0}'.format(self.input_file))
-        self.data = []
-        with open(self.input_file) as fin:
-            for line in fin:
-                act_data = [int(token_id) for token_id in line.strip().split()][0:self.max_len]
-                self.data.append(act_data)
-        print('Doing randomization!')
-        print(self.data)
-        if self.randomization:
-            random.shuffle(self.data)
-        
-    def __len__(self):
-        """
-        Get the total number of sequences in the dataset.
-
-        :return: The total number of sequences in the dataset.
-        :rtype: int
-        """
-        return len(self.data)
-
-    def __getitem__(self, index):
-        """
-        Get the data item (tokenized sequence) at the specified index.
-
-        :param index: Index of the data item to retrieve.
-        :type index: int
-
-        :return: Tokenized DNA sequence as a tensor of token IDs.
-        :rtype: torch.Tensor
-        """
-        return torch.tensor(self.data[index], dtype=torch.long)
-    
-
-class DnaDatasetHDF(Dataset):
-    """ Ez azt csinálja, hogy a HDF5 file tartalmát beolvassa 
-    """
-    def __init__(self, input_file, tokenizer, max_len, randomization=False):
-        self.tokenizer = tokenizer
-        self.input_file= input_file
-        self.max_len = max_len
-        self.randomization = randomization
-        self._load_data_from_file()
-
-    def _load_data_from_file(self):
-        print('Loading data from file: {0}'.format(self.input_file))
-        dataset_file = h5py.File(self.input_file)
-        ds_data = dataset_file['training_data']['sentences']
-        self.data = torch.tensor(np.array(ds_data, dtype=np.int16), dtype=torch.long)
-        dataset_file.close()
-
-        if self.randomization:
-            print('Doing randomization!')
-            random.shuffle(self.data)
-        
-    def __len__(self):
-        return len(self.data)
-
-    def __getitem__(self, index):
-        # 
-        return self.data[index]
-    
-
-
-
-class FTDnaDatasetHDF(Dataset):
-    """ HDF alapú fine tune dataset. Feltételezzük, hogy a hdf5 file tartalmazza a címkéket és az x-et. Valamint nincsen spec attention mask és egyéb gebasz. 
-    """
-    def __init__(self, input_file, tokenizer, sample_rate=1):
-        self.tokenizer = tokenizer
-        self.input_file= input_file
-        self.sample_rate = sample_rate
-        self._load_data_from_file()
-        self.max_len = self.x.shape[1]
-        self.permutation_tsh = 10000
-
-    def _load_data_from_file(self):
-        print('Loading data from file: {0}'.format(self.input_file))
-        dataset_file = h5py.File(self.input_file)
-        x = dataset_file['training_data']['x']
-        y = dataset_file['training_data']['y']
-        x = np.array(x, dtype=np.int16)
-        y = np.array(y, dtype=np.int16)
-        if self.sample_rate<1:
-            sample_size = int(self.sample_rate*x.shape[0])
-            rs = np.random.permutation(x.shape[0])
-            print('Sampling the dataset! Sample size: ', sample_size)
-            self.x_full = x
-            self.y_full = y
-            x = x[rs[0:sample_size],:]
-            y = y[rs[0:sample_size]]
-            print(x.shape)
-            print(y.shape)
-        self.x = torch.tensor(x, dtype=torch.long)
-        self.y = torch.tensor(y, dtype=torch.long)
-        dataset_file.close()
-    def __len__(self):
-        return len(self.x)
-
-    def __getitem__(self, index):
-        item={'input_ids' : self.x[index,:]}
-        item['labels'] = self.y[index]
-        item['token_type_ids'] = torch.full(self.x[index,:].shape, 0, dtype=torch.long)
-        item['attention_mask'] = torch.full(self.x[index,:].shape, 1, dtype=torch.long)
-        if self.sample_rate<1 and index % self.permutation_tsh==0:
-            print('Peforming resampling')
-            sample_size = int(self.sample_rate*self.x_full.shape[0])
-            rs = np.random.permutation(self.y_full.shape[0])
-            self.x =  torch.tensor(self.x_full[rs[0:sample_size],:],dtype=torch.long)
-            self.y =  torch.tensor(self.y_full[rs[0:sample_size]], dtype=torch.long)
-            print(self.x.shape)
-            print(self.y.shape)
-        return item
-
-class FTDnaItDatasetHDF(IterableDataset):
-
-    def __init__(self, tokenizer: PreTrainedTokenizer, file_path: str, input_batch_size=1000, randomized_batch=False, ds_offset=0, mode='pretrain'):
-        self.tokenizer =tokenizer
-        self.file_path = file_path
-        self.input_batch_size = input_batch_size
-        self.ds_offset=ds_offset
-        self.mode = mode
-        self.tokenized_file = file_path  # train.bash egyszerusitese miatt
-        dataset_file = h5py.File(self.tokenized_file)
-        self.dataset_sizes = list(dataset_file['training_data']['dataset_size'])
-        self.ds_size= self.dataset_sizes[0]
-        dataset_file.close()
-        print('Dataset sizes: {0}'.format(self.dataset_sizes))
-
-    def __len__(self):
-        return self.dataset_sizes[0]
-
-    def get_sentence(self, hdf_sentence):
-        array_sent = np.array(hdf_sentence, dtype=np.int32)
-        return torch.tensor(array_sent, dtype=torch.int32)
-
-    def _get_fetch_interval(self):
-        max_ds_items = self.dataset_sizes[0]
-        #print(max_ds_items)
-        new_fetch_start = self._act_ds_pointer * self.input_batch_size
-        new_fetch_end = (self._act_ds_pointer + 1) * self.input_batch_size
-        if new_fetch_end > max_ds_items:
-            new_fetch_end = max_ds_items
-        if new_fetch_start >= max_ds_items-1:
-            self.dataset_file.close()
-            raise StopIteration
-        return new_fetch_start, new_fetch_end
-    
-    def __iter__(self):
-        #print('Initiate an iterator!')
-
-
-        self.dataset_file = h5py.File(self.tokenized_file)
-        self.x = self.dataset_file['training_data']['x']
-        self.y = self.dataset_file['training_data']['y']
-        self._act_ds_pointer = math.floor(self.ds_offset/self.input_batch_size)+0
-        print('act_starting ds pointer: ', self._act_ds_pointer)
-        new_fetch_start, new_fetch_end = self._get_fetch_interval()
-        print('Fetched intervals: ', new_fetch_start, new_fetch_end)
-
-        self._x = np.array(self.x[new_fetch_start:new_fetch_end], dtype=np.int32)
-        self._y = np.array(self.y[new_fetch_start:new_fetch_end], dtype=np.int32)
-        self._act_ds_pointer_it = 0
-
-        return self
-    
-    def __next__(self):
-        ds_item = None
-
-        if self._act_ds_pointer_it >= self.input_batch_size:
-            self._act_ds_pointer_it = 0
-            self._act_ds_pointer+=1
-            try:
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-            except StopIteration:
-                print('Fethcing new data')
-                self.dataset_file = h5py.File(self.tokenized_file)
-                self.x = self.dataset_file['training_data']['x']
-                self.y = self.dataset_file['training_data']['y']
-                self._act_ds_pointer = 0
-                self._act_ds_pointer_it = 0
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-            self._x = np.array(self.x[new_fetch_start:new_fetch_end], dtype=np.int32)
-            self._y = np.array(self.y[new_fetch_start:new_fetch_end], dtype=np.int32)
-            try:
-                ds_item={'input_ids' : self._x[self._act_ds_pointer_it,:]}
-                ds_item['labels'] = self._y[self._act_ds_pointer_it]
-                ds_item['token_type_ids'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 0, dtype=torch.uint8)
-                ds_item['attention_mask'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 1, dtype=torch.uint8)
-                self._act_ds_pointer_it+=1
-
-            except IndexError:
-                print('Index error')
-                print(self._act_torchds, new_fetch_start, new_fetch_end)
-        else:
-            try:
-                ds_item={'input_ids' : self._x[self._act_ds_pointer_it,:]}
-                ds_item['labels'] = self._y[self._act_ds_pointer_it]
-                ds_item['token_type_ids'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 0, dtype=torch.uint8)
-                ds_item['attention_mask'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 1, dtype=torch.uint8)
-                self._act_ds_pointer_it+=1
-            except IndexError:
-                print('IndexError!!!!')
-                print('self._act_ds_pointer_it:', self._act_ds_pointer_it)
-                print('self._act_ds_pointer', self._act_ds_pointer)
-                print('Restart the iterations!')
-                self.ds_offset=0
-                self.dataset_file.close()
-                self.dataset_file = h5py.File(self.tokenized_file)
-                self.x = self.dataset_file['training_data']['x']
-                self.y = self.dataset_file['training_data']['y']
-                self._act_ds_pointer =  0
-                print('act_starting ds pointer: ', self._act_ds_pointer)
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-                print('Fetched intervals: ', new_fetch_start, new_fetch_end)
-
-                self._x = np.array(self.x[new_fetch_start:new_fetch_end], dtype=np.int32)
-                self._y = np.array(self.y[new_fetch_start:new_fetch_end], dtype=np.int32)
-                self._act_ds_pointer_it = 0
-
-                ds_item={'input_ids' : self._x[self._act_ds_pointer_it,:]}
-                ds_item['labels'] = self._y[self._act_ds_pointer_it]
-                ds_item['token_type_ids'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 0, dtype=torch.uint8)
-                ds_item['attention_mask'] = torch.full(self._x[self._act_ds_pointer_it,:].shape, 1, dtype=torch.uint8)
-
-                self._act_ds_pointer_it+=1
-
-
-
-        #ds_item={'input_ids' : self.x[self._act_ds_pointer_it,:]}
-        #ds_item['labels'] = self.y[self._act_ds_pointer_it]
-        #ds_item['token_type_ids'] = torch.full(self.x[self._act_ds_pointer_it,:].shape, 0, dtype=torch.long)
-        #ds_item['attention_mask'] = torch.full(self.x[self._act_ds_pointer_it,:].shape, 1, dtype=torch.long)
-        #self._act_ds_pointer_it = self._act_ds_pointer_it + 1
-
-        if self.mode == 'ft':
-            #print(ds_item['input_ids'])
-            ds_item['input_ids'] = torch.from_numpy(ds_item['input_ids']).long()
-            ds_item['token_type_ids'] = ds_item['token_type_ids'].long()
-            ds_item['attention_mask'] =ds_item['attention_mask'].long()
-
-        ds_item['input_ids'][-2]=3
-        ds_item['input_ids'][-1]=0
-        return ds_item
-    
-
-class BabDataset(IterableDataset):
-
-    def __init__(self, tokenizer: PreTrainedTokenizer, file_path: str, input_batch_size=1000, randomized_batch=False, ds_offset=0):
-
-        self.tokenizer =tokenizer
-        self.file_path = file_path
-        self.input_batch_size = input_batch_size
-        self.randomized_batch =randomized_batch
-        self.tokenized_file = file_path  # train.bash egyszerusitese miatt
-        self.ds_offset = ds_offset # Azért, hogy a folytatáshoz ne kelljen végig iterálni a dataset-en. 400gb-nál ez elég sok idő :)
-        dataset_file = h5py.File(self.tokenized_file)
-        self.dataset_sizes = list(dataset_file['training_data']['dataset_size'])
-        self.ds_size= self.dataset_sizes[0]
-        dataset_file.close()
-        print('Dataset sizes: {0}'.format(self.dataset_sizes))
-
-    def __len__(self):
-        return self.dataset_sizes[0]
-
-    def get_sentence(self, hdf_sentence):
-        array_sent = np.array(hdf_sentence, dtype=np.int16)
-        return torch.tensor(array_sent, dtype=torch.int16)
-
-    def _get_fetch_interval(self):
-
-        max_ds_items = self.dataset_sizes[0]
-        #print(max_ds_items)
-        new_fetch_start = self._act_ds_pointer * self.input_batch_size
-        new_fetch_end = (self._act_ds_pointer + 1) * self.input_batch_size
-        if new_fetch_end > max_ds_items:
-            new_fetch_end = max_ds_items
-        if new_fetch_start >= max_ds_items-1:
-            self.dataset_file.close()
-            raise StopIteration
-        return new_fetch_start, new_fetch_end
-
-
-
-    def __next__(self):
-        ds_item = None
-        if self._act_ds_pointer_it >= self.input_batch_size:
-            self._act_ds_pointer_it = 1
-            self._act_ds_pointer+=1
-            try:
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-            except StopIteration:
-                print('Fethcing new data')
-                self.dataset_file = h5py.File(self.tokenized_file)
-                self.dataset = self.dataset_file['training_data']['sentences']
-                self._act_ds_pointer = 0
-                self._act_ds_pointer_it = 0
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-            self._act_torchds = np.array(self.dataset [new_fetch_start:new_fetch_end],
-                                         dtype=np.int16)
-            try:
-                ds_item = self._act_torchds[0]
-            except IndexError:
-                print('Index error')
-                print(self._act_torchds, new_fetch_start, new_fetch_end)
-
-        else:
-            try:
-                ds_item = self._act_torchds[self._act_ds_pointer_it]
-                self._act_ds_pointer_it+=1
-            except IndexError:
-                print('IndexError!!!!')
-                print(self._act_torchds.shape)
-                print('self._act_ds_pointer_it:', self._act_ds_pointer_it)
-                print('self._act_ds_pointer', self._act_ds_pointer)
-                print('Restart the iterations!')
-                self.ds_offset=0
-                self.dataset_file.close()
-                self.dataset_file = h5py.File(self.tokenized_file)
-                self.dataset = self.dataset_file['training_data']['sentences']
-                self._act_ds_pointer = math.floor(self.ds_offset/self.input_batch_size)+0
-                self._act_ds_pointer_it = 0
-                new_fetch_start, new_fetch_end = self._get_fetch_interval()
-                print('Fetched intervals: ', new_fetch_start, new_fetch_end)
-                self._act_torchds = np.array(self.dataset [new_fetch_start:new_fetch_end], dtype=np.int16)
-                ds_item = self._act_torchds[self._act_ds_pointer_it]
-                self._act_ds_pointer_it+=1
-                #raise IndexError
-        return ds_item
-
-
-    def __iter__(self):
-        #print('Initiate an iterator!')
-
-        self.dataset_file = h5py.File(self.tokenized_file)
-        self.dataset = self.dataset_file['training_data']['sentences']
-        self._act_ds_pointer = math.floor(self.ds_offset/self.input_batch_size)+0
-
-        print('act_starting ds pointer: ', self._act_ds_pointer)
-
-        self._act_ds_pointer_it = 0
-        new_fetch_start, new_fetch_end = self._get_fetch_interval()
-        print('Fetched intervals: ', new_fetch_start, new_fetch_end)
-        self._act_torchds = np.array(self.dataset [new_fetch_start:new_fetch_end], dtype=np.int16)
-
-        return self
-
-# Ezt majd meg kellene írni TODO
-#    def __getitem__(self, index):
-#        # 
-#        return torch.tensor(self.dataset_file['training_data']['sentences'][index], dtype=torch.int16)
\ No newline at end of file
diff --git a/src/prokbert/general_utils.py b/src/prokbert/general_utils.py
index 3aad7d0..4d62560 100644
--- a/src/prokbert/general_utils.py
+++ b/src/prokbert/general_utils.py
@@ -3,6 +3,8 @@
 import pandas as pd
 import os
 import numpy as np
+import subprocess
+import shutil
 """ Library for general utils, such as dataframe properties checking,
 creating directories, checking files, etc.
 """
@@ -133,3 +135,180 @@ def truncate_zero_columns(arr: np.ndarray) -> np.ndarray:
     return np.empty((arr.shape[0], 0))
 
 
+import os
+
+def create_directory_for_filepath(filepath: str) -> None:
+    """
+    Given a file path, creates the underlying directory structure if it doesn't already exist.
+
+    Args:
+        filepath (str): The path to the file for which the directory structure should be created.
+
+    Raises:
+        ValueError: If the provided path is empty or None.
+        OSError: If there's an error creating the directory structure.
+    """
+    
+    if not filepath:
+        raise ValueError("The provided filepath is empty or None.")
+    
+    directory = os.path.dirname(filepath)
+    
+    if directory and not os.path.exists(directory):
+        try:
+            os.makedirs(directory)
+            print(f"Directory structure {directory} created successfully.")
+        except OSError as e:
+            raise OSError(f"Error creating directory structure {directory}. Error: {e}")
+
+# Example usage:
+# create_directory_for_filepath("/path/to/directory/that/might/not/exist/filename.txt")
+
+def check_file_exists(file_path: str) -> bool:
+    """
+    Checks if the provided file path exists.
+
+    Args:
+        file_path (str): Path to the file.
+
+    Returns:
+        bool: True if the file exists, raises ValueError otherwise.
+    """
+    if os.path.exists(file_path):
+        return True
+    else:
+        raise ValueError(f"The provided file path '{file_path}' does not exist.")
+
+def count_gpus(method="clinfo"):
+    import torch
+    import subprocess
+
+    # Count NVIDIA GPUs
+    nvidia_gpu_count = torch.cuda.device_count()
+
+    # Count AMD GPUs
+    amd_gpu_count = 0
+    try:
+        if method == "clinfo":
+            clinfo_output = subprocess.check_output('clinfo').decode('utf-8')
+            amd_gpu_count = clinfo_output.lower().count('device type: gpu')
+        elif method == "rocm":
+            rocm_output = subprocess.check_output('rocm-smi --list', shell=True).decode('utf-8')
+            amd_gpu_count = len(rocm_output.strip().split('\n'))
+        else:
+            raise ValueError("Unknown method provided. Choose between 'clinfo' and 'rocm'.")
+    except Exception as e:
+        print(f"Error querying AMD GPUs using method '{method}': {e}")
+
+    total_gpus = nvidia_gpu_count + amd_gpu_count
+
+    return total_gpus
+
+
+
+def create_hard_links(source_directory: str, target_directory: str, blacklist: list = []) -> None:
+    """
+    Creates hard links for all files from the source directory to the target directory.
+    
+    Args:
+        source_directory (str): The directory containing the original files.
+        target_directory (str): The directory where hard links will be created.
+        blacklist (list): List of filenames to exclude from creating hard links.
+    
+    Returns:
+        None
+    """
+    
+    # Ensure the provided directories exist
+    if not os.path.exists(source_directory):
+        raise ValueError(f"The source directory '{source_directory}' does not exist.")
+    if not os.path.exists(target_directory):
+        os.makedirs(target_directory)
+    
+    # Iterate through the files in the source directory
+    for filename in os.listdir(source_directory):
+        source_file_path = os.path.join(source_directory, filename)
+        target_file_path = os.path.join(target_directory, filename)
+        
+        # Check for files to skip
+        if (filename.startswith('.') or 
+            filename.startswith('_') or 
+            os.path.isdir(source_file_path) or 
+            filename in blacklist):
+            continue
+        
+        # Create a hard link
+        os.link(source_file_path, target_file_path)
+
+    return f"Hard links created in {target_directory} from {source_directory}."
+
+# Example usage
+# create_hard_links("/path/to/source_directory", "/path/to/target_directory", blacklist=["file_to_skip.txt"])
+
+def create_selected_hard_links(source_directory: str, target_directory: str, filenames: list) -> None:
+    """
+    Creates hard links for the specified files from the source directory to the target directory.
+    
+    Args:
+        source_directory (str): The directory containing the original files.
+        target_directory (str): The directory where hard links will be created.
+        filenames (list): List of filenames for which hard links should be created.
+    
+    Returns:
+        None
+    """
+    
+    # Ensure the provided directories exist
+    if not os.path.exists(source_directory):
+        raise ValueError(f"The source directory '{source_directory}' does not exist.")
+    if not os.path.exists(target_directory):
+        os.makedirs(target_directory)
+    
+    # Iterate through the specified filenames
+    for filename in filenames:
+        source_file_path = os.path.join(source_directory, filename)
+        target_file_path = os.path.join(target_directory, filename)
+        
+        # Ensure the file exists in the source directory
+        if not os.path.isfile(source_file_path):
+            print(f"Warning: {filename} does not exist in the source directory. Skipping.")
+            continue
+        
+        # Create a hard link
+        try:
+            os.link(source_file_path, target_file_path)
+        except FileExistsError:
+            print(f'The target hard link {target_file_path} exist. Skipping...')
+
+    return f"Hard links for specified files created in {target_directory} from {source_directory}."
+
+def remove_hidden_files(directory: str) -> None:
+    """
+    Removes all files recursively in a folder that start with '.' or '_'.
+    
+    Args:
+        directory (str): The directory from which hidden files should be removed.
+    
+    Returns:
+        None
+    """
+    
+    # Ensure the directory exists
+    if not os.path.exists(directory):
+        raise ValueError(f"The directory '{directory}' does not exist.")
+    
+    # Use os.walk to iterate through all subdirectories and files
+    for dirpath, dirnames, filenames in os.walk(directory, topdown=False):
+        
+        # Filter out directories starting with '.' or '_'
+        dirnames[:] = [d for d in dirnames if not d.startswith('.') and not d.startswith('_')]
+        
+        # Remove files starting with '.' or '_'
+        for filename in filenames:
+            if filename.startswith('.') or filename.startswith('_'):
+                file_path = os.path.join(dirpath, filename)
+                os.remove(file_path)
+                print(f"Removed: {file_path}")
+                
+    print(f"All hidden files removed from {directory}.")
+    
\ No newline at end of file
diff --git a/src/prokbert/prok_datasets.py b/src/prokbert/prok_datasets.py
new file mode 100644
index 0000000..e216145
--- /dev/null
+++ b/src/prokbert/prok_datasets.py
@@ -0,0 +1,217 @@
+# module for datasets
+import logging
+
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+
+import torch
+import numpy as np
+import h5py
+from typing import Dict, List, Type, Tuple, Iterator, Union
+from torch.utils.data import Dataset, IterableDataset
+import torch.distributed as dist
+
+#class IterableProkBERTPretrainingDataset(IterableDataset):
+
+class IterableProkBERTPretrainingDataset(IterableDataset):
+    def __init__(self, file_path: str, 
+                 input_batch_size: int = 10000,
+                 ds_offset: int = 0,
+                 max_iteration_over_ds: int = 10,
+                 default_dtype = torch.long,
+                 add_end_token=False):
+        """
+        Initialize the IterableProkBERTPretrainingDataset.
+
+        :param file_path: Path to the HDF5 file.
+        :param input_batch_size: Batch size for data fetching.
+        :param ds_offset: Offset for data fetching.
+        :param max_iteration_over_ds: Maximum number of iterations over the dataset.
+
+        Example:
+            >>> dataset = RefactoredIterableProkBERTPretrainingDataset(file_path="path/to/file.hdf5")
+            >>> for data in dataset:
+            >>>     # process data
+        """
+        self.file_path = file_path
+        self.input_batch_size = input_batch_size
+        self.ds_offset = ds_offset
+        self.dataset_file = h5py.File(self.file_path, 'r')
+        self.ds_size = self.dataset_file['training_data']['X'].shape[0]
+        self.max_iteration_over_ds_steps = int(self.ds_size * max_iteration_over_ds)
+        self._global_iter_steps = 0,
+        self.default_dtype = default_dtype
+        logging.info(f'Dataset size: {self.ds_size}')
+        self.add_end_token = add_end_token
+                # Assuming you're using distributed training
+        self.rank = dist.get_rank() if dist.is_available() and dist.is_initialized() else 0
+        self.world_size = dist.get_world_size() if dist.is_available() and dist.is_initialized() else 1
+
+
+    def __len__(self) -> int:
+        return self.ds_size
+
+    def _ensure_file_open(self):
+        """
+        Ensure the HDF5 file is open. If not, reopen it.
+        """
+        try:
+            # Try accessing the 'mode' attribute to check if file is open
+            _ = self.dataset_file.mode
+        except ValueError as e:
+            # If we catch a ValueError, it means the file might be closed. We confirm by checking the error message.
+            self.dataset_file = h5py.File(self.file_path, 'r')
+
+    def _get_fetch_interval(self) -> Tuple[int, int]:
+        max_ds_items = self.ds_size
+        new_fetch_start = self._current_ds_pointer * self.input_batch_size
+        new_fetch_end = (self._current_ds_pointer + 1) * self.input_batch_size
+
+        if new_fetch_end > max_ds_items:
+            new_fetch_end = max_ds_items
+
+        if new_fetch_start >= max_ds_items - 1:
+            raise StopIteration
+
+        return new_fetch_start, new_fetch_end
+
+    def _fetch_new_data(self):
+        """
+        Fetch new data from the HDF5 file.
+        """
+        # Check if the file is still open, if not, reopen it
+        self._ensure_file_open()
+
+        new_fetch_start, new_fetch_end = self._get_fetch_interval()
+        
+        self._current_data_batch = torch.tensor(self.dataset_file['training_data']['X'][new_fetch_start:new_fetch_end],
+                                         dtype=self.default_dtype)
+        if self.add_end_token:
+            threes_column = torch.full((self._current_data_batch.shape[0], 1), 3, dtype=self.default_dtype)
+            self._current_data_batch = torch.cat((self._current_data_batch, threes_column), dim=1)
+
+    def __iter__(self) -> Iterator[torch.Tensor]:
+        self._current_ds_pointer = int(np.floor(self.ds_offset / self.input_batch_size))
+        self._current_data_pointer = 0
+        self._fetch_new_data()
+        self._global_iter_steps = 0
+        return self
+
+    def __next__(self) -> torch.Tensor:
+        try:
+            ds_item = self._current_data_batch[self._current_data_pointer]
+            self._current_data_pointer += 1
+        except IndexError:
+            self._fetch_new_data()
+            self._current_data_pointer = 0
+            ds_item = self._current_data_batch[self._current_data_pointer]
+            self._current_data_pointer += 1
+
+        self._global_iter_steps += 1
+        if self._global_iter_steps > self.max_iteration_over_ds_steps:
+            logging.info('Stopping the iteration.')
+            raise StopIteration
+
+        return ds_item
+    
+    def __getitem__(self, index) -> Union[torch.Tensor, List[torch.Tensor]]:
+        """
+        Get item or slice from the dataset.
+
+        :param index: Index or slice object
+        :return: Dataset item or slice
+        """
+        # Ensure the file is open
+        self._ensure_file_open()
+
+        if isinstance(index, int):
+            # Return single item
+            data = torch.tensor(self.dataset_file['training_data']['X'][index], dtype=self.default_dtype)
+            if self.add_end_token:
+                threes_column = torch.tensor([3], dtype=self.default_dtype)
+                data =  torch.cat((data, threes_column), dim=0)                
+            return data
+        elif isinstance(index, slice):
+            # Return slice
+            data = torch.tensor(self.dataset_file['training_data']['X'][index], dtype=self.default_dtype)
+            if self.add_end_token:
+                threes_column = torch.full((data.shape[0], 1), 3, dtype=self.default_dtype)
+                data = torch.cat((data, threes_column), dim=1)
+            return data
+            #return [torch.tensor(item, dtype=torch.int) for item in self.dataset_file['training_data']['X'][index]]
+
+
+    def __del__(self):
+        """
+        Destructor to close the HDF5 file when the dataset object is destroyed.
+        """
+        self.dataset_file.close()
+    
+    
+
+class ProkBERTPretrainingDataset(Dataset):
+    def __init__(self, X):
+        self.X = X
+    def __len__(self):
+        return len(self.X)
+
+    def __getitem__(self, index):
+        # 
+        return torch.tensor(self.X[index], dtype=torch.long)
+    
+
+class ProkBERTPretrainingHDFDataset(Dataset):
+    def __init__(self, hdf_file_path: str, default_dtype = torch.long):
+        """
+        Initialize the HDFDataset.
+
+        :param hdf_file_path: Path to the HDF5 file.
+        """
+        self.default_dtype = default_dtype
+        self.file_path = hdf_file_path
+        self.dataset_file = h5py.File(self.file_path, 'r')
+        logging.info(f'Loading and converting file {hdf_file_path}')
+        self.dataset = torch.tensor(np.array(self.dataset_file['training_data']['X']), dtype = self.default_dtype)
+        logging.info(f'Loading finished!')
+
+    def _ensure_file_open(self):
+        """
+        Ensure the HDF5 file is open. If not, reopen it.
+        """
+        try:
+            # Try accessing the 'mode' attribute to check if file is open
+            _ = self.dataset_file.mode
+        except ValueError as e:
+            # If we catch a ValueError, it means the file might be closed. Reopen it.
+            self.dataset_file = h5py.File(self.file_path, 'r')
+            self.dataset = self.dataset_file['training_data']['X']
+
+    def __getitem__(self, index):
+        """
+        Fetch data using an index or a slice.
+
+        :param index: Index or slice object
+        :return: Dataset item or slice
+        """
+        self._ensure_file_open()
+        if isinstance(index, int):
+            # Return single item
+            return self.dataset[index]
+        elif isinstance(index, slice):
+            # Return slice
+            return self.dataset[index]
+
+    def __len__(self):
+        self._ensure_file_open()
+        return len(self.dataset)
+
+    def close(self):
+        """
+        Close the HDF5 file.
+        """
+        self.dataset_file.close()
+
+    def __del__(self):
+        """
+        Destructor to close the HDF5 file when the dataset object is destroyed.
+        """
+        self.close()
diff --git a/src/prokbert/prokbert_tokenizer.py b/src/prokbert/prokbert_tokenizer.py
index d736507..05a47e4 100644
--- a/src/prokbert/prokbert_tokenizer.py
+++ b/src/prokbert/prokbert_tokenizer.py
@@ -15,8 +15,8 @@
 
 # These utils contains the tools needed by the ProkBERT tokenizer
 
-from config_utils import *
-from sequtils import *
+from .config_utils import *
+from .sequtils import *
 
 import logging as logger
 
@@ -71,12 +71,18 @@ class ProkBERTTokenizer(PreTrainedTokenizer):
     nucleotide_abc = {'A', 'T', 'C', 'G'}
     extended_nucleotide_abc = {'A', 'T', 'C', 'G', '*'}
     sequence_unk_token = 'N'
+    default_unk_token="[UNK]"
+    default_sep_token="[SEP]"
+    default_pad_token="[PAD]"
+    default_cls_token="[CLS]"
+    default_mask_token="[MASK]"
+
 
     def __init__(self, 
                  tokenization_params: Dict = {},
                  segmentation_params: Dict = {},
                  comp_params: Dict = {},
-                 operation_space: str = 'kmer',
+                 operation_space: str = 'sequence',
                  **kwargs):
         """Initialize the ProkBERT tokenizer.
         
@@ -86,12 +92,13 @@ def __init__(self,
             comp_params (Dict, optional): Computational parameters. Defaults to {}.
             operation_space (str, optional): Specifies the operation mode. Can be 'kmer' or 'sequence'. Defaults to 'kmer'.
         """
-        super().__init__(**kwargs)
+        super().__init__(cls_token=ProkBERTTokenizer.default_cls_token,
+                         **kwargs)
         
         self.defconfig = SeqConfig()
-        self.tokenization_params = self.defconfig.get_and_set_tokenization_params(tokenization_params)
-        self.segmentation_params = self.defconfig.get_set_segmentation_parameters(segmentation_params)
-        self.comp_params = self.defconfig.get_set_computational_paramters(comp_params)
+        self.tokenization_params = self.defconfig.get_and_set_tokenization_parameters(tokenization_params)
+        self.segmentation_params = self.defconfig.get_and_set_segmentation_parameters(segmentation_params)
+        self.comp_params = self.defconfig.get_and_set_computational_parameters(comp_params)
         self.operation_space = operation_space
 
         vocab_file = self.tokenization_params['vocabfile']
@@ -108,20 +115,26 @@ def __init__(self,
                             
             self.unk_token = ProkBERTTokenizer.sequence_unk_token * self.tokenization_params['shift']
             self.mask_token = '*'
+            self.extended_vocab[self.mask_token] = self.vocab['[MASK]']
+
             full_unk = 'N' * self.tokenization_params['kmer']
             self.vocab[full_unk] = 1
             self.id2token[1] = full_unk
+            self.full_unk_token = full_unk
 
         else:
+            self.extended_vocab = self.vocab 
             self.unk_token = '[UNK]'
-        
         self.sep_token = '[SEP]'
         self.cls_token = '[CLS]'
         self.pad_token = '[PAD]'
+        self.mask_token = '[MASK]'
         self.special_tokens = list(self.special_tokens_map.values())
 
-        
-        
+    def __len__(self) -> int:
+        return len(self.vocab)-1
+
+
     def tokenize(self, text: str, lca_shift: int = 0, all: bool = False) -> Union[List[str], Tuple[List[List[str]], List[List[str]]]]:
         """
         Tokenizes a given segment.
@@ -147,9 +160,16 @@ def tokenize(self, text: str, lca_shift: int = 0, all: bool = False) -> Union[Li
         else:
             return kmerized_segments[lca_shift]
 
-        
+    def _convert_token_to_id(self, token):
+        """Converts a token (str) in an id using the vocab."""
+        return self.vocab.get(token, self.vocab.get(self.unk_token))
+
+    def _convert_id_to_token(self, index):
+        """Converts an index (integer) in a token (str) using the vocab."""
+        return self.ids_to_tokens.get(index, self.unk_token)
+            
 
-    def convert_tokens_to_ids(self, tokens):
+    def depr_convert_ids_to_tokens(self, ids: Union[int, List[int]]) -> List[str]:
         """
         Converts tokens to their corresponding IDs.
 
@@ -166,10 +186,20 @@ def convert_tokens_to_ids(self, tokens):
             >>> print(ids)
             ...
         """
+
+        if isinstance(ids, int):
+            token_ids = self.vocab.get(ids, self.vocab[self.unk_token])
+
+
+        if self.operation_space == 'sequence':
+            token_ids = [self.vocab.get(token, self.vocab[self.full_unk_token]) for token in tokens]
         
-        return [self.vocab.get(token, self.vocab[self.unk_token]) for token in tokens]
+        else:
+            token_ids = [self.vocab.get(token, self.vocab[self.unk_token]) for token in tokens]
+        
+        return token_ids
 
-    def convert_ids_to_tokens(self, ids: List[int]) -> List[str]:
+    def convert_ids_to_tokens(self, ids: Union[int, List[int]]) -> Union[str, List[str]]:
         """
         Converts token IDs back to their original tokens.
         
@@ -186,19 +216,22 @@ def convert_ids_to_tokens(self, ids: List[int]) -> List[str]:
             >>> print(tokens)
             ...
         """
+        if isinstance(ids, int):
+            ids = [ids]
+        if len(ids) == 1: 
+            #default_token_list = [self.id2token.get(ids[0], self.unk_token)]
+            return self.id2token.get(ids[0], self.unk_token)
+
         if self.operation_space == 'kmer':
             token_list = [self.id2token.get(id, self.unk_token) for id in ids]
 
         elif self.operation_space == 'sequence':
-
             token_list = []
             # Handling the sentence start
             if ids[0] == 2:
                 pass
             else:
                 token_list.append(self.id2token.get(ids[0], self.unk_token))
-
-            print(token_list)
             if len(ids) > 1:
                 # if this is a kmer then we add accordingly. 
                 true_start_token = self.id2token.get(ids[1], self.unk_token)
@@ -218,21 +251,17 @@ def convert_ids_to_tokens(self, ids: List[int]) -> List[str]:
 
         return token_list
     
- 
-    def save_vocabulary(self, save_directory: str) -> Tuple[str]:
-        """Saves the vocabulary to a file.
-        
-        Args:
-            save_directory (str): Directory where the vocabulary will be saved.
-        
-        Returns:
-            Tuple[str]: Path to the saved vocabulary file.
-        """
-        with open(f"{save_directory}/vocab.txt", "w") as f:
+    
+    def save_vocabulary(self, save_directory: str, filename_prefix: Optional[str] = None) -> Tuple[str]:
+        """Saves the vocabulary to a file."""
+        if filename_prefix is None:
+            filename_prefix = ""
+        vocab_file_path = os.path.join(save_directory, filename_prefix + "vocab.txt")
+        with open(vocab_file_path, "w") as f:
             for token in self.vocab:
                 f.write(token + "\\n")
-        return (f"{save_directory}/vocab.txt",)
-    
+        return (vocab_file_path,)
+
     @classmethod
     def from_pretrained(cls, vocab_file: str) -> 'ProkBERTTokenizer':
         """Loads a pre-trained tokenizer.
@@ -334,6 +363,48 @@ def batch_encode_plus(self, sequences: List[str], lca_shift: int = 0, all: bool
             "attention_mask": attention_masks
         }
     
+    def encode(self, segment: str,  lca_shift: int = 0, all: bool = False, add_special_tokens: bool = True, **kwargs) -> List[int]:
+        """
+        Encode a DNA sequence into its corresponding token IDs.
+        
+        Args:
+            text (str): The DNA segment to encode.
+            add_special_tokens (bool, optional): Whether to add special tokens like [CLS] and [SEP]. Defaults to True.
+        
+        Returns:
+            List[int]: Encoded token IDs.
+        
+        Usage Example:
+            >>> tokenizer = ProkBERTTokenizer(...)
+            >>> segment = 'AATCAAGGAATTATTATCGTT'
+            >>> ids = tokenizer.encode(segment)
+            >>> print(ids)
+            ...
+        """
+        shift = self.tokenization_params['shift']
+        if lca_shift >= shift:
+            raise ValueError(f'The required offset {lca_shift} is invalid. The maximum offset should be < {shift}')
+        
+        tokenized_segments, _ = lca_tokenize_segment(segment, self.tokenization_params)
+
+        # if all is set to True, then we return all the possible ids as a list
+        if all:
+            token_ids = tokenized_segments
+            if not add_special_tokens:
+                new_token_ids = []
+                for token_id_set in tokenized_segments:
+                    new_token_ids.append(token_id_set[1:len(token_id_set)-1])
+                token_ids = new_token_ids
+
+        else:
+            token_ids = tokenized_segments[lca_shift]
+            # Convert tokens to their corresponding IDs
+            # Add special tokens if needed
+            if not add_special_tokens:
+                token_ids = token_ids[1:len(token_ids)-1]
+
+        return token_ids
+    
     def decode(self, ids):
         tokens = self.convert_ids_to_tokens(ids)
         return ''.join(tokens)
diff --git a/src/prokbert/sequtils.py b/src/prokbert/sequtils.py
index a894208..70e8970 100644
--- a/src/prokbert/sequtils.py
+++ b/src/prokbert/sequtils.py
@@ -6,24 +6,10 @@
 
 """ Library for sequence processing """
 
-#sequence: whole, not-segmented DNA sequence
-#sentence: sequence block/chunk - 512, 1024, etc
-#kmer: token
-#tokenizes: vectorized 
-
-#KERDESEK
-#-
-
-#TODO
-#def for getting params
-#KESZ  - segmentate- DataFrame-s is legyen!
-#KESZ  - shift=2 eseten 2 tokenizalt vector! 0, 1 start.poz!
-#tokenization default padding=False
 
 import os
 import sys
 import pandas as pd
-import matplotlib.pyplot as plt
 from multiprocessing import Pool
 import multiprocessing
 from os.path import join, isfile, splitext
@@ -40,11 +26,12 @@
 from typing import Dict, List, Type, Tuple
 from itertools import product
 
-from general_utils import *
+from .general_utils import *
 # Ezt a felhasználónak kellene biztosatania 
 # VOCAB_FILES_NAMES = {"vocab_file": "vocab.txt"}
 
-import logging
+import h5py
+
 
 
 
@@ -398,6 +385,7 @@ def lca_tokenize_segment(segment, params):
     kmer = params['kmer']
     token_limit = params['token_limit']
     vocabmap = params['vocabmap']
+    add_special_token = params['add_special_token']
     if len(segment) > max_segment_length:
         raise(ValueError(f'The segment is longer {len(segment)} then the maximum allowed segment length ({max_segment_length}). '))
     
@@ -408,12 +396,16 @@ def lca_tokenize_segment(segment, params):
         kmers = [segment[i:i + kmer] for i in range(offset, len(segment) - kmer + 1, shift)]
         kmers_offset.append(kmers)
     # Mapping the k-mers into numbers
-    tokenized_segments = tokenize_kmerized_segment_list(kmers_offset, vocabmap, token_limit, max_unknown_token_proportion)
+    tokenized_segments = tokenize_kmerized_segment_list(kmers_offset, vocabmap, token_limit, max_unknown_token_proportion, add_special_token)
     return tokenized_segments, kmers_offset
     
     
     
-def tokenize_kmerized_segment_list(kmerized_segments, vocabmap, token_limit, max_unknown_token_proportion):
+def tokenize_kmerized_segment_list(kmerized_segments: List[List[str]], 
+                                   vocabmap: Dict[str, int], 
+                                   token_limit: int, 
+                                   max_unknown_token_proportion: float, 
+                                   add_special_tokens: bool = True) -> List[List[int]]:
     """ 
     Tokenizes or vectorizes a list of k-merized segments into a list of token vectors. If the expected number of 
     tokens in a segment exceeds the maximum allowed tokens (`token_limit`), the function raises an error. For segments
@@ -422,18 +414,20 @@ def tokenize_kmerized_segment_list(kmerized_segments, vocabmap, token_limit, max
 
     Parameters
     ----------
-    kmerized_segments : list[list[str]]
+    kmerized_segments : List[List[str]]
         List containing k-merized segments.
-    vocabmap : dict[str, int]
+    vocabmap : Dict[str, int]
         Dictionary that maps k-mers to their respective token values.
     token_limit : int
         Maximum number of tokens allowed in the tokenized output.
     max_unknown_token_proportion : float
         Maximum allowable proportion of unknown tokens in a segment.
+    add_special_tokens : bool, optional (default=True)
+        Whether to add special tokens (`[CLS]` and `[SEP]`) to the tokenized segments.
 
     Returns
     -------
-    list[list[int]]
+    List[List[int]]
         List containing tokenized segments.
 
     Raises
@@ -450,10 +444,16 @@ def tokenize_kmerized_segment_list(kmerized_segments, vocabmap, token_limit, max
     """
     
     tokenized_segments = []
-    empty_sentence = [2, 3]
+    if add_special_tokens:
+        empty_sentence = [2, 3]
+    else:
+        empty_sentence = []
 
     for act_kmer_list in kmerized_segments:
-        tokenized_kmerized_segment = [vocabmap['[CLS]']]
+        if add_special_tokens:
+            tokenized_kmerized_segment = [vocabmap['[CLS]']]
+        else:
+            tokenized_kmerized_segment = []
         unkcount=0
         L_kmerized_segment = len(act_kmer_list)
         unkw_tsh_count = int(L_kmerized_segment*max_unknown_token_proportion)
@@ -473,7 +473,8 @@ def tokenize_kmerized_segment_list(kmerized_segments, vocabmap, token_limit, max
         if unkcount > unkw_tsh_count:
             tokenized_segments.append(empty_sentence)
             continue
-        tokenized_kmerized_segment.append(vocabmap['[SEP]'])
+        if add_special_tokens:
+            tokenized_kmerized_segment.append(vocabmap['[SEP]'])
         tokenized_segments.append(tokenized_kmerized_segment)
     
     return tokenized_segments
@@ -672,3 +673,75 @@ def generate_kmers(abc, k):
     - List[str]: List of all possible k-mers.
     """
     return [''.join(p) for p in product(abc, repeat=k)]
+
+def save_to_hdf(X: np.ndarray, hdf_file_path: str, 
+                   database: pd.DataFrame = None, 
+                   compression: bool = False, 
+                   pd_chunksize: int = 10_000_000) -> None:
+    """
+    Save a numpy array and an optional pandas DataFrame to an HDF5 file.
+    
+    Args:
+        X (np.ndarray): 2D numpy array to be saved.
+        hdf_file_path (str): Path to the HDF5 file.
+        database (pd.DataFrame, optional): Pandas DataFrame to be saved. Defaults to None.
+        compression (bool, optional): Whether to apply compression. Defaults to False.
+        pd_chunksize (int, optional): Number of rows per chunk for saving the DataFrame. Defaults to 10,000,000.
+    
+    Raises:
+        ValueError: If the provided numpy array is not 2D.
+        OSError: If there's an error creating the directory structure or removing an existing HDF5 file.
+    
+    Example:
+        >>> import numpy as np
+        >>> import pandas as pd
+        >>> array = np.random.random((100, 100))
+        >>> df = pd.DataFrame({'A': range(1, 101), 'B': range(101, 201)})
+        >>> save_to_hdf(array, "sample.hdf5", database=df, compression=True)
+    
+    """
+    
+    # Check if X is a 2D numpy array
+    if len(X.shape) != 2:
+        raise ValueError("The provided numpy array is not 2D.")
+    
+    # If HDF5 file exists, attempt to delete it
+    if os.path.exists(hdf_file_path):
+        try:
+            os.remove(hdf_file_path)
+            logging.info(f"Existing HDF5 file {hdf_file_path} removed successfully.")
+        except Exception as e:
+            raise OSError(f"Error removing existing HDF5 file {hdf_file_path}. Error: {e}")
+    
+    # Create directory structure for HDF5 file
+    create_directory_for_filepath(hdf_file_path)
+    
+    # Save the numpy array to HDF5
+    with h5py.File(hdf_file_path, 'w') as hdf:
+        try:
+            grp = hdf.create_group("training_data")
+        except ValueError:
+            del hdf['training_data']
+
+        if compression:
+            grp.create_dataset("X", data=X, compression="lzf", chunks=True)
+        else:
+            grp.create_dataset("X", data=X, chunks=True)
+    
+    logging.info(f"Numpy array saved to {hdf_file_path} successfully.")
+
+    # Save the pandas DataFrame to HDF5, if provided
+    if database is not None:
+        logging.info("Adding database into the HDF5 file!")
+        num_chunks = int(np.ceil(len(database) / pd_chunksize))
+        logging.info(f'Number of chunks: {num_chunks}')
+        chunk_grouping = np.arange(len(database)) // pd_chunksize
+        chunkseqs = database.groupby(chunk_grouping)
+        for i, (_, chunk) in enumerate(chunkseqs):
+            logging.info(f'Writing database chunk {i} into {hdf_file_path}')
+            if compression:
+                chunk.to_hdf(hdf_file_path, f'database_{i}', format='table', data_columns=True,  mode='a', complib='lzo')
+            else:
+                chunk.to_hdf(hdf_file_path, f'database_{i}', format='table', data_columns=True,  mode='a')
+
+        logging.info('Database addition finished!')
diff --git a/src/prokbert/training_utils.py b/src/prokbert/training_utils.py
new file mode 100644
index 0000000..b301783
--- /dev/null
+++ b/src/prokbert/training_utils.py
@@ -0,0 +1,231 @@
+# Training utils i.e. loading stuff, investiageting stuffs, etc
+from .config_utils import *
+from .sequtils import *
+from .prokbert_tokenizer import ProkBERTTokenizer
+from .ProkBERTDataCollator import *
+from .general_utils import *
+from .prok_datasets import *
+from .config_utils import *
+
+import logging
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+
+
+def get_training_tokenizer(prokbert_config: ProkBERTConfig) -> ProkBERTTokenizer:
+    """
+    Load a tokenizer for ProkBERT training.
+    
+    This function initializes and returns a ProkBERT tokenizer suitable for tokenizing sequences during training.
+
+    :param prokbert_config: Configuration parameters for ProkBERT, an instance of :class:`ProkBERTConfig`.
+                            The parameters are typically read from `pretraining.yaml`.
+    :return: An instance of :class:`ProkBERTTokenizer`.
+    """
+
+    tokenizer = ProkBERTTokenizer(tokenization_params=prokbert_config.tokenization_params, 
+                              segmentation_params=prokbert_config.segmentation_params,
+                              comp_params=prokbert_config.computation_params,
+                              operation_space='sequence')
+    
+
+
+    return tokenizer
+
+
+def get_data_collator_for_overlapping_sequences(tokenizer, prokbert_config):
+    """
+    Load a data collator for overlapping sequences.
+    
+    This function initializes and returns a ProkBERT data collator suitable for handling overlapping sequences
+    during training.
+
+    :param tokenizer: The tokenizer to be used for tokenizing sequences. It should be an instance of :class:`ProkBERTTokenizer`.
+    :param prokbert_config: Configuration parameters for ProkBERT. This should be an instance of :class:`ProkBERTConfig` 
+                            and the parameters are typically read from the `pretraining.yaml` via the :class:`ProkBERTConfig`.
+    :return: An instance of the :class:`ProkBERTDataCollator`.
+    """
+
+    logging.info('Loading the datacollator class!')
+    prokbert_dc = ProkBERTDataCollator(tokenizer,
+                                    mask_to_left=prokbert_config.data_collator_params['mask_to_left'], 
+                                    mask_to_right=prokbert_config.data_collator_params['mask_to_right'],
+                                    mlm_probability =   prokbert_config.data_collator_params['mlm_probability'],
+                                    replace_prob =prokbert_config.data_collator_params['replace_prob'],
+                                    random_prob = prokbert_config.data_collator_params['random_prob'])
+    prokbert_dc.set_torch_token_dtype(prokbert_config.default_torchtype)
+    logging.info(str(prokbert_dc))
+
+    return prokbert_dc
+
+
+def check_model_existance_and_checkpoint(model_name: str, output_path: str) -> Tuple[bool, Optional[str], Optional[int], Optional[List[int]]]:
+    """
+    Check the existence of a model and determine the latest checkpoint.
+    
+    The Hugging Face models are organized into checkpoints, with the final model corresponding to the "checkpoint 0".
+    This function verifies the existence of a model in the specified output path and determines the checkpoint number 
+    that represents the latest model.
+
+    :param model_name: The name of the model to check.
+    :param output_path: The path where the model checkpoints are stored.
+    :return: 
+        - True if the model exists, otherwise False.
+        - Path to the largest checkpoint directory.
+        - The largest checkpoint number.
+        - A list of available checkpoint numbers.
+    """
+
+
+    model_path = join(output_path,model_name)
+    logging.info( 'model_path:  ' +  str(model_path))
+    path_exists = pathlib.Path.exists(pathlib.Path(model_path))
+    largest_checkpoint_dir = None
+    largest_checkpoint = None
+    chekcpoint_nr = None
+    if path_exists:
+        try:
+            subfolders = [ f for f in os.scandir(model_path) if f.is_dir() ]
+            subfolders = [sf for sf in subfolders if len(os.listdir(subfolders[0])) > 1]
+            chekcpoint_nr = sorted([int(f.name[11:]) for f in subfolders if f.name.startswith('checkpoint-')])
+            largest_checkpoint = chekcpoint_nr[-1]
+            if 0 in chekcpoint_nr:
+                logging.info('   The 0 is the largest checkpoint!')
+                largest_checkpoint = 0
+
+            largest_checkpoint_dir = join(model_path, 'checkpoint-' + str(largest_checkpoint))
+
+        except IndexError:
+            logging.info('   Something is wrong, set default valies')
+            logging.info('   ' + str(subfolders))
+            path_exists =False
+            largest_checkpoint_dir = None
+            largest_checkpoint = None
+
+    return path_exists, largest_checkpoint_dir, largest_checkpoint, chekcpoint_nr
+
+
+def check_hdf_dataset_file(prokbert_config):
+    """
+    Verify the validity of an HDF5 dataset file.
+    
+    This function checks whether a given file path points to a valid HDF5 dataset used in ProkBERT's training.
+
+    :param hdf_file_path: Path to the HDF5 dataset file.
+    :return: True if the file is a valid HDF5 dataset, False otherwise.
+    """
+
+    hdf_file_path = prokbert_config.dataset_params['dataset_path']
+    dataset_class = prokbert_config.dataset_params['dataset_class']
+
+
+    if len(hdf_file_path) == 0:
+        raise(ValueError(f'There is no provided dataset file!'))
+    
+    logging.info('Checking whether the file exists or not!')
+    hdf_file_exists = check_file_exists(hdf_file_path)
+    if dataset_class== 'IterableProkBERTPretrainingDataset':
+        logging.info('Loading and creating a IterableProkBERTPretrainingDataset')
+
+        ds = IterableProkBERTPretrainingDataset(hdf_file_path)
+        ds_size = len(ds)
+    elif dataset_class== 'ProkBERTPretrainingHDFDataset':
+        logging.info('Loading and creating a IterableProkBERTPretrainingDataset')
+        ds = ProkBERTPretrainingHDFDataset(hdf_file_path)
+        ds_size = len(ds)
+    elif dataset_class== 'ProkBERTPretrainingDataset':
+        logging.info('Checking the input data ...')
+        ds_size = len(prokbert_config.dataset_params['pretraining_dataset_data'])
+        if ds_size == 0:
+            raise(ValueError(f'The provided data is empty, plase check the provided input.'))
+    else:
+        raise(ValueError(f'The rquired class={dataset_class} in not available'))
+    
+
+
+    return hdf_file_exists, ds_size
+
+def get_the_iteration_offset(batch_size, training_steps, dataset_size, 
+                             nr_gpus=1, radient_accumulation_steps=1):
+    """
+    Determine the iteration offset for ProkBERT training.
+    
+    This function calculates the iteration offset based on the training configuration, output path, and tokenizer.
+    It ensures that training resumes correctly from the last checkpoint or starts anew if no checkpoint is found.
+
+    :param prokbert_config: Configuration parameters for ProkBERT, an instance of :class:`ProkBERTConfig`.
+                            The parameters are typically read from `pretraining.yaml`.
+    :param output_path: The path where the model checkpoints and other training artifacts are stored.
+    :param tokenizer: An instance of :class:`ProkBERTTokenizer` used for tokenization during training.
+    :param logger: Logger instance to log messages during the process.
+    :param kwargs: Additional keyword arguments.
+    :return: The iteration offset, indicating where the training should start or resume.
+    """
+
+
+    act_ds_offset = nr_gpus*radient_accumulation_steps*batch_size*training_steps % dataset_size
+
+    return act_ds_offset
+
+
+def get_pretrained_model(prokbert_config):
+    from transformers import MegatronBertConfig, MegatronBertForMaskedLM, BertForMaskedLM, BertConfig
+
+    #new_model_args = MegatronBertConfig(**prokbert_config.model_params)
+    #model = MegatronBertForMaskedLM(new_model_args)
+
+    #new_model_args = BertConfig(**prokbert_config.model_params)
+    #model = BertForMaskedLM(new_model_args)
+
+    #return model
+
+
+    [m_exists, cp_dir, cp, cps] = check_model_existance_and_checkpoint(prokbert_config.model_params['model_outputpath'], 
+                                     prokbert_config.model_params['model_name'])
+    if m_exists:
+        print(f'Loading the existing model from the chekcpoint folder: {cp_dir}')
+        expected_model_dir = cp_dir
+        model = MegatronBertForMaskedLM.from_pretrained(expected_model_dir)
+    else:
+        print('Investigating whether previous model is exists')
+        [init_m_exists, init_m_cp_dir, init_m_cp, init_m_cps] = check_model_existance_and_checkpoint(prokbert_config.model_params['resume_or_initiation_model_path'], 
+                                        prokbert_config.model_params['model_name'])
+        if not init_m_exists:
+            print(f'The expected model does not exist {0}')
+            model = MegatronBertForMaskedLM(new_model_args)
+            
+        else:
+            model = MegatronBertForMaskedLM.from_pretrained(init_m_cp_dir)
+
+
+    return model
+    
+
+def run_pretraining(model,tokenizer, data_collator,training_dataset, prokbert_config):
+    from transformers import Trainer, TrainingArguments
+
+    training_args = TrainingArguments(**prokbert_config.pretraining_params)
+    is_resume_training = prokbert_config.model_params['ResumeTraining']
+    [m_exists, cp_dir, cp, cps] = check_model_existance_and_checkpoint(prokbert_config.model_params['model_outputpath'], 
+                                     prokbert_config.model_params['model_name'])
+
+
+    trainer = Trainer(
+        model=model,
+        args=training_args,
+        data_collator=data_collator,
+        train_dataset=training_dataset,
+        tokenizer=tokenizer
+        )
+    
+    if is_resume_training and m_exists: 
+        #trainer.train()
+        trainer.train(resume_from_checkpoint = cp_dir)
+
+    else:
+        trainer.train()
+
+
+
+
+
+


Test patch:
diff --git a/src/prokbert/dev_notebooks/dev_test_utils.ipynb b/src/prokbert/dev_notebooks/dev_test_utils.ipynb
new file mode 100644
index 0000000..706c967
--- /dev/null
+++ b/src/prokbert/dev_notebooks/dev_test_utils.ipynb
@@ -0,0 +1,89 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "cfcffdad-12d2-4f96-bd9a-f88696ace9c9",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n",
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n",
+      "SEQ_CONFIG_FILE environment variable has not been set. Using default value: /home/ligeti/github/prokbert/src/prokbert/configs/sequence_processing.yaml\n",
+      "/home/ligeti/github/prokbert/src/prokbert\n"
+     ]
+    }
+   ],
+   "source": [
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "import yaml\n",
+    "import pathlib\n",
+    "from os.path import join\n",
+    "import os\n",
+    "import sys\n",
+    "from Bio.Seq import Seq\n",
+    "from Bio.SeqRecord import SeqRecord\n",
+    "from Bio import SeqIO\n",
+    "\n",
+    "current_path = str(pathlib.Path(os.getcwd()).parent)\n",
+    "sys.path.append(current_path)\n",
+    "\n",
+    "#import sys\n",
+    "#sys.path.append('../)\n",
+    "\n",
+    "from config_utils import *\n",
+    "from sequtils import *\n",
+    "from prokbert_tokenizer import ProkBERTTokenizer\n",
+    "    \n",
+    "pd.set_option('display.max_rows', 10000)\n",
+    "pd.set_option('display.max_columns', 30)\n",
+    "#pd.set_option('display.width', 4000)\n",
+    "#pd.set_option('display.max_colwidth', None)\n",
+    "pd.set_option('display.expand_frame_repr', True)\n",
+    "from IPython.core.interactiveshell import InteractiveShell\n",
+    "\n",
+    "InteractiveShell.ast_node_interactivity = \"all\"\n",
+    "%load_ext autoreload\n",
+    "%autoreload 2\n",
+    "defconfig = SeqConfig()\n",
+    "\n",
+    "from general_utils import *\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "520215a4-b91c-45ce-94c0-cec5f1a0689c",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.9"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/src/prokbert/tests/test_configutils.py b/src/prokbert/tests/test_configutils.py
index d8c7e0d..fcebd93 100644
--- a/src/prokbert/tests/test_configutils.py
+++ b/src/prokbert/tests/test_configutils.py
@@ -3,7 +3,7 @@
 
 import unittest
 
-from config_utils import *
+from prokbert.config_utils import *
 
 
 class TestSeqConfig(unittest.TestCase):
@@ -39,11 +39,11 @@ def test_validate(self):
             self.config.validate('segmentation', 'type', 'invalid_type')
 
     def test_get_set_segmentation_parameters(self):
-        parameters = self.config.get_set_segmentation_parameters({'type': 'random'})
+        parameters = self.config.get_and_set_segmentation_parameters({'type': 'random'})
         self.assertEqual(parameters['type'], 'random')
 
         with self.assertRaises(ValueError):
-            self.config.get_set_segmentation_parameters({'invalid_param': 'value'})
+            self.config.get_and_set_segmentation_parameters({'invalid_param': 'value'})
 
 if __name__ == "__main__":
     unittest.main()
\ No newline at end of file
diff --git a/src/prokbert/tests/test_general_utils.py b/src/prokbert/tests/test_general_utils.py
index 4808117..f6d984a 100644
--- a/src/prokbert/tests/test_general_utils.py
+++ b/src/prokbert/tests/test_general_utils.py
@@ -2,7 +2,7 @@
 
 import unittest
 import pandas as pd
-from general_utils import *
+from prokbert.general_utils import *
 
 
 class TestCheckExpectedColumns(unittest.TestCase):
diff --git a/src/prokbert/tests/test_prokBERTDataCollator.py b/src/prokbert/tests/test_prokBERTDataCollator.py
index aac65b6..0380acc 100644
--- a/src/prokbert/tests/test_prokBERTDataCollator.py
+++ b/src/prokbert/tests/test_prokBERTDataCollator.py
@@ -1,6 +1,7 @@
 import unittest
 import torch
 from transformers import BertTokenizer
+import numpy as np
 
 from prokbert_tokenizer import ProkBERTTokenizer
 from ProkBERTDataCollator import ProkBERTDataCollator
@@ -8,6 +9,7 @@
 
 
 
+
 class TestProkBERTDataCollator(unittest.TestCase):
 
     def setUp(self):
@@ -18,7 +20,7 @@ def setUp(self):
     def test_masking(self):
         segment = 'AATCAAGGAATTATTATCGTT'
         input_ids = self.tokenizer.batch_encode_plus([segment])["input_ids"][0]
-        inputs = torch.tensor([input_ids])
+        inputs = torch.tensor([input_ids.astype(np.int64)])
         masked_inputs, labels = self.collator.torch_mask_tokens(inputs)
 
         # Check if shape remains the same
@@ -36,28 +38,11 @@ def test_mask_neighbourhood_params(self):
         self.assertEqual(self.collator.mask_to_left, 1)
         self.assertEqual(self.collator.mask_to_right, 1)
 
-        # Test for invalid inputs
-        with self.assertRaises(ValueError):
+        with self.assertRaises(AssertionError):
             self.collator.set_mask_neighborhood_params(-1, 1)
         with self.assertRaises(ValueError):
             self.collator.set_mask_neighborhood_params(1, -1)
 
-    def test_tokenization_example(self):
-        segment = 'AATCAAGGAATTATTATCGTT'
-        tokens, kmers = self.tokenizer.tokenize(segment, all=True)
-        # Validate tokenization
-        self.assertIn('AATCAA', kmers[0])
-        self.assertIn('TTATTA', kmers[0])
-
-        restored = ''.join(self.tokenizer.batch_decode([tokens[0]]))
-        self.assertEqual(segment, restored)
-
-    def test_unknown_token_handling(self):
-        segment = 'AASTTAAGGAATTATTATCGT'
-        tokens, kmers = self.tokenizer.tokenize(segment, all=True)
-        # Validate tokenization contains unknown token
-        self.assertIn('NNNNNN', kmers[0])
-
 
 
 if __name__ == '__main__':
diff --git a/src/prokbert/tests/test_prok_datasets.py b/src/prokbert/tests/test_prok_datasets.py
new file mode 100644
index 0000000..e36566f
--- /dev/null
+++ b/src/prokbert/tests/test_prok_datasets.py
@@ -0,0 +1,81 @@
+import unittest
+import torch
+from transformers import BertTokenizer
+import numpy as np
+
+import unittest
+import os
+import numpy as np
+import h5py
+import torch
+
+from prokbert.prok_datasets import *
+
+
+class TestProkBERTDatasets(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        cls.test_file = "data/test_dataset.hdf5"
+        with h5py.File(cls.test_file, 'w') as f:
+            data = np.random.randint(0, 256, size=(100, 128), dtype=np.int16)
+            f.create_dataset("training_data/X", data=data)
+
+    @classmethod
+    def tearDownClass(cls):
+        os.remove(cls.test_file)
+
+    def test_iterable_dataset_initialization(self):
+        dataset = IterableProkBERTPretrainingDataset(self.test_file, input_batch_size=10)
+        self.assertIsNotNone(dataset)
+        dataset.__del__()
+
+    def test_iterable_dataset_iteration(self):
+        dataset = IterableProkBERTPretrainingDataset(self.test_file, input_batch_size=10)
+        for _ in dataset:
+            pass
+        dataset.__del__()
+
+    def test_iterable_dataset_item_retrieval(self):
+        dataset = IterableProkBERTPretrainingDataset(self.test_file, input_batch_size=10)
+        item = dataset[10]
+        self.assertTrue(isinstance(item, torch.Tensor))
+        items = dataset[10:20]
+        self.assertTrue(isinstance(items, list))
+        dataset.__del__()
+
+    def test_simple_dataset(self):
+        X = np.random.randint(0, 256, size=(100, 128), dtype=np.int16)
+        dataset = ProkBERTPretrainingDataset(X)
+        self.assertEqual(len(dataset), 100)
+        item = dataset[10]
+        self.assertTrue(isinstance(item, torch.Tensor))
+
+    def test_hdf_dataset_initialization(self):
+        dataset = ProkBERTPretrainingHDFDataset(self.test_file)
+        self.assertIsNotNone(dataset)
+
+    def test_hdf_dataset_item_retrieval(self):
+        dataset = ProkBERTPretrainingHDFDataset(self.test_file)
+        item = dataset[10]
+        self.assertTrue(isinstance(item, torch.Tensor))
+
+    def test_hdf_dataset_slice_retrieval(self):
+        dataset = ProkBERTPretrainingHDFDataset(self.test_file)
+        items = dataset[10:20]
+        self.assertTrue(isinstance(items, torch.Tensor))
+        self.assertEqual(items.shape[0], 10)
+
+    def test_hdf_dataset_length(self):
+        dataset = ProkBERTPretrainingHDFDataset(self.test_file)
+        self.assertEqual(len(dataset), 100)
+
+    def test_hdf_dataset_reopen(self):
+        dataset = ProkBERTPretrainingHDFDataset(self.test_file)
+        dataset.close()
+        item = dataset[10]  # This should reopen the file automatically
+        self.assertTrue(isinstance(item, torch.Tensor))
+        dataset.close()
+
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file
diff --git a/src/prokbert/tests/test_prokbert_tokenizer.py b/src/prokbert/tests/test_prokbert_tokenizer.py
index 2602049..f6f99d2 100644
--- a/src/prokbert/tests/test_prokbert_tokenizer.py
+++ b/src/prokbert/tests/test_prokbert_tokenizer.py
@@ -10,48 +10,112 @@
 
 # The test should be run from the project root directory as: 
 
-from sequtils import *
-from config_utils import *
-from prokbert_tokenizer import ProkBERTTokenizer
+from prokbert.sequtils import *
+from prokbert.config_utils import *
+from prokbert.prokbert_tokenizer import ProkBERTTokenizer
 
 class TestProkBERTTokenizer(unittest.TestCase):
 
-    def setUp(self):
-        # This method will be called before every test. We can use it to set up our tokenizer instances
-        self.tokenizer_k6_s1 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 1}, operation_space='sequence')
-        self.tokenizer_k6_s2 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 2}, operation_space='sequence')
+    @classmethod
+    def setUpClass(cls):
+        cls.tokenizer = ProkBERTTokenizer()
+        cls.kmer_tokenizer_k6_s1 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 1}, operation_space='kmer')
+        cls.tokenizer_k6_s1 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 1}, operation_space='sequence')
+        cls.tokenizer_k6_s2 = ProkBERTTokenizer(tokenization_params={'kmer': 6, 'shift': 2}, operation_space='sequence')
 
-    def test_basic_tokenization_k6_s1(self):
+    def test_basic_encoding(self):
         segment = 'AATCAAGGAATTATTATCGTT'
-        tokens, _ = self.tokenizer_k6_s1.tokenize(segment, all=True)
-        self.assertEqual(tokens[0], [2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3])
-        
-    def test_id_conversion_k6_s1(self):
-        tokens = ['AATCAA', 'TCAAGG', 'AAGGAA']
-        ids = self.tokenizer_k6_s1.convert_tokens_to_ids(tokens)
-        back_to_tokens = self.tokenizer_k6_s1.convert_ids_to_tokens(ids)
-        self.assertEqual(tokens, back_to_tokens)
-        
+        encoded_k6_s1 = self.tokenizer_k6_s1.encode(segment)
+        encoded_k6_s1_all = self.tokenizer_k6_s1.encode(segment, all=True)
+        encoded_k6_s1_nospecial = self.tokenizer_k6_s1.encode(segment, all=True, add_special_tokens=False)
+
+        encoded_k6_s2_nospecial = self.tokenizer_k6_s2.encode(segment, all=True, add_special_tokens=False)
+        encoded_k6_s2 = self.tokenizer_k6_s2.encode(segment)
+
+        # Assert that the encoded output is correct (replace with expected output).
+        self.assertEqual(encoded_k6_s1, [2, 213, 839, 3343, 1069, 165, 648, 2580, 2113, 248, 980, 3905, 3320, 978, 3899, 3296, 884, 3])
+        self.assertEqual(encoded_k6_s1_all, [[2, 213, 839, 3343, 1069, 165, 648, 2580, 2113, 248, 980, 3905, 3320, 978, 3899, 3296, 884, 3]])
+        self.assertEqual(encoded_k6_s1_nospecial, [[213, 839, 3343, 1069, 165, 648, 2580, 2113, 248, 980, 3905, 3320, 978, 3899, 3296, 884]])
+
+        self.assertEqual(encoded_k6_s2_nospecial, [[213, 3343, 165, 2580, 248, 3905, 978, 3296], [839, 1069, 648, 2113, 980, 3320, 3899, 884]])
+        self.assertEqual(encoded_k6_s2, [2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3])
+
+
+    def test_special_tokens(self):
+        segment = 'AATCAAGGAATTATTATCGTT'
+        encoded_with_special_tokens = self.tokenizer.encode(segment)
+        encoded_without_special_tokens = self.tokenizer.encode(segment, add_special_tokens=False)
+        # Assert the presence/absence of special tokens.
+        self.assertTrue(encoded_with_special_tokens[0] == self.tokenizer.cls_token_id)
+        self.assertTrue(encoded_without_special_tokens[0] != self.tokenizer.cls_token_id)
+
+    def test_lca_shift(self):
+        segment = 'AATCAAGGAATTATTATCGTT'
+        encoded_shift_0 = self.tokenizer_k6_s2.encode(segment, lca_shift=0)
+        encoded_shift_1 = self.tokenizer_k6_s2.encode(segment, lca_shift=1)
+        # Assert that encoded outputs are different.
+        self.assertNotEqual(encoded_shift_0, encoded_shift_1)
+        with self.assertRaises(ValueError):
+            self.tokenizer.encode(segment, lca_shift=1000)  # Assuming 1000 is an invalid lca_shift.
+
     def test_unknown_token_k6_s1(self):
         segment = 'AASTTAAGGAATTATTATCGT'
         tokens, _ = self.tokenizer_k6_s1.tokenize(segment, all=True)
         # Assuming 'N' is the unknown token representation
-        self.assertIn('NNNNNN', tokens[0])
+        self.assertIn(self.tokenizer_k6_s1.vocab['NNNNNN'], tokens[0])
+
+    def test_id_conversion_k6_s1(self):
+        #print('______________')
+        tokens = ['AATCAA', 'TCAAGG', 'AAGGAA']
+        ids = self.kmer_tokenizer_k6_s1.convert_tokens_to_ids(tokens)
+        back_to_tokens = self.kmer_tokenizer_k6_s1.convert_ids_to_tokens(ids)
+        #print('tokens', tokens)
+        #print('ids:', ids)
+        #print('back_to_tokens:', back_to_tokens)
+
+        self.assertEqual(tokens, back_to_tokens)
+
+    def test_restore_original_segment(self):
+        segment = 'AATCAAGGAATTATTATCGTT'        
+        # Tokenize the segment
+        tokens = self.tokenizer_k6_s1.encode(segment)
+        #print('segment: ', segment)
+        #print('tokens: ', tokens)
+        # Convert the tokens back to sequence
+        restored_sequence = ''.join(self.tokenizer_k6_s1.convert_ids_to_tokens(tokens))        
+        # Assert that the restored sequence is equal to original segment
+        #print('restored_sequence: ', restored_sequence)
+        self.assertEqual(restored_sequence, segment)
+
+    def test_restore_original_segment(self):
+        segment = 'AATCAAGGAATTATTATCGTT'        
+        # Tokenize the segment
+        tokenss = self.tokenizer_k6_s2.encode(segment, all=True)
+        #print('segment: ', segment)
+        #print('tokens: ', tokenss)
+        # Convert the tokens back to sequence
+        restored_sequence_0 = ''.join(self.tokenizer_k6_s2.convert_ids_to_tokens(tokenss[0]))
+        restored_sequence_1 = ''.join(self.tokenizer_k6_s2.convert_ids_to_tokens(tokenss[1]))
+        Nrestored_0 = len(restored_sequence_0)
+        Nrestored_1 = len(restored_sequence_1)
+        #print('restored_sequence shift 0: ', restored_sequence_0)
+        #print('restored_sequence shift 1: ', restored_sequence_1)
+        if Nrestored_0 < len(segment):
+            control_seq = segment[0:len(segment)-1]
+            self.assertEqual(restored_sequence_0, segment[0:len(segment)-1])
+        else:
+            self.assertEqual(Nrestored_0, segment)
+        if Nrestored_1 < len(segment):
+            control_seq = segment[1:len(segment)]
+            self.assertEqual(restored_sequence_1, control_seq)            
+
+
+        # Assert that the restored sequence is equal to original segment
         
-    def test_batch_decode_k6_s1(self):
-        ids_list = [[2, 213, 3343, 165, 2580, 248, 3905, 978, 3296, 3]]
-        sequences = self.tokenizer_k6_s1.batch_decode(ids_list)
-        # Since it's a batch decode, it returns a list of sequences
-        self.assertEqual(sequences[0], 'AATCAAGGAATTATTATCGTT')
         
-    def test_basic_tokenization_k6_s2(self):
-        segment = 'AATCAAGGAATTATTATCGTT'
-        tokens, _ = self.tokenizer_k6_s2.tokenize(segment, all=True)
-        # We're not asserting the exact tokens here since the values will change with shift=2
-        # Just checking the length for simplicity
-        self.assertEqual(len(tokens[0]), 10)
+    
+
 
-# TODO fixing unit test
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/src/prokbert/tests/test_sequtils.py b/src/prokbert/tests/test_sequtils.py
index fd5b245..2c5ac79 100644
--- a/src/prokbert/tests/test_sequtils.py
+++ b/src/prokbert/tests/test_sequtils.py
@@ -7,11 +7,13 @@
 import sys
 import collections
 from os.path import join
-
+import pandas as pd
+import numpy as np
+import tempfile
 # The test should be run from the project root directory as: 
 
-from sequtils import *
-from config_utils import *
+from prokbert.sequtils import *
+from prokbert.config_utils import *
 
 
 class TestSeqUtils(unittest.TestCase):
@@ -191,16 +193,16 @@ def setUp(self):
         self.sequences_df = pd.DataFrame({
             "sequence_id": {0: 0, 1: 1, 2: 2},
             "sequence": {
-                0: "TAGAAATGTCCGCGACCTTTCATACATACCACCGGTACGCCCTGGAGATG",
-                1: "ATAATGCTAAATCGTAACCCCACTGCTTAAATGAGCCTTCTGTAAATTTC",
-                2: "GTGACCGGGGTCAGGTTCTCGGCGGCGGCGCGCATCACGTGCTTGCCGAC"
+                0: "TAGAAATGTCCGCGACCTTTCATACATACCACCGGTACGCCCACTGCTTAAATGAGCCTTCTGTAAATTCCTGGAGATGTAGAAATGTCCGCGACCTTTCATACATACCACCGGTACGCCCTGGAGATG",
+                1: "ATAATGCTAAATCGTAACCCCACTGCTTAAATGAGCCTTCTGTAAATTTCATAATGCTAAATCGTAACCCCACTGCTTAAATGAGCCTTCTGTAAATTTCATAATGCTAAATCGTAACCCCACTGCTTAAATGAGCCTTCTGTAAATTTC",
+                2: "GTGACCGGGGTCAGGTTCTCGGCGGCGGCGCGCATCACGTGCTTGCCGACCCGGGGTCAGGTTCTCGGCGGCGGCCCGGGGTCAGGTTCTCGGCGGCGGCCCGGGGTCAGGTTCTCGGCGGCGGCCCGGGGTCAGGTTCTCGGCGGCGGC"
             }
         })
         self.default_params = {
             'type': 'random',
             'min_length': 10,
-            'max_length': 30,
-            'coverage': 0.5
+            'max_length': 100,
+            'coverage': 10
         }
 
     def test_basic_functionality_with_df(self):
@@ -221,7 +223,7 @@ def test_coverage(self):
         sampled_length = sum([len(segment['segment']) for segment in result])
         expected_sampled_length = total_sequence_length * self.default_params['coverage']
         # Given the randomness, we might not get exact coverage, so we allow a small margin of error
-        margin = expected_sampled_length * 0.2  # 10% margin
+        margin = expected_sampled_length * 0.5  # 10% margin
 
         print(f'expected_sampled_length: {expected_sampled_length}')
 
@@ -248,7 +250,7 @@ class TestTokenization(unittest.TestCase):
     def setUp(self):
         # Using the provided tokenizer parameters
         defconfig = SeqConfig()
-        tokenizer_params = defconfig.get_and_set_tokenization_params()    
+        tokenizer_params = defconfig.get_and_set_tokenization_parameters({'max_unknown_token_proportion' : 0.1})    
 
         self.vocabmap = tokenizer_params['vocabmap']
         self.token_limit = tokenizer_params['token_limit']
@@ -261,9 +263,12 @@ def test_basic_tokenization(self):
         self.assertEqual(output, expected_output)
 
     def test_unknown_tokens(self):
-        kmerized_segment_with_unknown = [['TCTTTG', 'UNKNOWN', 'TTTGCT', 'TTGCTA']]
+        kmerized_segment_with_unknown = [['TCTTTG', 'UNKNOWN', 'UNKNOWN', 'TTGCTA']]
         expected_output = [[2, 3]]  # Expected [CLS, SEP] due to exceeding unknown kmer threshold
         output = tokenize_kmerized_segment_list(kmerized_segment_with_unknown, self.vocabmap, self.token_limit, self.max_unknown_token_proportion)
+
+        print(output)
+
         self.assertEqual(output, expected_output)
 
     def test_exceeding_token_limit(self):
@@ -281,7 +286,7 @@ class TestLCATokenizeSegment(unittest.TestCase):
 
     def setUp(self):
         defconfig = SeqConfig()
-        tokenizer_params = defconfig.get_and_set_tokenization_params()    
+        tokenizer_params = defconfig.get_and_set_tokenization_parameters()    
         self.vocabmap = tokenizer_params['vocabmap']
 
         self.params_example = {
@@ -291,7 +296,7 @@ def setUp(self):
             'kmer': 5, 
             'token_limit': 10
         }
-        self.params_example = defconfig.get_and_set_tokenization_params(self.params_example)    
+        self.params_example = defconfig.get_and_set_tokenization_parameters(self.params_example)    
 
     def test_valid_segment(self):
 
@@ -320,6 +325,54 @@ def test_max_unknown_token_proportion(self):
         self.assertEqual(result, expected_tokenized)
 
 
+class TestSaveToHDF(unittest.TestCase):
+    
+    def setUp(self):
+        # Create sample data
+        self.array = np.random.random((100, 100))
+        self.df = pd.DataFrame({'A': range(1, 101), 'B': range(101, 201)})
+        
+        # Temporary HDF5 file path
+
+        self.temp_hdf_file = tempfile.mktemp(suffix=".hdf5")
+
+    def test_basic_functionality(self):
+
+        save_to_hdf(self.array, self.temp_hdf_file)
+        
+        with h5py.File(self.temp_hdf_file, 'r') as hdf:
+            saved_data = hdf["training_data"]['X'][:]
+            
+        np.testing.assert_array_equal(saved_data, self.array)
+
+    def test_save_with_dataframe(self):
+        save_to_hdf(self.array, self.temp_hdf_file, database=self.df)
+        
+        with h5py.File(self.temp_hdf_file, 'r') as hdf:
+            saved_data = hdf["training_data"]['X'][:]
+            
+        saved_df = pd.read_hdf(self.temp_hdf_file, key='database_0')
+            
+        np.testing.assert_array_equal(saved_data, self.array)
+        pd.testing.assert_frame_equal(saved_df, self.df)
+
+    def test_non_2d_array_error(self):
+        with self.assertRaises(ValueError):
+            save_to_hdf(np.random.random(100), self.temp_hdf_file)
+
+    def test_compression(self):
+        save_to_hdf(self.array, self.temp_hdf_file, compression=True)
+        
+        with h5py.File(self.temp_hdf_file, 'r') as hdf:
+            saved_data = hdf["training_data"]['X'][:]
+            
+        np.testing.assert_array_equal(saved_data, self.array)
+
+    def tearDown(self):
+        # Clean up temporary file
+        if os.path.exists(self.temp_hdf_file):
+            os.remove(self.temp_hdf_file)
+
 
 if __name__ == '__main__':
     unittest.main()